pdfn 0.6.1 → 0.6.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.
package/README.md CHANGED
@@ -26,6 +26,19 @@ npx pdfn dev --open # Start and open browser
26
26
  | `--open` | `false` | Open browser on start |
27
27
  | `--no-open` | - | Don't open browser |
28
28
 
29
+ **Server API:**
30
+
31
+ ```
32
+ POST /v1/generate # HTML → PDF
33
+ GET /health # Health check
34
+ ```
35
+
36
+ Use with `generate()` by setting `PDFN_HOST`:
37
+
38
+ ```bash
39
+ PDFN_HOST=http://localhost:3456 node your-app.js
40
+ ```
41
+
29
42
  ### `pdfn add`
30
43
 
31
44
  Add starter templates to your project.
@@ -45,11 +58,22 @@ npx pdfn add --list # Show all templates
45
58
  | `poster` | Event poster (landscape) |
46
59
  | `report` | Sales report with charts (requires recharts) |
47
60
 
48
- ## Production PDFs
61
+ ## PDF Generation
49
62
 
50
- For production PDF generation, choose based on your infrastructure:
63
+ For PDF generation, choose based on your infrastructure:
64
+
65
+ **Option 1: Local dev server**
66
+
67
+ Use `pdfn dev` for development with `generate()`:
68
+
69
+ ```tsx
70
+ import { generate } from '@pdfn/react';
71
+
72
+ // Set PDFN_HOST=http://localhost:3456
73
+ const pdf = await generate(<Invoice />);
74
+ ```
51
75
 
52
- **Option 1: Self-host with Puppeteer/Playwright**
76
+ **Option 2: Self-host with Puppeteer/Playwright**
53
77
 
54
78
  Use `render()` to get print-ready HTML, then convert with your own browser:
55
79
 
@@ -69,20 +93,20 @@ await browser.close();
69
93
 
70
94
  Works with Puppeteer, Playwright, Browserless, @sparticuz/chromium, or any Chromium setup.
71
95
 
72
- **Option 2: pdfn Cloud**
96
+ **Option 3: pdfn Cloud**
73
97
 
74
98
  Let pdfn manage the browser infrastructure:
75
99
 
76
100
  ```tsx
77
101
  import { generate } from '@pdfn/react';
78
102
 
79
- // Set PDFN_API_KEY environment variable
103
+ // Set PDFN_API_KEY=pdfn_live_...
80
104
  const pdf = await generate(<Invoice />);
81
105
  ```
82
106
 
83
107
  Get your API key at [console.pdfn.dev](https://console.pdfn.dev).
84
108
 
85
- **Both produce identical PDFs** — same templates, same output.
109
+ **All options produce identical PDFs** — same templates, same output.
86
110
 
87
111
  ## License
88
112
 
package/dist/cli.js CHANGED
@@ -1826,7 +1826,7 @@ function createBaseServer(options = {}) {
1826
1826
  res.on("finish", () => {
1827
1827
  const duration = performance.now() - start;
1828
1828
  let extra;
1829
- if (req.path === "/generate" && res.statusCode === 200) {
1829
+ if (req.path === "/v1/generate" && res.statusCode === 200) {
1830
1830
  const pages = res.getHeader("X-PDFN-Page-Count");
1831
1831
  const size = Number(res.getHeader("X-PDFN-PDF-Size")) || 0;
1832
1832
  const sizeKB = (size / 1024).toFixed(1);
@@ -1850,7 +1850,7 @@ function createBaseServer(options = {}) {
1850
1850
  });
1851
1851
  });
1852
1852
  app.post(
1853
- "/generate",
1853
+ "/v1/generate",
1854
1854
  createGenerateHandler(browserManager, {
1855
1855
  timeout,
1856
1856
  onSuccess: options.onSuccess,
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../node_modules/react/cjs/react.production.js","../../../../../node_modules/react/cjs/react.development.js","../../../../../node_modules/react/index.js","../src/cli.ts","../src/commands/dev.ts","../src/server/base.ts","../src/server/browser.ts","../src/utils/debug.ts","../src/server/pdf.ts","../src/server/routes.ts","../src/utils/env.ts","../src/commands/add.ts"],"sourcesContent":["/**\n * @license React\n * react.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n maybeIterable =\n (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar ReactNoopUpdateQueue = {\n isMounted: function () {\n return !1;\n },\n enqueueForceUpdate: function () {},\n enqueueReplaceState: function () {},\n enqueueSetState: function () {}\n },\n assign = Object.assign,\n emptyObject = {};\nfunction Component(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n}\nComponent.prototype.isReactComponent = {};\nComponent.prototype.setState = function (partialState, callback) {\n if (\n \"object\" !== typeof partialState &&\n \"function\" !== typeof partialState &&\n null != partialState\n )\n throw Error(\n \"takes an object of state variables to update or a function which returns an object of state variables.\"\n );\n this.updater.enqueueSetState(this, partialState, callback, \"setState\");\n};\nComponent.prototype.forceUpdate = function (callback) {\n this.updater.enqueueForceUpdate(this, callback, \"forceUpdate\");\n};\nfunction ComponentDummy() {}\nComponentDummy.prototype = Component.prototype;\nfunction PureComponent(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n}\nvar pureComponentPrototype = (PureComponent.prototype = new ComponentDummy());\npureComponentPrototype.constructor = PureComponent;\nassign(pureComponentPrototype, Component.prototype);\npureComponentPrototype.isPureReactComponent = !0;\nvar isArrayImpl = Array.isArray;\nfunction noop() {}\nvar ReactSharedInternals = { H: null, A: null, T: null, S: null },\n hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction ReactElement(type, key, props) {\n var refProp = props.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== refProp ? refProp : null,\n props: props\n };\n}\nfunction cloneAndReplaceKey(oldElement, newKey) {\n return ReactElement(oldElement.type, newKey, oldElement.props);\n}\nfunction isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n}\nfunction escape(key) {\n var escaperLookup = { \"=\": \"=0\", \":\": \"=2\" };\n return (\n \"$\" +\n key.replace(/[=:]/g, function (match) {\n return escaperLookup[match];\n })\n );\n}\nvar userProvidedKeyEscapeRegex = /\\/+/g;\nfunction getElementKey(element, index) {\n return \"object\" === typeof element && null !== element && null != element.key\n ? escape(\"\" + element.key)\n : index.toString(36);\n}\nfunction resolveThenable(thenable) {\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n default:\n switch (\n (\"string\" === typeof thenable.status\n ? thenable.then(noop, noop)\n : ((thenable.status = \"pending\"),\n thenable.then(\n function (fulfilledValue) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"fulfilled\"),\n (thenable.value = fulfilledValue));\n },\n function (error) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"rejected\"), (thenable.reason = error));\n }\n )),\n thenable.status)\n ) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n }\n }\n throw thenable;\n}\nfunction mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n var type = typeof children;\n if (\"undefined\" === type || \"boolean\" === type) children = null;\n var invokeCallback = !1;\n if (null === children) invokeCallback = !0;\n else\n switch (type) {\n case \"bigint\":\n case \"string\":\n case \"number\":\n invokeCallback = !0;\n break;\n case \"object\":\n switch (children.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n invokeCallback = !0;\n break;\n case REACT_LAZY_TYPE:\n return (\n (invokeCallback = children._init),\n mapIntoArray(\n invokeCallback(children._payload),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n )\n );\n }\n }\n if (invokeCallback)\n return (\n (callback = callback(children)),\n (invokeCallback =\n \"\" === nameSoFar ? \".\" + getElementKey(children, 0) : nameSoFar),\n isArrayImpl(callback)\n ? ((escapedPrefix = \"\"),\n null != invokeCallback &&\n (escapedPrefix =\n invokeCallback.replace(userProvidedKeyEscapeRegex, \"$&/\") + \"/\"),\n mapIntoArray(callback, array, escapedPrefix, \"\", function (c) {\n return c;\n }))\n : null != callback &&\n (isValidElement(callback) &&\n (callback = cloneAndReplaceKey(\n callback,\n escapedPrefix +\n (null == callback.key ||\n (children && children.key === callback.key)\n ? \"\"\n : (\"\" + callback.key).replace(\n userProvidedKeyEscapeRegex,\n \"$&/\"\n ) + \"/\") +\n invokeCallback\n )),\n array.push(callback)),\n 1\n );\n invokeCallback = 0;\n var nextNamePrefix = \"\" === nameSoFar ? \".\" : nameSoFar + \":\";\n if (isArrayImpl(children))\n for (var i = 0; i < children.length; i++)\n (nameSoFar = children[i]),\n (type = nextNamePrefix + getElementKey(nameSoFar, i)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (((i = getIteratorFn(children)), \"function\" === typeof i))\n for (\n children = i.call(children), i = 0;\n !(nameSoFar = children.next()).done;\n\n )\n (nameSoFar = nameSoFar.value),\n (type = nextNamePrefix + getElementKey(nameSoFar, i++)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (\"object\" === type) {\n if (\"function\" === typeof children.then)\n return mapIntoArray(\n resolveThenable(children),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n );\n array = String(children);\n throw Error(\n \"Objects are not valid as a React child (found: \" +\n (\"[object Object]\" === array\n ? \"object with keys {\" + Object.keys(children).join(\", \") + \"}\"\n : array) +\n \"). If you meant to render a collection of children, use an array instead.\"\n );\n }\n return invokeCallback;\n}\nfunction mapChildren(children, func, context) {\n if (null == children) return children;\n var result = [],\n count = 0;\n mapIntoArray(children, result, \"\", \"\", function (child) {\n return func.call(context, child, count++);\n });\n return result;\n}\nfunction lazyInitializer(payload) {\n if (-1 === payload._status) {\n var ctor = payload._result;\n ctor = ctor();\n ctor.then(\n function (moduleObject) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 1), (payload._result = moduleObject);\n },\n function (error) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 2), (payload._result = error);\n }\n );\n -1 === payload._status && ((payload._status = 0), (payload._result = ctor));\n }\n if (1 === payload._status) return payload._result.default;\n throw payload._result;\n}\nvar reportGlobalError =\n \"function\" === typeof reportError\n ? reportError\n : function (error) {\n if (\n \"object\" === typeof window &&\n \"function\" === typeof window.ErrorEvent\n ) {\n var event = new window.ErrorEvent(\"error\", {\n bubbles: !0,\n cancelable: !0,\n message:\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.message\n ? String(error.message)\n : String(error),\n error: error\n });\n if (!window.dispatchEvent(event)) return;\n } else if (\n \"object\" === typeof process &&\n \"function\" === typeof process.emit\n ) {\n process.emit(\"uncaughtException\", error);\n return;\n }\n console.error(error);\n },\n Children = {\n map: mapChildren,\n forEach: function (children, forEachFunc, forEachContext) {\n mapChildren(\n children,\n function () {\n forEachFunc.apply(this, arguments);\n },\n forEachContext\n );\n },\n count: function (children) {\n var n = 0;\n mapChildren(children, function () {\n n++;\n });\n return n;\n },\n toArray: function (children) {\n return (\n mapChildren(children, function (child) {\n return child;\n }) || []\n );\n },\n only: function (children) {\n if (!isValidElement(children))\n throw Error(\n \"React.Children.only expected to receive a single React element child.\"\n );\n return children;\n }\n };\nexports.Activity = REACT_ACTIVITY_TYPE;\nexports.Children = Children;\nexports.Component = Component;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.PureComponent = PureComponent;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n ReactSharedInternals;\nexports.__COMPILER_RUNTIME = {\n __proto__: null,\n c: function (size) {\n return ReactSharedInternals.H.useMemoCache(size);\n }\n};\nexports.cache = function (fn) {\n return function () {\n return fn.apply(null, arguments);\n };\n};\nexports.cacheSignal = function () {\n return null;\n};\nexports.cloneElement = function (element, config, children) {\n if (null === element || void 0 === element)\n throw Error(\n \"The argument must be a React element, but you passed \" + element + \".\"\n );\n var props = assign({}, element.props),\n key = element.key;\n if (null != config)\n for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n !hasOwnProperty.call(config, propName) ||\n \"key\" === propName ||\n \"__self\" === propName ||\n \"__source\" === propName ||\n (\"ref\" === propName && void 0 === config.ref) ||\n (props[propName] = config[propName]);\n var propName = arguments.length - 2;\n if (1 === propName) props.children = children;\n else if (1 < propName) {\n for (var childArray = Array(propName), i = 0; i < propName; i++)\n childArray[i] = arguments[i + 2];\n props.children = childArray;\n }\n return ReactElement(element.type, key, props);\n};\nexports.createContext = function (defaultValue) {\n defaultValue = {\n $$typeof: REACT_CONTEXT_TYPE,\n _currentValue: defaultValue,\n _currentValue2: defaultValue,\n _threadCount: 0,\n Provider: null,\n Consumer: null\n };\n defaultValue.Provider = defaultValue;\n defaultValue.Consumer = {\n $$typeof: REACT_CONSUMER_TYPE,\n _context: defaultValue\n };\n return defaultValue;\n};\nexports.createElement = function (type, config, children) {\n var propName,\n props = {},\n key = null;\n if (null != config)\n for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n hasOwnProperty.call(config, propName) &&\n \"key\" !== propName &&\n \"__self\" !== propName &&\n \"__source\" !== propName &&\n (props[propName] = config[propName]);\n var childrenLength = arguments.length - 2;\n if (1 === childrenLength) props.children = children;\n else if (1 < childrenLength) {\n for (var childArray = Array(childrenLength), i = 0; i < childrenLength; i++)\n childArray[i] = arguments[i + 2];\n props.children = childArray;\n }\n if (type && type.defaultProps)\n for (propName in ((childrenLength = type.defaultProps), childrenLength))\n void 0 === props[propName] &&\n (props[propName] = childrenLength[propName]);\n return ReactElement(type, key, props);\n};\nexports.createRef = function () {\n return { current: null };\n};\nexports.forwardRef = function (render) {\n return { $$typeof: REACT_FORWARD_REF_TYPE, render: render };\n};\nexports.isValidElement = isValidElement;\nexports.lazy = function (ctor) {\n return {\n $$typeof: REACT_LAZY_TYPE,\n _payload: { _status: -1, _result: ctor },\n _init: lazyInitializer\n };\n};\nexports.memo = function (type, compare) {\n return {\n $$typeof: REACT_MEMO_TYPE,\n type: type,\n compare: void 0 === compare ? null : compare\n };\n};\nexports.startTransition = function (scope) {\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n ReactSharedInternals.T = currentTransition;\n try {\n var returnValue = scope(),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n \"object\" === typeof returnValue &&\n null !== returnValue &&\n \"function\" === typeof returnValue.then &&\n returnValue.then(noop, reportGlobalError);\n } catch (error) {\n reportGlobalError(error);\n } finally {\n null !== prevTransition &&\n null !== currentTransition.types &&\n (prevTransition.types = currentTransition.types),\n (ReactSharedInternals.T = prevTransition);\n }\n};\nexports.unstable_useCacheRefresh = function () {\n return ReactSharedInternals.H.useCacheRefresh();\n};\nexports.use = function (usable) {\n return ReactSharedInternals.H.use(usable);\n};\nexports.useActionState = function (action, initialState, permalink) {\n return ReactSharedInternals.H.useActionState(action, initialState, permalink);\n};\nexports.useCallback = function (callback, deps) {\n return ReactSharedInternals.H.useCallback(callback, deps);\n};\nexports.useContext = function (Context) {\n return ReactSharedInternals.H.useContext(Context);\n};\nexports.useDebugValue = function () {};\nexports.useDeferredValue = function (value, initialValue) {\n return ReactSharedInternals.H.useDeferredValue(value, initialValue);\n};\nexports.useEffect = function (create, deps) {\n return ReactSharedInternals.H.useEffect(create, deps);\n};\nexports.useEffectEvent = function (callback) {\n return ReactSharedInternals.H.useEffectEvent(callback);\n};\nexports.useId = function () {\n return ReactSharedInternals.H.useId();\n};\nexports.useImperativeHandle = function (ref, create, deps) {\n return ReactSharedInternals.H.useImperativeHandle(ref, create, deps);\n};\nexports.useInsertionEffect = function (create, deps) {\n return ReactSharedInternals.H.useInsertionEffect(create, deps);\n};\nexports.useLayoutEffect = function (create, deps) {\n return ReactSharedInternals.H.useLayoutEffect(create, deps);\n};\nexports.useMemo = function (create, deps) {\n return ReactSharedInternals.H.useMemo(create, deps);\n};\nexports.useOptimistic = function (passthrough, reducer) {\n return ReactSharedInternals.H.useOptimistic(passthrough, reducer);\n};\nexports.useReducer = function (reducer, initialArg, init) {\n return ReactSharedInternals.H.useReducer(reducer, initialArg, init);\n};\nexports.useRef = function (initialValue) {\n return ReactSharedInternals.H.useRef(initialValue);\n};\nexports.useState = function (initialState) {\n return ReactSharedInternals.H.useState(initialState);\n};\nexports.useSyncExternalStore = function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n) {\n return ReactSharedInternals.H.useSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n};\nexports.useTransition = function () {\n return ReactSharedInternals.H.useTransition();\n};\nexports.version = \"19.2.3\";\n","/**\n * @license React\n * react.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function defineDeprecationWarning(methodName, info) {\n Object.defineProperty(Component.prototype, methodName, {\n get: function () {\n console.warn(\n \"%s(...) is deprecated in plain JavaScript React classes. %s\",\n info[0],\n info[1]\n );\n }\n });\n }\n function getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable)\n return null;\n maybeIterable =\n (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n }\n function warnNoop(publicInstance, callerName) {\n publicInstance =\n ((publicInstance = publicInstance.constructor) &&\n (publicInstance.displayName || publicInstance.name)) ||\n \"ReactClass\";\n var warningKey = publicInstance + \".\" + callerName;\n didWarnStateUpdateForUnmountedComponent[warningKey] ||\n (console.error(\n \"Can't call %s on a component that is not yet mounted. This is a no-op, but it might indicate a bug in your application. Instead, assign to `this.state` directly or define a `state = {};` class property with the desired state in the %s component.\",\n callerName,\n publicInstance\n ),\n (didWarnStateUpdateForUnmountedComponent[warningKey] = !0));\n }\n function Component(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n }\n function ComponentDummy() {}\n function PureComponent(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n }\n function noop() {}\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return type.displayName || \"Context\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(type, key, props, owner, debugStack, debugTask) {\n var refProp = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== refProp ? refProp : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function cloneAndReplaceKey(oldElement, newKey) {\n newKey = ReactElement(\n oldElement.type,\n newKey,\n oldElement.props,\n oldElement._owner,\n oldElement._debugStack,\n oldElement._debugTask\n );\n oldElement._store &&\n (newKey._store.validated = oldElement._store.validated);\n return newKey;\n }\n function validateChildKeys(node) {\n isValidElement(node)\n ? node._store && (node._store.validated = 1)\n : \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_LAZY_TYPE &&\n (\"fulfilled\" === node._payload.status\n ? isValidElement(node._payload.value) &&\n node._payload.value._store &&\n (node._payload.value._store.validated = 1)\n : node._store && (node._store.validated = 1));\n }\n function isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n }\n function escape(key) {\n var escaperLookup = { \"=\": \"=0\", \":\": \"=2\" };\n return (\n \"$\" +\n key.replace(/[=:]/g, function (match) {\n return escaperLookup[match];\n })\n );\n }\n function getElementKey(element, index) {\n return \"object\" === typeof element &&\n null !== element &&\n null != element.key\n ? (checkKeyStringCoercion(element.key), escape(\"\" + element.key))\n : index.toString(36);\n }\n function resolveThenable(thenable) {\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n default:\n switch (\n (\"string\" === typeof thenable.status\n ? thenable.then(noop, noop)\n : ((thenable.status = \"pending\"),\n thenable.then(\n function (fulfilledValue) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"fulfilled\"),\n (thenable.value = fulfilledValue));\n },\n function (error) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"rejected\"),\n (thenable.reason = error));\n }\n )),\n thenable.status)\n ) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n }\n }\n throw thenable;\n }\n function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n var type = typeof children;\n if (\"undefined\" === type || \"boolean\" === type) children = null;\n var invokeCallback = !1;\n if (null === children) invokeCallback = !0;\n else\n switch (type) {\n case \"bigint\":\n case \"string\":\n case \"number\":\n invokeCallback = !0;\n break;\n case \"object\":\n switch (children.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n invokeCallback = !0;\n break;\n case REACT_LAZY_TYPE:\n return (\n (invokeCallback = children._init),\n mapIntoArray(\n invokeCallback(children._payload),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n )\n );\n }\n }\n if (invokeCallback) {\n invokeCallback = children;\n callback = callback(invokeCallback);\n var childKey =\n \"\" === nameSoFar ? \".\" + getElementKey(invokeCallback, 0) : nameSoFar;\n isArrayImpl(callback)\n ? ((escapedPrefix = \"\"),\n null != childKey &&\n (escapedPrefix =\n childKey.replace(userProvidedKeyEscapeRegex, \"$&/\") + \"/\"),\n mapIntoArray(callback, array, escapedPrefix, \"\", function (c) {\n return c;\n }))\n : null != callback &&\n (isValidElement(callback) &&\n (null != callback.key &&\n ((invokeCallback && invokeCallback.key === callback.key) ||\n checkKeyStringCoercion(callback.key)),\n (escapedPrefix = cloneAndReplaceKey(\n callback,\n escapedPrefix +\n (null == callback.key ||\n (invokeCallback && invokeCallback.key === callback.key)\n ? \"\"\n : (\"\" + callback.key).replace(\n userProvidedKeyEscapeRegex,\n \"$&/\"\n ) + \"/\") +\n childKey\n )),\n \"\" !== nameSoFar &&\n null != invokeCallback &&\n isValidElement(invokeCallback) &&\n null == invokeCallback.key &&\n invokeCallback._store &&\n !invokeCallback._store.validated &&\n (escapedPrefix._store.validated = 2),\n (callback = escapedPrefix)),\n array.push(callback));\n return 1;\n }\n invokeCallback = 0;\n childKey = \"\" === nameSoFar ? \".\" : nameSoFar + \":\";\n if (isArrayImpl(children))\n for (var i = 0; i < children.length; i++)\n (nameSoFar = children[i]),\n (type = childKey + getElementKey(nameSoFar, i)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (((i = getIteratorFn(children)), \"function\" === typeof i))\n for (\n i === children.entries &&\n (didWarnAboutMaps ||\n console.warn(\n \"Using Maps as children is not supported. Use an array of keyed ReactElements instead.\"\n ),\n (didWarnAboutMaps = !0)),\n children = i.call(children),\n i = 0;\n !(nameSoFar = children.next()).done;\n\n )\n (nameSoFar = nameSoFar.value),\n (type = childKey + getElementKey(nameSoFar, i++)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (\"object\" === type) {\n if (\"function\" === typeof children.then)\n return mapIntoArray(\n resolveThenable(children),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n );\n array = String(children);\n throw Error(\n \"Objects are not valid as a React child (found: \" +\n (\"[object Object]\" === array\n ? \"object with keys {\" + Object.keys(children).join(\", \") + \"}\"\n : array) +\n \"). If you meant to render a collection of children, use an array instead.\"\n );\n }\n return invokeCallback;\n }\n function mapChildren(children, func, context) {\n if (null == children) return children;\n var result = [],\n count = 0;\n mapIntoArray(children, result, \"\", \"\", function (child) {\n return func.call(context, child, count++);\n });\n return result;\n }\n function lazyInitializer(payload) {\n if (-1 === payload._status) {\n var ioInfo = payload._ioInfo;\n null != ioInfo && (ioInfo.start = ioInfo.end = performance.now());\n ioInfo = payload._result;\n var thenable = ioInfo();\n thenable.then(\n function (moduleObject) {\n if (0 === payload._status || -1 === payload._status) {\n payload._status = 1;\n payload._result = moduleObject;\n var _ioInfo = payload._ioInfo;\n null != _ioInfo && (_ioInfo.end = performance.now());\n void 0 === thenable.status &&\n ((thenable.status = \"fulfilled\"),\n (thenable.value = moduleObject));\n }\n },\n function (error) {\n if (0 === payload._status || -1 === payload._status) {\n payload._status = 2;\n payload._result = error;\n var _ioInfo2 = payload._ioInfo;\n null != _ioInfo2 && (_ioInfo2.end = performance.now());\n void 0 === thenable.status &&\n ((thenable.status = \"rejected\"), (thenable.reason = error));\n }\n }\n );\n ioInfo = payload._ioInfo;\n if (null != ioInfo) {\n ioInfo.value = thenable;\n var displayName = thenable.displayName;\n \"string\" === typeof displayName && (ioInfo.name = displayName);\n }\n -1 === payload._status &&\n ((payload._status = 0), (payload._result = thenable));\n }\n if (1 === payload._status)\n return (\n (ioInfo = payload._result),\n void 0 === ioInfo &&\n console.error(\n \"lazy: Expected the result of a dynamic import() call. Instead received: %s\\n\\nYour code should look like: \\n const MyComponent = lazy(() => import('./MyComponent'))\\n\\nDid you accidentally put curly braces around the import?\",\n ioInfo\n ),\n \"default\" in ioInfo ||\n console.error(\n \"lazy: Expected the result of a dynamic import() call. Instead received: %s\\n\\nYour code should look like: \\n const MyComponent = lazy(() => import('./MyComponent'))\",\n ioInfo\n ),\n ioInfo.default\n );\n throw payload._result;\n }\n function resolveDispatcher() {\n var dispatcher = ReactSharedInternals.H;\n null === dispatcher &&\n console.error(\n \"Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\\n1. You might have mismatching versions of React and the renderer (such as React DOM)\\n2. You might be breaking the Rules of Hooks\\n3. You might have more than one copy of React in the same app\\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.\"\n );\n return dispatcher;\n }\n function releaseAsyncTransition() {\n ReactSharedInternals.asyncTransitions--;\n }\n function enqueueTask(task) {\n if (null === enqueueTaskImpl)\n try {\n var requireString = (\"require\" + Math.random()).slice(0, 7);\n enqueueTaskImpl = (module && module[requireString]).call(\n module,\n \"timers\"\n ).setImmediate;\n } catch (_err) {\n enqueueTaskImpl = function (callback) {\n !1 === didWarnAboutMessageChannel &&\n ((didWarnAboutMessageChannel = !0),\n \"undefined\" === typeof MessageChannel &&\n console.error(\n \"This browser does not have a MessageChannel implementation, so enqueuing tasks via await act(async () => ...) will fail. Please file an issue at https://github.com/facebook/react/issues if you encounter this warning.\"\n ));\n var channel = new MessageChannel();\n channel.port1.onmessage = callback;\n channel.port2.postMessage(void 0);\n };\n }\n return enqueueTaskImpl(task);\n }\n function aggregateErrors(errors) {\n return 1 < errors.length && \"function\" === typeof AggregateError\n ? new AggregateError(errors)\n : errors[0];\n }\n function popActScope(prevActQueue, prevActScopeDepth) {\n prevActScopeDepth !== actScopeDepth - 1 &&\n console.error(\n \"You seem to have overlapping act() calls, this is not supported. Be sure to await previous act() calls before making a new one. \"\n );\n actScopeDepth = prevActScopeDepth;\n }\n function recursivelyFlushAsyncActWork(returnValue, resolve, reject) {\n var queue = ReactSharedInternals.actQueue;\n if (null !== queue)\n if (0 !== queue.length)\n try {\n flushActQueue(queue);\n enqueueTask(function () {\n return recursivelyFlushAsyncActWork(returnValue, resolve, reject);\n });\n return;\n } catch (error) {\n ReactSharedInternals.thrownErrors.push(error);\n }\n else ReactSharedInternals.actQueue = null;\n 0 < ReactSharedInternals.thrownErrors.length\n ? ((queue = aggregateErrors(ReactSharedInternals.thrownErrors)),\n (ReactSharedInternals.thrownErrors.length = 0),\n reject(queue))\n : resolve(returnValue);\n }\n function flushActQueue(queue) {\n if (!isFlushing) {\n isFlushing = !0;\n var i = 0;\n try {\n for (; i < queue.length; i++) {\n var callback = queue[i];\n do {\n ReactSharedInternals.didUsePromise = !1;\n var continuation = callback(!1);\n if (null !== continuation) {\n if (ReactSharedInternals.didUsePromise) {\n queue[i] = callback;\n queue.splice(0, i);\n return;\n }\n callback = continuation;\n } else break;\n } while (1);\n }\n queue.length = 0;\n } catch (error) {\n queue.splice(0, i + 1), ReactSharedInternals.thrownErrors.push(error);\n } finally {\n isFlushing = !1;\n }\n }\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n MAYBE_ITERATOR_SYMBOL = Symbol.iterator,\n didWarnStateUpdateForUnmountedComponent = {},\n ReactNoopUpdateQueue = {\n isMounted: function () {\n return !1;\n },\n enqueueForceUpdate: function (publicInstance) {\n warnNoop(publicInstance, \"forceUpdate\");\n },\n enqueueReplaceState: function (publicInstance) {\n warnNoop(publicInstance, \"replaceState\");\n },\n enqueueSetState: function (publicInstance) {\n warnNoop(publicInstance, \"setState\");\n }\n },\n assign = Object.assign,\n emptyObject = {};\n Object.freeze(emptyObject);\n Component.prototype.isReactComponent = {};\n Component.prototype.setState = function (partialState, callback) {\n if (\n \"object\" !== typeof partialState &&\n \"function\" !== typeof partialState &&\n null != partialState\n )\n throw Error(\n \"takes an object of state variables to update or a function which returns an object of state variables.\"\n );\n this.updater.enqueueSetState(this, partialState, callback, \"setState\");\n };\n Component.prototype.forceUpdate = function (callback) {\n this.updater.enqueueForceUpdate(this, callback, \"forceUpdate\");\n };\n var deprecatedAPIs = {\n isMounted: [\n \"isMounted\",\n \"Instead, make sure to clean up subscriptions and pending requests in componentWillUnmount to prevent memory leaks.\"\n ],\n replaceState: [\n \"replaceState\",\n \"Refactor your code to use setState instead (see https://github.com/facebook/react/issues/3236).\"\n ]\n };\n for (fnName in deprecatedAPIs)\n deprecatedAPIs.hasOwnProperty(fnName) &&\n defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);\n ComponentDummy.prototype = Component.prototype;\n deprecatedAPIs = PureComponent.prototype = new ComponentDummy();\n deprecatedAPIs.constructor = PureComponent;\n assign(deprecatedAPIs, Component.prototype);\n deprecatedAPIs.isPureReactComponent = !0;\n var isArrayImpl = Array.isArray,\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals = {\n H: null,\n A: null,\n T: null,\n S: null,\n actQueue: null,\n asyncTransitions: 0,\n isBatchingLegacy: !1,\n didScheduleLegacyUpdate: !1,\n didUsePromise: !1,\n thrownErrors: [],\n getCurrentStack: null,\n recentlyCreatedOwnerStacks: 0\n },\n hasOwnProperty = Object.prototype.hasOwnProperty,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n deprecatedAPIs = {\n react_stack_bottom_frame: function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown, didWarnAboutOldJSXRuntime;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = deprecatedAPIs.react_stack_bottom_frame.bind(\n deprecatedAPIs,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutMaps = !1,\n userProvidedKeyEscapeRegex = /\\/+/g,\n reportGlobalError =\n \"function\" === typeof reportError\n ? reportError\n : function (error) {\n if (\n \"object\" === typeof window &&\n \"function\" === typeof window.ErrorEvent\n ) {\n var event = new window.ErrorEvent(\"error\", {\n bubbles: !0,\n cancelable: !0,\n message:\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.message\n ? String(error.message)\n : String(error),\n error: error\n });\n if (!window.dispatchEvent(event)) return;\n } else if (\n \"object\" === typeof process &&\n \"function\" === typeof process.emit\n ) {\n process.emit(\"uncaughtException\", error);\n return;\n }\n console.error(error);\n },\n didWarnAboutMessageChannel = !1,\n enqueueTaskImpl = null,\n actScopeDepth = 0,\n didWarnNoAwaitAct = !1,\n isFlushing = !1,\n queueSeveralMicrotasks =\n \"function\" === typeof queueMicrotask\n ? function (callback) {\n queueMicrotask(function () {\n return queueMicrotask(callback);\n });\n }\n : enqueueTask;\n deprecatedAPIs = Object.freeze({\n __proto__: null,\n c: function (size) {\n return resolveDispatcher().useMemoCache(size);\n }\n });\n var fnName = {\n map: mapChildren,\n forEach: function (children, forEachFunc, forEachContext) {\n mapChildren(\n children,\n function () {\n forEachFunc.apply(this, arguments);\n },\n forEachContext\n );\n },\n count: function (children) {\n var n = 0;\n mapChildren(children, function () {\n n++;\n });\n return n;\n },\n toArray: function (children) {\n return (\n mapChildren(children, function (child) {\n return child;\n }) || []\n );\n },\n only: function (children) {\n if (!isValidElement(children))\n throw Error(\n \"React.Children.only expected to receive a single React element child.\"\n );\n return children;\n }\n };\n exports.Activity = REACT_ACTIVITY_TYPE;\n exports.Children = fnName;\n exports.Component = Component;\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.Profiler = REACT_PROFILER_TYPE;\n exports.PureComponent = PureComponent;\n exports.StrictMode = REACT_STRICT_MODE_TYPE;\n exports.Suspense = REACT_SUSPENSE_TYPE;\n exports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n ReactSharedInternals;\n exports.__COMPILER_RUNTIME = deprecatedAPIs;\n exports.act = function (callback) {\n var prevActQueue = ReactSharedInternals.actQueue,\n prevActScopeDepth = actScopeDepth;\n actScopeDepth++;\n var queue = (ReactSharedInternals.actQueue =\n null !== prevActQueue ? prevActQueue : []),\n didAwaitActCall = !1;\n try {\n var result = callback();\n } catch (error) {\n ReactSharedInternals.thrownErrors.push(error);\n }\n if (0 < ReactSharedInternals.thrownErrors.length)\n throw (\n (popActScope(prevActQueue, prevActScopeDepth),\n (callback = aggregateErrors(ReactSharedInternals.thrownErrors)),\n (ReactSharedInternals.thrownErrors.length = 0),\n callback)\n );\n if (\n null !== result &&\n \"object\" === typeof result &&\n \"function\" === typeof result.then\n ) {\n var thenable = result;\n queueSeveralMicrotasks(function () {\n didAwaitActCall ||\n didWarnNoAwaitAct ||\n ((didWarnNoAwaitAct = !0),\n console.error(\n \"You called act(async () => ...) without await. This could lead to unexpected testing behaviour, interleaving multiple act calls and mixing their scopes. You should - await act(async () => ...);\"\n ));\n });\n return {\n then: function (resolve, reject) {\n didAwaitActCall = !0;\n thenable.then(\n function (returnValue) {\n popActScope(prevActQueue, prevActScopeDepth);\n if (0 === prevActScopeDepth) {\n try {\n flushActQueue(queue),\n enqueueTask(function () {\n return recursivelyFlushAsyncActWork(\n returnValue,\n resolve,\n reject\n );\n });\n } catch (error$0) {\n ReactSharedInternals.thrownErrors.push(error$0);\n }\n if (0 < ReactSharedInternals.thrownErrors.length) {\n var _thrownError = aggregateErrors(\n ReactSharedInternals.thrownErrors\n );\n ReactSharedInternals.thrownErrors.length = 0;\n reject(_thrownError);\n }\n } else resolve(returnValue);\n },\n function (error) {\n popActScope(prevActQueue, prevActScopeDepth);\n 0 < ReactSharedInternals.thrownErrors.length\n ? ((error = aggregateErrors(\n ReactSharedInternals.thrownErrors\n )),\n (ReactSharedInternals.thrownErrors.length = 0),\n reject(error))\n : reject(error);\n }\n );\n }\n };\n }\n var returnValue$jscomp$0 = result;\n popActScope(prevActQueue, prevActScopeDepth);\n 0 === prevActScopeDepth &&\n (flushActQueue(queue),\n 0 !== queue.length &&\n queueSeveralMicrotasks(function () {\n didAwaitActCall ||\n didWarnNoAwaitAct ||\n ((didWarnNoAwaitAct = !0),\n console.error(\n \"A component suspended inside an `act` scope, but the `act` call was not awaited. When testing React components that depend on asynchronous data, you must await the result:\\n\\nawait act(() => ...)\"\n ));\n }),\n (ReactSharedInternals.actQueue = null));\n if (0 < ReactSharedInternals.thrownErrors.length)\n throw (\n ((callback = aggregateErrors(ReactSharedInternals.thrownErrors)),\n (ReactSharedInternals.thrownErrors.length = 0),\n callback)\n );\n return {\n then: function (resolve, reject) {\n didAwaitActCall = !0;\n 0 === prevActScopeDepth\n ? ((ReactSharedInternals.actQueue = queue),\n enqueueTask(function () {\n return recursivelyFlushAsyncActWork(\n returnValue$jscomp$0,\n resolve,\n reject\n );\n }))\n : resolve(returnValue$jscomp$0);\n }\n };\n };\n exports.cache = function (fn) {\n return function () {\n return fn.apply(null, arguments);\n };\n };\n exports.cacheSignal = function () {\n return null;\n };\n exports.captureOwnerStack = function () {\n var getCurrentStack = ReactSharedInternals.getCurrentStack;\n return null === getCurrentStack ? null : getCurrentStack();\n };\n exports.cloneElement = function (element, config, children) {\n if (null === element || void 0 === element)\n throw Error(\n \"The argument must be a React element, but you passed \" +\n element +\n \".\"\n );\n var props = assign({}, element.props),\n key = element.key,\n owner = element._owner;\n if (null != config) {\n var JSCompiler_inline_result;\n a: {\n if (\n hasOwnProperty.call(config, \"ref\") &&\n (JSCompiler_inline_result = Object.getOwnPropertyDescriptor(\n config,\n \"ref\"\n ).get) &&\n JSCompiler_inline_result.isReactWarning\n ) {\n JSCompiler_inline_result = !1;\n break a;\n }\n JSCompiler_inline_result = void 0 !== config.ref;\n }\n JSCompiler_inline_result && (owner = getOwner());\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (key = \"\" + config.key));\n for (propName in config)\n !hasOwnProperty.call(config, propName) ||\n \"key\" === propName ||\n \"__self\" === propName ||\n \"__source\" === propName ||\n (\"ref\" === propName && void 0 === config.ref) ||\n (props[propName] = config[propName]);\n }\n var propName = arguments.length - 2;\n if (1 === propName) props.children = children;\n else if (1 < propName) {\n JSCompiler_inline_result = Array(propName);\n for (var i = 0; i < propName; i++)\n JSCompiler_inline_result[i] = arguments[i + 2];\n props.children = JSCompiler_inline_result;\n }\n props = ReactElement(\n element.type,\n key,\n props,\n owner,\n element._debugStack,\n element._debugTask\n );\n for (key = 2; key < arguments.length; key++)\n validateChildKeys(arguments[key]);\n return props;\n };\n exports.createContext = function (defaultValue) {\n defaultValue = {\n $$typeof: REACT_CONTEXT_TYPE,\n _currentValue: defaultValue,\n _currentValue2: defaultValue,\n _threadCount: 0,\n Provider: null,\n Consumer: null\n };\n defaultValue.Provider = defaultValue;\n defaultValue.Consumer = {\n $$typeof: REACT_CONSUMER_TYPE,\n _context: defaultValue\n };\n defaultValue._currentRenderer = null;\n defaultValue._currentRenderer2 = null;\n return defaultValue;\n };\n exports.createElement = function (type, config, children) {\n for (var i = 2; i < arguments.length; i++)\n validateChildKeys(arguments[i]);\n i = {};\n var key = null;\n if (null != config)\n for (propName in (didWarnAboutOldJSXRuntime ||\n !(\"__self\" in config) ||\n \"key\" in config ||\n ((didWarnAboutOldJSXRuntime = !0),\n console.warn(\n \"Your app (or one of its dependencies) is using an outdated JSX transform. Update to the modern JSX transform for faster performance: https://react.dev/link/new-jsx-transform\"\n )),\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (key = \"\" + config.key)),\n config))\n hasOwnProperty.call(config, propName) &&\n \"key\" !== propName &&\n \"__self\" !== propName &&\n \"__source\" !== propName &&\n (i[propName] = config[propName]);\n var childrenLength = arguments.length - 2;\n if (1 === childrenLength) i.children = children;\n else if (1 < childrenLength) {\n for (\n var childArray = Array(childrenLength), _i = 0;\n _i < childrenLength;\n _i++\n )\n childArray[_i] = arguments[_i + 2];\n Object.freeze && Object.freeze(childArray);\n i.children = childArray;\n }\n if (type && type.defaultProps)\n for (propName in ((childrenLength = type.defaultProps), childrenLength))\n void 0 === i[propName] && (i[propName] = childrenLength[propName]);\n key &&\n defineKeyPropWarningGetter(\n i,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n var propName = 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return ReactElement(\n type,\n key,\n i,\n getOwner(),\n propName ? Error(\"react-stack-top-frame\") : unknownOwnerDebugStack,\n propName ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.createRef = function () {\n var refObject = { current: null };\n Object.seal(refObject);\n return refObject;\n };\n exports.forwardRef = function (render) {\n null != render && render.$$typeof === REACT_MEMO_TYPE\n ? console.error(\n \"forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...)).\"\n )\n : \"function\" !== typeof render\n ? console.error(\n \"forwardRef requires a render function but was given %s.\",\n null === render ? \"null\" : typeof render\n )\n : 0 !== render.length &&\n 2 !== render.length &&\n console.error(\n \"forwardRef render functions accept exactly two parameters: props and ref. %s\",\n 1 === render.length\n ? \"Did you forget to use the ref parameter?\"\n : \"Any additional parameter will be undefined.\"\n );\n null != render &&\n null != render.defaultProps &&\n console.error(\n \"forwardRef render functions do not support defaultProps. Did you accidentally pass a React component?\"\n );\n var elementType = { $$typeof: REACT_FORWARD_REF_TYPE, render: render },\n ownName;\n Object.defineProperty(elementType, \"displayName\", {\n enumerable: !1,\n configurable: !0,\n get: function () {\n return ownName;\n },\n set: function (name) {\n ownName = name;\n render.name ||\n render.displayName ||\n (Object.defineProperty(render, \"name\", { value: name }),\n (render.displayName = name));\n }\n });\n return elementType;\n };\n exports.isValidElement = isValidElement;\n exports.lazy = function (ctor) {\n ctor = { _status: -1, _result: ctor };\n var lazyType = {\n $$typeof: REACT_LAZY_TYPE,\n _payload: ctor,\n _init: lazyInitializer\n },\n ioInfo = {\n name: \"lazy\",\n start: -1,\n end: -1,\n value: null,\n owner: null,\n debugStack: Error(\"react-stack-top-frame\"),\n debugTask: console.createTask ? console.createTask(\"lazy()\") : null\n };\n ctor._ioInfo = ioInfo;\n lazyType._debugInfo = [{ awaited: ioInfo }];\n return lazyType;\n };\n exports.memo = function (type, compare) {\n null == type &&\n console.error(\n \"memo: The first argument must be a component. Instead received: %s\",\n null === type ? \"null\" : typeof type\n );\n compare = {\n $$typeof: REACT_MEMO_TYPE,\n type: type,\n compare: void 0 === compare ? null : compare\n };\n var ownName;\n Object.defineProperty(compare, \"displayName\", {\n enumerable: !1,\n configurable: !0,\n get: function () {\n return ownName;\n },\n set: function (name) {\n ownName = name;\n type.name ||\n type.displayName ||\n (Object.defineProperty(type, \"name\", { value: name }),\n (type.displayName = name));\n }\n });\n return compare;\n };\n exports.startTransition = function (scope) {\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n currentTransition._updatedFibers = new Set();\n ReactSharedInternals.T = currentTransition;\n try {\n var returnValue = scope(),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n \"object\" === typeof returnValue &&\n null !== returnValue &&\n \"function\" === typeof returnValue.then &&\n (ReactSharedInternals.asyncTransitions++,\n returnValue.then(releaseAsyncTransition, releaseAsyncTransition),\n returnValue.then(noop, reportGlobalError));\n } catch (error) {\n reportGlobalError(error);\n } finally {\n null === prevTransition &&\n currentTransition._updatedFibers &&\n ((scope = currentTransition._updatedFibers.size),\n currentTransition._updatedFibers.clear(),\n 10 < scope &&\n console.warn(\n \"Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table.\"\n )),\n null !== prevTransition &&\n null !== currentTransition.types &&\n (null !== prevTransition.types &&\n prevTransition.types !== currentTransition.types &&\n console.error(\n \"We expected inner Transitions to have transferred the outer types set and that you cannot add to the outer Transition while inside the inner.This is a bug in React.\"\n ),\n (prevTransition.types = currentTransition.types)),\n (ReactSharedInternals.T = prevTransition);\n }\n };\n exports.unstable_useCacheRefresh = function () {\n return resolveDispatcher().useCacheRefresh();\n };\n exports.use = function (usable) {\n return resolveDispatcher().use(usable);\n };\n exports.useActionState = function (action, initialState, permalink) {\n return resolveDispatcher().useActionState(\n action,\n initialState,\n permalink\n );\n };\n exports.useCallback = function (callback, deps) {\n return resolveDispatcher().useCallback(callback, deps);\n };\n exports.useContext = function (Context) {\n var dispatcher = resolveDispatcher();\n Context.$$typeof === REACT_CONSUMER_TYPE &&\n console.error(\n \"Calling useContext(Context.Consumer) is not supported and will cause bugs. Did you mean to call useContext(Context) instead?\"\n );\n return dispatcher.useContext(Context);\n };\n exports.useDebugValue = function (value, formatterFn) {\n return resolveDispatcher().useDebugValue(value, formatterFn);\n };\n exports.useDeferredValue = function (value, initialValue) {\n return resolveDispatcher().useDeferredValue(value, initialValue);\n };\n exports.useEffect = function (create, deps) {\n null == create &&\n console.warn(\n \"React Hook useEffect requires an effect callback. Did you forget to pass a callback to the hook?\"\n );\n return resolveDispatcher().useEffect(create, deps);\n };\n exports.useEffectEvent = function (callback) {\n return resolveDispatcher().useEffectEvent(callback);\n };\n exports.useId = function () {\n return resolveDispatcher().useId();\n };\n exports.useImperativeHandle = function (ref, create, deps) {\n return resolveDispatcher().useImperativeHandle(ref, create, deps);\n };\n exports.useInsertionEffect = function (create, deps) {\n null == create &&\n console.warn(\n \"React Hook useInsertionEffect requires an effect callback. Did you forget to pass a callback to the hook?\"\n );\n return resolveDispatcher().useInsertionEffect(create, deps);\n };\n exports.useLayoutEffect = function (create, deps) {\n null == create &&\n console.warn(\n \"React Hook useLayoutEffect requires an effect callback. Did you forget to pass a callback to the hook?\"\n );\n return resolveDispatcher().useLayoutEffect(create, deps);\n };\n exports.useMemo = function (create, deps) {\n return resolveDispatcher().useMemo(create, deps);\n };\n exports.useOptimistic = function (passthrough, reducer) {\n return resolveDispatcher().useOptimistic(passthrough, reducer);\n };\n exports.useReducer = function (reducer, initialArg, init) {\n return resolveDispatcher().useReducer(reducer, initialArg, init);\n };\n exports.useRef = function (initialValue) {\n return resolveDispatcher().useRef(initialValue);\n };\n exports.useState = function (initialState) {\n return resolveDispatcher().useState(initialState);\n };\n exports.useSyncExternalStore = function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n return resolveDispatcher().useSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n };\n exports.useTransition = function () {\n return resolveDispatcher().useTransition();\n };\n exports.version = \"19.2.3\";\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n","import { Command } from \"commander\";\nimport { devCommand } from \"./commands/dev.js\";\nimport { addCommand } from \"./commands/add.js\";\n\nconst program = new Command()\n .name(\"pdfn\")\n .description(\"PDFN CLI - PDF generation from React components\")\n .version(\"0.0.1-alpha.1\");\n\nprogram.addCommand(devCommand);\nprogram.addCommand(addCommand);\n\nprogram.parse();\n","import { Command } from \"commander\";\nimport { existsSync, readdirSync, readFileSync } from \"fs\";\nimport { join, resolve } from \"path\";\nimport type { Request, Response } from \"express\";\nimport { createServer as createViteServer } from \"vite\";\nimport { WebSocketServer, WebSocket } from \"ws\";\nimport chokidar from \"chokidar\";\nimport { createServer as createHttpServer } from \"http\";\nimport { spawn } from \"child_process\";\nimport puppeteer from \"puppeteer\";\nimport multer from \"multer\";\nimport { createBaseServer } from \"../server/base\";\nimport { generatePdf } from \"../server/pdf\";\nimport type { DebugOptions } from \"@pdfn/react\";\nimport { pdfn } from \"@pdfn/vite\";\nimport chalk from \"chalk\";\nimport { loadEnv } from \"../utils/env\";\nimport React from \"react\";\n\ninterface TemplateInfo {\n id: string;\n name: string;\n file: string;\n path: string;\n sampleData?: Record<string, unknown>;\n}\n\n/**\n * Standardized templates directory (convention over configuration)\n */\nconst TEMPLATES_DIR = \"./pdfn-templates\";\n\ninterface DevServerOptions {\n port: number;\n open: boolean;\n mode: string;\n}\n\nasync function scanTemplates(templatesDir: string): Promise<TemplateInfo[]> {\n if (!existsSync(templatesDir)) {\n return [];\n }\n\n // Try to load config file with sample data\n let configData: Record<string, Record<string, unknown>> = {};\n const configPaths = [\n join(process.cwd(), \"src\", \"config\", \"templates.json\"),\n join(process.cwd(), \"templates.json\"),\n join(templatesDir, \"templates.json\"),\n ];\n\n for (const configPath of configPaths) {\n if (existsSync(configPath)) {\n try {\n const config = JSON.parse(readFileSync(configPath, \"utf-8\"));\n if (config.templates && Array.isArray(config.templates)) {\n for (const t of config.templates) {\n if (t.id && t.sampleData) {\n configData[t.id] = t.sampleData;\n }\n }\n }\n break;\n } catch {\n // Ignore config parse errors\n }\n }\n }\n\n const files = readdirSync(templatesDir).filter((f) => f.endsWith(\".tsx\"));\n\n // Filter to only include files that look like templates\n // (have \"export default function\" or similar patterns)\n const templates: TemplateInfo[] = [];\n\n for (const file of files) {\n const id = file.replace(\".tsx\", \"\");\n const filePath = join(templatesDir, file);\n\n // Quick check: read file and look for default export pattern\n try {\n const content = readFileSync(filePath, \"utf-8\");\n // Must have a default export that looks like a component\n if (!content.includes(\"export default\") || !content.includes(\"function\")) {\n continue;\n }\n // Skip files that are clearly not templates (no Document/Page imports)\n if (!content.includes(\"Document\") && !content.includes(\"Page\")) {\n continue;\n }\n } catch {\n continue;\n }\n\n // Convert kebab/snake case to Title Case\n const name = id\n .split(/[-_]/)\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n .join(\" \");\n\n templates.push({\n id,\n name,\n file,\n path: filePath,\n sampleData: configData[id],\n });\n }\n\n return templates;\n}\n\nfunction createPreviewHTML(templates: TemplateInfo[], activeTemplate: string | null): string {\n const templateList = templates\n .map(\n (t) => `\n <button\n class=\"template-btn ${t.id === activeTemplate ? \"active\" : \"\"}\"\n data-template=\"${t.id}\"\n data-file=\"${t.file}\"\n >\n <span class=\"template-name\">${t.name}</span>\n </button>\n `\n )\n .join(\"\");\n\n return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>PDFN Dev Server</title>\n <style>\n * { box-sizing: border-box; margin: 0; padding: 0; }\n\n :root {\n --primary: #22d3ee;\n --primary-hover: #06b6d4;\n --bg: #0a0a0a;\n --surface-1: #111;\n --surface-2: #1a1a1a;\n --border: #222;\n --text: #fafafa;\n --text-muted: #666;\n --text-secondary: #888;\n }\n\n body {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n background: var(--bg);\n color: var(--text);\n min-height: 100vh;\n }\n\n .header {\n background: var(--surface-1);\n border-bottom: 1px solid var(--border);\n padding: 12px 24px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n .logo {\n font-size: 20px;\n font-weight: 800;\n letter-spacing: -0.5px;\n }\n\n .logo span { color: var(--primary); }\n\n .status {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n color: var(--text-secondary);\n }\n\n .status-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: #22c55e;\n }\n\n .status-dot.disconnected { background: #ef4444; }\n\n .container {\n display: flex;\n height: calc(100vh - 57px);\n }\n\n .main-wrapper {\n flex: 1;\n display: flex;\n overflow: hidden;\n }\n\n .sidebar {\n width: 200px;\n background: var(--surface-1);\n border-right: 1px solid var(--border);\n padding: 16px;\n overflow-y: auto;\n }\n\n .sidebar-title {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin-bottom: 12px;\n }\n\n .template-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 10px 12px;\n background: transparent;\n border: 1px solid #333;\n border-radius: 6px;\n color: #ccc;\n font-size: 13px;\n text-align: left;\n cursor: pointer;\n margin-bottom: 8px;\n transition: all 0.15s;\n }\n\n .template-btn:hover {\n background: var(--surface-2);\n border-color: #444;\n }\n\n .template-btn.active {\n background: rgba(34, 211, 238, 0.1);\n border-color: var(--primary);\n color: var(--primary);\n }\n\n .template-name { font-weight: 500; }\n\n .main {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n /* Context bar - top */\n .context-bar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 16px;\n background: var(--surface-1);\n border-bottom: 1px solid var(--border);\n }\n\n .context-left {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .file-name {\n font-family: ui-monospace, SFMono-Regular, monospace;\n font-size: 13px;\n color: var(--text);\n font-weight: 500;\n }\n\n .file-name:empty::after {\n content: \"Select a template\";\n color: var(--text-muted);\n font-style: italic;\n font-family: inherit;\n }\n\n .page-info {\n font-size: 12px;\n color: var(--text-muted);\n }\n\n .context-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n /* Preview area */\n .preview-area {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #27272a;\n overflow: hidden;\n padding: 24px;\n }\n\n .preview-frame {\n background: #fff;\n border-radius: 4px;\n box-shadow: 0 8px 32px rgba(0,0,0,0.4);\n overflow: hidden;\n transition: opacity 0.2s;\n }\n\n .preview-frame.loading { opacity: 0.4; }\n\n .preview-frame iframe {\n display: block;\n border: none;\n }\n\n .empty-state {\n text-align: center;\n color: var(--text-muted);\n }\n\n .empty-state h2 {\n font-size: 18px;\n margin-bottom: 8px;\n color: var(--text-secondary);\n }\n\n .empty-state p {\n font-size: 14px;\n margin-bottom: 16px;\n }\n\n .empty-state code {\n background: var(--surface-2);\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 13px;\n }\n\n .loading-spinner {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n color: var(--text-muted);\n }\n\n .spinner {\n width: 32px;\n height: 32px;\n border: 2px solid #333;\n border-top-color: var(--primary);\n border-radius: 50%;\n animation: spin 0.8s linear infinite;\n }\n\n @keyframes spin {\n to { transform: rotate(360deg); }\n }\n\n /* Inspector panel - right side */\n .inspector-panel {\n width: 200px;\n background: var(--surface-1);\n border-left: 1px solid var(--border);\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n }\n\n .inspector-title {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text);\n padding: 12px 16px;\n border-bottom: 1px solid var(--border);\n }\n\n .inspector-content {\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 24px;\n }\n\n .inspector-section {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n\n .inspector-section-title {\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n display: flex;\n align-items: center;\n gap: 6px;\n }\n\n .metrics-note {\n font-size: 10px;\n color: var(--text-muted);\n margin-top: 8px;\n font-style: italic;\n }\n\n /* Metrics display */\n .metrics-grid {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n\n .metric-item {\n display: flex;\n justify-content: space-between;\n align-items: baseline;\n }\n\n .metric-label {\n font-size: 12px;\n color: var(--text-muted);\n }\n\n .metric-value {\n font-size: 14px;\n font-weight: 600;\n color: var(--primary);\n font-variant-numeric: tabular-nums;\n }\n\n /* Overlay checkboxes */\n .overlay-list {\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n\n .overlay-checkbox {\n display: flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n font-size: 13px;\n color: var(--text-secondary);\n }\n\n .overlay-checkbox:hover {\n color: var(--text);\n }\n\n .overlay-checkbox input {\n appearance: none;\n width: 16px;\n height: 16px;\n border: 1px solid #444;\n border-radius: 3px;\n background: var(--surface-2);\n cursor: pointer;\n position: relative;\n flex-shrink: 0;\n }\n\n .overlay-checkbox input:hover {\n border-color: #555;\n }\n\n .overlay-checkbox input:checked {\n background: var(--primary);\n border-color: var(--primary);\n }\n\n .overlay-checkbox input:checked::after {\n content: \"\";\n position: absolute;\n left: 5px;\n top: 2px;\n width: 4px;\n height: 8px;\n border: solid #000;\n border-width: 0 2px 2px 0;\n transform: rotate(45deg);\n }\n\n .debug-link {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n margin-top: 8px;\n font-size: 12px;\n color: var(--text-muted);\n text-decoration: none;\n transition: color 0.15s;\n }\n\n .debug-link:hover {\n color: var(--primary);\n }\n\n .debug-link svg {\n opacity: 0.7;\n }\n\n /* Console section */\n .console-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n cursor: pointer;\n user-select: none;\n }\n\n .console-header:hover {\n color: var(--text-secondary);\n }\n\n .console-toggle {\n transition: transform 0.2s;\n }\n\n .console-toggle.collapsed {\n transform: rotate(-90deg);\n }\n\n .console-content {\n font-size: 12px;\n }\n\n .console-empty {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--text-muted);\n }\n\n .console-empty svg {\n color: #22c55e;\n }\n\n .console-message {\n display: flex;\n align-items: flex-start;\n gap: 6px;\n padding: 4px 0;\n }\n\n .console-message.error {\n color: #ef4444;\n }\n\n .console-message.warning {\n color: #eab308;\n }\n\n .console-message-icon {\n flex-shrink: 0;\n }\n\n .console-message-text {\n word-break: break-all;\n }\n\n /* Buttons */\n .btn {\n padding: 6px 10px;\n background: var(--surface-2);\n border: 1px solid #333;\n border-radius: 5px;\n color: #ccc;\n font-size: 12px;\n cursor: pointer;\n transition: all 0.15s;\n text-decoration: none;\n display: inline-flex;\n align-items: center;\n gap: 5px;\n }\n\n .btn:hover { background: #333; border-color: #444; }\n\n .btn-primary {\n background: var(--primary);\n border-color: var(--primary);\n color: #000;\n font-weight: 600;\n }\n\n .btn-primary:hover { background: var(--primary-hover); border-color: var(--primary-hover); }\n </style>\n</head>\n<body>\n <header class=\"header\">\n <div class=\"logo\">pdf<span>n</span> <span style=\"font-weight: 400; color: var(--text-muted); font-size: 14px; margin-left: 8px;\">dev</span></div>\n <div class=\"status\">\n <div class=\"status-dot\" id=\"status-dot\"></div>\n <span id=\"status-text\">Connected</span>\n </div>\n </header>\n\n <div class=\"container\">\n <aside class=\"sidebar\">\n <div class=\"sidebar-title\">Templates</div>\n ${\n templates.length > 0\n ? templateList\n : '<div class=\"empty-state\"><p>No templates found</p><code>pdfn add invoice</code></div>'\n }\n </aside>\n\n <div class=\"main-wrapper\">\n <main class=\"main\">\n <!-- Context bar: filename + page info + actions -->\n <div class=\"context-bar\">\n <div class=\"context-left\">\n <div class=\"file-name\" id=\"file-name\"></div>\n <div class=\"page-info\" id=\"page-info\"></div>\n </div>\n <div class=\"context-actions\">\n <a class=\"btn\" id=\"view-pdf\" href=\"#\" target=\"_blank\" title=\"View PDF in browser\">\n <svg width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14\"/>\n </svg>\n View PDF\n </a>\n <button class=\"btn btn-primary\" id=\"download-pdf\" title=\"Download PDF\">\n <svg width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4\"/>\n </svg>\n Download\n </button>\n </div>\n </div>\n\n <!-- Preview area -->\n <div class=\"preview-area\" id=\"preview-area\">\n ${\n activeTemplate\n ? '<div class=\"loading-spinner\"><div class=\"spinner\"></div><span>Loading preview...</span></div>'\n : '<div class=\"empty-state\"><h2>Select a template</h2><p>Choose a template from the sidebar to preview</p></div>'\n }\n </div>\n </main>\n\n <!-- Inspector panel: right side -->\n <aside class=\"inspector-panel\" id=\"inspector-panel\">\n <div class=\"inspector-title\">Inspector</div>\n <div class=\"inspector-content\">\n <div class=\"inspector-section\">\n <div class=\"inspector-section-title\">Performance</div>\n <div class=\"metrics-grid\">\n <div class=\"metric-item\">\n <div class=\"metric-label\">Render</div>\n <div class=\"metric-value\" id=\"metric-render\">--</div>\n </div>\n <div class=\"metric-item\">\n <div class=\"metric-label\">Pagination</div>\n <div class=\"metric-value\" id=\"metric-pagination\">--</div>\n </div>\n <div class=\"metric-item\">\n <div class=\"metric-label\">Pages</div>\n <div class=\"metric-value\" id=\"metric-pages\">--</div>\n </div>\n </div>\n <div class=\"metrics-note\">Measured in browser. Times vary on server.</div>\n </div>\n\n <div class=\"inspector-section\">\n <div class=\"inspector-section-title\">Debug</div>\n <div class=\"overlay-list\">\n <label class=\"overlay-checkbox\">\n <input type=\"checkbox\" id=\"overlay-grid\">\n Grid (1cm)\n </label>\n <label class=\"overlay-checkbox\">\n <input type=\"checkbox\" id=\"overlay-margins\">\n Margins\n </label>\n <label class=\"overlay-checkbox\">\n <input type=\"checkbox\" id=\"overlay-headers\">\n Headers/Footers\n </label>\n <label class=\"overlay-checkbox\">\n <input type=\"checkbox\" id=\"overlay-breaks\">\n Page numbers\n </label>\n </div>\n <a class=\"debug-link\" id=\"view-html\" href=\"#\" target=\"_blank\">\n View HTML\n <svg width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14\"/>\n </svg>\n </a>\n </div>\n\n <div class=\"inspector-section\">\n <div class=\"inspector-section-title console-header\" id=\"console-header\">\n <span>Console</span>\n <svg class=\"console-toggle\" id=\"console-toggle\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 9l-7 7-7-7\"/>\n </svg>\n </div>\n <div class=\"console-content\" id=\"console-content\">\n <div class=\"console-empty\" id=\"console-empty\">\n <svg width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M5 13l4 4L19 7\"/>\n </svg>\n No issues\n </div>\n <div id=\"console-messages\" style=\"display: none;\"></div>\n </div>\n </div>\n </div>\n </aside>\n </div>\n </div>\n\n <script>\n // Page sizes in points (72 dpi)\n const PAGE_SIZES = {\n A3: { width: 842, height: 1191 },\n A4: { width: 595, height: 842 },\n A5: { width: 420, height: 595 },\n B4: { width: 709, height: 1001 },\n B5: { width: 499, height: 709 },\n Letter: { width: 612, height: 792 },\n Legal: { width: 612, height: 1008 },\n Tabloid: { width: 792, height: 1224 },\n };\n\n const PT_TO_PX = 96 / 72;\n const STORAGE_KEY = 'pdfn-inspector';\n\n let ws;\n let currentTemplate = ${activeTemplate ? `\"${activeTemplate}\"` : \"null\"};\n let templateInfo = {};\n\n // Inspector state with defaults (all overlays off by default)\n let inspectorState = {\n overlays: {\n grid: false,\n margins: false,\n headers: false,\n breaks: false,\n },\n consoleExpanded: true\n };\n\n // Console messages\n let consoleMessages = [];\n\n // Load state from localStorage\n function loadState() {\n try {\n const saved = localStorage.getItem(STORAGE_KEY);\n if (saved) {\n const parsed = JSON.parse(saved);\n inspectorState = { ...inspectorState, ...parsed };\n }\n } catch (e) {}\n }\n\n // Save state to localStorage\n function saveState() {\n try {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(inspectorState));\n } catch (e) {}\n }\n\n // Apply state to UI\n function applyState() {\n // Overlay checkboxes\n document.getElementById('overlay-grid').checked = inspectorState.overlays.grid;\n document.getElementById('overlay-margins').checked = inspectorState.overlays.margins;\n document.getElementById('overlay-headers').checked = inspectorState.overlays.headers;\n document.getElementById('overlay-breaks').checked = inspectorState.overlays.breaks;\n\n // Console state\n const consoleContent = document.getElementById('console-content');\n const consoleToggle = document.getElementById('console-toggle');\n if (inspectorState.consoleExpanded) {\n consoleContent.style.display = 'block';\n consoleToggle.classList.remove('collapsed');\n } else {\n consoleContent.style.display = 'none';\n consoleToggle.classList.add('collapsed');\n }\n }\n\n // Toggle console expanded state\n function toggleConsole() {\n inspectorState.consoleExpanded = !inspectorState.consoleExpanded;\n saveState();\n applyState();\n }\n\n // Add console message\n function addConsoleMessage(type, message) {\n consoleMessages.push({ type, message });\n renderConsoleMessages();\n }\n\n // Clear console messages\n function clearConsoleMessages() {\n consoleMessages = [];\n renderConsoleMessages();\n }\n\n // Render console messages\n function renderConsoleMessages() {\n const emptyEl = document.getElementById('console-empty');\n const messagesEl = document.getElementById('console-messages');\n\n if (consoleMessages.length === 0) {\n emptyEl.style.display = 'flex';\n messagesEl.style.display = 'none';\n messagesEl.innerHTML = '';\n } else {\n emptyEl.style.display = 'none';\n messagesEl.style.display = 'block';\n messagesEl.innerHTML = consoleMessages.map(msg =>\n \\`<div class=\"console-message \\${msg.type}\">\n <span class=\"console-message-icon\">\\${msg.type === 'error' ? '✗' : '⚠'}</span>\n <span class=\"console-message-text\">\\${escapeHtml(msg.message)}</span>\n </div>\\`\n ).join('');\n }\n }\n\n // Escape HTML\n function escapeHtml(text) {\n const div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n }\n\n // Get debug query string from overlay state\n function getDebugQuery() {\n const { overlays } = inspectorState;\n const hasAny = Object.values(overlays).some(v => v);\n if (!hasAny) return '';\n\n const params = new URLSearchParams();\n if (overlays.grid) params.set('grid', '1');\n if (overlays.margins) params.set('margins', '1');\n if (overlays.headers) params.set('headers', '1');\n if (overlays.breaks) params.set('breaks', '1');\n\n return '?' + params.toString();\n }\n\n // Check if any overlay is enabled\n function hasAnyOverlay() {\n return Object.values(inspectorState.overlays).some(v => v);\n }\n\n loadState();\n\n function connect() {\n ws = new WebSocket('ws://' + location.host);\n\n ws.onopen = () => {\n document.getElementById('status-dot').classList.remove('disconnected');\n document.getElementById('status-text').textContent = 'Connected';\n };\n\n ws.onclose = () => {\n document.getElementById('status-dot').classList.add('disconnected');\n document.getElementById('status-text').textContent = 'Disconnected';\n setTimeout(connect, 2000);\n };\n\n ws.onmessage = (event) => {\n const data = JSON.parse(event.data);\n if (data.type === 'reload') {\n if (currentTemplate) loadPreview(currentTemplate);\n } else if (data.type === 'templates') {\n updateTemplateList(data.templates);\n }\n };\n }\n\n connect();\n\n // Update template list in sidebar (called when templates are added/removed)\n function updateTemplateList(templates) {\n const sidebar = document.querySelector('.sidebar');\n const titleEl = sidebar.querySelector('.sidebar-title');\n\n // Clear existing buttons\n sidebar.innerHTML = '';\n sidebar.appendChild(titleEl);\n\n if (templates.length === 0) {\n sidebar.innerHTML += '<div class=\"empty-state\"><p>No templates found</p><code>pdfn add invoice</code></div>';\n // Clear preview if no templates\n currentTemplate = null;\n document.getElementById('file-name').textContent = '';\n document.getElementById('page-info').textContent = '';\n document.getElementById('preview-area').innerHTML = '<div class=\"empty-state\"><h2>No templates</h2><p>Add a template to get started</p><code>pdfn add invoice</code></div>';\n return;\n }\n\n // Add template buttons\n templates.forEach(t => {\n const btn = document.createElement('button');\n btn.className = 'template-btn' + (t.id === currentTemplate ? ' active' : '');\n btn.dataset.template = t.id;\n btn.dataset.file = t.file;\n btn.innerHTML = '<span class=\"template-name\">' + t.name + '</span>';\n btn.addEventListener('click', () => loadPreview(t.id));\n sidebar.appendChild(btn);\n });\n\n // If current template was deleted, switch to first template\n const templateIds = templates.map(t => t.id);\n if (currentTemplate && !templateIds.includes(currentTemplate)) {\n loadPreview(templates[0].id);\n }\n }\n\n // Listen for metrics from iframe (postMessage from PDFN script)\n window.addEventListener('message', function(event) {\n if (event.data && event.data.type === 'pdfn:metrics') {\n const metrics = event.data.metrics;\n if (metrics.paginationTime !== undefined) {\n document.getElementById('metric-pagination').textContent = metrics.paginationTime + 'ms';\n }\n if (metrics.pages !== undefined) {\n document.getElementById('metric-pages').textContent = metrics.pages;\n }\n }\n });\n\n function detectPageInfo(html) {\n let pageSize = 'A4';\n let orientation = 'portrait';\n\n // Check for data-pdfn-size attribute (e.g., \"A4\", \"Letter Landscape\", \"Tabloid\")\n const sizeMatch = html.match(/data-pdfn-size=\"([^\"]+)\"/i);\n if (sizeMatch) {\n const sizeStr = sizeMatch[1];\n // Check if it includes \"Landscape\"\n if (sizeStr.includes('Landscape')) {\n orientation = 'landscape';\n }\n // Extract base size name (remove \" Landscape\" suffix if present)\n const baseName = sizeStr.replace(' Landscape', '').replace(' Portrait', '');\n if (PAGE_SIZES[baseName]) {\n pageSize = baseName;\n }\n }\n\n return { pageSize, orientation };\n }\n\n function calculateScale(pageSize, orientation) {\n const container = document.getElementById('preview-area');\n const rect = container.getBoundingClientRect();\n const maxWidth = rect.width - 48;\n const maxHeight = rect.height - 48;\n\n const size = PAGE_SIZES[pageSize] || PAGE_SIZES.A4;\n const pageW = (orientation === 'landscape' ? size.height : size.width) * PT_TO_PX;\n const pageH = (orientation === 'landscape' ? size.width : size.height) * PT_TO_PX;\n\n const scale = Math.min(maxWidth / pageW, maxHeight / pageH, 1);\n return { pageW, pageH, scale };\n }\n\n async function loadPreview(templateId) {\n currentTemplate = templateId;\n\n // Get template file name from button\n const activeBtn = document.querySelector('.template-btn[data-template=\"' + templateId + '\"]');\n const fileName = activeBtn ? activeBtn.dataset.file : templateId + '.tsx';\n\n document.querySelectorAll('.template-btn').forEach(btn => {\n btn.classList.toggle('active', btn.dataset.template === templateId);\n });\n\n // Update context bar\n document.getElementById('file-name').textContent = fileName;\n\n const previewArea = document.getElementById('preview-area');\n previewArea.innerHTML = '<div class=\"loading-spinner\"><div class=\"spinner\"></div><span>Rendering...</span></div>';\n\n try {\n const debugQuery = getDebugQuery();\n const htmlRes = await fetch('/api/template/' + templateId + '/html' + debugQuery);\n const html = await htmlRes.text();\n\n templateInfo = detectPageInfo(html);\n document.getElementById('page-info').textContent =\n templateInfo.pageSize + ' · ' + templateInfo.orientation;\n\n // Update metrics (render time from server, pagination from iframe postMessage)\n const renderTime = htmlRes.headers.get('X-Render-Time');\n\n if (renderTime) {\n document.getElementById('metric-render').textContent = renderTime + 'ms';\n }\n\n // Reset pagination metrics (will be updated via postMessage from iframe)\n document.getElementById('metric-pagination').textContent = '--';\n document.getElementById('metric-pages').textContent = '--';\n\n const { pageW, pageH, scale } = calculateScale(templateInfo.pageSize, templateInfo.orientation);\n const displayW = pageW * scale;\n const displayH = pageH * scale;\n\n previewArea.innerHTML = '';\n const frame = document.createElement('div');\n frame.className = 'preview-frame';\n frame.style.width = displayW + 'px';\n frame.style.height = displayH + 'px';\n\n const iframe = document.createElement('iframe');\n iframe.style.width = pageW + 'px';\n iframe.style.height = pageH + 'px';\n iframe.style.transform = 'scale(' + scale + ')';\n iframe.style.transformOrigin = 'top left';\n iframe.srcdoc = html;\n\n frame.classList.add('loading');\n iframe.onload = () => frame.classList.remove('loading');\n\n frame.appendChild(iframe);\n previewArea.appendChild(frame);\n\n // Set up action buttons\n const pdfUrl = '/api/template/' + templateId + '/pdf' + debugQuery;\n const htmlUrl = '/api/template/' + templateId + '/html' + debugQuery;\n\n document.getElementById('view-pdf').href = pdfUrl;\n document.getElementById('view-html').href = htmlUrl;\n\n document.getElementById('download-pdf').onclick = () => {\n const link = document.createElement('a');\n link.href = pdfUrl;\n link.download = templateId + '.pdf';\n link.click();\n };\n\n } catch (err) {\n previewArea.innerHTML = '<div class=\"empty-state\"><h2>Error</h2><p>' + err.message + '</p></div>';\n }\n }\n\n document.querySelectorAll('.template-btn').forEach(btn => {\n btn.addEventListener('click', () => loadPreview(btn.dataset.template));\n });\n\n // Overlay checkbox handlers\n const overlayCheckboxes = ['grid', 'margins', 'headers', 'breaks'];\n overlayCheckboxes.forEach(name => {\n document.getElementById('overlay-' + name).onchange = (e) => {\n inspectorState.overlays[name] = e.target.checked;\n saveState();\n if (currentTemplate) loadPreview(currentTemplate);\n };\n });\n\n // Console header click handler\n document.getElementById('console-header').onclick = toggleConsole;\n\n let resizeTimeout;\n window.addEventListener('resize', () => {\n clearTimeout(resizeTimeout);\n resizeTimeout = setTimeout(() => {\n if (currentTemplate) loadPreview(currentTemplate);\n }, 150);\n });\n\n // Apply saved state and load first template\n applyState();\n ${activeTemplate ? `loadPreview(\"${activeTemplate}\");` : \"\"}\n </script>\n</body>\n</html>`;\n}\n\nasync function startDevServer(options: DevServerOptions) {\n const { port, open, mode } = options;\n const absoluteTemplatesDir = resolve(process.cwd(), TEMPLATES_DIR);\n\n // Show header and initializing message\n console.log(chalk.bold(\"\\n pdfn dev\\n\"));\n console.log(chalk.dim(\" Initializing...\"));\n\n // Scan templates\n let templates = await scanTemplates(absoluteTemplatesDir);\n\n // Show relative path for cleaner output\n const displayPath = TEMPLATES_DIR;\n const templateCount = templates.length === 1 ? \"1 template\" : `${templates.length} templates`;\n\n // Create base server with shared /generate and /health endpoints\n const { app, browserManager } = createBaseServer({\n enableLogging: false, // Dev uses custom logging per route\n onSuccess: (result) => {\n const { metrics } = result;\n console.log(\n chalk.green(\" ✓\"),\n chalk.dim(\"/generate\"),\n chalk.cyan(`${metrics.total}ms`),\n chalk.dim(\"•\"),\n `${metrics.pageCount} page${metrics.pageCount > 1 ? \"s\" : \"\"}`,\n chalk.dim(\"•\"),\n formatBytes(metrics.pdfSize)\n );\n },\n onError: (message) => {\n console.log(chalk.red(\" ✗\"), chalk.dim(\"/generate\"), chalk.red(message));\n },\n });\n const server = createHttpServer(app);\n\n // Create WebSocket server for hot reload\n const wss = new WebSocketServer({ server });\n const clients = new Set<WebSocket>();\n\n wss.on(\"connection\", (ws) => {\n clients.add(ws);\n ws.on(\"close\", () => clients.delete(ws));\n });\n\n wss.on(\"error\", (err: NodeJS.ErrnoException) => {\n if (err.code === \"EADDRINUSE\") {\n // Handled by server error handler\n return;\n }\n console.error(chalk.red(\" ✗ WebSocket error:\"), err.message);\n });\n\n function broadcast(message: object) {\n const data = JSON.stringify(message);\n clients.forEach((client) => {\n if (client.readyState === WebSocket.OPEN) {\n client.send(data);\n }\n });\n }\n\n // Create Vite server for template compilation\n // Custom logger to silence Vite's default output (we handle our own logging)\n const viteLogger = {\n info: () => {},\n warn: () => {},\n error: (msg: string) => console.error(chalk.red(\" ✗ Vite:\"), msg),\n warnOnce: () => {},\n hasWarned: false,\n clearScreen: () => {},\n hasErrorLogged: () => false,\n };\n\n const vite = await createViteServer({\n root: process.cwd(),\n mode,\n server: {\n middlewareMode: true,\n hmr: { server } // Use our HTTP server for Vite's WebSocket\n },\n appType: \"custom\",\n customLogger: viteLogger,\n optimizeDeps: {\n include: [\"react\", \"react-dom\"],\n },\n esbuild: {\n jsx: \"automatic\",\n },\n ssr: {\n // Don't externalize these - we need to transform them\n noExternal: [\"@pdfn/react\", \"@pdfn/tailwind\", \"@pdfn/client\", \"server-only\"],\n },\n plugins: [\n // Unified pdfn plugin: Tailwind pre-compilation + client/template markers\n ...pdfn(),\n {\n name: \"mock-server-only\",\n enforce: \"pre\",\n resolveId(id) {\n if (id === \"server-only\") {\n return { id: \"\\0server-only-mock\", moduleSideEffects: false };\n }\n },\n load(id) {\n if (id === \"\\0server-only-mock\") {\n // Return empty module - we're in SSR context so server-only is fine\n return \"export default {};\";\n }\n },\n },\n ],\n });\n\n\n // Watch for template and CSS changes\n // Watch templates dir and styles.css + styles/ directory for CSS HMR\n const watchPaths = [\n absoluteTemplatesDir,\n join(absoluteTemplatesDir, \"styles.css\"),\n join(absoluteTemplatesDir, \"styles\"),\n ];\n const watcher = chokidar.watch(watchPaths, {\n ignored: /(^|[\\/\\\\])\\../,\n persistent: true,\n });\n\n // Helper to check if a file is a template (matches what we show in sidebar)\n function isTemplateFile(filePath: string): boolean {\n const fileName = filePath.split(\"/\").pop() || \"\";\n // Must be a .tsx file in the root of templates dir (not in subdirectories)\n if (!fileName.endsWith(\".tsx\")) return false;\n // Check if it's a direct child of templates dir\n const relativePath = filePath.replace(absoluteTemplatesDir + \"/\", \"\");\n if (relativePath.includes(\"/\")) return false;\n return true;\n }\n\n // Helper to check if file is a code file (tsx/ts/js/jsx)\n function isCodeFile(filePath: string): boolean {\n return /\\.(tsx?|jsx?)$/.test(filePath);\n }\n\n // Helper to check if file is a CSS file in templates\n function isCssFile(filePath: string): boolean {\n return filePath.endsWith(\".css\");\n }\n\n // Suppress logging during initial scan\n let watcherReady = false;\n\n watcher.on(\"ready\", () => {\n watcherReady = true;\n });\n\n watcher.on(\"change\", async (filePath) => {\n if (!watcherReady) return;\n const fileName = filePath.split(\"/\").pop() || filePath;\n\n // Handle CSS file changes (styles.css or styles/*.css)\n if (isCssFile(filePath)) {\n console.log(chalk.blue(\" ↻\"), fileName, chalk.dim(\"changed\"));\n\n // Invalidate the virtual Tailwind CSS module to force recompilation\n const virtualMod = vite.moduleGraph.getModuleById(\"\\0virtual:pdfn-tailwind-css\");\n if (virtualMod) {\n vite.moduleGraph.invalidateModule(virtualMod);\n // Invalidate all modules that import the virtual module\n for (const importer of virtualMod.importers) {\n vite.moduleGraph.invalidateModule(importer);\n }\n }\n\n templates = await scanTemplates(absoluteTemplatesDir);\n broadcast({ type: \"reload\" });\n return;\n }\n\n // Log all code file changes (templates and components)\n if (isCodeFile(filePath)) {\n console.log(chalk.blue(\" ↻\"), fileName, chalk.dim(\"changed\"));\n\n // Invalidate the changed module and its dependencies in Vite's SSR cache\n const mod = vite.moduleGraph.getModuleById(filePath);\n if (mod) {\n vite.moduleGraph.invalidateModule(mod);\n }\n\n // Also invalidate the virtual Tailwind CSS module to force recompilation\n const virtualMod = vite.moduleGraph.getModuleById(\"\\0virtual:pdfn-tailwind-css\");\n if (virtualMod) {\n vite.moduleGraph.invalidateModule(virtualMod);\n // Invalidate all modules that import the virtual module\n for (const importer of virtualMod.importers) {\n vite.moduleGraph.invalidateModule(importer);\n }\n }\n }\n templates = await scanTemplates(absoluteTemplatesDir);\n broadcast({ type: \"reload\" });\n });\n\n watcher.on(\"add\", async (filePath) => {\n if (!watcherReady) return;\n const oldCount = templates.length;\n templates = await scanTemplates(absoluteTemplatesDir);\n // Only log if a new template was actually added (not components)\n if (templates.length > oldCount && isTemplateFile(filePath)) {\n const fileName = filePath.split(\"/\").pop() || filePath;\n console.log(chalk.green(\" +\"), fileName, chalk.dim(\"added\"));\n }\n // Send updated template list so sidebar can be refreshed\n broadcast({ type: \"templates\", templates: templates.map(t => ({ id: t.id, name: t.name, file: t.file })) });\n });\n\n watcher.on(\"unlink\", async (filePath) => {\n if (!watcherReady) return;\n const oldCount = templates.length;\n const fileName = filePath.split(\"/\").pop() || filePath;\n templates = await scanTemplates(absoluteTemplatesDir);\n // Only log if a template was actually removed (not components)\n if (templates.length < oldCount && isTemplateFile(filePath)) {\n console.log(chalk.red(\" -\"), fileName, chalk.dim(\"removed\"));\n }\n // Send updated template list so sidebar can be refreshed\n broadcast({ type: \"templates\", templates: templates.map(t => ({ id: t.id, name: t.name, file: t.file })) });\n });\n\n // Serve preview UI\n app.get(\"/\", (_req: Request, res: Response) => {\n const activeTemplate = templates[0]?.id ?? null;\n res.send(createPreviewHTML(templates, activeTemplate));\n });\n\n // API: Get template code\n app.get(\"/api/template/:id/code\", (req: Request, res: Response) => {\n const template = templates.find((t) => t.id === req.params.id);\n if (!template) {\n res.status(404).send(\"Template not found\");\n return;\n }\n\n try {\n const code = readFileSync(template.path, \"utf-8\");\n res.type(\"text/plain\").send(code);\n } catch {\n res.status(500).send(\"Error reading template\");\n }\n });\n\n // Helper: Render a template to HTML using Vite\n // Templates use default parameter values for sample data (React Email pattern)\n async function renderTemplate(\n template: TemplateInfo,\n debugOptions: DebugOptions | false = false\n ): Promise<string> {\n const mod = await vite.ssrLoadModule(template.path);\n const Component = mod.default;\n const { render } = await vite.ssrLoadModule(\"@pdfn/react\");\n // Use React.createElement so element.type === Component (preserves markers)\n // Empty props - component's default parameter values provide sample data\n return render(React.createElement(Component, {}), {\n debug: debugOptions || undefined,\n });\n }\n\n // Parse debug options from query params\n function parseDebugOptions(query: Record<string, unknown>): DebugOptions | false {\n const options: DebugOptions = {\n grid: query.grid === \"1\",\n margins: query.margins === \"1\",\n headers: query.headers === \"1\",\n breaks: query.breaks === \"1\",\n };\n\n // Return false if no options enabled\n const hasAny = Object.values(options).some((v) => v);\n return hasAny ? options : false;\n }\n\n // API: Get rendered HTML\n app.get(\"/api/template/:id/html\", async (req: Request, res: Response) => {\n const template = templates.find((t) => t.id === req.params.id);\n if (!template) {\n res.status(404).send(\"Template not found\");\n return;\n }\n\n try {\n const start = performance.now();\n const debugOptions = parseDebugOptions(req.query as Record<string, unknown>);\n const html = await renderTemplate(template, debugOptions);\n const duration = Math.round(performance.now() - start);\n\n // Count pages from rendered HTML (look for pagedjs page markers)\n const pageMatches = html.match(/class=\"pagedjs_page\"/g);\n const pageCount = pageMatches ? pageMatches.length : 1;\n\n // Log render\n console.log(\n chalk.green(\" ✓\"),\n template.file,\n chalk.dim(\"→ HTML\"),\n chalk.cyan(`${duration}ms`)\n );\n\n res.setHeader(\"X-Render-Time\", duration.toString());\n res.setHeader(\"X-Page-Count\", pageCount.toString());\n // Note: Pagination time is measured client-side after Paged.js runs\n res.type(\"text/html\").send(html);\n } catch (error) {\n console.log(chalk.red(\" ✗\"), template.file, chalk.red(\"render failed\"));\n console.error(chalk.dim(\" \"), error);\n res.status(500).send(`Error rendering template: ${error}`);\n }\n });\n\n // Helper: Format bytes for display\n function formatBytes(bytes: number): string {\n if (bytes < 1024) return bytes + \"B\";\n if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + \"KB\";\n return (bytes / (1024 * 1024)).toFixed(2) + \"MB\";\n }\n\n // API: Generate PDF\n app.get(\"/api/template/:id/pdf\", async (req: Request, res: Response) => {\n const template = templates.find((t) => t.id === req.params.id);\n if (!template) {\n res.status(404).send(\"Template not found\");\n return;\n }\n\n try {\n const debugOptions = parseDebugOptions(req.query as Record<string, unknown>);\n const html = await renderTemplate(template, debugOptions);\n const result = await browserManager.withPage(async (page) => {\n return generatePdf(page, html, { timeout: 30000 });\n });\n\n // Log PDF generation - first line: request summary\n const { metrics, warnings, assets } = result;\n console.log(\n chalk.green(\" ✓\"),\n template.file,\n chalk.dim(\"→ PDF •\"),\n chalk.cyan(`${metrics.total}ms`),\n chalk.dim(\"•\"),\n formatBytes(metrics.pdfSize)\n );\n\n // Second line: details (pages, assets, timing) - all separated by •\n const pageStr = `${metrics.pageCount} page${metrics.pageCount > 1 ? \"s\" : \"\"}`;\n const images = assets.filter((a) => a.type === \"image\");\n const fonts = assets.filter((a) => a.type === \"font\");\n const assetParts: string[] = [];\n if (images.length > 0) assetParts.push(`${images.length} image${images.length > 1 ? \"s\" : \"\"}`);\n if (fonts.length > 0) assetParts.push(`${fonts.length} font${fonts.length > 1 ? \"s\" : \"\"}`);\n const assetStr = assetParts.length > 0 ? assetParts.join(\" • \") + \" • \" : \"\";\n const timingStr = `load ${metrics.contentLoad}ms • paginate ${metrics.pagedJs}ms • capture ${metrics.pdfCapture}ms`;\n console.log(chalk.dim(` ${pageStr} • ${assetStr}${timingStr}`));\n\n // Log warnings\n if (warnings.length > 0) {\n warnings.forEach((w) => {\n console.log(chalk.yellow(\" ⚠\"), chalk.yellow(w));\n });\n }\n\n // Add metrics headers\n res.setHeader(\"X-PDF-Total-Time\", metrics.total.toString());\n res.setHeader(\"X-PDF-Pages\", metrics.pageCount.toString());\n res.setHeader(\"X-PDF-Size\", metrics.pdfSize.toString());\n res.setHeader(\"X-PDF-Capture-Time\", metrics.pdfCapture.toString());\n res.setHeader(\"X-PDF-Assets\", result.assets.length.toString());\n res.setHeader(\"X-PDF-Warnings\", warnings.length.toString());\n\n res.setHeader(\"Content-Type\", \"application/pdf\");\n res.setHeader(\"Content-Disposition\", `inline; filename=\"${template.id}.pdf\"`);\n res.send(result.buffer);\n } catch (error) {\n console.log(chalk.red(\" ✗\"), template.file, chalk.red(\"PDF generation failed\"));\n console.error(chalk.dim(\" \"), error);\n res.status(500).send(`Error generating PDF: ${error}`);\n }\n });\n\n // API: Generate PDF and return metrics (JSON)\n app.get(\"/api/template/:id/pdf-metrics\", async (req: Request, res: Response) => {\n const template = templates.find((t) => t.id === req.params.id);\n if (!template) {\n res.status(404).json({ error: \"Template not found\" });\n return;\n }\n\n try {\n const debugOptions = parseDebugOptions(req.query as Record<string, unknown>);\n const html = await renderTemplate(template, debugOptions);\n const result = await browserManager.withPage(async (page) => {\n return generatePdf(page, html, { timeout: 30000 });\n });\n\n // Log PDF metrics - first line: request summary\n const { metrics, warnings, assets } = result;\n console.log(\n chalk.green(\" ✓\"),\n template.file,\n chalk.dim(\"→ PDF metrics •\"),\n chalk.cyan(`${metrics.total}ms`),\n chalk.dim(\"•\"),\n formatBytes(metrics.pdfSize)\n );\n\n // Second line: details (pages, assets, timing) - all separated by •\n {\n const pageStr = `${metrics.pageCount} page${metrics.pageCount > 1 ? \"s\" : \"\"}`;\n const images = assets.filter((a) => a.type === \"image\");\n const fonts = assets.filter((a) => a.type === \"font\");\n const assetParts: string[] = [];\n if (images.length > 0) assetParts.push(`${images.length} image${images.length > 1 ? \"s\" : \"\"}`);\n if (fonts.length > 0) assetParts.push(`${fonts.length} font${fonts.length > 1 ? \"s\" : \"\"}`);\n const assetStr = assetParts.length > 0 ? assetParts.join(\" • \") + \" • \" : \"\";\n const timingStr = `load ${metrics.contentLoad}ms • paginate ${metrics.pagedJs}ms • capture ${metrics.pdfCapture}ms`;\n console.log(chalk.dim(` ${pageStr} • ${assetStr}${timingStr}`));\n }\n\n if (warnings.length > 0) {\n warnings.forEach((w) => {\n console.log(chalk.yellow(\" ⚠\"), chalk.yellow(w));\n });\n }\n\n res.json({\n metrics: result.metrics,\n assets: result.assets,\n warnings: result.warnings,\n });\n } catch (error) {\n console.log(chalk.red(\" ✗\"), template.file, chalk.red(\"PDF metrics failed\"));\n console.error(chalk.dim(\" \"), error);\n res.status(500).json({ error: `Error generating PDF: ${error}` });\n }\n });\n\n // Gotenberg-compatible API: Convert HTML to PDF\n // This allows generate() from @pdfn/react to work with pdfn dev\n const upload = multer({ storage: multer.memoryStorage() });\n\n app.post(\n \"/forms/chromium/convert/html\",\n upload.any(),\n async (req: Request, res: Response) => {\n try {\n // Extract HTML from multipart form\n const files = req.files as Express.Multer.File[] | undefined;\n const htmlFile = files?.find(\n (f) => f.originalname === \"index.html\" || f.fieldname === \"files\"\n );\n\n if (!htmlFile) {\n res.status(400).send(\"Missing index.html file\");\n return;\n }\n\n const html = htmlFile.buffer.toString(\"utf-8\");\n\n // Generate PDF using existing infrastructure\n const result = await browserManager.withPage(async (page) => {\n return generatePdf(page, html, { timeout: 30000 });\n });\n\n // Log the request\n const { metrics } = result;\n console.log(\n chalk.green(\" ✓\"),\n chalk.dim(\"API →\"),\n \"PDF\",\n chalk.dim(\"•\"),\n chalk.cyan(`${metrics.total}ms`),\n chalk.dim(\"•\"),\n formatBytes(metrics.pdfSize),\n chalk.dim(`• ${metrics.pageCount} page${metrics.pageCount > 1 ? \"s\" : \"\"}`)\n );\n\n res.setHeader(\"Content-Type\", \"application/pdf\");\n res.send(result.buffer);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.log(chalk.red(\" ✗\"), chalk.dim(\"API →\"), chalk.red(\"PDF generation failed\"));\n console.error(chalk.dim(\" \"), message);\n res.status(500).send(message);\n }\n }\n );\n\n // Start server\n await new Promise<void>((resolve, reject) => {\n server.on(\"error\", (err: NodeJS.ErrnoException) => {\n if (err.code === \"EADDRINUSE\") {\n console.error(chalk.red(`\\n ✗ Port ${port} is already in use.\\n`));\n console.error(chalk.dim(` Either stop the existing server or use a different port:`));\n console.error(chalk.dim(` npx pdfn dev --port ${port + 1}\\n`));\n process.exit(1);\n }\n reject(err);\n });\n server.listen(port, () => resolve());\n });\n\n // Pre-launch Chromium for PDF generation\n await browserManager.getBrowser();\n\n // Graceful shutdown\n const shutdown = async () => {\n console.log(chalk.dim(\"\\n Shutting down...\"));\n watcher.close();\n await vite.close();\n await browserManager.close();\n server.close();\n process.exit(0);\n };\n\n process.on(\"SIGTERM\", shutdown);\n process.on(\"SIGINT\", shutdown);\n\n // Open Chromium (same browser used for PDF generation = true WYSIWYG)\n function openChromium() {\n const chromiumPath = puppeteer.executablePath();\n console.log(chalk.dim(\" Opening in Chromium...\\n\"));\n spawn(chromiumPath, [`http://localhost:${port}`], {\n detached: true,\n stdio: \"ignore\",\n }).unref();\n }\n\n console.log(chalk.dim(` Templates: ${displayPath} (${templateCount})`));\n console.log(chalk.green(`\\n ✓ Ready at ${chalk.cyan(`http://localhost:${port}`)}\\n`));\n\n if (!open) {\n console.log(chalk.dim(` Tip: PDFs are generated with Chromium. For accurate preview,`));\n console.log(chalk.dim(` open in Chrome or Chromium-based browsers.\\n`));\n }\n\n console.log(chalk.dim(` Shortcuts`));\n console.log(chalk.dim(` › ${chalk.white(\"o\")} open in Chromium`));\n console.log(chalk.dim(` › ${chalk.white(\"q\")} quit\\n`));\n\n if (open) {\n openChromium();\n }\n\n // Keyboard shortcuts\n if (process.stdin.isTTY) {\n process.stdin.setRawMode(true);\n process.stdin.resume();\n process.stdin.setEncoding(\"utf8\");\n process.stdin.on(\"data\", (key: string) => {\n if (key === \"o\" || key === \"O\") {\n openChromium();\n } else if (key === \"q\" || key === \"Q\" || key === \"\\u0003\") {\n // q or Ctrl+C\n shutdown();\n }\n });\n }\n}\n\nexport const devCommand = new Command(\"dev\")\n .description(\"Start development server with live preview\")\n .option(\"--port <number>\", \"Server port (env: PDFN_PORT)\", process.env.PDFN_PORT ?? \"3456\")\n .option(\"--open\", \"Open browser automatically\")\n .option(\"--mode <mode>\", \"Environment mode (loads .env.[mode])\", \"development\")\n .action(async (options) => {\n // Load environment variables based on mode (Vite pattern)\n loadEnv(options.mode);\n\n const port = parseInt(options.port, 10);\n\n await startDevServer({\n port,\n open: options.open ?? false,\n mode: options.mode,\n });\n });\n","import express from \"express\";\nimport type { Express, Request, Response, NextFunction } from \"express\";\nimport { BrowserManager } from \"./browser\";\nimport { createGenerateHandler } from \"./routes\";\nimport { type PdfResult } from \"./pdf\";\n\nexport interface BaseServerOptions {\n /** Max concurrent pages (default: env.PDFN_MAX_CONCURRENT || 5) */\n maxConcurrent?: number;\n /** Request timeout in ms (default: env.PDFN_TIMEOUT || 30000) */\n timeout?: number;\n /** Enable request logging (default: true) */\n enableLogging?: boolean;\n /** Custom logger for requests */\n onRequest?: (method: string, path: string, status: number, duration: number, extra?: string) => void;\n /** Custom logger for PDF details */\n onPdfResult?: (result: PdfResult) => void;\n /** Callback on successful PDF generation */\n onSuccess?: (result: PdfResult) => void;\n /** Custom logger for errors */\n onError?: (message: string) => void;\n}\n\nexport interface BaseServer {\n app: Express;\n browserManager: BrowserManager;\n maxConcurrent: number;\n timeout: number;\n}\n\n/**\n * Create a base PDFN server with common middleware and routes.\n *\n * This is shared between `dev` and `serve` commands.\n * Returns the Express app and BrowserManager for further customization.\n *\n * Includes:\n * - JSON body parsing (50mb limit)\n * - Request logging middleware (optional)\n * - POST /generate endpoint\n * - GET /health endpoint\n */\nexport function createBaseServer(options: BaseServerOptions = {}): BaseServer {\n const maxConcurrent =\n options.maxConcurrent ??\n parseInt(process.env.PDFN_MAX_CONCURRENT ?? \"5\", 10);\n const timeout =\n options.timeout ?? parseInt(process.env.PDFN_TIMEOUT ?? \"30000\", 10);\n const enableLogging = options.enableLogging ?? true;\n\n const app = express();\n const browserManager = new BrowserManager({ maxConcurrent, timeout });\n\n // JSON body parsing\n app.use(express.json({ limit: \"50mb\" }));\n\n // Request logging middleware\n if (enableLogging && options.onRequest) {\n const onRequest = options.onRequest;\n const onPdfResult = options.onPdfResult;\n\n app.use((req: Request, res: Response, next: NextFunction) => {\n // Skip noisy requests\n const skipPaths = [\"/favicon.ico\", \"/robots.txt\"];\n if (skipPaths.includes(req.path)) {\n next();\n return;\n }\n\n const start = performance.now();\n\n res.on(\"finish\", () => {\n const duration = performance.now() - start;\n\n // For /generate, include page count and size\n let extra: string | undefined;\n if (req.path === \"/generate\" && res.statusCode === 200) {\n const pages = res.getHeader(\"X-PDFN-Page-Count\");\n const size = Number(res.getHeader(\"X-PDFN-PDF-Size\")) || 0;\n const sizeKB = (size / 1024).toFixed(1);\n extra = `${pages} pages • ${sizeKB}KB`;\n }\n\n onRequest(req.method, req.path, res.statusCode, duration, extra);\n\n // Log PDF details if available\n const pdfResult = (res as any)._pdfResult as PdfResult | undefined;\n if (pdfResult && onPdfResult) {\n onPdfResult(pdfResult);\n }\n });\n\n next();\n });\n }\n\n // Health check endpoint\n app.get(\"/health\", (_req: Request, res: Response) => {\n res.json({\n status: \"ok\",\n browser: browserManager.isConnected() ? \"connected\" : \"disconnected\",\n activePages: browserManager.getActivePages(),\n maxConcurrent: browserManager.getMaxConcurrent(),\n });\n });\n\n // PDF generation endpoint\n app.post(\n \"/generate\",\n createGenerateHandler(browserManager, {\n timeout,\n onSuccess: options.onSuccess,\n onError: options.onError,\n })\n );\n\n return {\n app,\n browserManager,\n maxConcurrent,\n timeout,\n };\n}\n","import puppeteer, { Browser, Page } from \"puppeteer\";\n\nexport interface BrowserManagerOptions {\n /** Max concurrent pages (default: env.PDFN_MAX_CONCURRENT || 5) */\n maxConcurrent?: number;\n /** Request timeout in ms (default: env.PDFN_TIMEOUT || 30000) */\n timeout?: number;\n}\n\n/**\n * Manages a single Puppeteer browser instance with multiple concurrent pages\n *\n * Architecture: Single browser + multiple pages (industry standard pattern)\n * - Lower memory footprint (~150MB browser + ~30MB/page)\n * - Fast page creation (~50ms vs ~1-2s for new browser)\n * - Auto-restart on browser crash/disconnect\n */\nexport class BrowserManager {\n private browser: Browser | null = null;\n private launching: Promise<Browser> | null = null;\n private activePages = 0;\n private maxConcurrent: number;\n private timeout: number;\n\n constructor(options: BrowserManagerOptions = {}) {\n this.maxConcurrent =\n options.maxConcurrent ??\n parseInt(process.env.PDFN_MAX_CONCURRENT ?? \"5\", 10);\n this.timeout =\n options.timeout ?? parseInt(process.env.PDFN_TIMEOUT ?? \"30000\", 10);\n }\n\n /**\n * Get or create the browser instance\n */\n async getBrowser(): Promise<Browser> {\n if (this.browser?.connected) {\n return this.browser;\n }\n\n // If already launching, wait for that\n if (this.launching) {\n return this.launching;\n }\n\n // Launch new browser\n this.launching = puppeteer.launch({\n headless: true,\n args: [\n \"--no-sandbox\",\n \"--disable-setuid-sandbox\",\n \"--disable-dev-shm-usage\",\n \"--disable-gpu\",\n \"--disable-extensions\",\n \"--mute-audio\",\n \"--disable-notifications\",\n ],\n });\n\n try {\n this.browser = await this.launching;\n this.setupBrowserListeners(this.browser);\n return this.browser;\n } finally {\n this.launching = null;\n }\n }\n\n /**\n * Setup browser event listeners for auto-restart on crash\n */\n private setupBrowserListeners(browser: Browser): void {\n browser.on(\"disconnected\", () => {\n this.browser = null;\n // activePages will naturally drain as withPage catches errors\n });\n }\n\n /**\n * Create a new page for PDF generation\n */\n async createPage(): Promise<Page> {\n const browser = await this.getBrowser();\n const page = await browser.newPage();\n page.setDefaultTimeout(this.timeout);\n return page;\n }\n\n /**\n * Execute a function with a managed page\n *\n * This pattern ensures:\n * - Concurrency limits are respected\n * - Pages are always closed after use\n * - Active page count is accurate\n *\n * @throws Error if max concurrent pages reached\n */\n async withPage<T>(fn: (page: Page) => Promise<T>): Promise<T> {\n if (this.activePages >= this.maxConcurrent) {\n throw new Error(\"Server busy - max concurrent requests reached\");\n }\n\n this.activePages++;\n let page: Page | null = null;\n\n try {\n page = await this.createPage();\n return await fn(page);\n } finally {\n this.activePages--;\n if (page) {\n await page.close().catch(() => {\n // Ignore close errors (browser may have disconnected)\n });\n }\n }\n }\n\n /**\n * Check if browser is connected\n */\n isConnected(): boolean {\n return this.browser?.connected ?? false;\n }\n\n /**\n * Get current number of active pages\n */\n getActivePages(): number {\n return this.activePages;\n }\n\n /**\n * Get max concurrent pages limit\n */\n getMaxConcurrent(): number {\n return this.maxConcurrent;\n }\n\n /**\n * Get configured timeout\n */\n getTimeout(): number {\n return this.timeout;\n }\n\n /**\n * Close the browser and clean up\n */\n async close(): Promise<void> {\n if (this.browser) {\n await this.browser.close();\n this.browser = null;\n }\n }\n}\n","/**\n * Simple debug logging utility\n *\n * Enable with DEBUG=pdfn:cli or DEBUG=pdfn:* or DEBUG=pdfn\n *\n * This is a lightweight alternative to the `debug` npm package.\n * Supports namespace filtering similar to the debug package convention.\n */\n\n// Debug logging - enable with DEBUG=pdfn:cli or DEBUG=pdfn:* or DEBUG=pdfn\nconst debugEnv = process.env.DEBUG ?? \"\";\nconst isEnabled =\n debugEnv.includes(\"pdfn:cli\") ||\n debugEnv.includes(\"pdfn:*\") ||\n debugEnv === \"pdfn\" ||\n debugEnv.includes(\"pdfn,\") ||\n debugEnv.endsWith(\",pdfn\");\n\n/**\n * Debug logger - only logs when DEBUG=pdfn:cli (or pdfn:* or pdfn) is set\n */\nexport const debug = isEnabled\n ? (message: string, ...args: unknown[]) => {\n console.log(`[pdfn:cli] ${message}`, ...args);\n }\n : () => {};\n\n/**\n * Check if debug logging is enabled\n */\nexport const isDebugEnabled = () => isEnabled;\n","import type { Page, PDFOptions, HTTPRequest, HTTPResponse } from \"puppeteer\";\nimport { debug } from \"../utils/debug\";\n\nexport interface PdfGenerationOptions {\n /** PDF format (default: A4) */\n format?: \"A4\" | \"Letter\" | \"Legal\" | \"Tabloid\" | \"A3\" | \"A5\";\n /** Print background graphics */\n printBackground?: boolean;\n /** Timeout for waiting for ready state (ms) */\n timeout?: number;\n}\n\n/** Asset information tracked during PDF generation */\nexport interface AssetInfo {\n /** Asset URL */\n url: string;\n /** Asset type (image, font, stylesheet, script, other) */\n type: \"image\" | \"font\" | \"stylesheet\" | \"script\" | \"other\";\n /** Size in bytes (0 if failed) */\n size: number;\n /** Load time in ms */\n duration: number;\n /** Whether the asset loaded successfully */\n success: boolean;\n /** Error message if failed */\n error?: string;\n}\n\nexport interface PdfResult {\n /** PDF buffer */\n buffer: Buffer;\n /** Generation metrics */\n metrics: {\n /** Total generation time in ms */\n total: number;\n /** Time waiting for content to load */\n contentLoad: number;\n /** Time waiting for Paged.js */\n pagedJs: number;\n /** Time for PDF capture */\n pdfCapture: number;\n /** Number of pages */\n pageCount: number;\n /** PDF file size in bytes */\n pdfSize: number;\n };\n /** Assets loaded during generation */\n assets: AssetInfo[];\n /** Warnings detected during generation */\n warnings: string[];\n}\n\n/** Size threshold for large asset warning (200KB - web best practice) */\nconst LARGE_ASSET_THRESHOLD = 200 * 1024;\n\n/** Duration threshold for slow asset warning (1000ms - lenient for fonts) */\nconst SLOW_ASSET_THRESHOLD = 1000;\n\n/** Determine asset type from resource type */\nfunction getAssetType(resourceType: string): AssetInfo[\"type\"] {\n switch (resourceType) {\n case \"image\":\n return \"image\";\n case \"font\":\n return \"font\";\n case \"stylesheet\":\n return \"stylesheet\";\n case \"script\":\n return \"script\";\n default:\n return \"other\";\n }\n}\n\n/** Get short URL for display (remove data: prefix, truncate long URLs) */\nfunction getShortUrl(url: string): string {\n if (url.startsWith(\"data:\")) {\n const match = url.match(/^data:([^;,]+)/);\n return match ? `data:${match[1]}...` : \"data:...\";\n }\n if (url.length > 80) {\n return url.substring(0, 77) + \"...\";\n }\n return url;\n}\n\n/**\n * Generate PDF from HTML content using a Puppeteer page\n */\nexport async function generatePdf(\n page: Page,\n html: string,\n options: PdfGenerationOptions = {}\n): Promise<PdfResult> {\n const {\n format = \"A4\",\n printBackground = true,\n timeout = 30000,\n } = options;\n\n const startTime = performance.now();\n let contentLoadTime = 0;\n let pagedJsTime = 0;\n let pdfCaptureTime = 0;\n let pageCount = 0;\n\n // Asset tracking\n const assets: AssetInfo[] = [];\n const requestStartTimes = new Map<string, number>();\n const warnings: string[] = [];\n\n // Request handler to track start times\n const onRequest = (request: HTTPRequest) => {\n const url = request.url();\n const resourceType = request.resourceType();\n\n // Only track relevant resource types\n if ([\"image\", \"font\", \"stylesheet\", \"script\"].includes(resourceType)) {\n requestStartTimes.set(url, performance.now());\n }\n };\n\n // Response handler to track completed requests\n const onResponse = (response: HTTPResponse) => {\n const url = response.url();\n const request = response.request();\n const resourceType = request.resourceType();\n const startTime = requestStartTimes.get(url);\n\n if (startTime === undefined) return;\n\n const duration = Math.round(performance.now() - startTime);\n const status = response.status();\n const success = status >= 200 && status < 400;\n\n // Get content length from headers\n const contentLength = response.headers()[\"content-length\"];\n const size = contentLength ? parseInt(contentLength, 10) : 0;\n\n const asset: AssetInfo = {\n url: getShortUrl(url),\n type: getAssetType(resourceType),\n size,\n duration,\n success,\n };\n\n if (!success) {\n asset.error = `HTTP ${status}`;\n warnings.push(`Failed: ${asset.url} (${status})`);\n } else {\n if (size > LARGE_ASSET_THRESHOLD) {\n warnings.push(`Large: ${asset.url} (${(size / 1024).toFixed(0)}KB)`);\n }\n if (duration > SLOW_ASSET_THRESHOLD) {\n warnings.push(`Slow: ${asset.url} (${duration}ms)`);\n }\n }\n\n assets.push(asset);\n requestStartTimes.delete(url);\n };\n\n // Request failed handler\n const onRequestFailed = (request: HTTPRequest) => {\n const url = request.url();\n const resourceType = request.resourceType();\n const startTime = requestStartTimes.get(url);\n\n if (startTime === undefined) return;\n\n const duration = Math.round(performance.now() - startTime);\n const failure = request.failure();\n const errorText = failure?.errorText || \"Unknown error\";\n\n const asset: AssetInfo = {\n url: getShortUrl(url),\n type: getAssetType(resourceType),\n size: 0,\n duration,\n success: false,\n error: errorText,\n };\n\n warnings.push(`Failed: ${asset.url} (${errorText})`);\n assets.push(asset);\n requestStartTimes.delete(url);\n };\n\n // Set up request interception\n page.on(\"request\", onRequest);\n page.on(\"response\", onResponse);\n page.on(\"requestfailed\", onRequestFailed);\n\n try {\n // Set content and wait for network idle\n const contentStart = performance.now();\n await page.setContent(html, {\n waitUntil: \"networkidle0\",\n timeout,\n });\n contentLoadTime = performance.now() - contentStart;\n\n // Wait for PDFN.ready to be true (Paged.js completion)\n const pagedStart = performance.now();\n await page.waitForFunction(\n () => (window as any).PDFN?.ready === true,\n { timeout }\n );\n pagedJsTime = performance.now() - pagedStart;\n\n // Get page count from PDFN metrics\n pageCount = await page.evaluate(() => {\n return (window as any).PDFN?.metrics?.pages ?? 1;\n });\n\n // Generate PDF\n const pdfStart = performance.now();\n const pdfOptions: PDFOptions = {\n format,\n printBackground,\n preferCSSPageSize: true,\n tagged: true, // Accessibility: generates tagged PDF for screen readers\n outline: true, // Accessibility: auto-generates bookmarks from headings\n };\n\n const buffer = await page.pdf(pdfOptions);\n pdfCaptureTime = performance.now() - pdfStart;\n\n const totalTime = performance.now() - startTime;\n const pdfBuffer = Buffer.from(buffer);\n\n debug(\n `pdf: ${Math.round(totalTime)}ms (load: ${Math.round(contentLoadTime)}ms, paged: ${Math.round(pagedJsTime)}ms, capture: ${Math.round(pdfCaptureTime)}ms) - ${pageCount} pages, ${(pdfBuffer.length / 1024).toFixed(1)}KB`\n );\n\n if (assets.length > 0) {\n debug(`assets: ${assets.length} (${assets.filter(a => !a.success).length} failed)`);\n }\n\n if (warnings.length > 0) {\n warnings.forEach(w => debug(`warning: ${w}`));\n }\n\n return {\n buffer: pdfBuffer,\n metrics: {\n total: Math.round(totalTime),\n contentLoad: Math.round(contentLoadTime),\n pagedJs: Math.round(pagedJsTime),\n pdfCapture: Math.round(pdfCaptureTime),\n pageCount,\n pdfSize: pdfBuffer.length,\n },\n assets,\n warnings,\n };\n } finally {\n // Clean up event listeners\n page.off(\"request\", onRequest);\n page.off(\"response\", onResponse);\n page.off(\"requestfailed\", onRequestFailed);\n\n // Close the page after use\n await page.close().catch(() => {});\n }\n}\n","import type { Request, Response } from \"express\";\nimport type { BrowserManager } from \"./browser\";\nimport { generatePdf, type PdfResult } from \"./pdf\";\n\ninterface GenerateRequestBody {\n html?: string;\n options?: {\n timeout?: number;\n printBackground?: boolean;\n preferCSSPageSize?: boolean;\n };\n}\n\ninterface GenerateHandlerOptions {\n /** Default timeout in ms (default: 30000) */\n timeout?: number;\n /** Optional logger for PDF generation results */\n onSuccess?: (result: PdfResult) => void;\n /** Optional logger for errors */\n onError?: (error: string) => void;\n}\n\n/**\n * Create a /generate POST handler for PDF generation\n *\n * This is shared between `dev` and `serve` commands to avoid duplication.\n * Each server provides its own BrowserManager instance.\n *\n * @example\n * ```ts\n * const browserManager = new BrowserManager({ maxConcurrent: 5 });\n * app.post(\"/generate\", createGenerateHandler(browserManager));\n * ```\n */\nexport function createGenerateHandler(\n browserManager: BrowserManager,\n options: GenerateHandlerOptions = {}\n) {\n const { timeout = 30000, onSuccess, onError } = options;\n\n return async (req: Request, res: Response) => {\n const { html, options: pdfOptions } = req.body as GenerateRequestBody;\n const format = req.query.format as string | undefined;\n\n if (!html) {\n res.status(400).json({ error: \"HTML content is required\" });\n return;\n }\n\n // Return HTML directly if format=html (for debugging)\n if (format === \"html\") {\n res.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\n res.send(html);\n return;\n }\n\n try {\n const result = await browserManager.withPage(async (page) => {\n return generatePdf(page, html, {\n ...pdfOptions,\n timeout: pdfOptions?.timeout ?? timeout,\n });\n });\n\n // Set response headers with metrics\n res.setHeader(\"Content-Type\", \"application/pdf\");\n res.setHeader(\"X-PDFN-Total-Time\", result.metrics.total.toString());\n res.setHeader(\"X-PDFN-Content-Load\", result.metrics.contentLoad.toString());\n res.setHeader(\"X-PDFN-PagedJs-Time\", result.metrics.pagedJs.toString());\n res.setHeader(\"X-PDFN-PDF-Capture\", result.metrics.pdfCapture.toString());\n res.setHeader(\"X-PDFN-Page-Count\", result.metrics.pageCount.toString());\n res.setHeader(\"X-PDFN-PDF-Size\", result.metrics.pdfSize.toString());\n\n // Attach result for logging middleware (used by serve command)\n (res as any)._pdfResult = result;\n\n // Call success callback if provided\n onSuccess?.(result);\n\n res.send(result.buffer);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unknown error\";\n\n // Call error callback if provided\n onError?.(message);\n\n if (message.includes(\"Server busy\")) {\n res.status(503).json({ error: message });\n return;\n }\n\n res.status(500).json({ error: message });\n }\n };\n}\n","import { existsSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { config } from \"dotenv\";\n\n/**\n * Load environment variables following Vite's pattern.\n * Priority (later overrides earlier):\n * .env → .env.local → .env.[mode] → .env.[mode].local\n *\n * @param mode - Environment mode (e.g., \"development\", \"production\")\n */\nexport function loadEnv(mode: string): void {\n const cwd = process.cwd();\n\n // Files in order of priority (first loaded = lowest priority)\n const envFiles = [\n \".env\",\n \".env.local\",\n `.env.${mode}`,\n `.env.${mode}.local`,\n ];\n\n for (const file of envFiles) {\n const filePath = resolve(cwd, file);\n if (existsSync(filePath)) {\n // quiet: true suppresses dotenv's verbose output in v17+\n config({ path: filePath, override: true, quiet: true });\n }\n }\n}\n","import { Command } from \"commander\";\nimport { existsSync, mkdirSync, copyFileSync, readFileSync } from \"fs\";\nimport { join, dirname } from \"path\";\nimport { fileURLToPath } from \"url\";\nimport chalk from \"chalk\";\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\n\n// Available templates with descriptions\nconst TEMPLATES: Record<string, { name: string; description: string; pageSize: string }> = {\n invoice: {\n name: \"Invoice\",\n description: \"Professional invoice with itemized billing\",\n pageSize: \"A4\",\n },\n letter: {\n name: \"Business Letter\",\n description: \"US business correspondence\",\n pageSize: \"Letter\",\n },\n contract: {\n name: \"Contract\",\n description: \"Legal service agreement with terms\",\n pageSize: \"Legal\",\n },\n ticket: {\n name: \"Event Ticket\",\n description: \"Admission ticket with QR placeholder\",\n pageSize: \"A5\",\n },\n poster: {\n name: \"Poster\",\n description: \"Event poster (landscape)\",\n pageSize: \"Tabloid\",\n },\n report: {\n name: \"Sales Report\",\n description: \"Report with Recharts (npm install recharts)\",\n pageSize: \"A4\",\n },\n};\n\ntype TemplateStyle = \"inline\" | \"tailwind\";\n\nfunction getTemplatesDir(style: TemplateStyle): string {\n // After build, cli.js is in dist/, templates are in templates/\n // So from dist/ we go up one level to package root, then into templates/<style>/\n return join(__dirname, \"..\", \"templates\", style);\n}\n\n/**\n * Check if @pdfn/tailwind is installed in user's project\n * Checks both package.json and node_modules for compatibility with npm, pnpm, yarn\n */\nfunction isTailwindInstalled(cwd: string): boolean {\n // First check package.json for explicit dependency\n try {\n const pkgPath = join(cwd, \"package.json\");\n if (existsSync(pkgPath)) {\n const pkg = JSON.parse(readFileSync(pkgPath, \"utf-8\"));\n if (pkg.dependencies?.[\"@pdfn/tailwind\"] || pkg.devDependencies?.[\"@pdfn/tailwind\"]) {\n return true;\n }\n }\n } catch {\n // Ignore parse errors\n }\n\n // Fall back to checking node_modules (for linked packages, global installs, etc.)\n const tailwindPath = join(cwd, \"node_modules\", \"@pdfn\", \"tailwind\");\n return existsSync(tailwindPath);\n}\n\nexport const addCommand = new Command(\"add\")\n .description(\"Add a starter template to your project\")\n .argument(\"[template]\", \"Template name (e.g., invoice, letter, contract)\")\n .option(\"--list\", \"List available templates\")\n .option(\"--tailwind\", \"Use Tailwind CSS styling (requires @pdfn/tailwind)\")\n .option(\"--inline\", \"Use inline styles (default)\")\n .option(\"--force\", \"Overwrite existing files\")\n .action(async (template, options) => {\n const cwd = process.cwd();\n const outputDir = \"./pdfn-templates\";\n\n // List templates\n if (options.list || !template) {\n console.log(chalk.bold(\"\\nAvailable templates:\\n\"));\n\n for (const [id, info] of Object.entries(TEMPLATES)) {\n console.log(` ${chalk.cyan(id.padEnd(12))} ${info.description} ${chalk.dim(`(${info.pageSize})`)}`);\n }\n\n console.log(chalk.dim(\"\\nUsage: pdfn add <template> [--tailwind]\"));\n console.log(chalk.dim(\"Example: pdfn add invoice\"));\n console.log(chalk.dim(\"Example: pdfn add invoice --tailwind\\n\"));\n console.log(chalk.bold(\"Options:\"));\n console.log(chalk.dim(\" --inline Use inline styles (default)\"));\n console.log(chalk.dim(\" --tailwind Use Tailwind CSS (requires @pdfn/tailwind)\\n\"));\n return;\n }\n\n // Validate template\n if (!TEMPLATES[template]) {\n console.error(chalk.red(`\\nError: Unknown template \"${template}\"`));\n console.log(chalk.dim(\"Run 'pdfn add --list' to see available templates\\n\"));\n process.exit(1);\n }\n\n // Determine style (default to inline)\n const style: TemplateStyle = options.tailwind ? \"tailwind\" : \"inline\";\n\n // Check for @pdfn/tailwind if tailwind style requested\n if (style === \"tailwind\" && !isTailwindInstalled(cwd)) {\n console.error(chalk.yellow(`\\n⚠ @pdfn/tailwind is not installed.`));\n console.log(chalk.dim(\"Install it first to use Tailwind templates:\\n\"));\n console.log(chalk.cyan(\" npm install @pdfn/tailwind\\n\"));\n console.log(chalk.dim(\"Or use inline styles (default):\\n\"));\n console.log(chalk.cyan(` pdfn add ${template}\\n`));\n process.exit(1);\n }\n\n const templatesDir = getTemplatesDir(style);\n const sourceFile = join(templatesDir, `${template}.tsx`);\n const outputFile = join(outputDir, `${template}.tsx`);\n\n // Check if source template exists\n if (!existsSync(sourceFile)) {\n console.error(chalk.red(`\\nError: Template file not found: ${sourceFile}`));\n console.log(chalk.dim(\"This may be a package installation issue.\\n\"));\n process.exit(1);\n }\n\n // Create output directory\n if (!existsSync(outputDir)) {\n mkdirSync(outputDir, { recursive: true });\n console.log(chalk.dim(`Created ${outputDir}/`));\n }\n\n // Check if file already exists\n if (existsSync(outputFile) && !options.force) {\n console.error(chalk.yellow(`\\nFile already exists: ${outputFile}`));\n console.log(chalk.dim(\"Use --force to overwrite\\n\"));\n process.exit(1);\n }\n\n // Copy template\n try {\n copyFileSync(sourceFile, outputFile);\n\n const info = TEMPLATES[template];\n const styleLabel = style === \"tailwind\" ? chalk.cyan(\" (Tailwind)\") : chalk.dim(\" (inline styles)\");\n console.log(chalk.green(`\\n✓ Added ${info.name} template`) + styleLabel);\n console.log(chalk.dim(` ${outputFile}\\n`));\n\n // Show next steps\n console.log(chalk.bold(\"Next steps:\"));\n console.log(chalk.dim(` 1. Edit ${outputFile} to customize`));\n console.log(chalk.dim(` 2. Run 'npx pdfn dev' to preview\\n`));\n\n // Additional info for tailwind\n if (style === \"tailwind\") {\n console.log(chalk.dim(\"Note: Tailwind templates require @pdfn/tailwind to be installed.\\n\"));\n }\n } catch (error) {\n console.error(chalk.red(`\\nError copying template: ${error}`));\n process.exit(1);\n }\n });\n\n// Also export the template info for use by dev server\nexport { TEMPLATES };\n"],"mappings":"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AAA;AAAA;AAAA,EAGxC,EACC,KAAK,EAAE;AAEV,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAseD,UAAU,SAAS,IACf,eACA,uFACN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YA8BM,iBACI,kGACA,+GACN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BA8FkB,iBAAiB,IAAI,cAAc,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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","names":["config","config","resolve","Command","existsSync","resolve","puppeteer","startTime","existsSync","config","resolve","React","options","puppeteer","Command","existsSync","readFileSync","join","chalk","Command"]}
1
+ {"version":3,"sources":["../../../../../node_modules/react/cjs/react.production.js","../../../../../node_modules/react/cjs/react.development.js","../../../../../node_modules/react/index.js","../src/cli.ts","../src/commands/dev.ts","../src/server/base.ts","../src/server/browser.ts","../src/utils/debug.ts","../src/server/pdf.ts","../src/server/routes.ts","../src/utils/env.ts","../src/commands/add.ts"],"sourcesContent":["/**\n * @license React\n * react.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n maybeIterable =\n (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar ReactNoopUpdateQueue = {\n isMounted: function () {\n return !1;\n },\n enqueueForceUpdate: function () {},\n enqueueReplaceState: function () {},\n enqueueSetState: function () {}\n },\n assign = Object.assign,\n emptyObject = {};\nfunction Component(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n}\nComponent.prototype.isReactComponent = {};\nComponent.prototype.setState = function (partialState, callback) {\n if (\n \"object\" !== typeof partialState &&\n \"function\" !== typeof partialState &&\n null != partialState\n )\n throw Error(\n \"takes an object of state variables to update or a function which returns an object of state variables.\"\n );\n this.updater.enqueueSetState(this, partialState, callback, \"setState\");\n};\nComponent.prototype.forceUpdate = function (callback) {\n this.updater.enqueueForceUpdate(this, callback, \"forceUpdate\");\n};\nfunction ComponentDummy() {}\nComponentDummy.prototype = Component.prototype;\nfunction PureComponent(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n}\nvar pureComponentPrototype = (PureComponent.prototype = new ComponentDummy());\npureComponentPrototype.constructor = PureComponent;\nassign(pureComponentPrototype, Component.prototype);\npureComponentPrototype.isPureReactComponent = !0;\nvar isArrayImpl = Array.isArray;\nfunction noop() {}\nvar ReactSharedInternals = { H: null, A: null, T: null, S: null },\n hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction ReactElement(type, key, props) {\n var refProp = props.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== refProp ? refProp : null,\n props: props\n };\n}\nfunction cloneAndReplaceKey(oldElement, newKey) {\n return ReactElement(oldElement.type, newKey, oldElement.props);\n}\nfunction isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n}\nfunction escape(key) {\n var escaperLookup = { \"=\": \"=0\", \":\": \"=2\" };\n return (\n \"$\" +\n key.replace(/[=:]/g, function (match) {\n return escaperLookup[match];\n })\n );\n}\nvar userProvidedKeyEscapeRegex = /\\/+/g;\nfunction getElementKey(element, index) {\n return \"object\" === typeof element && null !== element && null != element.key\n ? escape(\"\" + element.key)\n : index.toString(36);\n}\nfunction resolveThenable(thenable) {\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n default:\n switch (\n (\"string\" === typeof thenable.status\n ? thenable.then(noop, noop)\n : ((thenable.status = \"pending\"),\n thenable.then(\n function (fulfilledValue) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"fulfilled\"),\n (thenable.value = fulfilledValue));\n },\n function (error) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"rejected\"), (thenable.reason = error));\n }\n )),\n thenable.status)\n ) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n }\n }\n throw thenable;\n}\nfunction mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n var type = typeof children;\n if (\"undefined\" === type || \"boolean\" === type) children = null;\n var invokeCallback = !1;\n if (null === children) invokeCallback = !0;\n else\n switch (type) {\n case \"bigint\":\n case \"string\":\n case \"number\":\n invokeCallback = !0;\n break;\n case \"object\":\n switch (children.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n invokeCallback = !0;\n break;\n case REACT_LAZY_TYPE:\n return (\n (invokeCallback = children._init),\n mapIntoArray(\n invokeCallback(children._payload),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n )\n );\n }\n }\n if (invokeCallback)\n return (\n (callback = callback(children)),\n (invokeCallback =\n \"\" === nameSoFar ? \".\" + getElementKey(children, 0) : nameSoFar),\n isArrayImpl(callback)\n ? ((escapedPrefix = \"\"),\n null != invokeCallback &&\n (escapedPrefix =\n invokeCallback.replace(userProvidedKeyEscapeRegex, \"$&/\") + \"/\"),\n mapIntoArray(callback, array, escapedPrefix, \"\", function (c) {\n return c;\n }))\n : null != callback &&\n (isValidElement(callback) &&\n (callback = cloneAndReplaceKey(\n callback,\n escapedPrefix +\n (null == callback.key ||\n (children && children.key === callback.key)\n ? \"\"\n : (\"\" + callback.key).replace(\n userProvidedKeyEscapeRegex,\n \"$&/\"\n ) + \"/\") +\n invokeCallback\n )),\n array.push(callback)),\n 1\n );\n invokeCallback = 0;\n var nextNamePrefix = \"\" === nameSoFar ? \".\" : nameSoFar + \":\";\n if (isArrayImpl(children))\n for (var i = 0; i < children.length; i++)\n (nameSoFar = children[i]),\n (type = nextNamePrefix + getElementKey(nameSoFar, i)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (((i = getIteratorFn(children)), \"function\" === typeof i))\n for (\n children = i.call(children), i = 0;\n !(nameSoFar = children.next()).done;\n\n )\n (nameSoFar = nameSoFar.value),\n (type = nextNamePrefix + getElementKey(nameSoFar, i++)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (\"object\" === type) {\n if (\"function\" === typeof children.then)\n return mapIntoArray(\n resolveThenable(children),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n );\n array = String(children);\n throw Error(\n \"Objects are not valid as a React child (found: \" +\n (\"[object Object]\" === array\n ? \"object with keys {\" + Object.keys(children).join(\", \") + \"}\"\n : array) +\n \"). If you meant to render a collection of children, use an array instead.\"\n );\n }\n return invokeCallback;\n}\nfunction mapChildren(children, func, context) {\n if (null == children) return children;\n var result = [],\n count = 0;\n mapIntoArray(children, result, \"\", \"\", function (child) {\n return func.call(context, child, count++);\n });\n return result;\n}\nfunction lazyInitializer(payload) {\n if (-1 === payload._status) {\n var ctor = payload._result;\n ctor = ctor();\n ctor.then(\n function (moduleObject) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 1), (payload._result = moduleObject);\n },\n function (error) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 2), (payload._result = error);\n }\n );\n -1 === payload._status && ((payload._status = 0), (payload._result = ctor));\n }\n if (1 === payload._status) return payload._result.default;\n throw payload._result;\n}\nvar reportGlobalError =\n \"function\" === typeof reportError\n ? reportError\n : function (error) {\n if (\n \"object\" === typeof window &&\n \"function\" === typeof window.ErrorEvent\n ) {\n var event = new window.ErrorEvent(\"error\", {\n bubbles: !0,\n cancelable: !0,\n message:\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.message\n ? String(error.message)\n : String(error),\n error: error\n });\n if (!window.dispatchEvent(event)) return;\n } else if (\n \"object\" === typeof process &&\n \"function\" === typeof process.emit\n ) {\n process.emit(\"uncaughtException\", error);\n return;\n }\n console.error(error);\n },\n Children = {\n map: mapChildren,\n forEach: function (children, forEachFunc, forEachContext) {\n mapChildren(\n children,\n function () {\n forEachFunc.apply(this, arguments);\n },\n forEachContext\n );\n },\n count: function (children) {\n var n = 0;\n mapChildren(children, function () {\n n++;\n });\n return n;\n },\n toArray: function (children) {\n return (\n mapChildren(children, function (child) {\n return child;\n }) || []\n );\n },\n only: function (children) {\n if (!isValidElement(children))\n throw Error(\n \"React.Children.only expected to receive a single React element child.\"\n );\n return children;\n }\n };\nexports.Activity = REACT_ACTIVITY_TYPE;\nexports.Children = Children;\nexports.Component = Component;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.PureComponent = PureComponent;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n ReactSharedInternals;\nexports.__COMPILER_RUNTIME = {\n __proto__: null,\n c: function (size) {\n return ReactSharedInternals.H.useMemoCache(size);\n }\n};\nexports.cache = function (fn) {\n return function () {\n return fn.apply(null, arguments);\n };\n};\nexports.cacheSignal = function () {\n return null;\n};\nexports.cloneElement = function (element, config, children) {\n if (null === element || void 0 === element)\n throw Error(\n \"The argument must be a React element, but you passed \" + element + \".\"\n );\n var props = assign({}, element.props),\n key = element.key;\n if (null != config)\n for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n !hasOwnProperty.call(config, propName) ||\n \"key\" === propName ||\n \"__self\" === propName ||\n \"__source\" === propName ||\n (\"ref\" === propName && void 0 === config.ref) ||\n (props[propName] = config[propName]);\n var propName = arguments.length - 2;\n if (1 === propName) props.children = children;\n else if (1 < propName) {\n for (var childArray = Array(propName), i = 0; i < propName; i++)\n childArray[i] = arguments[i + 2];\n props.children = childArray;\n }\n return ReactElement(element.type, key, props);\n};\nexports.createContext = function (defaultValue) {\n defaultValue = {\n $$typeof: REACT_CONTEXT_TYPE,\n _currentValue: defaultValue,\n _currentValue2: defaultValue,\n _threadCount: 0,\n Provider: null,\n Consumer: null\n };\n defaultValue.Provider = defaultValue;\n defaultValue.Consumer = {\n $$typeof: REACT_CONSUMER_TYPE,\n _context: defaultValue\n };\n return defaultValue;\n};\nexports.createElement = function (type, config, children) {\n var propName,\n props = {},\n key = null;\n if (null != config)\n for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n hasOwnProperty.call(config, propName) &&\n \"key\" !== propName &&\n \"__self\" !== propName &&\n \"__source\" !== propName &&\n (props[propName] = config[propName]);\n var childrenLength = arguments.length - 2;\n if (1 === childrenLength) props.children = children;\n else if (1 < childrenLength) {\n for (var childArray = Array(childrenLength), i = 0; i < childrenLength; i++)\n childArray[i] = arguments[i + 2];\n props.children = childArray;\n }\n if (type && type.defaultProps)\n for (propName in ((childrenLength = type.defaultProps), childrenLength))\n void 0 === props[propName] &&\n (props[propName] = childrenLength[propName]);\n return ReactElement(type, key, props);\n};\nexports.createRef = function () {\n return { current: null };\n};\nexports.forwardRef = function (render) {\n return { $$typeof: REACT_FORWARD_REF_TYPE, render: render };\n};\nexports.isValidElement = isValidElement;\nexports.lazy = function (ctor) {\n return {\n $$typeof: REACT_LAZY_TYPE,\n _payload: { _status: -1, _result: ctor },\n _init: lazyInitializer\n };\n};\nexports.memo = function (type, compare) {\n return {\n $$typeof: REACT_MEMO_TYPE,\n type: type,\n compare: void 0 === compare ? null : compare\n };\n};\nexports.startTransition = function (scope) {\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n ReactSharedInternals.T = currentTransition;\n try {\n var returnValue = scope(),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n \"object\" === typeof returnValue &&\n null !== returnValue &&\n \"function\" === typeof returnValue.then &&\n returnValue.then(noop, reportGlobalError);\n } catch (error) {\n reportGlobalError(error);\n } finally {\n null !== prevTransition &&\n null !== currentTransition.types &&\n (prevTransition.types = currentTransition.types),\n (ReactSharedInternals.T = prevTransition);\n }\n};\nexports.unstable_useCacheRefresh = function () {\n return ReactSharedInternals.H.useCacheRefresh();\n};\nexports.use = function (usable) {\n return ReactSharedInternals.H.use(usable);\n};\nexports.useActionState = function (action, initialState, permalink) {\n return ReactSharedInternals.H.useActionState(action, initialState, permalink);\n};\nexports.useCallback = function (callback, deps) {\n return ReactSharedInternals.H.useCallback(callback, deps);\n};\nexports.useContext = function (Context) {\n return ReactSharedInternals.H.useContext(Context);\n};\nexports.useDebugValue = function () {};\nexports.useDeferredValue = function (value, initialValue) {\n return ReactSharedInternals.H.useDeferredValue(value, initialValue);\n};\nexports.useEffect = function (create, deps) {\n return ReactSharedInternals.H.useEffect(create, deps);\n};\nexports.useEffectEvent = function (callback) {\n return ReactSharedInternals.H.useEffectEvent(callback);\n};\nexports.useId = function () {\n return ReactSharedInternals.H.useId();\n};\nexports.useImperativeHandle = function (ref, create, deps) {\n return ReactSharedInternals.H.useImperativeHandle(ref, create, deps);\n};\nexports.useInsertionEffect = function (create, deps) {\n return ReactSharedInternals.H.useInsertionEffect(create, deps);\n};\nexports.useLayoutEffect = function (create, deps) {\n return ReactSharedInternals.H.useLayoutEffect(create, deps);\n};\nexports.useMemo = function (create, deps) {\n return ReactSharedInternals.H.useMemo(create, deps);\n};\nexports.useOptimistic = function (passthrough, reducer) {\n return ReactSharedInternals.H.useOptimistic(passthrough, reducer);\n};\nexports.useReducer = function (reducer, initialArg, init) {\n return ReactSharedInternals.H.useReducer(reducer, initialArg, init);\n};\nexports.useRef = function (initialValue) {\n return ReactSharedInternals.H.useRef(initialValue);\n};\nexports.useState = function (initialState) {\n return ReactSharedInternals.H.useState(initialState);\n};\nexports.useSyncExternalStore = function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n) {\n return ReactSharedInternals.H.useSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n};\nexports.useTransition = function () {\n return ReactSharedInternals.H.useTransition();\n};\nexports.version = \"19.2.3\";\n","/**\n * @license React\n * react.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function defineDeprecationWarning(methodName, info) {\n Object.defineProperty(Component.prototype, methodName, {\n get: function () {\n console.warn(\n \"%s(...) is deprecated in plain JavaScript React classes. %s\",\n info[0],\n info[1]\n );\n }\n });\n }\n function getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable)\n return null;\n maybeIterable =\n (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n }\n function warnNoop(publicInstance, callerName) {\n publicInstance =\n ((publicInstance = publicInstance.constructor) &&\n (publicInstance.displayName || publicInstance.name)) ||\n \"ReactClass\";\n var warningKey = publicInstance + \".\" + callerName;\n didWarnStateUpdateForUnmountedComponent[warningKey] ||\n (console.error(\n \"Can't call %s on a component that is not yet mounted. This is a no-op, but it might indicate a bug in your application. Instead, assign to `this.state` directly or define a `state = {};` class property with the desired state in the %s component.\",\n callerName,\n publicInstance\n ),\n (didWarnStateUpdateForUnmountedComponent[warningKey] = !0));\n }\n function Component(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n }\n function ComponentDummy() {}\n function PureComponent(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n }\n function noop() {}\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return type.displayName || \"Context\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(type, key, props, owner, debugStack, debugTask) {\n var refProp = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== refProp ? refProp : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function cloneAndReplaceKey(oldElement, newKey) {\n newKey = ReactElement(\n oldElement.type,\n newKey,\n oldElement.props,\n oldElement._owner,\n oldElement._debugStack,\n oldElement._debugTask\n );\n oldElement._store &&\n (newKey._store.validated = oldElement._store.validated);\n return newKey;\n }\n function validateChildKeys(node) {\n isValidElement(node)\n ? node._store && (node._store.validated = 1)\n : \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_LAZY_TYPE &&\n (\"fulfilled\" === node._payload.status\n ? isValidElement(node._payload.value) &&\n node._payload.value._store &&\n (node._payload.value._store.validated = 1)\n : node._store && (node._store.validated = 1));\n }\n function isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n }\n function escape(key) {\n var escaperLookup = { \"=\": \"=0\", \":\": \"=2\" };\n return (\n \"$\" +\n key.replace(/[=:]/g, function (match) {\n return escaperLookup[match];\n })\n );\n }\n function getElementKey(element, index) {\n return \"object\" === typeof element &&\n null !== element &&\n null != element.key\n ? (checkKeyStringCoercion(element.key), escape(\"\" + element.key))\n : index.toString(36);\n }\n function resolveThenable(thenable) {\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n default:\n switch (\n (\"string\" === typeof thenable.status\n ? thenable.then(noop, noop)\n : ((thenable.status = \"pending\"),\n thenable.then(\n function (fulfilledValue) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"fulfilled\"),\n (thenable.value = fulfilledValue));\n },\n function (error) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"rejected\"),\n (thenable.reason = error));\n }\n )),\n thenable.status)\n ) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n }\n }\n throw thenable;\n }\n function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n var type = typeof children;\n if (\"undefined\" === type || \"boolean\" === type) children = null;\n var invokeCallback = !1;\n if (null === children) invokeCallback = !0;\n else\n switch (type) {\n case \"bigint\":\n case \"string\":\n case \"number\":\n invokeCallback = !0;\n break;\n case \"object\":\n switch (children.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n invokeCallback = !0;\n break;\n case REACT_LAZY_TYPE:\n return (\n (invokeCallback = children._init),\n mapIntoArray(\n invokeCallback(children._payload),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n )\n );\n }\n }\n if (invokeCallback) {\n invokeCallback = children;\n callback = callback(invokeCallback);\n var childKey =\n \"\" === nameSoFar ? \".\" + getElementKey(invokeCallback, 0) : nameSoFar;\n isArrayImpl(callback)\n ? ((escapedPrefix = \"\"),\n null != childKey &&\n (escapedPrefix =\n childKey.replace(userProvidedKeyEscapeRegex, \"$&/\") + \"/\"),\n mapIntoArray(callback, array, escapedPrefix, \"\", function (c) {\n return c;\n }))\n : null != callback &&\n (isValidElement(callback) &&\n (null != callback.key &&\n ((invokeCallback && invokeCallback.key === callback.key) ||\n checkKeyStringCoercion(callback.key)),\n (escapedPrefix = cloneAndReplaceKey(\n callback,\n escapedPrefix +\n (null == callback.key ||\n (invokeCallback && invokeCallback.key === callback.key)\n ? \"\"\n : (\"\" + callback.key).replace(\n userProvidedKeyEscapeRegex,\n \"$&/\"\n ) + \"/\") +\n childKey\n )),\n \"\" !== nameSoFar &&\n null != invokeCallback &&\n isValidElement(invokeCallback) &&\n null == invokeCallback.key &&\n invokeCallback._store &&\n !invokeCallback._store.validated &&\n (escapedPrefix._store.validated = 2),\n (callback = escapedPrefix)),\n array.push(callback));\n return 1;\n }\n invokeCallback = 0;\n childKey = \"\" === nameSoFar ? \".\" : nameSoFar + \":\";\n if (isArrayImpl(children))\n for (var i = 0; i < children.length; i++)\n (nameSoFar = children[i]),\n (type = childKey + getElementKey(nameSoFar, i)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (((i = getIteratorFn(children)), \"function\" === typeof i))\n for (\n i === children.entries &&\n (didWarnAboutMaps ||\n console.warn(\n \"Using Maps as children is not supported. Use an array of keyed ReactElements instead.\"\n ),\n (didWarnAboutMaps = !0)),\n children = i.call(children),\n i = 0;\n !(nameSoFar = children.next()).done;\n\n )\n (nameSoFar = nameSoFar.value),\n (type = childKey + getElementKey(nameSoFar, i++)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (\"object\" === type) {\n if (\"function\" === typeof children.then)\n return mapIntoArray(\n resolveThenable(children),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n );\n array = String(children);\n throw Error(\n \"Objects are not valid as a React child (found: \" +\n (\"[object Object]\" === array\n ? \"object with keys {\" + Object.keys(children).join(\", \") + \"}\"\n : array) +\n \"). If you meant to render a collection of children, use an array instead.\"\n );\n }\n return invokeCallback;\n }\n function mapChildren(children, func, context) {\n if (null == children) return children;\n var result = [],\n count = 0;\n mapIntoArray(children, result, \"\", \"\", function (child) {\n return func.call(context, child, count++);\n });\n return result;\n }\n function lazyInitializer(payload) {\n if (-1 === payload._status) {\n var ioInfo = payload._ioInfo;\n null != ioInfo && (ioInfo.start = ioInfo.end = performance.now());\n ioInfo = payload._result;\n var thenable = ioInfo();\n thenable.then(\n function (moduleObject) {\n if (0 === payload._status || -1 === payload._status) {\n payload._status = 1;\n payload._result = moduleObject;\n var _ioInfo = payload._ioInfo;\n null != _ioInfo && (_ioInfo.end = performance.now());\n void 0 === thenable.status &&\n ((thenable.status = \"fulfilled\"),\n (thenable.value = moduleObject));\n }\n },\n function (error) {\n if (0 === payload._status || -1 === payload._status) {\n payload._status = 2;\n payload._result = error;\n var _ioInfo2 = payload._ioInfo;\n null != _ioInfo2 && (_ioInfo2.end = performance.now());\n void 0 === thenable.status &&\n ((thenable.status = \"rejected\"), (thenable.reason = error));\n }\n }\n );\n ioInfo = payload._ioInfo;\n if (null != ioInfo) {\n ioInfo.value = thenable;\n var displayName = thenable.displayName;\n \"string\" === typeof displayName && (ioInfo.name = displayName);\n }\n -1 === payload._status &&\n ((payload._status = 0), (payload._result = thenable));\n }\n if (1 === payload._status)\n return (\n (ioInfo = payload._result),\n void 0 === ioInfo &&\n console.error(\n \"lazy: Expected the result of a dynamic import() call. Instead received: %s\\n\\nYour code should look like: \\n const MyComponent = lazy(() => import('./MyComponent'))\\n\\nDid you accidentally put curly braces around the import?\",\n ioInfo\n ),\n \"default\" in ioInfo ||\n console.error(\n \"lazy: Expected the result of a dynamic import() call. Instead received: %s\\n\\nYour code should look like: \\n const MyComponent = lazy(() => import('./MyComponent'))\",\n ioInfo\n ),\n ioInfo.default\n );\n throw payload._result;\n }\n function resolveDispatcher() {\n var dispatcher = ReactSharedInternals.H;\n null === dispatcher &&\n console.error(\n \"Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\\n1. You might have mismatching versions of React and the renderer (such as React DOM)\\n2. You might be breaking the Rules of Hooks\\n3. You might have more than one copy of React in the same app\\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.\"\n );\n return dispatcher;\n }\n function releaseAsyncTransition() {\n ReactSharedInternals.asyncTransitions--;\n }\n function enqueueTask(task) {\n if (null === enqueueTaskImpl)\n try {\n var requireString = (\"require\" + Math.random()).slice(0, 7);\n enqueueTaskImpl = (module && module[requireString]).call(\n module,\n \"timers\"\n ).setImmediate;\n } catch (_err) {\n enqueueTaskImpl = function (callback) {\n !1 === didWarnAboutMessageChannel &&\n ((didWarnAboutMessageChannel = !0),\n \"undefined\" === typeof MessageChannel &&\n console.error(\n \"This browser does not have a MessageChannel implementation, so enqueuing tasks via await act(async () => ...) will fail. Please file an issue at https://github.com/facebook/react/issues if you encounter this warning.\"\n ));\n var channel = new MessageChannel();\n channel.port1.onmessage = callback;\n channel.port2.postMessage(void 0);\n };\n }\n return enqueueTaskImpl(task);\n }\n function aggregateErrors(errors) {\n return 1 < errors.length && \"function\" === typeof AggregateError\n ? new AggregateError(errors)\n : errors[0];\n }\n function popActScope(prevActQueue, prevActScopeDepth) {\n prevActScopeDepth !== actScopeDepth - 1 &&\n console.error(\n \"You seem to have overlapping act() calls, this is not supported. Be sure to await previous act() calls before making a new one. \"\n );\n actScopeDepth = prevActScopeDepth;\n }\n function recursivelyFlushAsyncActWork(returnValue, resolve, reject) {\n var queue = ReactSharedInternals.actQueue;\n if (null !== queue)\n if (0 !== queue.length)\n try {\n flushActQueue(queue);\n enqueueTask(function () {\n return recursivelyFlushAsyncActWork(returnValue, resolve, reject);\n });\n return;\n } catch (error) {\n ReactSharedInternals.thrownErrors.push(error);\n }\n else ReactSharedInternals.actQueue = null;\n 0 < ReactSharedInternals.thrownErrors.length\n ? ((queue = aggregateErrors(ReactSharedInternals.thrownErrors)),\n (ReactSharedInternals.thrownErrors.length = 0),\n reject(queue))\n : resolve(returnValue);\n }\n function flushActQueue(queue) {\n if (!isFlushing) {\n isFlushing = !0;\n var i = 0;\n try {\n for (; i < queue.length; i++) {\n var callback = queue[i];\n do {\n ReactSharedInternals.didUsePromise = !1;\n var continuation = callback(!1);\n if (null !== continuation) {\n if (ReactSharedInternals.didUsePromise) {\n queue[i] = callback;\n queue.splice(0, i);\n return;\n }\n callback = continuation;\n } else break;\n } while (1);\n }\n queue.length = 0;\n } catch (error) {\n queue.splice(0, i + 1), ReactSharedInternals.thrownErrors.push(error);\n } finally {\n isFlushing = !1;\n }\n }\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n MAYBE_ITERATOR_SYMBOL = Symbol.iterator,\n didWarnStateUpdateForUnmountedComponent = {},\n ReactNoopUpdateQueue = {\n isMounted: function () {\n return !1;\n },\n enqueueForceUpdate: function (publicInstance) {\n warnNoop(publicInstance, \"forceUpdate\");\n },\n enqueueReplaceState: function (publicInstance) {\n warnNoop(publicInstance, \"replaceState\");\n },\n enqueueSetState: function (publicInstance) {\n warnNoop(publicInstance, \"setState\");\n }\n },\n assign = Object.assign,\n emptyObject = {};\n Object.freeze(emptyObject);\n Component.prototype.isReactComponent = {};\n Component.prototype.setState = function (partialState, callback) {\n if (\n \"object\" !== typeof partialState &&\n \"function\" !== typeof partialState &&\n null != partialState\n )\n throw Error(\n \"takes an object of state variables to update or a function which returns an object of state variables.\"\n );\n this.updater.enqueueSetState(this, partialState, callback, \"setState\");\n };\n Component.prototype.forceUpdate = function (callback) {\n this.updater.enqueueForceUpdate(this, callback, \"forceUpdate\");\n };\n var deprecatedAPIs = {\n isMounted: [\n \"isMounted\",\n \"Instead, make sure to clean up subscriptions and pending requests in componentWillUnmount to prevent memory leaks.\"\n ],\n replaceState: [\n \"replaceState\",\n \"Refactor your code to use setState instead (see https://github.com/facebook/react/issues/3236).\"\n ]\n };\n for (fnName in deprecatedAPIs)\n deprecatedAPIs.hasOwnProperty(fnName) &&\n defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);\n ComponentDummy.prototype = Component.prototype;\n deprecatedAPIs = PureComponent.prototype = new ComponentDummy();\n deprecatedAPIs.constructor = PureComponent;\n assign(deprecatedAPIs, Component.prototype);\n deprecatedAPIs.isPureReactComponent = !0;\n var isArrayImpl = Array.isArray,\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals = {\n H: null,\n A: null,\n T: null,\n S: null,\n actQueue: null,\n asyncTransitions: 0,\n isBatchingLegacy: !1,\n didScheduleLegacyUpdate: !1,\n didUsePromise: !1,\n thrownErrors: [],\n getCurrentStack: null,\n recentlyCreatedOwnerStacks: 0\n },\n hasOwnProperty = Object.prototype.hasOwnProperty,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n deprecatedAPIs = {\n react_stack_bottom_frame: function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown, didWarnAboutOldJSXRuntime;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = deprecatedAPIs.react_stack_bottom_frame.bind(\n deprecatedAPIs,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutMaps = !1,\n userProvidedKeyEscapeRegex = /\\/+/g,\n reportGlobalError =\n \"function\" === typeof reportError\n ? reportError\n : function (error) {\n if (\n \"object\" === typeof window &&\n \"function\" === typeof window.ErrorEvent\n ) {\n var event = new window.ErrorEvent(\"error\", {\n bubbles: !0,\n cancelable: !0,\n message:\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.message\n ? String(error.message)\n : String(error),\n error: error\n });\n if (!window.dispatchEvent(event)) return;\n } else if (\n \"object\" === typeof process &&\n \"function\" === typeof process.emit\n ) {\n process.emit(\"uncaughtException\", error);\n return;\n }\n console.error(error);\n },\n didWarnAboutMessageChannel = !1,\n enqueueTaskImpl = null,\n actScopeDepth = 0,\n didWarnNoAwaitAct = !1,\n isFlushing = !1,\n queueSeveralMicrotasks =\n \"function\" === typeof queueMicrotask\n ? function (callback) {\n queueMicrotask(function () {\n return queueMicrotask(callback);\n });\n }\n : enqueueTask;\n deprecatedAPIs = Object.freeze({\n __proto__: null,\n c: function (size) {\n return resolveDispatcher().useMemoCache(size);\n }\n });\n var fnName = {\n map: mapChildren,\n forEach: function (children, forEachFunc, forEachContext) {\n mapChildren(\n children,\n function () {\n forEachFunc.apply(this, arguments);\n },\n forEachContext\n );\n },\n count: function (children) {\n var n = 0;\n mapChildren(children, function () {\n n++;\n });\n return n;\n },\n toArray: function (children) {\n return (\n mapChildren(children, function (child) {\n return child;\n }) || []\n );\n },\n only: function (children) {\n if (!isValidElement(children))\n throw Error(\n \"React.Children.only expected to receive a single React element child.\"\n );\n return children;\n }\n };\n exports.Activity = REACT_ACTIVITY_TYPE;\n exports.Children = fnName;\n exports.Component = Component;\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.Profiler = REACT_PROFILER_TYPE;\n exports.PureComponent = PureComponent;\n exports.StrictMode = REACT_STRICT_MODE_TYPE;\n exports.Suspense = REACT_SUSPENSE_TYPE;\n exports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n ReactSharedInternals;\n exports.__COMPILER_RUNTIME = deprecatedAPIs;\n exports.act = function (callback) {\n var prevActQueue = ReactSharedInternals.actQueue,\n prevActScopeDepth = actScopeDepth;\n actScopeDepth++;\n var queue = (ReactSharedInternals.actQueue =\n null !== prevActQueue ? prevActQueue : []),\n didAwaitActCall = !1;\n try {\n var result = callback();\n } catch (error) {\n ReactSharedInternals.thrownErrors.push(error);\n }\n if (0 < ReactSharedInternals.thrownErrors.length)\n throw (\n (popActScope(prevActQueue, prevActScopeDepth),\n (callback = aggregateErrors(ReactSharedInternals.thrownErrors)),\n (ReactSharedInternals.thrownErrors.length = 0),\n callback)\n );\n if (\n null !== result &&\n \"object\" === typeof result &&\n \"function\" === typeof result.then\n ) {\n var thenable = result;\n queueSeveralMicrotasks(function () {\n didAwaitActCall ||\n didWarnNoAwaitAct ||\n ((didWarnNoAwaitAct = !0),\n console.error(\n \"You called act(async () => ...) without await. This could lead to unexpected testing behaviour, interleaving multiple act calls and mixing their scopes. You should - await act(async () => ...);\"\n ));\n });\n return {\n then: function (resolve, reject) {\n didAwaitActCall = !0;\n thenable.then(\n function (returnValue) {\n popActScope(prevActQueue, prevActScopeDepth);\n if (0 === prevActScopeDepth) {\n try {\n flushActQueue(queue),\n enqueueTask(function () {\n return recursivelyFlushAsyncActWork(\n returnValue,\n resolve,\n reject\n );\n });\n } catch (error$0) {\n ReactSharedInternals.thrownErrors.push(error$0);\n }\n if (0 < ReactSharedInternals.thrownErrors.length) {\n var _thrownError = aggregateErrors(\n ReactSharedInternals.thrownErrors\n );\n ReactSharedInternals.thrownErrors.length = 0;\n reject(_thrownError);\n }\n } else resolve(returnValue);\n },\n function (error) {\n popActScope(prevActQueue, prevActScopeDepth);\n 0 < ReactSharedInternals.thrownErrors.length\n ? ((error = aggregateErrors(\n ReactSharedInternals.thrownErrors\n )),\n (ReactSharedInternals.thrownErrors.length = 0),\n reject(error))\n : reject(error);\n }\n );\n }\n };\n }\n var returnValue$jscomp$0 = result;\n popActScope(prevActQueue, prevActScopeDepth);\n 0 === prevActScopeDepth &&\n (flushActQueue(queue),\n 0 !== queue.length &&\n queueSeveralMicrotasks(function () {\n didAwaitActCall ||\n didWarnNoAwaitAct ||\n ((didWarnNoAwaitAct = !0),\n console.error(\n \"A component suspended inside an `act` scope, but the `act` call was not awaited. When testing React components that depend on asynchronous data, you must await the result:\\n\\nawait act(() => ...)\"\n ));\n }),\n (ReactSharedInternals.actQueue = null));\n if (0 < ReactSharedInternals.thrownErrors.length)\n throw (\n ((callback = aggregateErrors(ReactSharedInternals.thrownErrors)),\n (ReactSharedInternals.thrownErrors.length = 0),\n callback)\n );\n return {\n then: function (resolve, reject) {\n didAwaitActCall = !0;\n 0 === prevActScopeDepth\n ? ((ReactSharedInternals.actQueue = queue),\n enqueueTask(function () {\n return recursivelyFlushAsyncActWork(\n returnValue$jscomp$0,\n resolve,\n reject\n );\n }))\n : resolve(returnValue$jscomp$0);\n }\n };\n };\n exports.cache = function (fn) {\n return function () {\n return fn.apply(null, arguments);\n };\n };\n exports.cacheSignal = function () {\n return null;\n };\n exports.captureOwnerStack = function () {\n var getCurrentStack = ReactSharedInternals.getCurrentStack;\n return null === getCurrentStack ? null : getCurrentStack();\n };\n exports.cloneElement = function (element, config, children) {\n if (null === element || void 0 === element)\n throw Error(\n \"The argument must be a React element, but you passed \" +\n element +\n \".\"\n );\n var props = assign({}, element.props),\n key = element.key,\n owner = element._owner;\n if (null != config) {\n var JSCompiler_inline_result;\n a: {\n if (\n hasOwnProperty.call(config, \"ref\") &&\n (JSCompiler_inline_result = Object.getOwnPropertyDescriptor(\n config,\n \"ref\"\n ).get) &&\n JSCompiler_inline_result.isReactWarning\n ) {\n JSCompiler_inline_result = !1;\n break a;\n }\n JSCompiler_inline_result = void 0 !== config.ref;\n }\n JSCompiler_inline_result && (owner = getOwner());\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (key = \"\" + config.key));\n for (propName in config)\n !hasOwnProperty.call(config, propName) ||\n \"key\" === propName ||\n \"__self\" === propName ||\n \"__source\" === propName ||\n (\"ref\" === propName && void 0 === config.ref) ||\n (props[propName] = config[propName]);\n }\n var propName = arguments.length - 2;\n if (1 === propName) props.children = children;\n else if (1 < propName) {\n JSCompiler_inline_result = Array(propName);\n for (var i = 0; i < propName; i++)\n JSCompiler_inline_result[i] = arguments[i + 2];\n props.children = JSCompiler_inline_result;\n }\n props = ReactElement(\n element.type,\n key,\n props,\n owner,\n element._debugStack,\n element._debugTask\n );\n for (key = 2; key < arguments.length; key++)\n validateChildKeys(arguments[key]);\n return props;\n };\n exports.createContext = function (defaultValue) {\n defaultValue = {\n $$typeof: REACT_CONTEXT_TYPE,\n _currentValue: defaultValue,\n _currentValue2: defaultValue,\n _threadCount: 0,\n Provider: null,\n Consumer: null\n };\n defaultValue.Provider = defaultValue;\n defaultValue.Consumer = {\n $$typeof: REACT_CONSUMER_TYPE,\n _context: defaultValue\n };\n defaultValue._currentRenderer = null;\n defaultValue._currentRenderer2 = null;\n return defaultValue;\n };\n exports.createElement = function (type, config, children) {\n for (var i = 2; i < arguments.length; i++)\n validateChildKeys(arguments[i]);\n i = {};\n var key = null;\n if (null != config)\n for (propName in (didWarnAboutOldJSXRuntime ||\n !(\"__self\" in config) ||\n \"key\" in config ||\n ((didWarnAboutOldJSXRuntime = !0),\n console.warn(\n \"Your app (or one of its dependencies) is using an outdated JSX transform. Update to the modern JSX transform for faster performance: https://react.dev/link/new-jsx-transform\"\n )),\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (key = \"\" + config.key)),\n config))\n hasOwnProperty.call(config, propName) &&\n \"key\" !== propName &&\n \"__self\" !== propName &&\n \"__source\" !== propName &&\n (i[propName] = config[propName]);\n var childrenLength = arguments.length - 2;\n if (1 === childrenLength) i.children = children;\n else if (1 < childrenLength) {\n for (\n var childArray = Array(childrenLength), _i = 0;\n _i < childrenLength;\n _i++\n )\n childArray[_i] = arguments[_i + 2];\n Object.freeze && Object.freeze(childArray);\n i.children = childArray;\n }\n if (type && type.defaultProps)\n for (propName in ((childrenLength = type.defaultProps), childrenLength))\n void 0 === i[propName] && (i[propName] = childrenLength[propName]);\n key &&\n defineKeyPropWarningGetter(\n i,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n var propName = 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return ReactElement(\n type,\n key,\n i,\n getOwner(),\n propName ? Error(\"react-stack-top-frame\") : unknownOwnerDebugStack,\n propName ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.createRef = function () {\n var refObject = { current: null };\n Object.seal(refObject);\n return refObject;\n };\n exports.forwardRef = function (render) {\n null != render && render.$$typeof === REACT_MEMO_TYPE\n ? console.error(\n \"forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...)).\"\n )\n : \"function\" !== typeof render\n ? console.error(\n \"forwardRef requires a render function but was given %s.\",\n null === render ? \"null\" : typeof render\n )\n : 0 !== render.length &&\n 2 !== render.length &&\n console.error(\n \"forwardRef render functions accept exactly two parameters: props and ref. %s\",\n 1 === render.length\n ? \"Did you forget to use the ref parameter?\"\n : \"Any additional parameter will be undefined.\"\n );\n null != render &&\n null != render.defaultProps &&\n console.error(\n \"forwardRef render functions do not support defaultProps. Did you accidentally pass a React component?\"\n );\n var elementType = { $$typeof: REACT_FORWARD_REF_TYPE, render: render },\n ownName;\n Object.defineProperty(elementType, \"displayName\", {\n enumerable: !1,\n configurable: !0,\n get: function () {\n return ownName;\n },\n set: function (name) {\n ownName = name;\n render.name ||\n render.displayName ||\n (Object.defineProperty(render, \"name\", { value: name }),\n (render.displayName = name));\n }\n });\n return elementType;\n };\n exports.isValidElement = isValidElement;\n exports.lazy = function (ctor) {\n ctor = { _status: -1, _result: ctor };\n var lazyType = {\n $$typeof: REACT_LAZY_TYPE,\n _payload: ctor,\n _init: lazyInitializer\n },\n ioInfo = {\n name: \"lazy\",\n start: -1,\n end: -1,\n value: null,\n owner: null,\n debugStack: Error(\"react-stack-top-frame\"),\n debugTask: console.createTask ? console.createTask(\"lazy()\") : null\n };\n ctor._ioInfo = ioInfo;\n lazyType._debugInfo = [{ awaited: ioInfo }];\n return lazyType;\n };\n exports.memo = function (type, compare) {\n null == type &&\n console.error(\n \"memo: The first argument must be a component. Instead received: %s\",\n null === type ? \"null\" : typeof type\n );\n compare = {\n $$typeof: REACT_MEMO_TYPE,\n type: type,\n compare: void 0 === compare ? null : compare\n };\n var ownName;\n Object.defineProperty(compare, \"displayName\", {\n enumerable: !1,\n configurable: !0,\n get: function () {\n return ownName;\n },\n set: function (name) {\n ownName = name;\n type.name ||\n type.displayName ||\n (Object.defineProperty(type, \"name\", { value: name }),\n (type.displayName = name));\n }\n });\n return compare;\n };\n exports.startTransition = function (scope) {\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n currentTransition._updatedFibers = new Set();\n ReactSharedInternals.T = currentTransition;\n try {\n var returnValue = scope(),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n \"object\" === typeof returnValue &&\n null !== returnValue &&\n \"function\" === typeof returnValue.then &&\n (ReactSharedInternals.asyncTransitions++,\n returnValue.then(releaseAsyncTransition, releaseAsyncTransition),\n returnValue.then(noop, reportGlobalError));\n } catch (error) {\n reportGlobalError(error);\n } finally {\n null === prevTransition &&\n currentTransition._updatedFibers &&\n ((scope = currentTransition._updatedFibers.size),\n currentTransition._updatedFibers.clear(),\n 10 < scope &&\n console.warn(\n \"Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table.\"\n )),\n null !== prevTransition &&\n null !== currentTransition.types &&\n (null !== prevTransition.types &&\n prevTransition.types !== currentTransition.types &&\n console.error(\n \"We expected inner Transitions to have transferred the outer types set and that you cannot add to the outer Transition while inside the inner.This is a bug in React.\"\n ),\n (prevTransition.types = currentTransition.types)),\n (ReactSharedInternals.T = prevTransition);\n }\n };\n exports.unstable_useCacheRefresh = function () {\n return resolveDispatcher().useCacheRefresh();\n };\n exports.use = function (usable) {\n return resolveDispatcher().use(usable);\n };\n exports.useActionState = function (action, initialState, permalink) {\n return resolveDispatcher().useActionState(\n action,\n initialState,\n permalink\n );\n };\n exports.useCallback = function (callback, deps) {\n return resolveDispatcher().useCallback(callback, deps);\n };\n exports.useContext = function (Context) {\n var dispatcher = resolveDispatcher();\n Context.$$typeof === REACT_CONSUMER_TYPE &&\n console.error(\n \"Calling useContext(Context.Consumer) is not supported and will cause bugs. Did you mean to call useContext(Context) instead?\"\n );\n return dispatcher.useContext(Context);\n };\n exports.useDebugValue = function (value, formatterFn) {\n return resolveDispatcher().useDebugValue(value, formatterFn);\n };\n exports.useDeferredValue = function (value, initialValue) {\n return resolveDispatcher().useDeferredValue(value, initialValue);\n };\n exports.useEffect = function (create, deps) {\n null == create &&\n console.warn(\n \"React Hook useEffect requires an effect callback. Did you forget to pass a callback to the hook?\"\n );\n return resolveDispatcher().useEffect(create, deps);\n };\n exports.useEffectEvent = function (callback) {\n return resolveDispatcher().useEffectEvent(callback);\n };\n exports.useId = function () {\n return resolveDispatcher().useId();\n };\n exports.useImperativeHandle = function (ref, create, deps) {\n return resolveDispatcher().useImperativeHandle(ref, create, deps);\n };\n exports.useInsertionEffect = function (create, deps) {\n null == create &&\n console.warn(\n \"React Hook useInsertionEffect requires an effect callback. Did you forget to pass a callback to the hook?\"\n );\n return resolveDispatcher().useInsertionEffect(create, deps);\n };\n exports.useLayoutEffect = function (create, deps) {\n null == create &&\n console.warn(\n \"React Hook useLayoutEffect requires an effect callback. Did you forget to pass a callback to the hook?\"\n );\n return resolveDispatcher().useLayoutEffect(create, deps);\n };\n exports.useMemo = function (create, deps) {\n return resolveDispatcher().useMemo(create, deps);\n };\n exports.useOptimistic = function (passthrough, reducer) {\n return resolveDispatcher().useOptimistic(passthrough, reducer);\n };\n exports.useReducer = function (reducer, initialArg, init) {\n return resolveDispatcher().useReducer(reducer, initialArg, init);\n };\n exports.useRef = function (initialValue) {\n return resolveDispatcher().useRef(initialValue);\n };\n exports.useState = function (initialState) {\n return resolveDispatcher().useState(initialState);\n };\n exports.useSyncExternalStore = function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n return resolveDispatcher().useSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n };\n exports.useTransition = function () {\n return resolveDispatcher().useTransition();\n };\n exports.version = \"19.2.3\";\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n","import { Command } from \"commander\";\nimport { devCommand } from \"./commands/dev.js\";\nimport { addCommand } from \"./commands/add.js\";\n\nconst program = new Command()\n .name(\"pdfn\")\n .description(\"PDFN CLI - PDF generation from React components\")\n .version(\"0.0.1-alpha.1\");\n\nprogram.addCommand(devCommand);\nprogram.addCommand(addCommand);\n\nprogram.parse();\n","import { Command } from \"commander\";\nimport { existsSync, readdirSync, readFileSync } from \"fs\";\nimport { join, resolve } from \"path\";\nimport type { Request, Response } from \"express\";\nimport { createServer as createViteServer } from \"vite\";\nimport { WebSocketServer, WebSocket } from \"ws\";\nimport chokidar from \"chokidar\";\nimport { createServer as createHttpServer } from \"http\";\nimport { spawn } from \"child_process\";\nimport puppeteer from \"puppeteer\";\nimport multer from \"multer\";\nimport { createBaseServer } from \"../server/base\";\nimport { generatePdf } from \"../server/pdf\";\nimport type { DebugOptions } from \"@pdfn/react\";\nimport { pdfn } from \"@pdfn/vite\";\nimport chalk from \"chalk\";\nimport { loadEnv } from \"../utils/env\";\nimport React from \"react\";\n\ninterface TemplateInfo {\n id: string;\n name: string;\n file: string;\n path: string;\n sampleData?: Record<string, unknown>;\n}\n\n/**\n * Standardized templates directory (convention over configuration)\n */\nconst TEMPLATES_DIR = \"./pdfn-templates\";\n\ninterface DevServerOptions {\n port: number;\n open: boolean;\n mode: string;\n}\n\nasync function scanTemplates(templatesDir: string): Promise<TemplateInfo[]> {\n if (!existsSync(templatesDir)) {\n return [];\n }\n\n // Try to load config file with sample data\n let configData: Record<string, Record<string, unknown>> = {};\n const configPaths = [\n join(process.cwd(), \"src\", \"config\", \"templates.json\"),\n join(process.cwd(), \"templates.json\"),\n join(templatesDir, \"templates.json\"),\n ];\n\n for (const configPath of configPaths) {\n if (existsSync(configPath)) {\n try {\n const config = JSON.parse(readFileSync(configPath, \"utf-8\"));\n if (config.templates && Array.isArray(config.templates)) {\n for (const t of config.templates) {\n if (t.id && t.sampleData) {\n configData[t.id] = t.sampleData;\n }\n }\n }\n break;\n } catch {\n // Ignore config parse errors\n }\n }\n }\n\n const files = readdirSync(templatesDir).filter((f) => f.endsWith(\".tsx\"));\n\n // Filter to only include files that look like templates\n // (have \"export default function\" or similar patterns)\n const templates: TemplateInfo[] = [];\n\n for (const file of files) {\n const id = file.replace(\".tsx\", \"\");\n const filePath = join(templatesDir, file);\n\n // Quick check: read file and look for default export pattern\n try {\n const content = readFileSync(filePath, \"utf-8\");\n // Must have a default export that looks like a component\n if (!content.includes(\"export default\") || !content.includes(\"function\")) {\n continue;\n }\n // Skip files that are clearly not templates (no Document/Page imports)\n if (!content.includes(\"Document\") && !content.includes(\"Page\")) {\n continue;\n }\n } catch {\n continue;\n }\n\n // Convert kebab/snake case to Title Case\n const name = id\n .split(/[-_]/)\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n .join(\" \");\n\n templates.push({\n id,\n name,\n file,\n path: filePath,\n sampleData: configData[id],\n });\n }\n\n return templates;\n}\n\nfunction createPreviewHTML(templates: TemplateInfo[], activeTemplate: string | null): string {\n const templateList = templates\n .map(\n (t) => `\n <button\n class=\"template-btn ${t.id === activeTemplate ? \"active\" : \"\"}\"\n data-template=\"${t.id}\"\n data-file=\"${t.file}\"\n >\n <span class=\"template-name\">${t.name}</span>\n </button>\n `\n )\n .join(\"\");\n\n return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>PDFN Dev Server</title>\n <style>\n * { box-sizing: border-box; margin: 0; padding: 0; }\n\n :root {\n --primary: #22d3ee;\n --primary-hover: #06b6d4;\n --bg: #0a0a0a;\n --surface-1: #111;\n --surface-2: #1a1a1a;\n --border: #222;\n --text: #fafafa;\n --text-muted: #666;\n --text-secondary: #888;\n }\n\n body {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n background: var(--bg);\n color: var(--text);\n min-height: 100vh;\n }\n\n .header {\n background: var(--surface-1);\n border-bottom: 1px solid var(--border);\n padding: 12px 24px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n .logo {\n font-size: 20px;\n font-weight: 800;\n letter-spacing: -0.5px;\n }\n\n .logo span { color: var(--primary); }\n\n .status {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n color: var(--text-secondary);\n }\n\n .status-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: #22c55e;\n }\n\n .status-dot.disconnected { background: #ef4444; }\n\n .container {\n display: flex;\n height: calc(100vh - 57px);\n }\n\n .main-wrapper {\n flex: 1;\n display: flex;\n overflow: hidden;\n }\n\n .sidebar {\n width: 200px;\n background: var(--surface-1);\n border-right: 1px solid var(--border);\n padding: 16px;\n overflow-y: auto;\n }\n\n .sidebar-title {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin-bottom: 12px;\n }\n\n .template-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 10px 12px;\n background: transparent;\n border: 1px solid #333;\n border-radius: 6px;\n color: #ccc;\n font-size: 13px;\n text-align: left;\n cursor: pointer;\n margin-bottom: 8px;\n transition: all 0.15s;\n }\n\n .template-btn:hover {\n background: var(--surface-2);\n border-color: #444;\n }\n\n .template-btn.active {\n background: rgba(34, 211, 238, 0.1);\n border-color: var(--primary);\n color: var(--primary);\n }\n\n .template-name { font-weight: 500; }\n\n .main {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n /* Context bar - top */\n .context-bar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 16px;\n background: var(--surface-1);\n border-bottom: 1px solid var(--border);\n }\n\n .context-left {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .file-name {\n font-family: ui-monospace, SFMono-Regular, monospace;\n font-size: 13px;\n color: var(--text);\n font-weight: 500;\n }\n\n .file-name:empty::after {\n content: \"Select a template\";\n color: var(--text-muted);\n font-style: italic;\n font-family: inherit;\n }\n\n .page-info {\n font-size: 12px;\n color: var(--text-muted);\n }\n\n .context-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n /* Preview area */\n .preview-area {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #27272a;\n overflow: hidden;\n padding: 24px;\n }\n\n .preview-frame {\n background: #fff;\n border-radius: 4px;\n box-shadow: 0 8px 32px rgba(0,0,0,0.4);\n overflow: hidden;\n transition: opacity 0.2s;\n }\n\n .preview-frame.loading { opacity: 0.4; }\n\n .preview-frame iframe {\n display: block;\n border: none;\n }\n\n .empty-state {\n text-align: center;\n color: var(--text-muted);\n }\n\n .empty-state h2 {\n font-size: 18px;\n margin-bottom: 8px;\n color: var(--text-secondary);\n }\n\n .empty-state p {\n font-size: 14px;\n margin-bottom: 16px;\n }\n\n .empty-state code {\n background: var(--surface-2);\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 13px;\n }\n\n .loading-spinner {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n color: var(--text-muted);\n }\n\n .spinner {\n width: 32px;\n height: 32px;\n border: 2px solid #333;\n border-top-color: var(--primary);\n border-radius: 50%;\n animation: spin 0.8s linear infinite;\n }\n\n @keyframes spin {\n to { transform: rotate(360deg); }\n }\n\n /* Inspector panel - right side */\n .inspector-panel {\n width: 200px;\n background: var(--surface-1);\n border-left: 1px solid var(--border);\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n }\n\n .inspector-title {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text);\n padding: 12px 16px;\n border-bottom: 1px solid var(--border);\n }\n\n .inspector-content {\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 24px;\n }\n\n .inspector-section {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n\n .inspector-section-title {\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n display: flex;\n align-items: center;\n gap: 6px;\n }\n\n .metrics-note {\n font-size: 10px;\n color: var(--text-muted);\n margin-top: 8px;\n font-style: italic;\n }\n\n /* Metrics display */\n .metrics-grid {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n\n .metric-item {\n display: flex;\n justify-content: space-between;\n align-items: baseline;\n }\n\n .metric-label {\n font-size: 12px;\n color: var(--text-muted);\n }\n\n .metric-value {\n font-size: 14px;\n font-weight: 600;\n color: var(--primary);\n font-variant-numeric: tabular-nums;\n }\n\n /* Overlay checkboxes */\n .overlay-list {\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n\n .overlay-checkbox {\n display: flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n font-size: 13px;\n color: var(--text-secondary);\n }\n\n .overlay-checkbox:hover {\n color: var(--text);\n }\n\n .overlay-checkbox input {\n appearance: none;\n width: 16px;\n height: 16px;\n border: 1px solid #444;\n border-radius: 3px;\n background: var(--surface-2);\n cursor: pointer;\n position: relative;\n flex-shrink: 0;\n }\n\n .overlay-checkbox input:hover {\n border-color: #555;\n }\n\n .overlay-checkbox input:checked {\n background: var(--primary);\n border-color: var(--primary);\n }\n\n .overlay-checkbox input:checked::after {\n content: \"\";\n position: absolute;\n left: 5px;\n top: 2px;\n width: 4px;\n height: 8px;\n border: solid #000;\n border-width: 0 2px 2px 0;\n transform: rotate(45deg);\n }\n\n .debug-link {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n margin-top: 8px;\n font-size: 12px;\n color: var(--text-muted);\n text-decoration: none;\n transition: color 0.15s;\n }\n\n .debug-link:hover {\n color: var(--primary);\n }\n\n .debug-link svg {\n opacity: 0.7;\n }\n\n /* Console section */\n .console-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n cursor: pointer;\n user-select: none;\n }\n\n .console-header:hover {\n color: var(--text-secondary);\n }\n\n .console-toggle {\n transition: transform 0.2s;\n }\n\n .console-toggle.collapsed {\n transform: rotate(-90deg);\n }\n\n .console-content {\n font-size: 12px;\n }\n\n .console-empty {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--text-muted);\n }\n\n .console-empty svg {\n color: #22c55e;\n }\n\n .console-message {\n display: flex;\n align-items: flex-start;\n gap: 6px;\n padding: 4px 0;\n }\n\n .console-message.error {\n color: #ef4444;\n }\n\n .console-message.warning {\n color: #eab308;\n }\n\n .console-message-icon {\n flex-shrink: 0;\n }\n\n .console-message-text {\n word-break: break-all;\n }\n\n /* Buttons */\n .btn {\n padding: 6px 10px;\n background: var(--surface-2);\n border: 1px solid #333;\n border-radius: 5px;\n color: #ccc;\n font-size: 12px;\n cursor: pointer;\n transition: all 0.15s;\n text-decoration: none;\n display: inline-flex;\n align-items: center;\n gap: 5px;\n }\n\n .btn:hover { background: #333; border-color: #444; }\n\n .btn-primary {\n background: var(--primary);\n border-color: var(--primary);\n color: #000;\n font-weight: 600;\n }\n\n .btn-primary:hover { background: var(--primary-hover); border-color: var(--primary-hover); }\n </style>\n</head>\n<body>\n <header class=\"header\">\n <div class=\"logo\">pdf<span>n</span> <span style=\"font-weight: 400; color: var(--text-muted); font-size: 14px; margin-left: 8px;\">dev</span></div>\n <div class=\"status\">\n <div class=\"status-dot\" id=\"status-dot\"></div>\n <span id=\"status-text\">Connected</span>\n </div>\n </header>\n\n <div class=\"container\">\n <aside class=\"sidebar\">\n <div class=\"sidebar-title\">Templates</div>\n ${\n templates.length > 0\n ? templateList\n : '<div class=\"empty-state\"><p>No templates found</p><code>pdfn add invoice</code></div>'\n }\n </aside>\n\n <div class=\"main-wrapper\">\n <main class=\"main\">\n <!-- Context bar: filename + page info + actions -->\n <div class=\"context-bar\">\n <div class=\"context-left\">\n <div class=\"file-name\" id=\"file-name\"></div>\n <div class=\"page-info\" id=\"page-info\"></div>\n </div>\n <div class=\"context-actions\">\n <a class=\"btn\" id=\"view-pdf\" href=\"#\" target=\"_blank\" title=\"View PDF in browser\">\n <svg width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14\"/>\n </svg>\n View PDF\n </a>\n <button class=\"btn btn-primary\" id=\"download-pdf\" title=\"Download PDF\">\n <svg width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4\"/>\n </svg>\n Download\n </button>\n </div>\n </div>\n\n <!-- Preview area -->\n <div class=\"preview-area\" id=\"preview-area\">\n ${\n activeTemplate\n ? '<div class=\"loading-spinner\"><div class=\"spinner\"></div><span>Loading preview...</span></div>'\n : '<div class=\"empty-state\"><h2>Select a template</h2><p>Choose a template from the sidebar to preview</p></div>'\n }\n </div>\n </main>\n\n <!-- Inspector panel: right side -->\n <aside class=\"inspector-panel\" id=\"inspector-panel\">\n <div class=\"inspector-title\">Inspector</div>\n <div class=\"inspector-content\">\n <div class=\"inspector-section\">\n <div class=\"inspector-section-title\">Performance</div>\n <div class=\"metrics-grid\">\n <div class=\"metric-item\">\n <div class=\"metric-label\">Render</div>\n <div class=\"metric-value\" id=\"metric-render\">--</div>\n </div>\n <div class=\"metric-item\">\n <div class=\"metric-label\">Pagination</div>\n <div class=\"metric-value\" id=\"metric-pagination\">--</div>\n </div>\n <div class=\"metric-item\">\n <div class=\"metric-label\">Pages</div>\n <div class=\"metric-value\" id=\"metric-pages\">--</div>\n </div>\n </div>\n <div class=\"metrics-note\">Measured in browser. Times vary on server.</div>\n </div>\n\n <div class=\"inspector-section\">\n <div class=\"inspector-section-title\">Debug</div>\n <div class=\"overlay-list\">\n <label class=\"overlay-checkbox\">\n <input type=\"checkbox\" id=\"overlay-grid\">\n Grid (1cm)\n </label>\n <label class=\"overlay-checkbox\">\n <input type=\"checkbox\" id=\"overlay-margins\">\n Margins\n </label>\n <label class=\"overlay-checkbox\">\n <input type=\"checkbox\" id=\"overlay-headers\">\n Headers/Footers\n </label>\n <label class=\"overlay-checkbox\">\n <input type=\"checkbox\" id=\"overlay-breaks\">\n Page numbers\n </label>\n </div>\n <a class=\"debug-link\" id=\"view-html\" href=\"#\" target=\"_blank\">\n View HTML\n <svg width=\"12\" height=\"12\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14\"/>\n </svg>\n </a>\n </div>\n\n <div class=\"inspector-section\">\n <div class=\"inspector-section-title console-header\" id=\"console-header\">\n <span>Console</span>\n <svg class=\"console-toggle\" id=\"console-toggle\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 9l-7 7-7-7\"/>\n </svg>\n </div>\n <div class=\"console-content\" id=\"console-content\">\n <div class=\"console-empty\" id=\"console-empty\">\n <svg width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M5 13l4 4L19 7\"/>\n </svg>\n No issues\n </div>\n <div id=\"console-messages\" style=\"display: none;\"></div>\n </div>\n </div>\n </div>\n </aside>\n </div>\n </div>\n\n <script>\n // Page sizes in points (72 dpi)\n const PAGE_SIZES = {\n A3: { width: 842, height: 1191 },\n A4: { width: 595, height: 842 },\n A5: { width: 420, height: 595 },\n B4: { width: 709, height: 1001 },\n B5: { width: 499, height: 709 },\n Letter: { width: 612, height: 792 },\n Legal: { width: 612, height: 1008 },\n Tabloid: { width: 792, height: 1224 },\n };\n\n const PT_TO_PX = 96 / 72;\n const STORAGE_KEY = 'pdfn-inspector';\n\n let ws;\n let currentTemplate = ${activeTemplate ? `\"${activeTemplate}\"` : \"null\"};\n let templateInfo = {};\n\n // Inspector state with defaults (all overlays off by default)\n let inspectorState = {\n overlays: {\n grid: false,\n margins: false,\n headers: false,\n breaks: false,\n },\n consoleExpanded: true\n };\n\n // Console messages\n let consoleMessages = [];\n\n // Load state from localStorage\n function loadState() {\n try {\n const saved = localStorage.getItem(STORAGE_KEY);\n if (saved) {\n const parsed = JSON.parse(saved);\n inspectorState = { ...inspectorState, ...parsed };\n }\n } catch (e) {}\n }\n\n // Save state to localStorage\n function saveState() {\n try {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(inspectorState));\n } catch (e) {}\n }\n\n // Apply state to UI\n function applyState() {\n // Overlay checkboxes\n document.getElementById('overlay-grid').checked = inspectorState.overlays.grid;\n document.getElementById('overlay-margins').checked = inspectorState.overlays.margins;\n document.getElementById('overlay-headers').checked = inspectorState.overlays.headers;\n document.getElementById('overlay-breaks').checked = inspectorState.overlays.breaks;\n\n // Console state\n const consoleContent = document.getElementById('console-content');\n const consoleToggle = document.getElementById('console-toggle');\n if (inspectorState.consoleExpanded) {\n consoleContent.style.display = 'block';\n consoleToggle.classList.remove('collapsed');\n } else {\n consoleContent.style.display = 'none';\n consoleToggle.classList.add('collapsed');\n }\n }\n\n // Toggle console expanded state\n function toggleConsole() {\n inspectorState.consoleExpanded = !inspectorState.consoleExpanded;\n saveState();\n applyState();\n }\n\n // Add console message\n function addConsoleMessage(type, message) {\n consoleMessages.push({ type, message });\n renderConsoleMessages();\n }\n\n // Clear console messages\n function clearConsoleMessages() {\n consoleMessages = [];\n renderConsoleMessages();\n }\n\n // Render console messages\n function renderConsoleMessages() {\n const emptyEl = document.getElementById('console-empty');\n const messagesEl = document.getElementById('console-messages');\n\n if (consoleMessages.length === 0) {\n emptyEl.style.display = 'flex';\n messagesEl.style.display = 'none';\n messagesEl.innerHTML = '';\n } else {\n emptyEl.style.display = 'none';\n messagesEl.style.display = 'block';\n messagesEl.innerHTML = consoleMessages.map(msg =>\n \\`<div class=\"console-message \\${msg.type}\">\n <span class=\"console-message-icon\">\\${msg.type === 'error' ? '✗' : '⚠'}</span>\n <span class=\"console-message-text\">\\${escapeHtml(msg.message)}</span>\n </div>\\`\n ).join('');\n }\n }\n\n // Escape HTML\n function escapeHtml(text) {\n const div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n }\n\n // Get debug query string from overlay state\n function getDebugQuery() {\n const { overlays } = inspectorState;\n const hasAny = Object.values(overlays).some(v => v);\n if (!hasAny) return '';\n\n const params = new URLSearchParams();\n if (overlays.grid) params.set('grid', '1');\n if (overlays.margins) params.set('margins', '1');\n if (overlays.headers) params.set('headers', '1');\n if (overlays.breaks) params.set('breaks', '1');\n\n return '?' + params.toString();\n }\n\n // Check if any overlay is enabled\n function hasAnyOverlay() {\n return Object.values(inspectorState.overlays).some(v => v);\n }\n\n loadState();\n\n function connect() {\n ws = new WebSocket('ws://' + location.host);\n\n ws.onopen = () => {\n document.getElementById('status-dot').classList.remove('disconnected');\n document.getElementById('status-text').textContent = 'Connected';\n };\n\n ws.onclose = () => {\n document.getElementById('status-dot').classList.add('disconnected');\n document.getElementById('status-text').textContent = 'Disconnected';\n setTimeout(connect, 2000);\n };\n\n ws.onmessage = (event) => {\n const data = JSON.parse(event.data);\n if (data.type === 'reload') {\n if (currentTemplate) loadPreview(currentTemplate);\n } else if (data.type === 'templates') {\n updateTemplateList(data.templates);\n }\n };\n }\n\n connect();\n\n // Update template list in sidebar (called when templates are added/removed)\n function updateTemplateList(templates) {\n const sidebar = document.querySelector('.sidebar');\n const titleEl = sidebar.querySelector('.sidebar-title');\n\n // Clear existing buttons\n sidebar.innerHTML = '';\n sidebar.appendChild(titleEl);\n\n if (templates.length === 0) {\n sidebar.innerHTML += '<div class=\"empty-state\"><p>No templates found</p><code>pdfn add invoice</code></div>';\n // Clear preview if no templates\n currentTemplate = null;\n document.getElementById('file-name').textContent = '';\n document.getElementById('page-info').textContent = '';\n document.getElementById('preview-area').innerHTML = '<div class=\"empty-state\"><h2>No templates</h2><p>Add a template to get started</p><code>pdfn add invoice</code></div>';\n return;\n }\n\n // Add template buttons\n templates.forEach(t => {\n const btn = document.createElement('button');\n btn.className = 'template-btn' + (t.id === currentTemplate ? ' active' : '');\n btn.dataset.template = t.id;\n btn.dataset.file = t.file;\n btn.innerHTML = '<span class=\"template-name\">' + t.name + '</span>';\n btn.addEventListener('click', () => loadPreview(t.id));\n sidebar.appendChild(btn);\n });\n\n // If current template was deleted, switch to first template\n const templateIds = templates.map(t => t.id);\n if (currentTemplate && !templateIds.includes(currentTemplate)) {\n loadPreview(templates[0].id);\n }\n }\n\n // Listen for metrics from iframe (postMessage from PDFN script)\n window.addEventListener('message', function(event) {\n if (event.data && event.data.type === 'pdfn:metrics') {\n const metrics = event.data.metrics;\n if (metrics.paginationTime !== undefined) {\n document.getElementById('metric-pagination').textContent = metrics.paginationTime + 'ms';\n }\n if (metrics.pages !== undefined) {\n document.getElementById('metric-pages').textContent = metrics.pages;\n }\n }\n });\n\n function detectPageInfo(html) {\n let pageSize = 'A4';\n let orientation = 'portrait';\n\n // Check for data-pdfn-size attribute (e.g., \"A4\", \"Letter Landscape\", \"Tabloid\")\n const sizeMatch = html.match(/data-pdfn-size=\"([^\"]+)\"/i);\n if (sizeMatch) {\n const sizeStr = sizeMatch[1];\n // Check if it includes \"Landscape\"\n if (sizeStr.includes('Landscape')) {\n orientation = 'landscape';\n }\n // Extract base size name (remove \" Landscape\" suffix if present)\n const baseName = sizeStr.replace(' Landscape', '').replace(' Portrait', '');\n if (PAGE_SIZES[baseName]) {\n pageSize = baseName;\n }\n }\n\n return { pageSize, orientation };\n }\n\n function calculateScale(pageSize, orientation) {\n const container = document.getElementById('preview-area');\n const rect = container.getBoundingClientRect();\n const maxWidth = rect.width - 48;\n const maxHeight = rect.height - 48;\n\n const size = PAGE_SIZES[pageSize] || PAGE_SIZES.A4;\n const pageW = (orientation === 'landscape' ? size.height : size.width) * PT_TO_PX;\n const pageH = (orientation === 'landscape' ? size.width : size.height) * PT_TO_PX;\n\n const scale = Math.min(maxWidth / pageW, maxHeight / pageH, 1);\n return { pageW, pageH, scale };\n }\n\n async function loadPreview(templateId) {\n currentTemplate = templateId;\n\n // Get template file name from button\n const activeBtn = document.querySelector('.template-btn[data-template=\"' + templateId + '\"]');\n const fileName = activeBtn ? activeBtn.dataset.file : templateId + '.tsx';\n\n document.querySelectorAll('.template-btn').forEach(btn => {\n btn.classList.toggle('active', btn.dataset.template === templateId);\n });\n\n // Update context bar\n document.getElementById('file-name').textContent = fileName;\n\n const previewArea = document.getElementById('preview-area');\n previewArea.innerHTML = '<div class=\"loading-spinner\"><div class=\"spinner\"></div><span>Rendering...</span></div>';\n\n try {\n const debugQuery = getDebugQuery();\n const htmlRes = await fetch('/api/template/' + templateId + '/html' + debugQuery);\n const html = await htmlRes.text();\n\n templateInfo = detectPageInfo(html);\n document.getElementById('page-info').textContent =\n templateInfo.pageSize + ' · ' + templateInfo.orientation;\n\n // Update metrics (render time from server, pagination from iframe postMessage)\n const renderTime = htmlRes.headers.get('X-Render-Time');\n\n if (renderTime) {\n document.getElementById('metric-render').textContent = renderTime + 'ms';\n }\n\n // Reset pagination metrics (will be updated via postMessage from iframe)\n document.getElementById('metric-pagination').textContent = '--';\n document.getElementById('metric-pages').textContent = '--';\n\n const { pageW, pageH, scale } = calculateScale(templateInfo.pageSize, templateInfo.orientation);\n const displayW = pageW * scale;\n const displayH = pageH * scale;\n\n previewArea.innerHTML = '';\n const frame = document.createElement('div');\n frame.className = 'preview-frame';\n frame.style.width = displayW + 'px';\n frame.style.height = displayH + 'px';\n\n const iframe = document.createElement('iframe');\n iframe.style.width = pageW + 'px';\n iframe.style.height = pageH + 'px';\n iframe.style.transform = 'scale(' + scale + ')';\n iframe.style.transformOrigin = 'top left';\n iframe.srcdoc = html;\n\n frame.classList.add('loading');\n iframe.onload = () => frame.classList.remove('loading');\n\n frame.appendChild(iframe);\n previewArea.appendChild(frame);\n\n // Set up action buttons\n const pdfUrl = '/api/template/' + templateId + '/pdf' + debugQuery;\n const htmlUrl = '/api/template/' + templateId + '/html' + debugQuery;\n\n document.getElementById('view-pdf').href = pdfUrl;\n document.getElementById('view-html').href = htmlUrl;\n\n document.getElementById('download-pdf').onclick = () => {\n const link = document.createElement('a');\n link.href = pdfUrl;\n link.download = templateId + '.pdf';\n link.click();\n };\n\n } catch (err) {\n previewArea.innerHTML = '<div class=\"empty-state\"><h2>Error</h2><p>' + err.message + '</p></div>';\n }\n }\n\n document.querySelectorAll('.template-btn').forEach(btn => {\n btn.addEventListener('click', () => loadPreview(btn.dataset.template));\n });\n\n // Overlay checkbox handlers\n const overlayCheckboxes = ['grid', 'margins', 'headers', 'breaks'];\n overlayCheckboxes.forEach(name => {\n document.getElementById('overlay-' + name).onchange = (e) => {\n inspectorState.overlays[name] = e.target.checked;\n saveState();\n if (currentTemplate) loadPreview(currentTemplate);\n };\n });\n\n // Console header click handler\n document.getElementById('console-header').onclick = toggleConsole;\n\n let resizeTimeout;\n window.addEventListener('resize', () => {\n clearTimeout(resizeTimeout);\n resizeTimeout = setTimeout(() => {\n if (currentTemplate) loadPreview(currentTemplate);\n }, 150);\n });\n\n // Apply saved state and load first template\n applyState();\n ${activeTemplate ? `loadPreview(\"${activeTemplate}\");` : \"\"}\n </script>\n</body>\n</html>`;\n}\n\nasync function startDevServer(options: DevServerOptions) {\n const { port, open, mode } = options;\n const absoluteTemplatesDir = resolve(process.cwd(), TEMPLATES_DIR);\n\n // Show header and initializing message\n console.log(chalk.bold(\"\\n pdfn dev\\n\"));\n console.log(chalk.dim(\" Initializing...\"));\n\n // Scan templates\n let templates = await scanTemplates(absoluteTemplatesDir);\n\n // Show relative path for cleaner output\n const displayPath = TEMPLATES_DIR;\n const templateCount = templates.length === 1 ? \"1 template\" : `${templates.length} templates`;\n\n // Create base server with shared /generate and /health endpoints\n const { app, browserManager } = createBaseServer({\n enableLogging: false, // Dev uses custom logging per route\n onSuccess: (result) => {\n const { metrics } = result;\n console.log(\n chalk.green(\" ✓\"),\n chalk.dim(\"/generate\"),\n chalk.cyan(`${metrics.total}ms`),\n chalk.dim(\"•\"),\n `${metrics.pageCount} page${metrics.pageCount > 1 ? \"s\" : \"\"}`,\n chalk.dim(\"•\"),\n formatBytes(metrics.pdfSize)\n );\n },\n onError: (message) => {\n console.log(chalk.red(\" ✗\"), chalk.dim(\"/generate\"), chalk.red(message));\n },\n });\n const server = createHttpServer(app);\n\n // Create WebSocket server for hot reload\n const wss = new WebSocketServer({ server });\n const clients = new Set<WebSocket>();\n\n wss.on(\"connection\", (ws) => {\n clients.add(ws);\n ws.on(\"close\", () => clients.delete(ws));\n });\n\n wss.on(\"error\", (err: NodeJS.ErrnoException) => {\n if (err.code === \"EADDRINUSE\") {\n // Handled by server error handler\n return;\n }\n console.error(chalk.red(\" ✗ WebSocket error:\"), err.message);\n });\n\n function broadcast(message: object) {\n const data = JSON.stringify(message);\n clients.forEach((client) => {\n if (client.readyState === WebSocket.OPEN) {\n client.send(data);\n }\n });\n }\n\n // Create Vite server for template compilation\n // Custom logger to silence Vite's default output (we handle our own logging)\n const viteLogger = {\n info: () => {},\n warn: () => {},\n error: (msg: string) => console.error(chalk.red(\" ✗ Vite:\"), msg),\n warnOnce: () => {},\n hasWarned: false,\n clearScreen: () => {},\n hasErrorLogged: () => false,\n };\n\n const vite = await createViteServer({\n root: process.cwd(),\n mode,\n server: {\n middlewareMode: true,\n hmr: { server } // Use our HTTP server for Vite's WebSocket\n },\n appType: \"custom\",\n customLogger: viteLogger,\n optimizeDeps: {\n include: [\"react\", \"react-dom\"],\n },\n esbuild: {\n jsx: \"automatic\",\n },\n ssr: {\n // Don't externalize these - we need to transform them\n noExternal: [\"@pdfn/react\", \"@pdfn/tailwind\", \"@pdfn/client\", \"server-only\"],\n },\n plugins: [\n // Unified pdfn plugin: Tailwind pre-compilation + client/template markers\n ...pdfn(),\n {\n name: \"mock-server-only\",\n enforce: \"pre\",\n resolveId(id) {\n if (id === \"server-only\") {\n return { id: \"\\0server-only-mock\", moduleSideEffects: false };\n }\n },\n load(id) {\n if (id === \"\\0server-only-mock\") {\n // Return empty module - we're in SSR context so server-only is fine\n return \"export default {};\";\n }\n },\n },\n ],\n });\n\n\n // Watch for template and CSS changes\n // Watch templates dir and styles.css + styles/ directory for CSS HMR\n const watchPaths = [\n absoluteTemplatesDir,\n join(absoluteTemplatesDir, \"styles.css\"),\n join(absoluteTemplatesDir, \"styles\"),\n ];\n const watcher = chokidar.watch(watchPaths, {\n ignored: /(^|[\\/\\\\])\\../,\n persistent: true,\n });\n\n // Helper to check if a file is a template (matches what we show in sidebar)\n function isTemplateFile(filePath: string): boolean {\n const fileName = filePath.split(\"/\").pop() || \"\";\n // Must be a .tsx file in the root of templates dir (not in subdirectories)\n if (!fileName.endsWith(\".tsx\")) return false;\n // Check if it's a direct child of templates dir\n const relativePath = filePath.replace(absoluteTemplatesDir + \"/\", \"\");\n if (relativePath.includes(\"/\")) return false;\n return true;\n }\n\n // Helper to check if file is a code file (tsx/ts/js/jsx)\n function isCodeFile(filePath: string): boolean {\n return /\\.(tsx?|jsx?)$/.test(filePath);\n }\n\n // Helper to check if file is a CSS file in templates\n function isCssFile(filePath: string): boolean {\n return filePath.endsWith(\".css\");\n }\n\n // Suppress logging during initial scan\n let watcherReady = false;\n\n watcher.on(\"ready\", () => {\n watcherReady = true;\n });\n\n watcher.on(\"change\", async (filePath) => {\n if (!watcherReady) return;\n const fileName = filePath.split(\"/\").pop() || filePath;\n\n // Handle CSS file changes (styles.css or styles/*.css)\n if (isCssFile(filePath)) {\n console.log(chalk.blue(\" ↻\"), fileName, chalk.dim(\"changed\"));\n\n // Invalidate the virtual Tailwind CSS module to force recompilation\n const virtualMod = vite.moduleGraph.getModuleById(\"\\0virtual:pdfn-tailwind-css\");\n if (virtualMod) {\n vite.moduleGraph.invalidateModule(virtualMod);\n // Invalidate all modules that import the virtual module\n for (const importer of virtualMod.importers) {\n vite.moduleGraph.invalidateModule(importer);\n }\n }\n\n templates = await scanTemplates(absoluteTemplatesDir);\n broadcast({ type: \"reload\" });\n return;\n }\n\n // Log all code file changes (templates and components)\n if (isCodeFile(filePath)) {\n console.log(chalk.blue(\" ↻\"), fileName, chalk.dim(\"changed\"));\n\n // Invalidate the changed module and its dependencies in Vite's SSR cache\n const mod = vite.moduleGraph.getModuleById(filePath);\n if (mod) {\n vite.moduleGraph.invalidateModule(mod);\n }\n\n // Also invalidate the virtual Tailwind CSS module to force recompilation\n const virtualMod = vite.moduleGraph.getModuleById(\"\\0virtual:pdfn-tailwind-css\");\n if (virtualMod) {\n vite.moduleGraph.invalidateModule(virtualMod);\n // Invalidate all modules that import the virtual module\n for (const importer of virtualMod.importers) {\n vite.moduleGraph.invalidateModule(importer);\n }\n }\n }\n templates = await scanTemplates(absoluteTemplatesDir);\n broadcast({ type: \"reload\" });\n });\n\n watcher.on(\"add\", async (filePath) => {\n if (!watcherReady) return;\n const oldCount = templates.length;\n templates = await scanTemplates(absoluteTemplatesDir);\n // Only log if a new template was actually added (not components)\n if (templates.length > oldCount && isTemplateFile(filePath)) {\n const fileName = filePath.split(\"/\").pop() || filePath;\n console.log(chalk.green(\" +\"), fileName, chalk.dim(\"added\"));\n }\n // Send updated template list so sidebar can be refreshed\n broadcast({ type: \"templates\", templates: templates.map(t => ({ id: t.id, name: t.name, file: t.file })) });\n });\n\n watcher.on(\"unlink\", async (filePath) => {\n if (!watcherReady) return;\n const oldCount = templates.length;\n const fileName = filePath.split(\"/\").pop() || filePath;\n templates = await scanTemplates(absoluteTemplatesDir);\n // Only log if a template was actually removed (not components)\n if (templates.length < oldCount && isTemplateFile(filePath)) {\n console.log(chalk.red(\" -\"), fileName, chalk.dim(\"removed\"));\n }\n // Send updated template list so sidebar can be refreshed\n broadcast({ type: \"templates\", templates: templates.map(t => ({ id: t.id, name: t.name, file: t.file })) });\n });\n\n // Serve preview UI\n app.get(\"/\", (_req: Request, res: Response) => {\n const activeTemplate = templates[0]?.id ?? null;\n res.send(createPreviewHTML(templates, activeTemplate));\n });\n\n // API: Get template code\n app.get(\"/api/template/:id/code\", (req: Request, res: Response) => {\n const template = templates.find((t) => t.id === req.params.id);\n if (!template) {\n res.status(404).send(\"Template not found\");\n return;\n }\n\n try {\n const code = readFileSync(template.path, \"utf-8\");\n res.type(\"text/plain\").send(code);\n } catch {\n res.status(500).send(\"Error reading template\");\n }\n });\n\n // Helper: Render a template to HTML using Vite\n // Templates use default parameter values for sample data (React Email pattern)\n async function renderTemplate(\n template: TemplateInfo,\n debugOptions: DebugOptions | false = false\n ): Promise<string> {\n const mod = await vite.ssrLoadModule(template.path);\n const Component = mod.default;\n const { render } = await vite.ssrLoadModule(\"@pdfn/react\");\n // Use React.createElement so element.type === Component (preserves markers)\n // Empty props - component's default parameter values provide sample data\n return render(React.createElement(Component, {}), {\n debug: debugOptions || undefined,\n });\n }\n\n // Parse debug options from query params\n function parseDebugOptions(query: Record<string, unknown>): DebugOptions | false {\n const options: DebugOptions = {\n grid: query.grid === \"1\",\n margins: query.margins === \"1\",\n headers: query.headers === \"1\",\n breaks: query.breaks === \"1\",\n };\n\n // Return false if no options enabled\n const hasAny = Object.values(options).some((v) => v);\n return hasAny ? options : false;\n }\n\n // API: Get rendered HTML\n app.get(\"/api/template/:id/html\", async (req: Request, res: Response) => {\n const template = templates.find((t) => t.id === req.params.id);\n if (!template) {\n res.status(404).send(\"Template not found\");\n return;\n }\n\n try {\n const start = performance.now();\n const debugOptions = parseDebugOptions(req.query as Record<string, unknown>);\n const html = await renderTemplate(template, debugOptions);\n const duration = Math.round(performance.now() - start);\n\n // Count pages from rendered HTML (look for pagedjs page markers)\n const pageMatches = html.match(/class=\"pagedjs_page\"/g);\n const pageCount = pageMatches ? pageMatches.length : 1;\n\n // Log render\n console.log(\n chalk.green(\" ✓\"),\n template.file,\n chalk.dim(\"→ HTML\"),\n chalk.cyan(`${duration}ms`)\n );\n\n res.setHeader(\"X-Render-Time\", duration.toString());\n res.setHeader(\"X-Page-Count\", pageCount.toString());\n // Note: Pagination time is measured client-side after Paged.js runs\n res.type(\"text/html\").send(html);\n } catch (error) {\n console.log(chalk.red(\" ✗\"), template.file, chalk.red(\"render failed\"));\n console.error(chalk.dim(\" \"), error);\n res.status(500).send(`Error rendering template: ${error}`);\n }\n });\n\n // Helper: Format bytes for display\n function formatBytes(bytes: number): string {\n if (bytes < 1024) return bytes + \"B\";\n if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + \"KB\";\n return (bytes / (1024 * 1024)).toFixed(2) + \"MB\";\n }\n\n // API: Generate PDF\n app.get(\"/api/template/:id/pdf\", async (req: Request, res: Response) => {\n const template = templates.find((t) => t.id === req.params.id);\n if (!template) {\n res.status(404).send(\"Template not found\");\n return;\n }\n\n try {\n const debugOptions = parseDebugOptions(req.query as Record<string, unknown>);\n const html = await renderTemplate(template, debugOptions);\n const result = await browserManager.withPage(async (page) => {\n return generatePdf(page, html, { timeout: 30000 });\n });\n\n // Log PDF generation - first line: request summary\n const { metrics, warnings, assets } = result;\n console.log(\n chalk.green(\" ✓\"),\n template.file,\n chalk.dim(\"→ PDF •\"),\n chalk.cyan(`${metrics.total}ms`),\n chalk.dim(\"•\"),\n formatBytes(metrics.pdfSize)\n );\n\n // Second line: details (pages, assets, timing) - all separated by •\n const pageStr = `${metrics.pageCount} page${metrics.pageCount > 1 ? \"s\" : \"\"}`;\n const images = assets.filter((a) => a.type === \"image\");\n const fonts = assets.filter((a) => a.type === \"font\");\n const assetParts: string[] = [];\n if (images.length > 0) assetParts.push(`${images.length} image${images.length > 1 ? \"s\" : \"\"}`);\n if (fonts.length > 0) assetParts.push(`${fonts.length} font${fonts.length > 1 ? \"s\" : \"\"}`);\n const assetStr = assetParts.length > 0 ? assetParts.join(\" • \") + \" • \" : \"\";\n const timingStr = `load ${metrics.contentLoad}ms • paginate ${metrics.pagedJs}ms • capture ${metrics.pdfCapture}ms`;\n console.log(chalk.dim(` ${pageStr} • ${assetStr}${timingStr}`));\n\n // Log warnings\n if (warnings.length > 0) {\n warnings.forEach((w) => {\n console.log(chalk.yellow(\" ⚠\"), chalk.yellow(w));\n });\n }\n\n // Add metrics headers\n res.setHeader(\"X-PDF-Total-Time\", metrics.total.toString());\n res.setHeader(\"X-PDF-Pages\", metrics.pageCount.toString());\n res.setHeader(\"X-PDF-Size\", metrics.pdfSize.toString());\n res.setHeader(\"X-PDF-Capture-Time\", metrics.pdfCapture.toString());\n res.setHeader(\"X-PDF-Assets\", result.assets.length.toString());\n res.setHeader(\"X-PDF-Warnings\", warnings.length.toString());\n\n res.setHeader(\"Content-Type\", \"application/pdf\");\n res.setHeader(\"Content-Disposition\", `inline; filename=\"${template.id}.pdf\"`);\n res.send(result.buffer);\n } catch (error) {\n console.log(chalk.red(\" ✗\"), template.file, chalk.red(\"PDF generation failed\"));\n console.error(chalk.dim(\" \"), error);\n res.status(500).send(`Error generating PDF: ${error}`);\n }\n });\n\n // API: Generate PDF and return metrics (JSON)\n app.get(\"/api/template/:id/pdf-metrics\", async (req: Request, res: Response) => {\n const template = templates.find((t) => t.id === req.params.id);\n if (!template) {\n res.status(404).json({ error: \"Template not found\" });\n return;\n }\n\n try {\n const debugOptions = parseDebugOptions(req.query as Record<string, unknown>);\n const html = await renderTemplate(template, debugOptions);\n const result = await browserManager.withPage(async (page) => {\n return generatePdf(page, html, { timeout: 30000 });\n });\n\n // Log PDF metrics - first line: request summary\n const { metrics, warnings, assets } = result;\n console.log(\n chalk.green(\" ✓\"),\n template.file,\n chalk.dim(\"→ PDF metrics •\"),\n chalk.cyan(`${metrics.total}ms`),\n chalk.dim(\"•\"),\n formatBytes(metrics.pdfSize)\n );\n\n // Second line: details (pages, assets, timing) - all separated by •\n {\n const pageStr = `${metrics.pageCount} page${metrics.pageCount > 1 ? \"s\" : \"\"}`;\n const images = assets.filter((a) => a.type === \"image\");\n const fonts = assets.filter((a) => a.type === \"font\");\n const assetParts: string[] = [];\n if (images.length > 0) assetParts.push(`${images.length} image${images.length > 1 ? \"s\" : \"\"}`);\n if (fonts.length > 0) assetParts.push(`${fonts.length} font${fonts.length > 1 ? \"s\" : \"\"}`);\n const assetStr = assetParts.length > 0 ? assetParts.join(\" • \") + \" • \" : \"\";\n const timingStr = `load ${metrics.contentLoad}ms • paginate ${metrics.pagedJs}ms • capture ${metrics.pdfCapture}ms`;\n console.log(chalk.dim(` ${pageStr} • ${assetStr}${timingStr}`));\n }\n\n if (warnings.length > 0) {\n warnings.forEach((w) => {\n console.log(chalk.yellow(\" ⚠\"), chalk.yellow(w));\n });\n }\n\n res.json({\n metrics: result.metrics,\n assets: result.assets,\n warnings: result.warnings,\n });\n } catch (error) {\n console.log(chalk.red(\" ✗\"), template.file, chalk.red(\"PDF metrics failed\"));\n console.error(chalk.dim(\" \"), error);\n res.status(500).json({ error: `Error generating PDF: ${error}` });\n }\n });\n\n // Gotenberg-compatible API: Convert HTML to PDF\n // This allows generate() from @pdfn/react to work with pdfn dev\n const upload = multer({ storage: multer.memoryStorage() });\n\n app.post(\n \"/forms/chromium/convert/html\",\n upload.any(),\n async (req: Request, res: Response) => {\n try {\n // Extract HTML from multipart form\n const files = req.files as Express.Multer.File[] | undefined;\n const htmlFile = files?.find(\n (f) => f.originalname === \"index.html\" || f.fieldname === \"files\"\n );\n\n if (!htmlFile) {\n res.status(400).send(\"Missing index.html file\");\n return;\n }\n\n const html = htmlFile.buffer.toString(\"utf-8\");\n\n // Generate PDF using existing infrastructure\n const result = await browserManager.withPage(async (page) => {\n return generatePdf(page, html, { timeout: 30000 });\n });\n\n // Log the request\n const { metrics } = result;\n console.log(\n chalk.green(\" ✓\"),\n chalk.dim(\"API →\"),\n \"PDF\",\n chalk.dim(\"•\"),\n chalk.cyan(`${metrics.total}ms`),\n chalk.dim(\"•\"),\n formatBytes(metrics.pdfSize),\n chalk.dim(`• ${metrics.pageCount} page${metrics.pageCount > 1 ? \"s\" : \"\"}`)\n );\n\n res.setHeader(\"Content-Type\", \"application/pdf\");\n res.send(result.buffer);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.log(chalk.red(\" ✗\"), chalk.dim(\"API →\"), chalk.red(\"PDF generation failed\"));\n console.error(chalk.dim(\" \"), message);\n res.status(500).send(message);\n }\n }\n );\n\n // Start server\n await new Promise<void>((resolve, reject) => {\n server.on(\"error\", (err: NodeJS.ErrnoException) => {\n if (err.code === \"EADDRINUSE\") {\n console.error(chalk.red(`\\n ✗ Port ${port} is already in use.\\n`));\n console.error(chalk.dim(` Either stop the existing server or use a different port:`));\n console.error(chalk.dim(` npx pdfn dev --port ${port + 1}\\n`));\n process.exit(1);\n }\n reject(err);\n });\n server.listen(port, () => resolve());\n });\n\n // Pre-launch Chromium for PDF generation\n await browserManager.getBrowser();\n\n // Graceful shutdown\n const shutdown = async () => {\n console.log(chalk.dim(\"\\n Shutting down...\"));\n watcher.close();\n await vite.close();\n await browserManager.close();\n server.close();\n process.exit(0);\n };\n\n process.on(\"SIGTERM\", shutdown);\n process.on(\"SIGINT\", shutdown);\n\n // Open Chromium (same browser used for PDF generation = true WYSIWYG)\n function openChromium() {\n const chromiumPath = puppeteer.executablePath();\n console.log(chalk.dim(\" Opening in Chromium...\\n\"));\n spawn(chromiumPath, [`http://localhost:${port}`], {\n detached: true,\n stdio: \"ignore\",\n }).unref();\n }\n\n console.log(chalk.dim(` Templates: ${displayPath} (${templateCount})`));\n console.log(chalk.green(`\\n ✓ Ready at ${chalk.cyan(`http://localhost:${port}`)}\\n`));\n\n if (!open) {\n console.log(chalk.dim(` Tip: PDFs are generated with Chromium. For accurate preview,`));\n console.log(chalk.dim(` open in Chrome or Chromium-based browsers.\\n`));\n }\n\n console.log(chalk.dim(` Shortcuts`));\n console.log(chalk.dim(` › ${chalk.white(\"o\")} open in Chromium`));\n console.log(chalk.dim(` › ${chalk.white(\"q\")} quit\\n`));\n\n if (open) {\n openChromium();\n }\n\n // Keyboard shortcuts\n if (process.stdin.isTTY) {\n process.stdin.setRawMode(true);\n process.stdin.resume();\n process.stdin.setEncoding(\"utf8\");\n process.stdin.on(\"data\", (key: string) => {\n if (key === \"o\" || key === \"O\") {\n openChromium();\n } else if (key === \"q\" || key === \"Q\" || key === \"\\u0003\") {\n // q or Ctrl+C\n shutdown();\n }\n });\n }\n}\n\nexport const devCommand = new Command(\"dev\")\n .description(\"Start development server with live preview\")\n .option(\"--port <number>\", \"Server port (env: PDFN_PORT)\", process.env.PDFN_PORT ?? \"3456\")\n .option(\"--open\", \"Open browser automatically\")\n .option(\"--mode <mode>\", \"Environment mode (loads .env.[mode])\", \"development\")\n .action(async (options) => {\n // Load environment variables based on mode (Vite pattern)\n loadEnv(options.mode);\n\n const port = parseInt(options.port, 10);\n\n await startDevServer({\n port,\n open: options.open ?? false,\n mode: options.mode,\n });\n });\n","import express from \"express\";\nimport type { Express, Request, Response, NextFunction } from \"express\";\nimport { BrowserManager } from \"./browser\";\nimport { createGenerateHandler } from \"./routes\";\nimport { type PdfResult } from \"./pdf\";\n\nexport interface BaseServerOptions {\n /** Max concurrent pages (default: env.PDFN_MAX_CONCURRENT || 5) */\n maxConcurrent?: number;\n /** Request timeout in ms (default: env.PDFN_TIMEOUT || 30000) */\n timeout?: number;\n /** Enable request logging (default: true) */\n enableLogging?: boolean;\n /** Custom logger for requests */\n onRequest?: (method: string, path: string, status: number, duration: number, extra?: string) => void;\n /** Custom logger for PDF details */\n onPdfResult?: (result: PdfResult) => void;\n /** Callback on successful PDF generation */\n onSuccess?: (result: PdfResult) => void;\n /** Custom logger for errors */\n onError?: (message: string) => void;\n}\n\nexport interface BaseServer {\n app: Express;\n browserManager: BrowserManager;\n maxConcurrent: number;\n timeout: number;\n}\n\n/**\n * Create a base PDFN server with common middleware and routes.\n *\n * This is shared between `dev` and `serve` commands.\n * Returns the Express app and BrowserManager for further customization.\n *\n * Includes:\n * - JSON body parsing (50mb limit)\n * - Request logging middleware (optional)\n * - POST /generate endpoint\n * - GET /health endpoint\n */\nexport function createBaseServer(options: BaseServerOptions = {}): BaseServer {\n const maxConcurrent =\n options.maxConcurrent ??\n parseInt(process.env.PDFN_MAX_CONCURRENT ?? \"5\", 10);\n const timeout =\n options.timeout ?? parseInt(process.env.PDFN_TIMEOUT ?? \"30000\", 10);\n const enableLogging = options.enableLogging ?? true;\n\n const app = express();\n const browserManager = new BrowserManager({ maxConcurrent, timeout });\n\n // JSON body parsing\n app.use(express.json({ limit: \"50mb\" }));\n\n // Request logging middleware\n if (enableLogging && options.onRequest) {\n const onRequest = options.onRequest;\n const onPdfResult = options.onPdfResult;\n\n app.use((req: Request, res: Response, next: NextFunction) => {\n // Skip noisy requests\n const skipPaths = [\"/favicon.ico\", \"/robots.txt\"];\n if (skipPaths.includes(req.path)) {\n next();\n return;\n }\n\n const start = performance.now();\n\n res.on(\"finish\", () => {\n const duration = performance.now() - start;\n\n // For /v1/generate, include page count and size\n let extra: string | undefined;\n if (req.path === \"/v1/generate\" && res.statusCode === 200) {\n const pages = res.getHeader(\"X-PDFN-Page-Count\");\n const size = Number(res.getHeader(\"X-PDFN-PDF-Size\")) || 0;\n const sizeKB = (size / 1024).toFixed(1);\n extra = `${pages} pages • ${sizeKB}KB`;\n }\n\n onRequest(req.method, req.path, res.statusCode, duration, extra);\n\n // Log PDF details if available\n const pdfResult = (res as any)._pdfResult as PdfResult | undefined;\n if (pdfResult && onPdfResult) {\n onPdfResult(pdfResult);\n }\n });\n\n next();\n });\n }\n\n // Health check endpoint\n app.get(\"/health\", (_req: Request, res: Response) => {\n res.json({\n status: \"ok\",\n browser: browserManager.isConnected() ? \"connected\" : \"disconnected\",\n activePages: browserManager.getActivePages(),\n maxConcurrent: browserManager.getMaxConcurrent(),\n });\n });\n\n // PDF generation endpoint (matches pdfn Cloud API)\n app.post(\n \"/v1/generate\",\n createGenerateHandler(browserManager, {\n timeout,\n onSuccess: options.onSuccess,\n onError: options.onError,\n })\n );\n\n return {\n app,\n browserManager,\n maxConcurrent,\n timeout,\n };\n}\n","import puppeteer, { Browser, Page } from \"puppeteer\";\n\nexport interface BrowserManagerOptions {\n /** Max concurrent pages (default: env.PDFN_MAX_CONCURRENT || 5) */\n maxConcurrent?: number;\n /** Request timeout in ms (default: env.PDFN_TIMEOUT || 30000) */\n timeout?: number;\n}\n\n/**\n * Manages a single Puppeteer browser instance with multiple concurrent pages\n *\n * Architecture: Single browser + multiple pages (industry standard pattern)\n * - Lower memory footprint (~150MB browser + ~30MB/page)\n * - Fast page creation (~50ms vs ~1-2s for new browser)\n * - Auto-restart on browser crash/disconnect\n */\nexport class BrowserManager {\n private browser: Browser | null = null;\n private launching: Promise<Browser> | null = null;\n private activePages = 0;\n private maxConcurrent: number;\n private timeout: number;\n\n constructor(options: BrowserManagerOptions = {}) {\n this.maxConcurrent =\n options.maxConcurrent ??\n parseInt(process.env.PDFN_MAX_CONCURRENT ?? \"5\", 10);\n this.timeout =\n options.timeout ?? parseInt(process.env.PDFN_TIMEOUT ?? \"30000\", 10);\n }\n\n /**\n * Get or create the browser instance\n */\n async getBrowser(): Promise<Browser> {\n if (this.browser?.connected) {\n return this.browser;\n }\n\n // If already launching, wait for that\n if (this.launching) {\n return this.launching;\n }\n\n // Launch new browser\n this.launching = puppeteer.launch({\n headless: true,\n args: [\n \"--no-sandbox\",\n \"--disable-setuid-sandbox\",\n \"--disable-dev-shm-usage\",\n \"--disable-gpu\",\n \"--disable-extensions\",\n \"--mute-audio\",\n \"--disable-notifications\",\n ],\n });\n\n try {\n this.browser = await this.launching;\n this.setupBrowserListeners(this.browser);\n return this.browser;\n } finally {\n this.launching = null;\n }\n }\n\n /**\n * Setup browser event listeners for auto-restart on crash\n */\n private setupBrowserListeners(browser: Browser): void {\n browser.on(\"disconnected\", () => {\n this.browser = null;\n // activePages will naturally drain as withPage catches errors\n });\n }\n\n /**\n * Create a new page for PDF generation\n */\n async createPage(): Promise<Page> {\n const browser = await this.getBrowser();\n const page = await browser.newPage();\n page.setDefaultTimeout(this.timeout);\n return page;\n }\n\n /**\n * Execute a function with a managed page\n *\n * This pattern ensures:\n * - Concurrency limits are respected\n * - Pages are always closed after use\n * - Active page count is accurate\n *\n * @throws Error if max concurrent pages reached\n */\n async withPage<T>(fn: (page: Page) => Promise<T>): Promise<T> {\n if (this.activePages >= this.maxConcurrent) {\n throw new Error(\"Server busy - max concurrent requests reached\");\n }\n\n this.activePages++;\n let page: Page | null = null;\n\n try {\n page = await this.createPage();\n return await fn(page);\n } finally {\n this.activePages--;\n if (page) {\n await page.close().catch(() => {\n // Ignore close errors (browser may have disconnected)\n });\n }\n }\n }\n\n /**\n * Check if browser is connected\n */\n isConnected(): boolean {\n return this.browser?.connected ?? false;\n }\n\n /**\n * Get current number of active pages\n */\n getActivePages(): number {\n return this.activePages;\n }\n\n /**\n * Get max concurrent pages limit\n */\n getMaxConcurrent(): number {\n return this.maxConcurrent;\n }\n\n /**\n * Get configured timeout\n */\n getTimeout(): number {\n return this.timeout;\n }\n\n /**\n * Close the browser and clean up\n */\n async close(): Promise<void> {\n if (this.browser) {\n await this.browser.close();\n this.browser = null;\n }\n }\n}\n","/**\n * Simple debug logging utility\n *\n * Enable with DEBUG=pdfn:cli or DEBUG=pdfn:* or DEBUG=pdfn\n *\n * This is a lightweight alternative to the `debug` npm package.\n * Supports namespace filtering similar to the debug package convention.\n */\n\n// Debug logging - enable with DEBUG=pdfn:cli or DEBUG=pdfn:* or DEBUG=pdfn\nconst debugEnv = process.env.DEBUG ?? \"\";\nconst isEnabled =\n debugEnv.includes(\"pdfn:cli\") ||\n debugEnv.includes(\"pdfn:*\") ||\n debugEnv === \"pdfn\" ||\n debugEnv.includes(\"pdfn,\") ||\n debugEnv.endsWith(\",pdfn\");\n\n/**\n * Debug logger - only logs when DEBUG=pdfn:cli (or pdfn:* or pdfn) is set\n */\nexport const debug = isEnabled\n ? (message: string, ...args: unknown[]) => {\n console.log(`[pdfn:cli] ${message}`, ...args);\n }\n : () => {};\n\n/**\n * Check if debug logging is enabled\n */\nexport const isDebugEnabled = () => isEnabled;\n","import type { Page, PDFOptions, HTTPRequest, HTTPResponse } from \"puppeteer\";\nimport { debug } from \"../utils/debug\";\n\nexport interface PdfGenerationOptions {\n /** PDF format (default: A4) */\n format?: \"A4\" | \"Letter\" | \"Legal\" | \"Tabloid\" | \"A3\" | \"A5\";\n /** Print background graphics */\n printBackground?: boolean;\n /** Timeout for waiting for ready state (ms) */\n timeout?: number;\n}\n\n/** Asset information tracked during PDF generation */\nexport interface AssetInfo {\n /** Asset URL */\n url: string;\n /** Asset type (image, font, stylesheet, script, other) */\n type: \"image\" | \"font\" | \"stylesheet\" | \"script\" | \"other\";\n /** Size in bytes (0 if failed) */\n size: number;\n /** Load time in ms */\n duration: number;\n /** Whether the asset loaded successfully */\n success: boolean;\n /** Error message if failed */\n error?: string;\n}\n\nexport interface PdfResult {\n /** PDF buffer */\n buffer: Buffer;\n /** Generation metrics */\n metrics: {\n /** Total generation time in ms */\n total: number;\n /** Time waiting for content to load */\n contentLoad: number;\n /** Time waiting for Paged.js */\n pagedJs: number;\n /** Time for PDF capture */\n pdfCapture: number;\n /** Number of pages */\n pageCount: number;\n /** PDF file size in bytes */\n pdfSize: number;\n };\n /** Assets loaded during generation */\n assets: AssetInfo[];\n /** Warnings detected during generation */\n warnings: string[];\n}\n\n/** Size threshold for large asset warning (200KB - web best practice) */\nconst LARGE_ASSET_THRESHOLD = 200 * 1024;\n\n/** Duration threshold for slow asset warning (1000ms - lenient for fonts) */\nconst SLOW_ASSET_THRESHOLD = 1000;\n\n/** Determine asset type from resource type */\nfunction getAssetType(resourceType: string): AssetInfo[\"type\"] {\n switch (resourceType) {\n case \"image\":\n return \"image\";\n case \"font\":\n return \"font\";\n case \"stylesheet\":\n return \"stylesheet\";\n case \"script\":\n return \"script\";\n default:\n return \"other\";\n }\n}\n\n/** Get short URL for display (remove data: prefix, truncate long URLs) */\nfunction getShortUrl(url: string): string {\n if (url.startsWith(\"data:\")) {\n const match = url.match(/^data:([^;,]+)/);\n return match ? `data:${match[1]}...` : \"data:...\";\n }\n if (url.length > 80) {\n return url.substring(0, 77) + \"...\";\n }\n return url;\n}\n\n/**\n * Generate PDF from HTML content using a Puppeteer page\n */\nexport async function generatePdf(\n page: Page,\n html: string,\n options: PdfGenerationOptions = {}\n): Promise<PdfResult> {\n const {\n format = \"A4\",\n printBackground = true,\n timeout = 30000,\n } = options;\n\n const startTime = performance.now();\n let contentLoadTime = 0;\n let pagedJsTime = 0;\n let pdfCaptureTime = 0;\n let pageCount = 0;\n\n // Asset tracking\n const assets: AssetInfo[] = [];\n const requestStartTimes = new Map<string, number>();\n const warnings: string[] = [];\n\n // Request handler to track start times\n const onRequest = (request: HTTPRequest) => {\n const url = request.url();\n const resourceType = request.resourceType();\n\n // Only track relevant resource types\n if ([\"image\", \"font\", \"stylesheet\", \"script\"].includes(resourceType)) {\n requestStartTimes.set(url, performance.now());\n }\n };\n\n // Response handler to track completed requests\n const onResponse = (response: HTTPResponse) => {\n const url = response.url();\n const request = response.request();\n const resourceType = request.resourceType();\n const startTime = requestStartTimes.get(url);\n\n if (startTime === undefined) return;\n\n const duration = Math.round(performance.now() - startTime);\n const status = response.status();\n const success = status >= 200 && status < 400;\n\n // Get content length from headers\n const contentLength = response.headers()[\"content-length\"];\n const size = contentLength ? parseInt(contentLength, 10) : 0;\n\n const asset: AssetInfo = {\n url: getShortUrl(url),\n type: getAssetType(resourceType),\n size,\n duration,\n success,\n };\n\n if (!success) {\n asset.error = `HTTP ${status}`;\n warnings.push(`Failed: ${asset.url} (${status})`);\n } else {\n if (size > LARGE_ASSET_THRESHOLD) {\n warnings.push(`Large: ${asset.url} (${(size / 1024).toFixed(0)}KB)`);\n }\n if (duration > SLOW_ASSET_THRESHOLD) {\n warnings.push(`Slow: ${asset.url} (${duration}ms)`);\n }\n }\n\n assets.push(asset);\n requestStartTimes.delete(url);\n };\n\n // Request failed handler\n const onRequestFailed = (request: HTTPRequest) => {\n const url = request.url();\n const resourceType = request.resourceType();\n const startTime = requestStartTimes.get(url);\n\n if (startTime === undefined) return;\n\n const duration = Math.round(performance.now() - startTime);\n const failure = request.failure();\n const errorText = failure?.errorText || \"Unknown error\";\n\n const asset: AssetInfo = {\n url: getShortUrl(url),\n type: getAssetType(resourceType),\n size: 0,\n duration,\n success: false,\n error: errorText,\n };\n\n warnings.push(`Failed: ${asset.url} (${errorText})`);\n assets.push(asset);\n requestStartTimes.delete(url);\n };\n\n // Set up request interception\n page.on(\"request\", onRequest);\n page.on(\"response\", onResponse);\n page.on(\"requestfailed\", onRequestFailed);\n\n try {\n // Set content and wait for network idle\n const contentStart = performance.now();\n await page.setContent(html, {\n waitUntil: \"networkidle0\",\n timeout,\n });\n contentLoadTime = performance.now() - contentStart;\n\n // Wait for PDFN.ready to be true (Paged.js completion)\n const pagedStart = performance.now();\n await page.waitForFunction(\n () => (window as any).PDFN?.ready === true,\n { timeout }\n );\n pagedJsTime = performance.now() - pagedStart;\n\n // Get page count from PDFN metrics\n pageCount = await page.evaluate(() => {\n return (window as any).PDFN?.metrics?.pages ?? 1;\n });\n\n // Generate PDF\n const pdfStart = performance.now();\n const pdfOptions: PDFOptions = {\n format,\n printBackground,\n preferCSSPageSize: true,\n tagged: true, // Accessibility: generates tagged PDF for screen readers\n outline: true, // Accessibility: auto-generates bookmarks from headings\n };\n\n const buffer = await page.pdf(pdfOptions);\n pdfCaptureTime = performance.now() - pdfStart;\n\n const totalTime = performance.now() - startTime;\n const pdfBuffer = Buffer.from(buffer);\n\n debug(\n `pdf: ${Math.round(totalTime)}ms (load: ${Math.round(contentLoadTime)}ms, paged: ${Math.round(pagedJsTime)}ms, capture: ${Math.round(pdfCaptureTime)}ms) - ${pageCount} pages, ${(pdfBuffer.length / 1024).toFixed(1)}KB`\n );\n\n if (assets.length > 0) {\n debug(`assets: ${assets.length} (${assets.filter(a => !a.success).length} failed)`);\n }\n\n if (warnings.length > 0) {\n warnings.forEach(w => debug(`warning: ${w}`));\n }\n\n return {\n buffer: pdfBuffer,\n metrics: {\n total: Math.round(totalTime),\n contentLoad: Math.round(contentLoadTime),\n pagedJs: Math.round(pagedJsTime),\n pdfCapture: Math.round(pdfCaptureTime),\n pageCount,\n pdfSize: pdfBuffer.length,\n },\n assets,\n warnings,\n };\n } finally {\n // Clean up event listeners\n page.off(\"request\", onRequest);\n page.off(\"response\", onResponse);\n page.off(\"requestfailed\", onRequestFailed);\n\n // Close the page after use\n await page.close().catch(() => {});\n }\n}\n","import type { Request, Response } from \"express\";\nimport type { BrowserManager } from \"./browser\";\nimport { generatePdf, type PdfResult } from \"./pdf\";\n\ninterface GenerateRequestBody {\n html?: string;\n options?: {\n timeout?: number;\n printBackground?: boolean;\n preferCSSPageSize?: boolean;\n };\n}\n\ninterface GenerateHandlerOptions {\n /** Default timeout in ms (default: 30000) */\n timeout?: number;\n /** Optional logger for PDF generation results */\n onSuccess?: (result: PdfResult) => void;\n /** Optional logger for errors */\n onError?: (error: string) => void;\n}\n\n/**\n * Create a /generate POST handler for PDF generation\n *\n * This is shared between `dev` and `serve` commands to avoid duplication.\n * Each server provides its own BrowserManager instance.\n *\n * @example\n * ```ts\n * const browserManager = new BrowserManager({ maxConcurrent: 5 });\n * app.post(\"/generate\", createGenerateHandler(browserManager));\n * ```\n */\nexport function createGenerateHandler(\n browserManager: BrowserManager,\n options: GenerateHandlerOptions = {}\n) {\n const { timeout = 30000, onSuccess, onError } = options;\n\n return async (req: Request, res: Response) => {\n const { html, options: pdfOptions } = req.body as GenerateRequestBody;\n const format = req.query.format as string | undefined;\n\n if (!html) {\n res.status(400).json({ error: \"HTML content is required\" });\n return;\n }\n\n // Return HTML directly if format=html (for debugging)\n if (format === \"html\") {\n res.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\n res.send(html);\n return;\n }\n\n try {\n const result = await browserManager.withPage(async (page) => {\n return generatePdf(page, html, {\n ...pdfOptions,\n timeout: pdfOptions?.timeout ?? timeout,\n });\n });\n\n // Set response headers with metrics\n res.setHeader(\"Content-Type\", \"application/pdf\");\n res.setHeader(\"X-PDFN-Total-Time\", result.metrics.total.toString());\n res.setHeader(\"X-PDFN-Content-Load\", result.metrics.contentLoad.toString());\n res.setHeader(\"X-PDFN-PagedJs-Time\", result.metrics.pagedJs.toString());\n res.setHeader(\"X-PDFN-PDF-Capture\", result.metrics.pdfCapture.toString());\n res.setHeader(\"X-PDFN-Page-Count\", result.metrics.pageCount.toString());\n res.setHeader(\"X-PDFN-PDF-Size\", result.metrics.pdfSize.toString());\n\n // Attach result for logging middleware (used by serve command)\n (res as any)._pdfResult = result;\n\n // Call success callback if provided\n onSuccess?.(result);\n\n res.send(result.buffer);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unknown error\";\n\n // Call error callback if provided\n onError?.(message);\n\n if (message.includes(\"Server busy\")) {\n res.status(503).json({ error: message });\n return;\n }\n\n res.status(500).json({ error: message });\n }\n };\n}\n","import { existsSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { config } from \"dotenv\";\n\n/**\n * Load environment variables following Vite's pattern.\n * Priority (later overrides earlier):\n * .env → .env.local → .env.[mode] → .env.[mode].local\n *\n * @param mode - Environment mode (e.g., \"development\", \"production\")\n */\nexport function loadEnv(mode: string): void {\n const cwd = process.cwd();\n\n // Files in order of priority (first loaded = lowest priority)\n const envFiles = [\n \".env\",\n \".env.local\",\n `.env.${mode}`,\n `.env.${mode}.local`,\n ];\n\n for (const file of envFiles) {\n const filePath = resolve(cwd, file);\n if (existsSync(filePath)) {\n // quiet: true suppresses dotenv's verbose output in v17+\n config({ path: filePath, override: true, quiet: true });\n }\n }\n}\n","import { Command } from \"commander\";\nimport { existsSync, mkdirSync, copyFileSync, readFileSync } from \"fs\";\nimport { join, dirname } from \"path\";\nimport { fileURLToPath } from \"url\";\nimport chalk from \"chalk\";\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\n\n// Available templates with descriptions\nconst TEMPLATES: Record<string, { name: string; description: string; pageSize: string }> = {\n invoice: {\n name: \"Invoice\",\n description: \"Professional invoice with itemized billing\",\n pageSize: \"A4\",\n },\n letter: {\n name: \"Business Letter\",\n description: \"US business correspondence\",\n pageSize: \"Letter\",\n },\n contract: {\n name: \"Contract\",\n description: \"Legal service agreement with terms\",\n pageSize: \"Legal\",\n },\n ticket: {\n name: \"Event Ticket\",\n description: \"Admission ticket with QR placeholder\",\n pageSize: \"A5\",\n },\n poster: {\n name: \"Poster\",\n description: \"Event poster (landscape)\",\n pageSize: \"Tabloid\",\n },\n report: {\n name: \"Sales Report\",\n description: \"Report with Recharts (npm install recharts)\",\n pageSize: \"A4\",\n },\n};\n\ntype TemplateStyle = \"inline\" | \"tailwind\";\n\nfunction getTemplatesDir(style: TemplateStyle): string {\n // After build, cli.js is in dist/, templates are in templates/\n // So from dist/ we go up one level to package root, then into templates/<style>/\n return join(__dirname, \"..\", \"templates\", style);\n}\n\n/**\n * Check if @pdfn/tailwind is installed in user's project\n * Checks both package.json and node_modules for compatibility with npm, pnpm, yarn\n */\nfunction isTailwindInstalled(cwd: string): boolean {\n // First check package.json for explicit dependency\n try {\n const pkgPath = join(cwd, \"package.json\");\n if (existsSync(pkgPath)) {\n const pkg = JSON.parse(readFileSync(pkgPath, \"utf-8\"));\n if (pkg.dependencies?.[\"@pdfn/tailwind\"] || pkg.devDependencies?.[\"@pdfn/tailwind\"]) {\n return true;\n }\n }\n } catch {\n // Ignore parse errors\n }\n\n // Fall back to checking node_modules (for linked packages, global installs, etc.)\n const tailwindPath = join(cwd, \"node_modules\", \"@pdfn\", \"tailwind\");\n return existsSync(tailwindPath);\n}\n\nexport const addCommand = new Command(\"add\")\n .description(\"Add a starter template to your project\")\n .argument(\"[template]\", \"Template name (e.g., invoice, letter, contract)\")\n .option(\"--list\", \"List available templates\")\n .option(\"--tailwind\", \"Use Tailwind CSS styling (requires @pdfn/tailwind)\")\n .option(\"--inline\", \"Use inline styles (default)\")\n .option(\"--force\", \"Overwrite existing files\")\n .action(async (template, options) => {\n const cwd = process.cwd();\n const outputDir = \"./pdfn-templates\";\n\n // List templates\n if (options.list || !template) {\n console.log(chalk.bold(\"\\nAvailable templates:\\n\"));\n\n for (const [id, info] of Object.entries(TEMPLATES)) {\n console.log(` ${chalk.cyan(id.padEnd(12))} ${info.description} ${chalk.dim(`(${info.pageSize})`)}`);\n }\n\n console.log(chalk.dim(\"\\nUsage: pdfn add <template> [--tailwind]\"));\n console.log(chalk.dim(\"Example: pdfn add invoice\"));\n console.log(chalk.dim(\"Example: pdfn add invoice --tailwind\\n\"));\n console.log(chalk.bold(\"Options:\"));\n console.log(chalk.dim(\" --inline Use inline styles (default)\"));\n console.log(chalk.dim(\" --tailwind Use Tailwind CSS (requires @pdfn/tailwind)\\n\"));\n return;\n }\n\n // Validate template\n if (!TEMPLATES[template]) {\n console.error(chalk.red(`\\nError: Unknown template \"${template}\"`));\n console.log(chalk.dim(\"Run 'pdfn add --list' to see available templates\\n\"));\n process.exit(1);\n }\n\n // Determine style (default to inline)\n const style: TemplateStyle = options.tailwind ? \"tailwind\" : \"inline\";\n\n // Check for @pdfn/tailwind if tailwind style requested\n if (style === \"tailwind\" && !isTailwindInstalled(cwd)) {\n console.error(chalk.yellow(`\\n⚠ @pdfn/tailwind is not installed.`));\n console.log(chalk.dim(\"Install it first to use Tailwind templates:\\n\"));\n console.log(chalk.cyan(\" npm install @pdfn/tailwind\\n\"));\n console.log(chalk.dim(\"Or use inline styles (default):\\n\"));\n console.log(chalk.cyan(` pdfn add ${template}\\n`));\n process.exit(1);\n }\n\n const templatesDir = getTemplatesDir(style);\n const sourceFile = join(templatesDir, `${template}.tsx`);\n const outputFile = join(outputDir, `${template}.tsx`);\n\n // Check if source template exists\n if (!existsSync(sourceFile)) {\n console.error(chalk.red(`\\nError: Template file not found: ${sourceFile}`));\n console.log(chalk.dim(\"This may be a package installation issue.\\n\"));\n process.exit(1);\n }\n\n // Create output directory\n if (!existsSync(outputDir)) {\n mkdirSync(outputDir, { recursive: true });\n console.log(chalk.dim(`Created ${outputDir}/`));\n }\n\n // Check if file already exists\n if (existsSync(outputFile) && !options.force) {\n console.error(chalk.yellow(`\\nFile already exists: ${outputFile}`));\n console.log(chalk.dim(\"Use --force to overwrite\\n\"));\n process.exit(1);\n }\n\n // Copy template\n try {\n copyFileSync(sourceFile, outputFile);\n\n const info = TEMPLATES[template];\n const styleLabel = style === \"tailwind\" ? chalk.cyan(\" (Tailwind)\") : chalk.dim(\" (inline styles)\");\n console.log(chalk.green(`\\n✓ Added ${info.name} template`) + styleLabel);\n console.log(chalk.dim(` ${outputFile}\\n`));\n\n // Show next steps\n console.log(chalk.bold(\"Next steps:\"));\n console.log(chalk.dim(` 1. Edit ${outputFile} to customize`));\n console.log(chalk.dim(` 2. Run 'npx pdfn dev' to preview\\n`));\n\n // Additional info for tailwind\n if (style === \"tailwind\") {\n console.log(chalk.dim(\"Note: Tailwind templates require @pdfn/tailwind to be installed.\\n\"));\n }\n } catch (error) {\n console.error(chalk.red(`\\nError copying template: ${error}`));\n process.exit(1);\n }\n });\n\n// Also export the template info for use by dev server\nexport { TEMPLATES };\n"],"mappings":"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;AAAA;AAAA;AAAA,EAGxC,EACC,KAAK,EAAE;AAEV,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAseD,UAAU,SAAS,IACf,eACA,uFACN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YA8BM,iBACI,kGACA,+GACN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BA8FkB,iBAAiB,IAAI,cAAc,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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","names":["config","config","resolve","Command","existsSync","resolve","puppeteer","startTime","existsSync","config","resolve","React","options","puppeteer","Command","existsSync","readFileSync","join","chalk","Command"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pdfn",
3
- "version": "0.6.1",
3
+ "version": "0.6.2",
4
4
  "description": "Dev server and PDF generation for print-ready PDFs",
5
5
  "type": "module",
6
6
  "bin": {
@@ -48,9 +48,9 @@
48
48
  "puppeteer": "^24.35.0",
49
49
  "vite": "^7.3.0",
50
50
  "ws": "^8.18.3",
51
+ "@pdfn/react": "0.5.1",
51
52
  "@pdfn/client": "0.1.0",
52
- "@pdfn/vite": "0.5.1",
53
- "@pdfn/react": "0.5.0"
53
+ "@pdfn/vite": "0.5.1"
54
54
  },
55
55
  "devDependencies": {
56
56
  "@types/express": "^5.0.6",
@@ -61,8 +61,8 @@
61
61
  "tsup": "^8.5.1",
62
62
  "typescript": "^5.9.3",
63
63
  "vitest": "^4.0.17",
64
- "@pdfn/typescript-config": "0.0.0",
65
- "@pdfn/eslint-config": "0.0.0"
64
+ "@pdfn/eslint-config": "0.0.0",
65
+ "@pdfn/typescript-config": "0.0.0"
66
66
  },
67
67
  "scripts": {
68
68
  "build": "tsup",