diff --git a/404.html b/404.html index b7f19a9..46f0eab 100644 --- a/404.html +++ b/404.html @@ -4,7 +4,7 @@ CmdForge - + diff --git a/__server/server.bundle.js b/__server/server.bundle.js deleted file mode 100644 index edfcac2..0000000 --- a/__server/server.bundle.js +++ /dev/null @@ -1,45981 +0,0 @@ -/******/ (() => { // webpackBootstrap -/******/ var __webpack_modules__ = ({ - -/***/ 10 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_useIsBrowser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2303); -/* harmony import */ var _docusaurus_Translate__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(986); -/* harmony import */ var _theme_Icon_LightMode__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(8495); -/* harmony import */ var _theme_Icon_DarkMode__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(9079); -/* harmony import */ var _theme_Icon_SystemColorMode__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(4943); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(3384); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// The order of color modes is defined here, and can be customized with swizzle -function getNextColorMode(colorMode,respectPrefersColorScheme){// 2-value transition -if(!respectPrefersColorScheme){return colorMode==='dark'?'light':'dark';}// 3-value transition -switch(colorMode){case null:return'light';case'light':return'dark';case'dark':return null;default:throw new Error(`unexpected color mode ${colorMode}`);}}function getColorModeLabel(colorMode){switch(colorMode){case null:return (0,_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_3__/* .translate */ .T)({message:'system mode',id:'theme.colorToggle.ariaLabel.mode.system',description:'The name for the system color mode'});case'light':return (0,_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_3__/* .translate */ .T)({message:'light mode',id:'theme.colorToggle.ariaLabel.mode.light',description:'The name for the light color mode'});case'dark':return (0,_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_3__/* .translate */ .T)({message:'dark mode',id:'theme.colorToggle.ariaLabel.mode.dark',description:'The name for the dark color mode'});default:throw new Error(`unexpected color mode ${colorMode}`);}}function getColorModeAriaLabel(colorMode){return (0,_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_3__/* .translate */ .T)({message:'Switch between dark and light mode (currently {mode})',id:'theme.colorToggle.ariaLabel',description:'The ARIA label for the color mode toggle'},{mode:getColorModeLabel(colorMode)});}function CurrentColorModeIcon(){// 3 icons are always rendered for technical reasons -// We use "data-theme-choice" to render the correct one -// This must work even before React hydrates -return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.Fragment,{children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(_theme_Icon_LightMode__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A// a18y is handled at the button level, -// not relying on button content (svg icons) -,{"aria-hidden":true,className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)((_styles_module_css__WEBPACK_IMPORTED_MODULE_7___default().toggleIcon),(_styles_module_css__WEBPACK_IMPORTED_MODULE_7___default().lightToggleIcon))}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(_theme_Icon_DarkMode__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A,{"aria-hidden":true,className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)((_styles_module_css__WEBPACK_IMPORTED_MODULE_7___default().toggleIcon),(_styles_module_css__WEBPACK_IMPORTED_MODULE_7___default().darkToggleIcon))}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(_theme_Icon_SystemColorMode__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A,{"aria-hidden":true,className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)((_styles_module_css__WEBPACK_IMPORTED_MODULE_7___default().toggleIcon),(_styles_module_css__WEBPACK_IMPORTED_MODULE_7___default().systemToggleIcon))})]});}function ColorModeToggle({className,buttonClassName,respectPrefersColorScheme,value,onChange}){const isBrowser=(0,_docusaurus_useIsBrowser__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)();return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)("div",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)((_styles_module_css__WEBPACK_IMPORTED_MODULE_7___default().toggle),className),children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)("button",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('clean-btn',(_styles_module_css__WEBPACK_IMPORTED_MODULE_7___default().toggleButton),!isBrowser&&(_styles_module_css__WEBPACK_IMPORTED_MODULE_7___default().toggleButtonDisabled),buttonClassName),type:"button",onClick:()=>onChange(getNextColorMode(value,respectPrefersColorScheme)),disabled:!isBrowser,title:getColorModeLabel(value),"aria-label":getColorModeAriaLabel(value),children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(CurrentColorModeIcon,{})})});}/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.memo(ColorModeToggle)); - -/***/ }, - -/***/ 32 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ TOC) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _theme_TOCItems__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(9180); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(5490); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// Using a custom className -// This prevents TOCInline/TOCCollapsible getting highlighted by mistake -const LINK_CLASS_NAME='table-of-contents__link toc-highlight';const LINK_ACTIVE_CLASS_NAME='table-of-contents__link--active';function TOC({className,...props}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("div",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)((_styles_module_css__WEBPACK_IMPORTED_MODULE_3___default().tableOfContents),'thin-scrollbar',className),children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_theme_TOCItems__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{...props,linkClassName:LINK_CLASS_NAME,linkActiveClassName:LINK_ACTIVE_CLASS_NAME})});} - -/***/ }, - -/***/ 36 -(module) { - -// Exports -module.exports = { - "docCardListItem": `docCardListItem_W1sv` -}; - - -/***/ }, - -/***/ 63 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ WordWrapButton) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(986); -/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4291); -/* harmony import */ var _theme_CodeBlock_Buttons_Button__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(6907); -/* harmony import */ var _theme_Icon_WordWrap__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(5048); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(4259); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function WordWrapButton({className}){const{wordWrap}=(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_3__/* .useCodeBlockContext */ .Ph)();const canShowButton=wordWrap.isEnabled||wordWrap.isCodeScrollable;if(!canShowButton){return false;}const title=(0,_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__/* .translate */ .T)({id:'theme.CodeBlock.wordWrapToggle',message:'Toggle word wrap',description:'The title attribute for toggle word wrapping button of code block lines'});return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_theme_CodeBlock_Buttons_Button__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A,{onClick:()=>wordWrap.toggle(),className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(className,wordWrap.isEnabled&&(_styles_module_css__WEBPACK_IMPORTED_MODULE_6___default().wordWrapButtonEnabled)),"aria-label":title,title:title,children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_theme_Icon_WordWrap__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A,{className:(_styles_module_css__WEBPACK_IMPORTED_MODULE_6___default().wordWrapButtonIcon),"aria-hidden":"true"})});} - -/***/ }, - -/***/ 83 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ BackToTopButton) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(986); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7559); -/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(7663); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(1871); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function BackToTopButton(){const{shown,scrollToTop}=(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_4__/* .useBackToTopButton */ .H)({threshold:300});return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("button",{"aria-label":(0,_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__/* .translate */ .T)({id:'theme.BackToTopButton.buttonAriaLabel',message:'Scroll back to top',description:'The ARIA label for the back to top button'}),className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('clean-btn',_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__/* .ThemeClassNames */ .G.common.backToTopButton,(_styles_module_css__WEBPACK_IMPORTED_MODULE_5___default().backToTopButton),shown&&(_styles_module_css__WEBPACK_IMPORTED_MODULE_5___default().backToTopButtonShow)),type:"button",onClick:scrollToTop});} - -/***/ }, - -/***/ 99 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ CollapseButton) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(986); -/* harmony import */ var _theme_Icon_Arrow__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(5861); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(5599); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function CollapseButton({onClick}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("button",{type:"button",title:(0,_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__/* .translate */ .T)({id:'theme.docs.sidebar.collapseButtonTitle',message:'Collapse sidebar',description:'The title attribute for collapse button of doc sidebar'}),"aria-label":(0,_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__/* .translate */ .T)({id:'theme.docs.sidebar.collapseButtonAriaLabel',message:'Collapse sidebar',description:'The title attribute for collapse button of doc sidebar'}),className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('button button--secondary button--outline',(_styles_module_css__WEBPACK_IMPORTED_MODULE_4___default().collapseSidebarButton)),onClick:onClick,children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_theme_Icon_Arrow__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A,{className:(_styles_module_css__WEBPACK_IMPORTED_MODULE_4___default().collapseSidebarButtonIcon)})});} - -/***/ }, - -/***/ 115 -(module) { - -/* global Map:readonly, Set:readonly, ArrayBuffer:readonly */ - -var hasElementType = typeof Element !== 'undefined'; -var hasMap = typeof Map === 'function'; -var hasSet = typeof Set === 'function'; -var hasArrayBuffer = typeof ArrayBuffer === 'function' && !!ArrayBuffer.isView; - -// Note: We **don't** need `envHasBigInt64Array` in fde es6/index.js - -function equal(a, b) { - // START: fast-deep-equal es6/index.js 3.1.3 - if (a === b) return true; - - if (a && b && typeof a == 'object' && typeof b == 'object') { - if (a.constructor !== b.constructor) return false; - - var length, i, keys; - if (Array.isArray(a)) { - length = a.length; - if (length != b.length) return false; - for (i = length; i-- !== 0;) - if (!equal(a[i], b[i])) return false; - return true; - } - - // START: Modifications: - // 1. Extra `has &&` helpers in initial condition allow es6 code - // to co-exist with es5. - // 2. Replace `for of` with es5 compliant iteration using `for`. - // Basically, take: - // - // ```js - // for (i of a.entries()) - // if (!b.has(i[0])) return false; - // ``` - // - // ... and convert to: - // - // ```js - // it = a.entries(); - // while (!(i = it.next()).done) - // if (!b.has(i.value[0])) return false; - // ``` - // - // **Note**: `i` access switches to `i.value`. - var it; - if (hasMap && (a instanceof Map) && (b instanceof Map)) { - if (a.size !== b.size) return false; - it = a.entries(); - while (!(i = it.next()).done) - if (!b.has(i.value[0])) return false; - it = a.entries(); - while (!(i = it.next()).done) - if (!equal(i.value[1], b.get(i.value[0]))) return false; - return true; - } - - if (hasSet && (a instanceof Set) && (b instanceof Set)) { - if (a.size !== b.size) return false; - it = a.entries(); - while (!(i = it.next()).done) - if (!b.has(i.value[0])) return false; - return true; - } - // END: Modifications - - if (hasArrayBuffer && ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) { - length = a.length; - if (length != b.length) return false; - for (i = length; i-- !== 0;) - if (a[i] !== b[i]) return false; - return true; - } - - if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags; - // START: Modifications: - // Apply guards for `Object.create(null)` handling. See: - // - https://github.com/FormidableLabs/react-fast-compare/issues/64 - // - https://github.com/epoberezkin/fast-deep-equal/issues/49 - if (a.valueOf !== Object.prototype.valueOf && typeof a.valueOf === 'function' && typeof b.valueOf === 'function') return a.valueOf() === b.valueOf(); - if (a.toString !== Object.prototype.toString && typeof a.toString === 'function' && typeof b.toString === 'function') return a.toString() === b.toString(); - // END: Modifications - - keys = Object.keys(a); - length = keys.length; - if (length !== Object.keys(b).length) return false; - - for (i = length; i-- !== 0;) - if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false; - // END: fast-deep-equal - - // START: react-fast-compare - // custom handling for DOM elements - if (hasElementType && a instanceof Element) return false; - - // custom handling for React/Preact - for (i = length; i-- !== 0;) { - if ((keys[i] === '_owner' || keys[i] === '__v' || keys[i] === '__o') && a.$$typeof) { - // React-specific: avoid traversing React elements' _owner - // Preact-specific: avoid traversing Preact elements' __v and __o - // __v = $_original / $_vnode - // __o = $_owner - // These properties contain circular references and are not needed when - // comparing the actual elements (and not their owners) - // .$$typeof and ._store on just reasonable markers of elements - - continue; - } - - // all other properties should be traversed as usual - if (!equal(a[keys[i]], b[keys[i]])) return false; - } - // END: react-fast-compare - - // START: fast-deep-equal - return true; - } - - return a !== a && b !== b; -} -// end fast-deep-equal - -module.exports = function isEqual(a, b) { - try { - return equal(a, b); - } catch (error) { - if (((error.message || '').match(/stack|recursion/i))) { - // warn on circular references, don't crash - // browsers give this different errors name and messages: - // chrome/safari: "RangeError", "Maximum call stack size exceeded" - // firefox: "InternalError", too much recursion" - // edge: "Error", "Out of stack space" - console.warn('react-fast-compare cannot handle circular refs'); - return false; - } - // some other error. we should definitely know about these - throw error; - } -}; - - -/***/ }, - -/***/ 119 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ FooterLinks) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3106); -/* harmony import */ var _theme_Footer_Links_MultiColumn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6031); -/* harmony import */ var _theme_Footer_Links_Simple__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6234); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function FooterLinks({links}){return (0,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_1__/* .isMultiColumnFooterLinks */ .C)(links)?/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_theme_Footer_Links_MultiColumn__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{columns:links}):/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_theme_Footer_Links_Simple__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A,{links:links});} - -/***/ }, - -/***/ 131 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ HtmlNavbarItem) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function HtmlNavbarItem({value,className,mobile=false,isDropdownItem=false}){const Comp=isDropdownItem?'li':'div';return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(Comp,{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)({navbar__item:!mobile&&!isDropdownItem,'menu__list-item':mobile},className),dangerouslySetInnerHTML:{__html:value}});} - -/***/ }, - -/***/ 180 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ B: () => (/* binding */ Details) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_useBrokenLinks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2521); -/* harmony import */ var _docusaurus_useIsBrowser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(2303); -/* harmony import */ var _Collapsible__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1422); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(6062); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function isInSummary(node){if(!node){return false;}return node.tagName==='SUMMARY'||isInSummary(node.parentElement);}function hasParent(node,parent){if(!node){return false;}return node===parent||hasParent(node.parentElement,parent);}/** - * A mostly un-styled `
` element with smooth collapsing. Provides some - * very lightweight styles, but you should bring your UI. - */function Details({summary,children,...props}){(0,_docusaurus_useBrokenLinks__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)().collectAnchor(props.id);const isBrowser=(0,_docusaurus_useIsBrowser__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)();const detailsRef=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);const{collapsed,setCollapsed}=(0,_Collapsible__WEBPACK_IMPORTED_MODULE_4__/* .useCollapsible */ .u)({initialState:!props.open});// Use a separate state for the actual details prop, because it must be set -// only after animation completes, otherwise close animations won't work -const[open,setOpen]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(props.open);const summaryElement=/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.isValidElement(summary)?summary:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("summary",{children:summary??'Details'});return(/*#__PURE__*/// eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-noninteractive-element-interactions -(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)("details",{...props,ref:detailsRef,open:open,"data-collapsed":collapsed,className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)((_styles_module_css__WEBPACK_IMPORTED_MODULE_5___default().details),isBrowser&&(_styles_module_css__WEBPACK_IMPORTED_MODULE_5___default().isBrowser),props.className),onMouseDown:e=>{const target=e.target;// Prevent a double-click to highlight summary text -if(isInSummary(target)&&e.detail>1){e.preventDefault();}},onClick:e=>{e.stopPropagation();// For isolation of multiple nested details/summary -const target=e.target;const shouldToggle=isInSummary(target)&&hasParent(target,detailsRef.current);if(!shouldToggle){return;}e.preventDefault();if(collapsed){setCollapsed(false);setOpen(true);}else{setCollapsed(true);// Don't do this, it breaks close animation! -// setOpen(false); -}},children:[summaryElement,/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_Collapsible__WEBPACK_IMPORTED_MODULE_4__/* .Collapsible */ .N,{lazy:false// Content might matter for SEO in this case -,collapsed:collapsed,onCollapseTransitionEnd:newCollapsed=>{setCollapsed(newCollapsed);setOpen(!newCollapsed);},children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("div",{className:(_styles_module_css__WEBPACK_IMPORTED_MODULE_5___default().collapsibleContent),children:children})})]}));} - -/***/ }, - -/***/ 188 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ AdmonitionTypeCaution) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(986); -/* harmony import */ var _theme_Admonition_Layout__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7611); -/* harmony import */ var _theme_Admonition_Icon_Warning__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(804); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */const infimaClassName='alert alert--warning';const defaultProps={icon:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_theme_Admonition_Icon_Warning__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A,{}),title:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})};// TODO remove before v4: Caution replaced by Warning -// see https://github.com/facebook/docusaurus/issues/7558 -function AdmonitionTypeCaution(props){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_theme_Admonition_Layout__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A,{...defaultProps,...props,className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(infimaClassName,props.className),children:props.children});} - -/***/ }, - -/***/ 205 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _ExecutionEnvironment__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8193); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - *//** - * This hook is like `useLayoutEffect`, but without the SSR warning. - * It seems hacky but it's used in many React libs (Redux, Formik...). - * Also mentioned here: https://github.com/facebook/react/issues/16956 - * - * It is useful when you need to update a ref as soon as possible after a React - * render (before `useEffect`). - * - * TODO should become unnecessary in React v19? - * https://github.com/facebook/react/pull/26395 - * This was added in core with Docusaurus v3 but kept undocumented on purpose - */const useIsomorphicLayoutEffect=_ExecutionEnvironment__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A.canUseDOM?react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect:react__WEBPACK_IMPORTED_MODULE_0__.useEffect;/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (useIsomorphicLayoutEffect); - -/***/ }, - -/***/ 230 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ assets: () => (/* binding */ assets), -/* harmony export */ contentTitle: () => (/* binding */ contentTitle), -/* harmony export */ "default": () => (/* binding */ MDXContent), -/* harmony export */ frontMatter: () => (/* binding */ frontMatter), -/* harmony export */ metadata: () => (/* reexport default export from named module */ _site_docusaurus_docusaurus_plugin_content_docs_default_site_docs_reference_web_ui_spec_md_edb_json__WEBPACK_IMPORTED_MODULE_0__), -/* harmony export */ toc: () => (/* binding */ toc) -/* harmony export */ }); -/* harmony import */ var _site_docusaurus_docusaurus_plugin_content_docs_default_site_docs_reference_web_ui_spec_md_edb_json__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8437); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4848); -/* harmony import */ var _mdx_js_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(8453); - - -const frontMatter = { - sidebar_label: 'Web UI Design', - sidebar_position: 6, - format: 'md' -}; -const contentTitle = 'CmdForge Web UI Design'; - -const assets = { - -}; - - - -const toc = [{ - "value": "Purpose", - "id": "purpose", - "level": 2 -}, { - "value": "Mission Alignment", - "id": "mission-alignment", - "level": 2 -}, { - "value": "Guiding Principles", - "id": "guiding-principles", - "level": 2 -}, { - "value": "Information Architecture", - "id": "information-architecture", - "level": 2 -}, { - "value": "Visual Design System", - "id": "visual-design-system", - "level": 2 -}, { - "value": "Color Palette", - "id": "color-palette", - "level": 3 -}, { - "value": "Typography", - "id": "typography", - "level": 3 -}, { - "value": "Spacing System", - "id": "spacing-system", - "level": 3 -}, { - "value": "Border Radius", - "id": "border-radius", - "level": 3 -}, { - "value": "Shadow System", - "id": "shadow-system", - "level": 3 -}, { - "value": "Page Requirements", - "id": "page-requirements", - "level": 2 -}, { - "value": "Landing Page (/)", - "id": "landing-page-", - "level": 3 -}, { - "value": "Section 1: Hero (Above the Fold)", - "id": "section-1-hero-above-the-fold", - "level": 4 -}, { - "value": "Section 2: Three Pillars (Why CmdForge?)", - "id": "section-2-three-pillars-why-cmdforge", - "level": 4 -}, { - "value": "Section 3: Featured Tools & Projects", - "id": "section-3-featured-tools--projects", - "level": 4 -}, { - "value": "Section 4: Getting Started", - "id": "section-4-getting-started", - "level": 4 -}, { - "value": "Section 5: Featured Contributor", - "id": "section-5-featured-contributor", - "level": 4 -}, { - "value": "Section 6: Footer Ad Zone (Optional)", - "id": "section-6-footer-ad-zone-optional", - "level": 4 -}, { - "value": "Section 7: Footer", - "id": "section-7-footer", - "level": 4 -}, { - "value": "Docs/Tutorials Pages (/docs/*, /tutorials/*)", - "id": "docstutorials-pages-docs-tutorials", - "level": 3 -}, { - "value": "Tool Detail Page (/tools/{owner}/{name})", - "id": "tool-detail-page-toolsownername", - "level": 3 -}, { - "value": "Registry Browse Page (/tools)", - "id": "registry-browse-page-tools", - "level": 3 -}, { - "value": "Publisher Dashboard (/dashboard)", - "id": "publisher-dashboard-dashboard", - "level": 3 -}, { - "value": "Donate Page (/donate)", - "id": "donate-page-donate", - "level": 3 -}, { - "value": "Component Library", - "id": "component-library", - "level": 2 -}, { - "value": "Buttons", - "id": "buttons", - "level": 3 -}, { - "value": "Cards", - "id": "cards", - "level": 3 -}, { - "value": "Navigation", - "id": "navigation", - "level": 3 -}, { - "value": "Form Elements", - "id": "form-elements", - "level": 3 -}, { - "value": "Badges and Tags", - "id": "badges-and-tags", - "level": 3 -}, { - "value": "Code Blocks", - "id": "code-blocks", - "level": 3 -}, { - "value": "Callout Boxes", - "id": "callout-boxes", - "level": 3 -}, { - "value": "Loading States", - "id": "loading-states", - "level": 3 -}, { - "value": "Responsive Design", - "id": "responsive-design", - "level": 2 -}, { - "value": "Breakpoints", - "id": "breakpoints", - "level": 3 -}, { - "value": "Layout Adaptations", - "id": "layout-adaptations", - "level": 3 -}, { - "value": "Touch Targets", - "id": "touch-targets", - "level": 3 -}, { - "value": "Mobile-Specific Considerations", - "id": "mobile-specific-considerations", - "level": 3 -}, { - "value": "Performance Budgets", - "id": "performance-budgets", - "level": 2 -}, { - "value": "Core Web Vitals Targets", - "id": "core-web-vitals-targets", - "level": 3 -}, { - "value": "Resource Budgets", - "id": "resource-budgets", - "level": 3 -}, { - "value": "Loading Strategy", - "id": "loading-strategy", - "level": 3 -}, { - "value": "Caching Strategy", - "id": "caching-strategy", - "level": 3 -}, { - "value": "Performance Monitoring", - "id": "performance-monitoring", - "level": 3 -}, { - "value": "Error States and Fallbacks", - "id": "error-states-and-fallbacks", - "level": 2 -}, { - "value": "Network Errors", - "id": "network-errors", - "level": 3 -}, { - "value": "Tool Not Found (404):", - "id": "tool-not-found-404", - "level": 3 -}, { - "value": "Search No Results:", - "id": "search-no-results", - "level": 3 -}, { - "value": "Offline Mode", - "id": "offline-mode", - "level": 3 -}, { - "value": "Form Errors", - "id": "form-errors", - "level": 3 -}, { - "value": "Ad and Revenue Strategy", - "id": "ad-and-revenue-strategy", - "level": 2 -}, { - "value": "Monetization Extensions (Optional)", - "id": "monetization-extensions-optional", - "level": 2 -}, { - "value": "Data and Governance", - "id": "data-and-governance", - "level": 2 -}, { - "value": "Privacy and Consent", - "id": "privacy-and-consent", - "level": 2 -}, { - "value": "UX and Accessibility", - "id": "ux-and-accessibility", - "level": 2 -}, { - "value": "Tech Stack (Phase 7 Target)", - "id": "tech-stack-phase-7-target", - "level": 2 -}, { - "value": "Auth and Session Model", - "id": "auth-and-session-model", - "level": 2 -}, { - "value": "API Surfaces for Web UI", - "id": "api-surfaces-for-web-ui", - "level": 2 -}, { - "value": "Payments and Donations (Optional)", - "id": "payments-and-donations-optional", - "level": 2 -}, { - "value": "Moderation and Abuse Reporting", - "id": "moderation-and-abuse-reporting", - "level": 2 -}, { - "value": "Media and Asset Handling", - "id": "media-and-asset-handling", - "level": 2 -}, { - "value": "Caching and SEO Serving", - "id": "caching-and-seo-serving", - "level": 2 -}, { - "value": "SEO Strategy", - "id": "seo-strategy", - "level": 2 -}, { - "value": "Technical SEO", - "id": "technical-seo", - "level": 3 -}, { - "value": "Structured Data (Schema.org)", - "id": "structured-data-schemaorg", - "level": 3 -}, { - "value": "Open Graph & Social Sharing", - "id": "open-graph--social-sharing", - "level": 3 -}, { - "value": "Sitemap", - "id": "sitemap", - "level": 3 -}, { - "value": "robots.txt", - "id": "robotstxt", - "level": 3 -}, { - "value": "Canonical URLs", - "id": "canonical-urls", - "level": 3 -}, { - "value": "Performance for SEO", - "id": "performance-for-seo", - "level": 3 -}, { - "value": "Content Strategy", - "id": "content-strategy", - "level": 2 -}, { - "value": "Risks and Mitigations", - "id": "risks-and-mitigations", - "level": 2 -}, { - "value": "Phase 7 Implementation Checklist", - "id": "phase-7-implementation-checklist", - "level": 2 -}, { - "value": "7.1 Foundation & Setup", - "id": "71-foundation--setup", - "level": 3 -}, { - "value": "7.2 Core Templates & Components", - "id": "72-core-templates--components", - "level": 3 -}, { - "value": "7.3 Landing Page", - "id": "73-landing-page", - "level": 3 -}, { - "value": "7.4 Registry Pages (Ad-Free)", - "id": "74-registry-pages-ad-free", - "level": 3 -}, { - "value": "7.5 Documentation & Tutorials", - "id": "75-documentation--tutorials", - "level": 3 -}, { - "value": "7.6 Authentication & Dashboard", - "id": "76-authentication--dashboard", - "level": 3 -}, { - "value": "7.7 Privacy & Consent", - "id": "77-privacy--consent", - "level": 3 -}, { - "value": "7.8 Ads & Monetization", - "id": "78-ads--monetization", - "level": 3 -}, { - "value": "7.9 SEO & Performance", - "id": "79-seo--performance", - "level": 3 -}, { - "value": "7.10 Testing & QA", - "id": "710-testing--qa", - "level": 3 -}, { - "value": "7.11 Launch Preparation", - "id": "711-launch-preparation", - "level": 3 -}, { - "value": "API Endpoints for Web UI", - "id": "api-endpoints-for-web-ui", - "level": 2 -}, { - "value": "Diagram References", - "id": "diagram-references", - "level": 2 -}, { - "value": "Deployment Guide", - "id": "deployment-guide", - "level": 2 -}, { - "value": "Requirements", - "id": "requirements", - "level": 3 -}, { - "value": "Quick Start (Development)", - "id": "quick-start-development", - "level": 3 -}, { - "value": "Production Deployment", - "id": "production-deployment", - "level": 3 -}, { - "value": "1. Environment Variables", - "id": "1-environment-variables", - "level": 4 -}, { - "value": "2. Database Location", - "id": "2-database-location", - "level": 4 -}, { - "value": "3. Running with systemd", - "id": "3-running-with-systemd", - "level": 4 -}, { - "value": "4. Reverse Proxy (nginx)", - "id": "4-reverse-proxy-nginx", - "level": 4 -}, { - "value": "5. SSL with Certbot", - "id": "5-ssl-with-certbot", - "level": 4 -}, { - "value": "Tailwind CSS Build", - "id": "tailwind-css-build", - "level": 3 -}, { - "value": "Health Check", - "id": "health-check", - "level": 3 -}, { - "value": "Troubleshooting", - "id": "troubleshooting", - "level": 3 -}, { - "value": "Future Considerations (Phase 8+)", - "id": "future-considerations-phase-8", - "level": 2 -}]; -function _createMdxContent(props) { - const _components = { - code: "code", - h1: "h1", - h2: "h2", - h3: "h3", - h4: "h4", - header: "header", - input: "input", - li: "li", - ol: "ol", - p: "p", - pre: "pre", - strong: "strong", - table: "table", - tbody: "tbody", - td: "td", - th: "th", - thead: "thead", - tr: "tr", - ul: "ul", - ...(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__/* .useMDXComponents */ .R)(), - ...props.components - }; - return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.Fragment, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.header, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h1, { - id: "cmdforge-web-ui-design", - children: "CmdForge Web UI Design" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "purpose", - children: "Purpose" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Deliver a professional web front-end that explains CmdForge, helps users discover tools, and supports a collaborative ecosystem. The site should drive sustainable revenue without undermining trust or usability." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "mission-alignment", - children: "Mission Alignment" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: ["This web UI serves the broader CmdForge mission: to provide a ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "universally accessible development ecosystem" - }), " that empowers regular people to collaborate and build upon each other's progress rather than compete. Revenue generated supports:"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Maintaining and expanding the project" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Future hosting of AI models for users with less access to paid services" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Building a sustainable, community-first platform" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "The UI design must reflect these values through its structure, content, and monetization approach." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "guiding-principles", - children: "Guiding Principles" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Utility first" - }), ": Documentation, tutorials, and examples are the primary draw."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Trust and clarity" - }), ": Ads and monetization are transparent, minimal, and never block core flows."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Collaboration over competition" - }), ": Highlight contributors, shared projects, and community learning."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Performance and accessibility" - }), ": Fast, readable, WCAG 2.1 AA target."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Unix philosophy" - }), ": Composable, provider-agnostic, YAML-based tools—the UI should communicate this clearly."] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "information-architecture", - children: "Information Architecture" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Public, ad-supported (Tier 1):" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/" - }), " landing"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/docs/*" - }), " documentation"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/tutorials/*" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/examples" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/blog" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/about" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/donate" - }) - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Registry (Tier 2, ad-free):" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/tools" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/tools/{owner}/{name}" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/categories" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/categories/{name}" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/search" - }) - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Community (Tier 3, light ads):" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/forum" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/contributors" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/announcements" - }) - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Publisher dashboard (auth-only):" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/register" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/login" - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/dashboard/tools" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/dashboard/connections" - }), " (manage connected apps)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/dashboard/settings" - }) - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "API:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/api/v1/*" - }), " (shared with CLI)"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "visual-design-system", - children: "Visual Design System" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "color-palette", - children: "Color Palette" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Role" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Color" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Hex" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Usage" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Primary" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Indigo" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "#6366F1" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "CTAs, active states, brand identity" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Secondary" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Cyan" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "#06B6D4" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Secondary actions, accents, links" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Background" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Off-white" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "#F9FAFB" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Page background" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Surface" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "White" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "#FFFFFF" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Cards, content areas" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Text Primary" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Dark gray" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "#1F2937" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Headlines, body text" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Text Secondary" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Medium gray" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "#6B7280" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Descriptions, metadata" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Text Muted" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Light gray" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "#9CA3AF" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Timestamps, hints" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Border" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Light gray" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "#E5E7EB" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Card borders, dividers" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Success" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Green" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "#10B981" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Success states, confirmations" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Warning" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Amber" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "#F59E0B" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Warnings, deprecation notices" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Error" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Red" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "#EF4444" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Error states, critical alerts" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Header" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Dark slate" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "#2C3E50" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Header background" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Ad Container" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Light blue" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "#DBEAFE" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Ad zone background (distinct from content)" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Sponsored" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Light amber" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "#FEF3C7" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Sponsored content background" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Contrast Requirements:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Body text: minimum 4.5:1 ratio (WCAG AA)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Large text (18px+): minimum 3:1 ratio" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "UI components: minimum 3:1 ratio against adjacent colors" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "typography", - children: "Typography" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Element" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Font" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Size" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Weight" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Line Height" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "H1" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Inter/system-ui" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "36px (2.25rem)" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "700" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "1.2" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "H2" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Inter/system-ui" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "24px (1.5rem)" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "700" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "1.3" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "H3" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Inter/system-ui" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "20px (1.25rem)" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "600" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "1.4" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "H4" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Inter/system-ui" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "18px (1.125rem)" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "600" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "1.4" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Body" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Inter/system-ui" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "16px (1rem)" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "400" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "1.6" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Small" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Inter/system-ui" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "14px (0.875rem)" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "400" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "1.5" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Code" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "JetBrains Mono/monospace" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "14px" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "400" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "1.5" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Code block" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "JetBrains Mono/monospace" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "13px" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "400" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "1.6" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Font Stack:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-css", - children: "--font-sans: 'Inter', ui-sans-serif, system-ui, -apple-system, sans-serif;\n--font-mono: 'JetBrains Mono', ui-monospace, 'Cascadia Code', monospace;\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "spacing-system", - children: "Spacing System" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Use an 8px base grid for consistent spacing:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Token" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Value" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Usage" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "--space-1" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "4px" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Tight spacing, icon margins" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "--space-2" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "8px" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Element gaps" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "--space-3" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "12px" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Small component padding" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "--space-4" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "16px" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Card padding, section gaps" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "--space-6" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "24px" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Section padding" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "--space-8" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "32px" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Large gaps" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "--space-12" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "48px" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Section margins" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "--space-16" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "64px" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Major section separators" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "border-radius", - children: "Border Radius" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Token" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Value" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Usage" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "--radius-sm" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "4px" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Buttons, badges" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "--radius-md" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "8px" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Cards, inputs" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "--radius-lg" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "12px" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Modals, large cards" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "--radius-full" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "9999px" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Avatars, pills" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "shadow-system", - children: "Shadow System" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-css", - children: "--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);\n--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1);\n--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1);\n--shadow-hover: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1);\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "page-requirements", - children: "Page Requirements" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.h3, { - id: "landing-page-", - children: ["Landing Page (", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/" - }), ")"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Purpose:" - }), " Convert visitors to users by clearly communicating CmdForge' value proposition and providing immediate paths to explore."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Reference mockup:" - }), " ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "discussions/diagrams/cmdforge-registry_rob_6.svg" - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h4, { - id: "section-1-hero-above-the-fold", - children: "Section 1: Hero (Above the Fold)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "┌─────────────────────────────────────────────────────────────────┐\n│ [CmdForge] Docs Tutorials Registry Community About 🔍 │\n├─────────────────────────────────────────────────────────────────┤\n│ │\n│ Build Custom AI Commands in YAML │\n│ ───────────────────────────────────────────────────────── │\n│ Create Unix-style pipeable tools that work with any AI │\n│ provider. Provider-agnostic and composable. │\n│ │\n│ ┌──────────────────────────────────────────────────────┐ │\n│ │ $ pip install cmdforge && cmdforge init │ [📋]│\n│ └──────────────────────────────────────────────────────┘ │\n│ │\n│ [Get Started] [View Tutorials] │\n│ │\n└─────────────────────────────────────────────────────────────────┘\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Content:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Headline:" - }), " \"Build Custom AI Commands in YAML\" (benefit-focused, differentiating)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Subheadline:" - }), " \"Create Unix-style pipeable tools that work with any AI provider. Provider-agnostic and composable for ultimate flexibility.\""] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Install snippet:" - }), " ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "pip install cmdforge && cmdforge init" - }), " with copy button"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Primary CTA:" - }), " \"Get Started\" → links to ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/docs/getting-started" - }), " (indigo background)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Secondary CTA:" - }), " \"View Tutorials\" → links to ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/tutorials" - }), " (outlined, cyan border)"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Design Notes:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Hero background: white card (#FFFFFF) with subtle shadow on off-white page" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Maximum content width: 1100px centered" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Install snippet: monospace font, light gray background (#E0E0E0), copy icon on right" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h4, { - id: "section-2-three-pillars-why-cmdforge", - children: "Section 2: Three Pillars (Why CmdForge?)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "┌─────────────────────────────────────────────────────────────────┐\n│ Why CmdForge? │\n├──────────────────┬──────────────────┬────────────────────────────┤\n│ [✓] Easy │ [⚡] Powerful │ [👥] Community │\n│ │ │ │\n│ Simple YAML │ Any AI │ Share, discover, │\n│ configuration │ provider, │ contribute to a │\n│ for quick │ compose │ growing ecosystem. │\n│ setup. │ complex │ │\n│ │ workflows. │ │\n└──────────────────┴──────────────────┴────────────────────────────┘\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Content:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Pillar 1 - Easy to Use:" - }), " Icon in indigo circle, \"Simple YAML configuration for quick setup.\""] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Pillar 2 - Powerful:" - }), " Icon in cyan circle, \"Leverage any AI provider, compose complex workflows.\""] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Pillar 3 - Community:" - }), " Icon in indigo circle, \"Share, discover, and contribute to a growing ecosystem.\""] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Design Notes:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Each pillar: white card with 1px border, subtle shadow on hover" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Icon circles: 40px diameter with pillar icon centered" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Equal width columns (3 across on desktop)" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h4, { - id: "section-3-featured-tools--projects", - children: "Section 3: Featured Tools & Projects" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "┌─────────────────────────────────────────────────────────────────┐\n│ Featured Tools & Projects │\n├──────────────────┬──────────────────┬────────────────────────────┤\n│ [Category] │ [Category] │ [Category] │\n│ ● Tool Title │ ● Tool Title │ ● Tool Title │\n│ Description... │ Description... │ Description... │\n│ Author: name │ Author: name │ Author: name │\n│ Downloads: 1.2K │ Downloads: 800 │ Downloads: 2.5K │\n│ ┌────────────┐ │ ┌────────────┐ │ ┌────────────┐ │\n│ │run command │ │ │run command │ │ │run command │ │\n│ └────────────┘ │ └────────────┘ │ └────────────┘ │\n├──────────────────┼──────────────────┼────────────────────────────┤\n│ [Row 2...] │ [Row 2...] │ [Row 2...] │\n└──────────────────┴──────────────────┴────────────────────────────┘\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Content (per card):" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Category badge (top-right, cyan pill)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Tool icon/avatar (indigo circle)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Tool name (bold, 18px)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Short description (14px, secondary text)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Author attribution" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Download count with icon" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "One-line install command in code box" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Data Source:" - }), " ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /api/v1/tools?sort=downloads&limit=6" - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Design Notes:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "3 columns on desktop, 2 on tablet, 1 on mobile" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Cards have subtle shadow, lift on hover" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["\"View All Tools\" link below grid → ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/tools" - })] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h4, { - id: "section-4-getting-started", - children: "Section 4: Getting Started" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "┌─────────────────────────────────────────────────────────────────┐\n│ Getting Started │\n├──────────────────┬──────────────────┬────────────────────────────┤\n│ Tutorial 1: │ Tutorial 2: │ Tutorial 3: │\n│ Basic Setup │ Your First Tool │ Advanced Workflows │\n│ Learn how to... │ Create a │ Combine multiple │\n│ │ simple AI... │ tools for... │\n│ [Read More] │ [Read More] │ [Read More] │\n└──────────────────┴──────────────────┴────────────────────────────┘\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Content:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "3 tutorial cards highlighting core learning paths" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Each card: title (bold), description (2 lines max), CTA button" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Design Notes:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Matches tool card styling for visual consistency" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "\"Read More\" buttons in primary indigo" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h4, { - id: "section-5-featured-contributor", - children: "Section 5: Featured Contributor" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "┌─────────────────────────────────────────────────────────────────┐\n│ Featured Contributor │\n├─────────────────────────────────────────────────────────────────┤\n│ [Avatar] Name Here │\n│ Creator of \"Tool Name\" and active community member. │\n│ [View Profile] │\n└─────────────────────────────────────────────────────────────────┘\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Content:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Monthly rotating spotlight" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Avatar (60px circle), name, brief bio, profile link" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Data Source:" - }), " Manual curation or ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /api/v1/contributors/featured" - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h4, { - id: "section-6-footer-ad-zone-optional", - children: "Section 6: Footer Ad Zone (Optional)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "┌─────────────────────────────────────────────────────────────────┐\n│ [Advertisement: Support CmdForge Development] │\n└─────────────────────────────────────────────────────────────────┘\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Design Notes:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Light blue background (#DBEAFE) to distinguish from content" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Clearly labeled as advertisement" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Optional based on ad fill rate" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h4, { - id: "section-7-footer", - children: "Section 7: Footer" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "┌─────────────────────────────────────────────────────────────────┐\n│ CmdForge │\n│ ───────────────────────────────────────────────────────────── │\n│ Docs | Registry | Community | About | Donate │\n│ Privacy | Terms | GitHub | Twitter │\n│ │\n│ © 2025 CmdForge. Open source under MIT License. │\n└─────────────────────────────────────────────────────────────────┘\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.h3, { - id: "docstutorials-pages-docs-tutorials", - children: ["Docs/Tutorials Pages (", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/docs/*" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/tutorials/*" - }), ")"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Layout:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "┌───────────────────────────────────────────────────────────────────────┐\n│ [Header Navigation] │\n├──────────────┬────────────────────────────────────────────┬───────────┤\n│ TOC │ Content Area (70%) │ Sidebar │\n│ (Desktop) │ │ (Ads) │\n│ │ # Page Title │ │\n│ - Section 1 │ │ [Ad] │\n│ - Section 2 │ Content with code blocks... │ │\n│ - Section 3 │ │ │\n│ │ ```python │ │\n│ │ # Code with syntax highlighting │ │\n│ │ ``` [Copy] │ │\n│ │ │ │\n│ │ [Embedded Video] │ │\n│ │ │ │\n└──────────────┴────────────────────────────────────────────┴───────────┘\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Content Requirements:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Persistent left TOC on desktop (scroll-spy highlighting current section)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Code blocks with syntax highlighting and copy button" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Video embeds (YouTube) with play button overlay, lazy-loaded" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Callout boxes for tips, warnings, info (color-coded)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Related articles at bottom" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Design Notes:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "TOC: fixed on scroll, 200px width" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Content area: max-width 700px, generous line-height (1.6-1.8)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Sidebar ads: 300px width, only on desktop" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Mobile: TOC collapses to hamburger, sidebar hidden" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.h3, { - id: "tool-detail-page-toolsownername", - children: ["Tool Detail Page (", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/tools/{owner}/{name}" - }), ")"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Layout:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "┌───────────────────────────────────────────────────────────────────────┐\n│ [Header Navigation] │\n├─────────────────────────────────────────────────────┬─────────────────┤\n│ README Content (70%) │ Sidebar (30%) │\n│ │ │\n│ # tool-name │ ┌───────────┐ │\n│ │ │Install │ │\n│ Rendered markdown from README.md... │ │ │ │\n│ │ │$ run cmd │ │\n│ - Usage examples │ └───────────┘ │\n│ - Configuration │ │\n│ - Step definitions │ Versions: │\n│ │ v1.2.0 ● │\n│ │ v1.1.0 │\n│ │ v1.0.0 │\n│ │ │\n│ │ Downloads: │\n│ │ 1,234 │\n│ │ │\n│ │ Category: │\n│ │ [text-proc] │\n│ │ │\n│ │ Tags: │\n│ │ [ai] [cli] │\n│ │ │\n│ │ [Report] │\n└─────────────────────────────────────────────────────┴─────────────────┘\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Sidebar Elements:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Install command with copy button (prominent)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Version selector/list (current version highlighted)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Download statistics" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Category badge (linked)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Tags (linked to search)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Report abuse button" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Publisher info (avatar, name, link to profile)" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "NO ADS on tool detail pages" - }), " (Tier 2 - registry is ad-free)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.h3, { - id: "registry-browse-page-tools", - children: ["Registry Browse Page (", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/tools" - }), ")"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Layout:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "┌───────────────────────────────────────────────────────────────────────┐\n│ [Header Navigation] │\n├───────────────────────────────────────────────────────────────────────┤\n│ ┌─────────────────────────────────────────────────────────────────┐ │\n│ │ 🔍 Search tools... [Category ▼] [Sort ▼] │ │\n│ └─────────────────────────────────────────────────────────────────┘ │\n├───────────────────────────────────────────────────────────────────────┤\n│ Showing 142 tools │\n├──────────────────┬──────────────────┬──────────────────┬──────────────┤\n│ [Tool Card] │ [Tool Card] │ [Tool Card] │ [Tool Card] │\n│ │ │ │ │\n├──────────────────┼──────────────────┼──────────────────┼──────────────┤\n│ [Tool Card] │ [Tool Card] │ [Tool Card] │ [Tool Card] │\n│ │ │ │ │\n├───────────────────────────────────────────────────────────────────────┤\n│ [← Previous] Page 1 of 8 [Next →] │\n└───────────────────────────────────────────────────────────────────────┘\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Search/Filter Features:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Full-text search with debounce (300ms)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Category dropdown filter" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Sort options: Popular (downloads), Recent, Name" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Results count display" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Pagination (20 per page)" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Tool Card (compact):" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Tool name + owner" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Short description (2 lines max, truncated)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Download count" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Last updated date" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Category tag" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "NO ADS on browse pages" - }), " (Tier 2)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.h3, { - id: "publisher-dashboard-dashboard", - children: ["Publisher Dashboard (", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/dashboard" - }), ")"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Layout:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "┌───────────────────────────────────────────────────────────────────────┐\n│ [Header with user menu] │\n├─────────────────┬─────────────────────────────────────────────────────┤\n│ Sidebar │ Content Area │\n│ │ │\n│ Overview │ ┌─ Tab: My Tools ──────────────────────────────┐ │\n│ My Tools │ │ │ │\n│ Connections │ │ Published Tools (3) [+ New Tool] │ │\n│ Settings │ │ ┌─────────────────────────────────────────┐ │ │\n│ │ │ │ summarize v1.2.0 | 142 downloads │ │ │\n│ │ │ │ [Edit] [View] [Yank] │ │ │\n│ │ │ └─────────────────────────────────────────┘ │ │\n│ │ │ │ │\n│ │ │ Pending PRs (1) │ │\n│ │ │ ┌─────────────────────────────────────────┐ │ │\n│ │ │ │ new-tool v1.0.0 | Awaiting review │ │ │\n│ │ │ │ [View PR] │ │ │\n│ │ │ └─────────────────────────────────────────┘ │ │\n│ │ └──────────────────────────────────────────────┘ │\n└─────────────────┴─────────────────────────────────────────────────────┘\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Tabs:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ol, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Overview:" - }), " Dashboard with stats (tools count, downloads, connections)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "My Tools:" - }), " List of published tools with stats, edit/view/yank actions"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Connections:" - }), " Manage connected apps (CLI/TUI instances linked to account)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Settings:" - }), " Profile editing (display name, bio, website), password change"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Connections Page:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: ["The Connections page (", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/dashboard/connections" - }), ") replaces the old API Tokens page with a simpler app pairing flow:"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Connect New App:" - }), " Button opens modal with pairing instructions", "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ol, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Shows command: ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "cmdforge config connect " - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Or use the TUI: open ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "cmdforge ui" - }), " and click Connect"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "\"I've Run the Command\" button shows pending connections" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Approve pending connection with one click" - }), "\n"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Connected Apps:" - }), " List of connected devices showing:", "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Device hostname" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Connection date" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Last used timestamp" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Disconnect button to revoke access" - }), "\n"] - }), "\n"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "This eliminates the need to manually copy API tokens - users just approve connections from the web UI." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Design Notes:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Clean, utilitarian design" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Clear action buttons" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Status indicators for pending PRs" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Pairing modal guides users through connection flow" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.h3, { - id: "donate-page-donate", - children: ["Donate Page (", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/donate" - }), ")"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Content:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Mission statement (emotional, connecting to values)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Clear explanation of fund usage (hosting, development, future AI hosting)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Multiple donation options (GitHub Sponsors, PayPal, Ko-fi)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Optional donor recognition section" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Transparency about current costs/goals" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Design Notes:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Clean, trustworthy design" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Clear CTAs for each donation method" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "No ads on this page" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "component-library", - children: "Component Library" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "buttons", - children: "Buttons" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Primary Button:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-html", - children: "\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Background: Primary indigo (#6366F1)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Text: White, 16px, font-weight 600" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Padding: 12px 24px" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Border-radius: 4px" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Hover: Darken 10%, subtle shadow" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Focus: 2px outline offset" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Secondary Button:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-html", - children: "\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Background: Transparent" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Border: 2px solid cyan (#06B6D4)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Text: Cyan, 16px, font-weight 600" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Hover: Light cyan background (#ECFEFF)" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Ghost Button:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-html", - children: "\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Background: Transparent" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Text: Primary indigo" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Hover: Light indigo background" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Danger Button:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-html", - children: "\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Background: Error red (#EF4444)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Text: White" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Used for destructive actions" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "cards", - children: "Cards" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Tool Card:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "┌───────────────────────────────────────┐\n│ [Category] │\n│ [●] Tool Name │\n│ Short description of the tool that │\n│ may span two lines maximum... │\n│ │\n│ Author: owner-name │\n│ ⬇ 1,234 downloads │\n│ │\n│ ┌─────────────────────────────────┐ │\n│ │ cmdforge run owner/tool │ │\n│ └─────────────────────────────────┘ │\n└───────────────────────────────────────┘\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Background: White (#FFFFFF)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Border: 1px solid border color (#E5E7EB)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Border-radius: 8px" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Shadow: shadow-sm, shadow-md on hover" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Padding: 16px" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Category badge: absolute top-right, cyan background, white text, 12px" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Tutorial Card:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "┌───────────────────────────────────────┐\n│ [Optional Thumbnail Image] │\n│ │\n│ Tutorial Title Here │\n│ Brief description of what the │\n│ tutorial covers... │\n│ │\n│ [Read More →] │\n└───────────────────────────────────────┘\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Same base styling as tool card" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Optional thumbnail: aspect-ratio 16:9, lazy-loaded" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Contributor Card:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "┌───────────────────────────────────────┐\n│ [Avatar] Contributor Name │\n│ @github-handle │\n│ Creator of \"Tool Name\" │\n│ [View Profile] │\n└───────────────────────────────────────┘\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Avatar: 48px circle" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Horizontal layout for spotlight, vertical for grid" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "navigation", - children: "Navigation" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Header Navigation:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "┌─────────────────────────────────────────────────────────────────────────┐\n│ [Logo] [Docs] [Tutorials] [Registry] [Community] [About] 🔍 │\n│ [Donate] │\n└─────────────────────────────────────────────────────────────────────────┘\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Background: Dark slate (#2C3E50)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Logo: White text, 24px, bold" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Nav links: White text, 16px" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Active/hover: Underline or slight background" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Mobile: Hamburger menu with slide-out drawer" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Breadcrumbs:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "Registry > owner > tool-name > v1.2.0\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Separator: ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: ">" - }), " or ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/" - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Current page: bold, not linked" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Previous pages: linked, secondary color" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "form-elements", - children: "Form Elements" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Text Input:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-html", - children: "\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Border: 1px solid border color" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Border-radius: 8px" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Padding: 12px 16px" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Focus: Primary indigo border, subtle shadow" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Height: 44px (touch target compliance)" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Search Input with Icon:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "┌─────────────────────────────────────┐\n│ 🔍 Search tools... │\n└─────────────────────────────────────┘\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Icon: Left-aligned, muted color" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Placeholder: Secondary text color" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Select/Dropdown:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "┌─────────────────────────────────────┐\n│ Category ▼ │\n└─────────────────────────────────────┘\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Same styling as text input" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Chevron icon on right" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "badges-and-tags", - children: "Badges and Tags" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Category Badge:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-html", - children: "text-processing\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Background: Cyan (#06B6D4)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Text: White, 12px" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Padding: 4px 8px" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Border-radius: 4px" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Tag:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-html", - children: "ai\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Background: Light gray (#F3F4F6)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Text: Secondary gray, 12px" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Border: 1px solid border color" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Border-radius: 9999px (pill)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Clickable (links to search)" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Status Badge:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-html", - children: "Published\nPending\nYanked\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Success: Green background" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Warning: Amber background" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Error: Red background" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "code-blocks", - children: "Code Blocks" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Inline Code:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-html", - children: "cmdforge run foo\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Background: Light gray (#F3F4F6)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Font: Monospace" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Padding: 2px 6px" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Border-radius: 4px" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Code Block with Copy:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "┌───────────────────────────────────────────────────────┐\n│ ```python [📋] │\n│ def hello(): │\n│ print(\"Hello, World!\") │\n│ ``` │\n└───────────────────────────────────────────────────────┘\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Background: Dark (#1F2937) or light (#F9FAFB)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Syntax highlighting (Prism.js or Highlight.js)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Copy button: top-right, appears on hover" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Line numbers: optional, enabled for tutorials" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "callout-boxes", - children: "Callout Boxes" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Info Callout:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "┌─────────────────────────────────────────────────────┐\n│ ℹ️ Note │\n│ This is helpful information for the user. │\n└─────────────────────────────────────────────────────┘\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Background: Light blue (#DBEAFE)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Border-left: 4px solid blue (#3B82F6)" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Warning Callout:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "┌─────────────────────────────────────────────────────┐\n│ ⚠️ Warning │\n│ Be careful with this configuration. │\n└─────────────────────────────────────────────────────┘\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Background: Light amber (#FEF3C7)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Border-left: 4px solid amber (#F59E0B)" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Error Callout:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "┌─────────────────────────────────────────────────────┐\n│ ❌ Important │\n│ This action cannot be undone. │\n└─────────────────────────────────────────────────────┘\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Background: Light red (#FEE2E2)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Border-left: 4px solid red (#EF4444)" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Tip Callout:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "┌─────────────────────────────────────────────────────┐\n│ 💡 Tip │\n│ You can also use this shortcut... │\n└─────────────────────────────────────────────────────┘\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Background: Light green (#D1FAE5)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Border-left: 4px solid green (#10B981)" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "loading-states", - children: "Loading States" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Skeleton Loader:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "┌───────────────────────────────────────┐\n│ ████████████████ │\n│ ████████████████████████████████ │\n│ ████████████ │\n└───────────────────────────────────────┘\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Animated shimmer effect" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Matches component dimensions" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Used for cards, text blocks" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Spinner:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Circular spinner for buttons, inline loading" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Primary indigo color" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Size: 16px (small), 24px (medium), 32px (large)" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Progress Bar:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Used for multi-step operations" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Shows percentage or step count" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "responsive-design", - children: "Responsive Design" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "breakpoints", - children: "Breakpoints" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Breakpoint" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Width" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Name" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Grid Columns" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "xs" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "< 480px" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Extra small phones" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "1" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "sm" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "480-639px" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Phones" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "1" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "md" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "640-767px" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Large phones / small tablets" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "2" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "lg" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "768-1023px" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Tablets" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "2-3" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "xl" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "1024-1279px" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Small desktops" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "3-4" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "2xl" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "≥ 1280px" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Large desktops" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "4" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "layout-adaptations", - children: "Layout Adaptations" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Mobile (< 640px):" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Single-column layout" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Navigation: hamburger menu with slide-out drawer" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Hero: stacked content, centered" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Tool cards: full-width, stacked" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "TOC: collapsible accordion at top of page" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Sidebar ads: hidden" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Footer ads: optional, minimal" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Tablet (640-1023px):" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Two-column grid for cards" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Navigation: horizontal but condensed" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "TOC: collapsible sidebar" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Sidebar ads: may show below content" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Desktop (≥ 1024px):" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Full multi-column layout" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Navigation: full horizontal with all links visible" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "TOC: fixed left sidebar" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Sidebar ads: visible in right column" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Maximum content width: 1280px with centered container" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "touch-targets", - children: "Touch Targets" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "All interactive elements must meet minimum touch target size:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Minimum size: 44×44px (WCAG 2.1 AA)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Spacing between targets: minimum 8px" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Applies to: buttons, links, form inputs, navigation items" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "mobile-specific-considerations", - children: "Mobile-Specific Considerations" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "No horizontal scrolling" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Images: responsive with max-width: 100%" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Tables: horizontal scroll wrapper on small screens" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Code blocks: horizontal scroll with visible scrollbar" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Modals: full-screen on mobile, centered on desktop" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Keyboard: virtual keyboard should not obscure inputs" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "performance-budgets", - children: "Performance Budgets" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "core-web-vitals-targets", - children: "Core Web Vitals Targets" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Metric" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Target" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Maximum" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Largest Contentful Paint (LCP)" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "< 1.5s" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "< 2.5s" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "First Input Delay (FID)" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "< 50ms" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "< 100ms" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Cumulative Layout Shift (CLS)" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "< 0.05" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "< 0.1" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "First Contentful Paint (FCP)" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "< 1.0s" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "< 1.8s" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Time to Interactive (TTI)" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "< 2.5s" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "< 3.5s" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "resource-budgets", - children: "Resource Budgets" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Resource" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Budget" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Notes" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Total page weight" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "< 500KB" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Excluding ads" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "JavaScript (compressed)" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "< 100KB" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Main bundle" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "CSS (compressed)" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "< 50KB" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Main stylesheet" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Images (above fold)" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "< 200KB" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Hero, featured tools" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Fonts" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "< 100KB" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Subset, WOFF2 format" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Third-party scripts" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "< 150KB" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Analytics, ads (lazy)" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "loading-strategy", - children: "Loading Strategy" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Critical Path (synchronous):" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ol, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "HTML document" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Critical CSS (inlined in ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "" - }), ")"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Above-the-fold content" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Deferred Loading:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ol, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Non-critical CSS (preload, async)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "JavaScript (defer)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Below-fold images (lazy-load with ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "loading=\"lazy\"" - }), ")"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Third-party scripts (ads, analytics)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Video embeds (lazy, placeholder until visible)" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "caching-strategy", - children: "Caching Strategy" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Resource" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Cache-Control" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Notes" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Static assets (CSS, JS)" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "max-age=31536000, immutable" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Hashed filenames" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Images" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "max-age=86400" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "1 day" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "HTML pages" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "max-age=300, stale-while-revalidate=60" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "5 min, background refresh" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "API responses" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "max-age=60" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "1 min for tool lists" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Tool downloads" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "max-age=3600, immutable" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Immutable versions" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "performance-monitoring", - children: "Performance Monitoring" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Monitor Core Web Vitals in production" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Set up alerts for degradation (", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: ">10%" - }), " threshold)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Track page load times by route" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Monitor JavaScript error rates" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "error-states-and-fallbacks", - children: "Error States and Fallbacks" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "network-errors", - children: "Network Errors" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "API Unavailable:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "┌─────────────────────────────────────────────────────┐\n│ ⚠️ Registry Temporarily Unavailable │\n│ │\n│ We're having trouble connecting to the registry. │\n│ Please try again in a few moments. │\n│ │\n│ [Retry] │\n└─────────────────────────────────────────────────────┘\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Slow Connection:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Show skeleton loaders for content" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Progressive loading with visible feedback" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Timeout after 10 seconds with retry option" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "tool-not-found-404", - children: "Tool Not Found (404):" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "┌─────────────────────────────────────────────────────┐\n│ Tool Not Found │\n│ │\n│ The tool \"owner/tool-name\" doesn't exist or may │\n│ have been removed. │\n│ │\n│ [Browse Tools] [Search Registry] │\n└─────────────────────────────────────────────────────┘\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "search-no-results", - children: "Search No Results:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "┌─────────────────────────────────────────────────────┐\n│ No tools found for \"query\" │\n│ │\n│ Suggestions: │\n│ • Try different keywords │\n│ • Check spelling │\n│ • Browse by category │\n│ │\n│ [Browse All Tools] │\n└─────────────────────────────────────────────────────┘\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "offline-mode", - children: "Offline Mode" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "If service worker is implemented:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Show cached pages when offline" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Indicate offline status in header" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Queue actions (report, install) for when online" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "form-errors", - children: "Form Errors" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Inline Validation:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Show error message below field" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Red border on invalid fields" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Error icon in field" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Form Submission Error:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Toast notification for transient errors" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Inline error summary for validation failures" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Preserve form state on error" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "ad-and-revenue-strategy", - children: "Ad and Revenue Strategy" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Ad placement" - }), ": One sidebar unit on long-form docs/tut pages, optional footer banner on landing, none on registry pages."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "No ads" - }), " in install flows, login/registration, or tool browsing details."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Sponsored content" - }), ": Clearly labeled and separated from organic rankings."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "YouTube" - }), ": Embed tutorials with transcripts; also drive to channel."] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "monetization-extensions-optional", - children: "Monetization Extensions (Optional)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Donations" - }), ": Single page with clear use-of-funds."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Featured projects" - }), ": Curated or sponsored slots with explicit labeling."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Premium publisher tier" - }), ": More tools, enhanced analytics, priority review."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Training/consulting" - }), ": Workshops or enterprise onboarding."] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "data-and-governance", - children: "Data and Governance" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Proposed minimal tables (web-only):" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "promotions" - }), " (featured tools/projects, start/end, placement, audit)."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "featured_projects" - }), " (title, description, owner, url, status)."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "content_pages" - }), " (docs/tutorials metadata for listing)."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "announcements" - }), " (title, body, published_at)."] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Roles and permissions:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "admin" - }), ": can publish announcements, manage promotions, moderate reports."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "editor" - }), ": can create/update docs, tutorials, featured projects."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "publisher" - }), ": can manage their own tools and profile only."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "contributor" - }), ": can partisipate in discussions in the forums."] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Audit fields (required on content tables):" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "created_by" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "updated_by" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "created_at" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "updated_at" - }), "."] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Ranking rules:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Organic search uses relevance and downloads." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Sponsored placements appear in dedicated sections and do not alter organic order." - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Promotions placement rules:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Slots are deterministic (e.g., positions 1 and 5 in lists)." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Promotions are clearly labeled and never mixed into organic ranking." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "promotions" - }), " includes ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "placement" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "priority" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "start_at" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "end_at" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "status" - }), "."] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "privacy-and-consent", - children: "Privacy and Consent" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Consent banner for analytics/ads." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Minimal tracking, anonymized IPs." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Clear privacy policy and retention policy." - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Consent storage:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Store a ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "consents" - }), " record keyed by ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "client_id" - }), " (anonymous) or user id (logged-in)."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Respect opt-outs by disabling analytics/ads on server-rendered pages." - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "ux-and-accessibility", - children: "UX and Accessibility" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Keyboard navigation for all interactive elements." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "High contrast and readable typography." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Mobile-first layout; ads hidden on mobile except optional footer." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Avoid popups and auto-play media." - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Responsive breakpoints (baseline):" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Mobile: ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "<640px" - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Tablet: ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "640–1024px" - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Desktop: ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: ">1024px" - })] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "tech-stack-phase-7-target", - children: "Tech Stack (Phase 7 Target)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Flask + Jinja + Tailwind" - }), " for SEO-friendly server-rendered pages."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Optional ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "htmx" - }), " or ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Alpine.js" - }), " for small interactivity."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Shared registry API for data." - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "auth-and-session-model", - children: "Auth and Session Model" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Server-side sessions (DB-backed) for dashboard views." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Cookies: ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "HttpOnly" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "SameSite=Lax" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "Secure" - }), " in production."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "CSRF protection on all POST/PUT/DELETE web forms." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Session TTL: 7 days with rotation on login." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Logout invalidates session server-side." - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "api-surfaces-for-web-ui", - children: "API Surfaces for Web UI" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Read-only UI calls should use the existing API:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/api/v1/tools" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/api/v1/tools/search" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/api/v1/categories" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/api/v1/stats/popular" - }), "."] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Publisher dashboard uses auth endpoints:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/api/v1/login" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/api/v1/tokens" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/api/v1/me/tools" - }), "."] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "payments-and-donations-optional", - children: "Payments and Donations (Optional)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Decide early on a processor (Stripe, Ko-fi, paypal, bitcoin/crypto) to avoid churn." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Webhook handling must verify signatures and enforce idempotency keys." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Store donation/subscription state with ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "status" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "amount" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "currency" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "provider_id" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "created_at" - }), "."] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "moderation-and-abuse-reporting", - children: "Moderation and Abuse Reporting" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Tool detail pages require a minimal abuse report endpoint." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Create ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "reports" - }), " table with ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "tool_id" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "reporter" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "reason" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "status" - }), "."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Add rate limit to the report endpoint to prevent spam." - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "media-and-asset-handling", - children: "Media and Asset Handling" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Images/screenshots stored in object storage (preferred) or a dedicated ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "assets/" - }), " bucket."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Enforce size limits and content-type validation." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Generate thumbnails for cards and lazy-load in UI." - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "caching-and-seo-serving", - children: "Caching and SEO Serving" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Public pages include ETag/Last-Modified for CDN caching." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Dashboard pages are non-cacheable and user-specific." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Avoid cache poisoning by varying on auth cookies." - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "seo-strategy", - children: "SEO Strategy" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "technical-seo", - children: "Technical SEO" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "URL Structure:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/ # Landing page\n/tools # Registry browse\n/tools/{owner}/{name} # Tool detail (canonical)\n/tools/{owner}/{name}/v/1.0 # Specific version\n/categories/{slug} # Category listing\n/docs/{section}/{page} # Documentation\n/tutorials/{slug} # Tutorial pages\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Meta Tags (per page type):" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Landing page:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-html", - children: "CmdForge - Build Custom AI Commands in YAML\n\n\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Tool detail page:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-html", - children: "{tool-name} by {owner} - CmdForge Registry\n\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "structured-data-schemaorg", - children: "Structured Data (Schema.org)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "SoftwareApplication (for tools):" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-json", - children: "{\n \"@context\": \"https://schema.org\",\n \"@type\": \"SoftwareApplication\",\n \"name\": \"summarize\",\n \"applicationCategory\": \"DeveloperApplication\",\n \"operatingSystem\": \"Linux, macOS, Windows\",\n \"author\": {\n \"@type\": \"Person\",\n \"name\": \"owner-name\"\n },\n \"downloadUrl\": \"https://cmdforge.brrd.tech/tools/owner/summarize\",\n \"softwareVersion\": \"1.2.0\",\n \"aggregateRating\": {\n \"@type\": \"AggregateRating\",\n \"ratingValue\": \"4.5\",\n \"ratingCount\": \"142\"\n }\n}\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Organization (site-wide):" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-json", - children: "{\n \"@context\": \"https://schema.org\",\n \"@type\": \"Organization\",\n \"name\": \"CmdForge\",\n \"url\": \"https://cmdforge.dev\",\n \"logo\": \"https://cmdforge.dev/logo.png\",\n \"sameAs\": [\n \"https://github.com/your-org/cmdforge\",\n \"https://twitter.com/cmdforge\"\n ]\n}\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Article (for tutorials/blog):" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-json", - children: "{\n \"@context\": \"https://schema.org\",\n \"@type\": \"TechArticle\",\n \"headline\": \"Getting Started with CmdForge\",\n \"author\": {\"@type\": \"Person\", \"name\": \"Author Name\"},\n \"datePublished\": \"2025-01-15\",\n \"dateModified\": \"2025-01-20\"\n}\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "open-graph--social-sharing", - children: "Open Graph & Social Sharing" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-html", - children: "\n\n\n\n\n\n\n\n\n\n\n\n\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "sitemap", - children: "Sitemap" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: ["Auto-generate ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "sitemap.xml" - }), ":"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "All public pages" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Tool detail pages (updated on publish)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Category pages" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Documentation pages" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Priority based on page importance" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-xml", - children: "\n\n \n https://cmdforge.dev/\n 1.0\n daily\n \n \n https://cmdforge.dev/tools\n 0.9\n daily\n \n \n\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "robotstxt", - children: "robots.txt" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "User-agent: *\nAllow: /\n\n# Block auth pages from indexing\nDisallow: /login\nDisallow: /register\nDisallow: /dashboard\nDisallow: /api/\n\nSitemap: https://cmdforge.dev/sitemap.xml\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "canonical-urls", - children: "Canonical URLs" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Each page has a single canonical URL" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Use ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "" - }), " tag"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Avoid duplicate content issues" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Tool versions link to latest as canonical" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "performance-for-seo", - children: "Performance for SEO" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Server-side rendering for all public pages (Flask + Jinja)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "No JavaScript required for content visibility" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Fast TTFB (< 200ms target)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Mobile-friendly (responsive design)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Core Web Vitals in \"good\" range" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "content-strategy", - children: "Content Strategy" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Core tutorials that mirror CLI workflows." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "\"Project spotlights\" to showcase real usage." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Contributor recognition (monthly spotlight)." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Announcements and changelog summaries." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Encourage AI parsing to increase adsense revenue." - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "risks-and-mitigations", - children: "Risks and Mitigations" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Ad overload" - }), ": strict placement rules, no ads in registry."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Moderation burden and load" - }), ": Implement AI enabled moderation with flags to alert human intervention to keep things moving and simplefy maintenence."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Content drift" - }), ": quarterly doc reviews tied to releases."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Consent and tracking" - }), ": default to privacy-preserving settings."] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "phase-7-implementation-checklist", - children: "Phase 7 Implementation Checklist" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "71-foundation--setup", - children: "7.1 Foundation & Setup" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - className: "contains-task-list", - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Set up Flask project structure with blueprints"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Configure Jinja2 templates with base layout"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Integrate Tailwind CSS (build pipeline)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Set up static asset handling (CSS, JS, images)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Configure development/production environments"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Set up database models for web-specific tables"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "72-core-templates--components", - children: "7.2 Core Templates & Components" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - className: "contains-task-list", - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Create base template with header/footer"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Implement navigation component (desktop + mobile)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Build reusable card components (tool, tutorial, contributor)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Create form components (inputs, buttons, dropdowns)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Implement callout/alert components"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Build code block component with copy functionality"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Create loading states (skeleton, spinner)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Implement responsive grid system"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "73-landing-page", - children: "7.3 Landing Page" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - className: "contains-task-list", - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Hero section with install snippet"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Three pillars section (Easy, Powerful, Community)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Featured tools grid (API integration)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Getting started tutorial cards"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Featured contributor spotlight"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Footer with links and optional ad zone"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "74-registry-pages-ad-free", - children: "7.4 Registry Pages (Ad-Free)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - className: "contains-task-list", - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Tool browse page with search bar"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Category dropdown filter"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Sort options (popular, recent, name)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Pagination component"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Tool card grid layout"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Tool detail page with README rendering"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Version selector in sidebar"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Install command with copy"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Report abuse button/modal"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Category pages"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "75-documentation--tutorials", - children: "7.5 Documentation & Tutorials" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - className: "contains-task-list", - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Docs landing page with section links"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Tutorial listing page"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Content page template with TOC"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Scroll-spy for TOC highlighting"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Code syntax highlighting (Prism/Highlight.js)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Video embed component (YouTube)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Related articles section"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Sidebar ad placement (desktop only)"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "76-authentication--dashboard", - children: "7.6 Authentication & Dashboard" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - className: "contains-task-list", - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Registration page and flow"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Login page with error handling"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Password reset flow (if implementing)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Session management (cookies, CSRF)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Dashboard layout with sidebar"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "My Tools tab with tool list"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Connections tab with app pairing flow"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Settings tab with profile edit"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Logout functionality"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "77-privacy--consent", - children: "7.7 Privacy & Consent" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - className: "contains-task-list", - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Cookie consent banner"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Consent preferences modal"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Consent state storage"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Privacy policy page"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Terms of service page"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Honor consent in analytics/ad loading"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "78-ads--monetization", - children: "7.8 Ads & Monetization" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - className: "contains-task-list", - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "AdSense integration (account setup)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Ad container components"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Lazy loading for ad scripts"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Ad placement rules enforcement"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Sponsored content styling (if applicable)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Donate page with donation options"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "79-seo--performance", - children: "7.9 SEO & Performance" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - className: "contains-task-list", - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Meta tags for all page types"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Open Graph tags"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Schema.org structured data"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Sitemap generation"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "robots.txt configuration"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Canonical URL implementation"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Image optimization pipeline"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "CSS/JS minification"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Critical CSS inlining"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Lazy loading for images"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "710-testing--qa", - children: "7.10 Testing & QA" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - className: "contains-task-list", - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Responsive design testing (all breakpoints)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Accessibility testing (WCAG 2.1 AA)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Cross-browser testing (Chrome, Firefox, Safari, Edge)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Performance testing (Lighthouse scores)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Form validation testing"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Error state testing"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Mobile usability testing"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "711-launch-preparation", - children: "7.11 Launch Preparation" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - className: "contains-task-list", - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Content creation (initial docs, tutorials)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Seed featured tools selection"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Initial contributor spotlight"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Analytics setup (privacy-respecting)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Error monitoring (Sentry or similar)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "SSL certificate configuration"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "CDN setup (optional)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Backup and recovery procedures"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "api-endpoints-for-web-ui", - children: "API Endpoints for Web UI" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "The web UI consumes these existing API endpoints:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Public (read-only):" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /api/v1/tools" - }), " - List tools with pagination/filters"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /api/v1/tools/search?q=..." - }), " - Search tools"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /api/v1/tools/{owner}/{name}" - }), " - Tool details"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /api/v1/tools/{owner}/{name}/versions" - }), " - Version list"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /api/v1/categories" - }), " - Category list"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /api/v1/stats/popular" - }), " - Popular tools"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Authenticated (dashboard):" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "POST /api/v1/login" - }), " - User login (returns session)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "POST /api/v1/register" - }), " - User registration"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /api/v1/me/tools" - }), " - User's published tools"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /api/v1/pairing/connected-apps" - }), " - List connected apps"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "POST /api/v1/pairing/initiate" - }), " - Start app pairing flow"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /api/v1/pairing/status" - }), " - Get pending pairing requests"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "POST /api/v1/pairing/claim/{pairing_id}" - }), " - Approve a pending connection"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "DELETE /api/v1/tokens/{id}" - }), " - Disconnect/revoke an app"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "PUT /api/v1/me/settings" - }), " - Update profile"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "New endpoints for web UI:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /api/v1/featured/tools" - }), " - Curated featured tools"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /api/v1/featured/contributors" - }), " - Featured contributor"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /api/v1/content/announcements" - }), " - Site announcements"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "POST /api/v1/reports" - }), " - Abuse report submission"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "diagram-references", - children: "Diagram References" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Landing page mockup: ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "discussions/diagrams/cmdforge-registry_rob_6.svg" - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["System overview: ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "discussions/diagrams/cmdforge-registry_rob_1.puml" - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Data flows: ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "discussions/diagrams/cmdforge-registry_rob_5.puml" - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Web UI strategy: ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "discussions/diagrams/cmdforge-web-ui-strategy.puml" - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["UI visual strategy: ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "discussions/diagrams/cmdforge-web-ui-visual-strategy.puml" - })] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "deployment-guide", - children: "Deployment Guide" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "requirements", - children: "Requirements" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Python 3.11+" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "pip/virtualenv" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "SQLite 3 (included with Python)" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "quick-start-development", - children: "Quick Start (Development)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "# Clone the repository\ngit clone https://gitea.brrd.tech/rob/CmdForge.git\ncd CmdForge\n\n# Create virtual environment\npython3 -m venv venv\nsource venv/bin/activate\n\n# Install with registry extras\npip install -e \".[registry]\"\n\n# Run the web server\npython -m cmdforge.web.app\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: ["The server will start on ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "http://localhost:5000" - }), "."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "production-deployment", - children: "Production Deployment" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h4, { - id: "1-environment-variables", - children: "1. Environment Variables" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "# Required\nexport CMDFORGE_REGISTRY_DB=/path/to/registry.db\nexport PORT=5050\n\n# Optional\nexport CMDFORGE_ENV=production # Enables secure cookies\nexport CMDFORGE_SHOW_ADS=true # Enable ad placeholders\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h4, { - id: "2-database-location", - children: "2. Database Location" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: ["By default, the registry uses ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "~/.cmdforge/registry.db" - }), ". For production:"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "# Create dedicated directory\nmkdir -p /var/lib/cmdforge\nexport CMDFORGE_REGISTRY_DB=/var/lib/cmdforge/registry.db\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Note" - }), ": If using a merged filesystem (e.g., mergerfs), store the database on a single disk or in ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/tmp" - }), " to avoid SQLite WAL mode issues:"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "export CMDFORGE_REGISTRY_DB=/tmp/cmdforge-registry/registry.db\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h4, { - id: "3-running-with-systemd", - children: "3. Running with systemd" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: ["Create ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/etc/systemd/system/cmdforge-registry.service" - }), ":"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-ini", - children: "[Unit]\nDescription=CmdForge Registry Web Server\nAfter=network.target\n\n[Service]\nType=simple\nUser=cmdforge\nWorkingDirectory=/opt/cmdforge\nEnvironment=CMDFORGE_REGISTRY_DB=/var/lib/cmdforge/registry.db\nEnvironment=PORT=5050\nEnvironment=CMDFORGE_ENV=production\nExecStart=/opt/cmdforge/venv/bin/python -m cmdforge.web.app\nRestart=always\nRestartSec=5\n\n[Install]\nWantedBy=multi-user.target\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "sudo systemctl daemon-reload\nsudo systemctl enable cmdforge-registry\nsudo systemctl start cmdforge-registry\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h4, { - id: "4-reverse-proxy-nginx", - children: "4. Reverse Proxy (nginx)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-nginx", - children: "server {\n listen 80;\n server_name cmdforge.brrd.tech;\n\n location / {\n proxy_pass http://127.0.0.1:5050;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_set_header X-Forwarded-Proto $scheme;\n }\n\n location /static {\n alias /opt/cmdforge/src/cmdforge/web/static;\n expires 1y;\n add_header Cache-Control \"public, immutable\";\n }\n}\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h4, { - id: "5-ssl-with-certbot", - children: "5. SSL with Certbot" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "sudo certbot --nginx -d cmdforge.brrd.tech\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "tailwind-css-build", - children: "Tailwind CSS Build" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "The CSS is pre-built and committed. To rebuild after changes:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "# Install dependencies\nnpm install\n\n# Build for production\nnpx tailwindcss -i src/cmdforge/web/static/css/input.css \\\n -o src/cmdforge/web/static/css/main.css \\\n --minify\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "health-check", - children: "Health Check" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "curl http://localhost:5050/api/v1/tools\n# Returns: {\"data\":[],\"meta\":{\"page\":1,\"per_page\":20,\"total\":0,\"total_pages\":1}}\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "troubleshooting", - children: "Troubleshooting" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Issue" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Solution" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "disk I/O error" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Move database to non-merged filesystem" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Port already in use" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Change PORT environment variable" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "500 errors" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.td, { - children: ["Check ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/tmp/cmdforge.log" - }), " for stack traces"] - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Static files not loading" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Verify static folder path in deployment" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "future-considerations-phase-8", - children: "Future Considerations (Phase 8+)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Forum integration" - }), ": External (Discourse) or built-in discussions"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Newsletter signup" - }), ": Email collection with double opt-in"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "A/B testing" - }), ": Hero messaging, CTA variations"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Analytics dashboard" - }), ": Traffic insights for publishers"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Premium features" - }), ": Private registries, enhanced analytics"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Internationalization" - }), ": Multi-language support"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Dark mode" - }), ": Theme toggle with persistence"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "PWA features" - }), ": Offline support, install prompt"] - }), "\n"] - })] - }); -} -function MDXContent(props = {}) { - const {wrapper: MDXLayout} = { - ...(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__/* .useMDXComponents */ .R)(), - ...props.components - }; - return MDXLayout ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(MDXLayout, { - ...props, - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_createMdxContent, { - ...props - }) - }) : _createMdxContent(props); -} - - - -/***/ }, - -/***/ 231 -(module) { - -// Exports -module.exports = { - "navbarHideable": `navbarHideable_m1mJ`, - "navbarHidden": `navbarHidden_jGov` -}; - - -/***/ }, - -/***/ 236 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ CodeBlockContainer) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7559); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6058); -/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4291); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(1702); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function CodeBlockContainer({as:As,...props}){const prismTheme=(0,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__/* .usePrismTheme */ .A)();const prismCssVariables=(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_4__/* .getPrismCssVariables */ .M$)(prismTheme);return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(As// Polymorphic components are hard to type, without `oneOf` generics -,{...props,style:prismCssVariables,className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(props.className,(_styles_module_css__WEBPACK_IMPORTED_MODULE_5___default().codeBlockContainer),_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__/* .ThemeClassNames */ .G.common.codeBlock)});} - -/***/ }, - -/***/ 253 -(__unused_webpack_module, exports) { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.getErrorCausalChain=getErrorCausalChain;function getErrorCausalChain(error){if(error.cause){return[error,...getErrorCausalChain(error.cause)];}return[error];} - -/***/ }, - -/***/ 274 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ CopyButton) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(986); -/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4291); -/* harmony import */ var _theme_CodeBlock_Buttons_Button__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(6907); -/* harmony import */ var _theme_Icon_Copy__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(1473); -/* harmony import */ var _theme_Icon_Success__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(4115); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(8864); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function title(){return (0,_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__/* .translate */ .T)({id:'theme.CodeBlock.copy',message:'Copy',description:'The copy button label on code blocks'});}function ariaLabel(isCopied){return isCopied?(0,_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__/* .translate */ .T)({id:'theme.CodeBlock.copied',message:'Copied',description:'The copied button label on code blocks'}):(0,_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__/* .translate */ .T)({id:'theme.CodeBlock.copyButtonAriaLabel',message:'Copy code to clipboard',description:'The ARIA label for copy code blocks button'});}function useCopyButton(){const{metadata:{code}}=(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_3__/* .useCodeBlockContext */ .Ph)();const[isCopied,setIsCopied]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);const copyTimeout=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(undefined);const copyCode=(0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>{navigator.clipboard.writeText(code).then(()=>{setIsCopied(true);copyTimeout.current=window.setTimeout(()=>{setIsCopied(false);},1000);});},[code]);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>()=>window.clearTimeout(copyTimeout.current),[]);return{copyCode,isCopied};}function CopyButton({className}){const{copyCode,isCopied}=useCopyButton();return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(_theme_CodeBlock_Buttons_Button__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A,{"aria-label":ariaLabel(isCopied),title:title(),className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(className,(_styles_module_css__WEBPACK_IMPORTED_MODULE_7___default().copyButton),isCopied&&(_styles_module_css__WEBPACK_IMPORTED_MODULE_7___default().copyButtonCopied)),onClick:copyCode,children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxs)("span",{className:(_styles_module_css__WEBPACK_IMPORTED_MODULE_7___default().copyButtonIcons),"aria-hidden":"true",children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(_theme_Icon_Copy__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A,{className:(_styles_module_css__WEBPACK_IMPORTED_MODULE_7___default().copyButtonIcon)}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(_theme_Icon_Success__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A,{className:(_styles_module_css__WEBPACK_IMPORTED_MODULE_7___default().copyButtonSuccessIcon)})]})});} - -/***/ }, - -/***/ 290 -(module) { - -"use strict"; -module.exports = require("async_hooks"); - -/***/ }, - -/***/ 366 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ i: () => (/* binding */ useTOCHighlight) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _utils_useThemeConfig__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6342); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// TODO make the hardcoded theme-classic classnames configurable (or add them -// to ThemeClassNames?) -/** - * If the anchor has no height and is just a "marker" in the DOM; we'll use the - * parent (normally the link text) rect boundaries instead - */function getVisibleBoundingClientRect(element){const rect=element.getBoundingClientRect();const hasNoHeight=rect.top===rect.bottom;if(hasNoHeight){return getVisibleBoundingClientRect(element.parentNode);}return rect;}/** - * Considering we divide viewport into 2 zones of each 50vh, this returns true - * if an element is in the first zone (i.e., appear in viewport, near the top) - */function isInViewportTopHalf(boundingRect){return boundingRect.top>0&&boundingRect.bottom{const boundingRect=getVisibleBoundingClientRect(anchor);return boundingRect.top>=anchorTopOffset;});if(nextVisibleAnchor){const boundingRect=getVisibleBoundingClientRect(nextVisibleAnchor);// If anchor is in the top half of the viewport: it is the one we consider -// "active" (unless it's too close to the top and and soon to be scrolled -// outside viewport) -if(isInViewportTopHalf(boundingRect)){return nextVisibleAnchor;}// If anchor is in the bottom half of the viewport, or under the viewport, -// we consider the active anchor is the previous one. This is because the -// main text appearing in the user screen mostly belong to the previous -// anchor. Returns null for the first anchor, see -// https://github.com/facebook/docusaurus/issues/5318 -return anchors[anchors.indexOf(nextVisibleAnchor)-1]??null;}// No anchor under viewport top (i.e. we are at the bottom of the page), -// highlight the last anchor found -return anchors[anchors.length-1]??null;}function getLinkAnchorValue(link){return decodeURIComponent(link.href.substring(link.href.indexOf('#')+1));}function getLinks(linkClassName){return Array.from(document.getElementsByClassName(linkClassName));}function getNavbarHeight(){// Not ideal to obtain actual height this way -// Using TS ! (not ?) because otherwise a bad selector would be un-noticed -return document.querySelector('.navbar').clientHeight;}function useAnchorTopOffsetRef(){const anchorTopOffsetRef=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(0);const{navbar:{hideOnScroll}}=(0,_utils_useThemeConfig__WEBPACK_IMPORTED_MODULE_1__/* .useThemeConfig */ .p)();(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{anchorTopOffsetRef.current=hideOnScroll?0:getNavbarHeight();},[hideOnScroll]);return anchorTopOffsetRef;}/** - * Side-effect that applies the active class name to the TOC heading that the - * user is currently viewing. Disabled when `config` is undefined. - */function useTOCHighlight(config){const lastActiveLinkRef=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(undefined);const anchorTopOffsetRef=useAnchorTopOffsetRef();(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{if(!config){// No-op, highlighting is disabled -return()=>{};}const{linkClassName,linkActiveClassName,minHeadingLevel,maxHeadingLevel}=config;function updateLinkActiveClass(link,active){if(active){if(lastActiveLinkRef.current&&lastActiveLinkRef.current!==link){lastActiveLinkRef.current.classList.remove(linkActiveClassName);}link.classList.add(linkActiveClassName);lastActiveLinkRef.current=link;// link.scrollIntoView({block: 'nearest'}); -}else{link.classList.remove(linkActiveClassName);}}function updateActiveLink(){const links=getLinks(linkClassName);const anchors=getAnchors({minHeadingLevel,maxHeadingLevel});const activeAnchor=getActiveAnchor(anchors,{anchorTopOffset:anchorTopOffsetRef.current});const activeLink=links.find(link=>activeAnchor&&activeAnchor.id===getLinkAnchorValue(link));links.forEach(link=>{updateLinkActiveClass(link,link===activeLink);});}document.addEventListener('scroll',updateActiveLink);document.addEventListener('resize',updateActiveLink);updateActiveLink();return()=>{document.removeEventListener('scroll',updateActiveLink);document.removeEventListener('resize',updateActiveLink);};},[config,anchorTopOffsetRef]);} - -/***/ }, - -/***/ 418 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - *//* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (()=>null); - -/***/ }, - -/***/ 440 -(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; -var __webpack_unused_export__; -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */__webpack_unused_export__ = ({value:true});exports.rA=__webpack_unused_export__=__webpack_unused_export__=__webpack_unused_export__=__webpack_unused_export__=__webpack_unused_export__=__webpack_unused_export__=__webpack_unused_export__=exports.Ks=__webpack_unused_export__=void 0;const tslib_1=__webpack_require__(1635);// __ prefix allows search crawlers (Algolia/DocSearch) to ignore anchors -// https://github.com/facebook/docusaurus/issues/8883#issuecomment-1516328368 -__webpack_unused_export__='__blog-post-container';var applyTrailingSlash_1=__webpack_require__(2983);Object.defineProperty(exports, "Ks", ({enumerable:true,get:function(){return tslib_1.__importDefault(applyTrailingSlash_1).default;}}));__webpack_unused_export__ = ({enumerable:true,get:function(){return applyTrailingSlash_1.addTrailingSlash;}});__webpack_unused_export__ = ({enumerable:true,get:function(){return applyTrailingSlash_1.addLeadingSlash;}});__webpack_unused_export__ = ({enumerable:true,get:function(){return applyTrailingSlash_1.removeTrailingSlash;}});var stringUtils_1=__webpack_require__(2566);__webpack_unused_export__ = ({enumerable:true,get:function(){return stringUtils_1.addPrefix;}});__webpack_unused_export__ = ({enumerable:true,get:function(){return stringUtils_1.removeSuffix;}});__webpack_unused_export__ = ({enumerable:true,get:function(){return stringUtils_1.addSuffix;}});__webpack_unused_export__ = ({enumerable:true,get:function(){return stringUtils_1.removePrefix;}});var errorUtils_1=__webpack_require__(253);Object.defineProperty(exports, "rA", ({enumerable:true,get:function(){return errorUtils_1.getErrorCausalChain;}})); - -/***/ }, - -/***/ 448 -(module) { - -// Exports -module.exports = { - "tag": `tag_zVej`, - "tagRegular": `tagRegular_sFm0`, - "tagWithCount": `tagWithCount_h2kH` -}; - - -/***/ }, - -/***/ 467 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_ComponentCreator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2067); -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ([{path:'/rob/CmdForge/',component:(0,_docusaurus_ComponentCreator__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('/rob/CmdForge/','805'),routes:[{path:'/rob/CmdForge/',component:(0,_docusaurus_ComponentCreator__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('/rob/CmdForge/','327'),routes:[{path:'/rob/CmdForge/',component:(0,_docusaurus_ComponentCreator__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('/rob/CmdForge/','4b4'),routes:[{path:'/rob/CmdForge/architecture/',component:(0,_docusaurus_ComponentCreator__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('/rob/CmdForge/architecture/','66c'),exact:true,sidebar:"docs"},{path:'/rob/CmdForge/category/reference/',component:(0,_docusaurus_ComponentCreator__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('/rob/CmdForge/category/reference/','d31'),exact:true,sidebar:"docs"},{path:'/rob/CmdForge/goals/',component:(0,_docusaurus_ComponentCreator__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('/rob/CmdForge/goals/','119'),exact:true,sidebar:"docs"},{path:'/rob/CmdForge/ideas-and-exploration/',component:(0,_docusaurus_ComponentCreator__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('/rob/CmdForge/ideas-and-exploration/','4fe'),exact:true,sidebar:"docs"},{path:'/rob/CmdForge/milestones/',component:(0,_docusaurus_ComponentCreator__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('/rob/CmdForge/milestones/','979'),exact:true,sidebar:"docs"},{path:'/rob/CmdForge/reference/collections/',component:(0,_docusaurus_ComponentCreator__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('/rob/CmdForge/reference/collections/','3ba'),exact:true,sidebar:"docs"},{path:'/rob/CmdForge/reference/design/',component:(0,_docusaurus_ComponentCreator__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('/rob/CmdForge/reference/design/','af3'),exact:true,sidebar:"docs"},{path:'/rob/CmdForge/reference/examples/',component:(0,_docusaurus_ComponentCreator__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('/rob/CmdForge/reference/examples/','211'),exact:true,sidebar:"docs"},{path:'/rob/CmdForge/reference/meta-tools/',component:(0,_docusaurus_ComponentCreator__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('/rob/CmdForge/reference/meta-tools/','541'),exact:true,sidebar:"docs"},{path:'/rob/CmdForge/reference/providers/',component:(0,_docusaurus_ComponentCreator__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('/rob/CmdForge/reference/providers/','94c'),exact:true,sidebar:"docs"},{path:'/rob/CmdForge/reference/registry-spec/',component:(0,_docusaurus_ComponentCreator__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('/rob/CmdForge/reference/registry-spec/','424'),exact:true,sidebar:"docs"},{path:'/rob/CmdForge/reference/web-ui-spec/',component:(0,_docusaurus_ComponentCreator__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('/rob/CmdForge/reference/web-ui-spec/','12b'),exact:true,sidebar:"docs"},{path:'/rob/CmdForge/todos/',component:(0,_docusaurus_ComponentCreator__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('/rob/CmdForge/todos/','fa8'),exact:true,sidebar:"docs"},{path:'/rob/CmdForge/',component:(0,_docusaurus_ComponentCreator__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('/rob/CmdForge/','cc6'),exact:true,sidebar:"docs"}]}]}]},{path:'*',component:(0,_docusaurus_ComponentCreator__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('*')}]); - -/***/ }, - -/***/ 542 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ _: () => (/* binding */ DocProvider), -/* harmony export */ u: () => (/* binding */ useDoc) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9532); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */const Context=/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(null);/** - * Note: we don't use `PropDoc` as context value on purpose. Metadata is - * currently stored inside the MDX component, but we may want to change that in - * the future. This layer is a good opportunity to decouple storage from - * consuming API, potentially allowing us to provide metadata as both props and - * route context without duplicating the chunks in the future. - */function useContextValue(content){return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>({metadata:content.metadata,frontMatter:content.frontMatter,assets:content.assets,contentTitle:content.contentTitle,toc:content.toc}),[content]);}/** - * This is a very thin layer around the `content` received from the MDX loader. - * It provides metadata about the doc to the children tree. - */function DocProvider({children,content}){const contextValue=useContextValue(content);return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(Context.Provider,{value:contextValue,children:children});}/** - * Returns the data of the currently browsed doc. Gives access to the doc's MDX - * Component, front matter, metadata, TOC, etc. When swizzling a low-level - * component (e.g. the "Edit this page" link) and you need some extra metadata, - * you don't have to drill the props all the way through the component tree: - * simply use this hook instead. - */function useDoc(){const doc=(0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(Context);if(doc===null){throw new _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_1__/* .ReactContextError */ .dV('DocProvider');}return doc;} - -/***/ }, - -/***/ 545 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ mg: () => (/* binding */ W), -/* harmony export */ vd: () => (/* binding */ q) -/* harmony export */ }); -/* unused harmony export HelmetData */ -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5556); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var react_fast_compare__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(115); -/* harmony import */ var react_fast_compare__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_fast_compare__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var invariant__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7927); -/* harmony import */ var invariant__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(invariant__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var shallowequal__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(2833); -/* harmony import */ var shallowequal__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(shallowequal__WEBPACK_IMPORTED_MODULE_4__); -function a(){return a=Object.assign||function(t){for(var e=1;e=0||(i[r]=t[r]);return i}var l={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},p={rel:["amphtml","canonical","alternate"]},f={type:["application/ld+json"]},d={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},h=Object.keys(l).map(function(t){return l[t]}),m={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},y=Object.keys(m).reduce(function(t,e){return t[m[e]]=e,t},{}),T=function(t,e){for(var r=t.length-1;r>=0;r-=1){var n=t[r];if(Object.prototype.hasOwnProperty.call(n,e))return n[e]}return null},g=function(t){var e=T(t,l.TITLE),r=T(t,"titleTemplate");if(Array.isArray(e)&&(e=e.join("")),r&&e)return r.replace(/%s/g,function(){return e});var n=T(t,"defaultTitle");return e||n||void 0},b=function(t){return T(t,"onChangeClientState")||function(){}},v=function(t,e){return e.filter(function(e){return void 0!==e[t]}).map(function(e){return e[t]}).reduce(function(t,e){return a({},t,e)},{})},A=function(t,e){return e.filter(function(t){return void 0!==t[l.BASE]}).map(function(t){return t[l.BASE]}).reverse().reduce(function(e,r){if(!e.length)for(var n=Object.keys(r),i=0;i/g,">").replace(/"/g,""").replace(/'/g,"'")},x=function(t){return Object.keys(t).reduce(function(e,r){var n=void 0!==t[r]?r+'="'+t[r]+'"':""+r;return e?e+" "+n:n},"")},L=function(t,e){return void 0===e&&(e={}),Object.keys(t).reduce(function(e,r){return e[m[r]||r]=t[r],e},e)},j=function(e,r){return r.map(function(r,n){var i,o=((i={key:n})["data-rh"]=!0,i);return Object.keys(r).forEach(function(t){var e=m[t]||t;"innerHTML"===e||"cssText"===e?o.dangerouslySetInnerHTML={__html:r.innerHTML||r.cssText}:o[e]=r[t]}),react__WEBPACK_IMPORTED_MODULE_0__.createElement(e,o)})},M=function(e,r,n){switch(e){case l.TITLE:return{toComponent:function(){return n=r.titleAttributes,(i={key:e=r.title})["data-rh"]=!0,o=L(n,i),[react__WEBPACK_IMPORTED_MODULE_0__.createElement(l.TITLE,o,e)];// removed by dead control flow - var e, n, i, o; },toString:function(){return function(t,e,r,n){var i=x(r),o=S(e);return i?"<"+t+' data-rh="true" '+i+">"+w(o,n)+"":"<"+t+' data-rh="true">'+w(o,n)+""}(e,r.title,r.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return L(r)},toString:function(){return x(r)}};default:return{toComponent:function(){return j(e,r)},toString:function(){return function(t,e,r){return e.reduce(function(e,n){var i=Object.keys(n).filter(function(t){return!("innerHTML"===t||"cssText"===t)}).reduce(function(t,e){var i=void 0===n[e]?e:e+'="'+w(n[e],r)+'"';return t?t+" "+i:i},""),o=n.innerHTML||n.cssText||"",a=-1===P.indexOf(t);return e+"<"+t+' data-rh="true" '+i+(a?"/>":">"+o+"")},"")}(e,r,n)}}}},k=function(t){var e=t.baseTag,r=t.bodyAttributes,n=t.encode,i=t.htmlAttributes,o=t.noscriptTags,a=t.styleTags,s=t.title,c=void 0===s?"":s,u=t.titleAttributes,h=t.linkTags,m=t.metaTags,y=t.scriptTags,T={toComponent:function(){},toString:function(){return""}};if(t.prioritizeSeoTags){var g=function(t){var e=t.linkTags,r=t.scriptTags,n=t.encode,i=E(t.metaTags,d),o=E(e,p),a=E(r,f);return{priorityMethods:{toComponent:function(){return[].concat(j(l.META,i.priority),j(l.LINK,o.priority),j(l.SCRIPT,a.priority))},toString:function(){return M(l.META,i.priority,n)+" "+M(l.LINK,o.priority,n)+" "+M(l.SCRIPT,a.priority,n)}},metaTags:i.default,linkTags:o.default,scriptTags:a.default}}(t);T=g.priorityMethods,h=g.linkTags,m=g.metaTags,y=g.scriptTags}return{priority:T,base:M(l.BASE,e,n),bodyAttributes:M("bodyAttributes",r,n),htmlAttributes:M("htmlAttributes",i,n),link:M(l.LINK,h,n),meta:M(l.META,m,n),noscript:M(l.NOSCRIPT,o,n),script:M(l.SCRIPT,y,n),style:M(l.STYLE,a,n),title:M(l.TITLE,{title:c,titleAttributes:u},n)}},H=[],N=function(t,e){var r=this;void 0===e&&(e="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(t){r.context.helmet=t},helmetInstances:{get:function(){return r.canUseDOM?H:r.instances},add:function(t){(r.canUseDOM?H:r.instances).push(t)},remove:function(t){var e=(r.canUseDOM?H:r.instances).indexOf(t);(r.canUseDOM?H:r.instances).splice(e,1)}}},this.context=t,this.canUseDOM=e,e||(t.helmet=k({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},R=react__WEBPACK_IMPORTED_MODULE_0__.createContext({}),D=prop_types__WEBPACK_IMPORTED_MODULE_1___default().shape({setHelmet:(prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),helmetInstances:prop_types__WEBPACK_IMPORTED_MODULE_1___default().shape({get:(prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),add:(prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),remove:(prop_types__WEBPACK_IMPORTED_MODULE_1___default().func)})}),U="undefined"!=typeof document,q=/*#__PURE__*/function(e){function r(t){var n;return(n=e.call(this,t)||this).helmetData=new N(n.props.context,r.canUseDOM),n}return s(r,e),r.prototype.render=function(){/*#__PURE__*/return react__WEBPACK_IMPORTED_MODULE_0__.createElement(R.Provider,{value:this.helmetData.value},this.props.children)},r}(react__WEBPACK_IMPORTED_MODULE_0__.Component);q.canUseDOM=U,q.propTypes={context:prop_types__WEBPACK_IMPORTED_MODULE_1___default().shape({helmet:prop_types__WEBPACK_IMPORTED_MODULE_1___default().shape()}),children:(prop_types__WEBPACK_IMPORTED_MODULE_1___default().node).isRequired},q.defaultProps={context:{}},q.displayName="HelmetProvider";var Y=function(t,e){var r,n=document.head||document.querySelector(l.HEAD),i=n.querySelectorAll(t+"[data-rh]"),o=[].slice.call(i),a=[];return e&&e.length&&e.forEach(function(e){var n=document.createElement(t);for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&("innerHTML"===i?n.innerHTML=e.innerHTML:"cssText"===i?n.styleSheet?n.styleSheet.cssText=e.cssText:n.appendChild(document.createTextNode(e.cssText)):n.setAttribute(i,void 0===e[i]?"":e[i]));n.setAttribute("data-rh","true"),o.some(function(t,e){return r=e,n.isEqualNode(t)})?o.splice(r,1):a.push(n)}),o.forEach(function(t){return t.parentNode.removeChild(t)}),a.forEach(function(t){return n.appendChild(t)}),{oldTags:o,newTags:a}},B=function(t,e){var r=document.getElementsByTagName(t)[0];if(r){for(var n=r.getAttribute("data-rh"),i=n?n.split(","):[],o=[].concat(i),a=Object.keys(e),s=0;s=0;p-=1)r.removeAttribute(o[p]);i.length===o.length?r.removeAttribute("data-rh"):r.getAttribute("data-rh")!==a.join(",")&&r.setAttribute("data-rh",a.join(","))}},K=function(t,e){var r=t.baseTag,n=t.htmlAttributes,i=t.linkTags,o=t.metaTags,a=t.noscriptTags,s=t.onChangeClientState,c=t.scriptTags,u=t.styleTags,p=t.title,f=t.titleAttributes;B(l.BODY,t.bodyAttributes),B(l.HTML,n),function(t,e){void 0!==t&&document.title!==t&&(document.title=S(t)),B(l.TITLE,e)}(p,f);var d={baseTag:Y(l.BASE,r),linkTags:Y(l.LINK,i),metaTags:Y(l.META,o),noscriptTags:Y(l.NOSCRIPT,a),scriptTags:Y(l.SCRIPT,c),styleTags:Y(l.STYLE,u)},h={},m={};Object.keys(d).forEach(function(t){var e=d[t],r=e.newTags,n=e.oldTags;r.length&&(h[t]=r),n.length&&(m[t]=d[t].oldTags)}),e&&e(),s(t,h,m)},_=null,z=/*#__PURE__*/function(t){function e(){for(var e,r=arguments.length,n=new Array(r),i=0;i elements are self-closing and can not contain children. Refer to our API for more information.")}},o.flattenArrayTypeChildren=function(t){var e,r=t.child,n=t.arrayTypeChildren;return a({},n,((e={})[r.type]=[].concat(n[r.type]||[],[a({},t.newChildProps,this.mapNestedChildrenToProps(r,t.nestedChildren))]),e))},o.mapObjectTypeChildren=function(t){var e,r,n=t.child,i=t.newProps,o=t.newChildProps,s=t.nestedChildren;switch(n.type){case l.TITLE:return a({},i,((e={})[n.type]=s,e.titleAttributes=a({},o),e));case l.BODY:return a({},i,{bodyAttributes:a({},o)});case l.HTML:return a({},i,{htmlAttributes:a({},o)});default:return a({},i,((r={})[n.type]=a({},o),r))}},o.mapArrayTypeChildrenToProps=function(t,e){var r=a({},e);return Object.keys(t).forEach(function(e){var n;r=a({},r,((n={})[e]=t[e],n))}),r},o.warnOnInvalidChildren=function(t,e){return invariant__WEBPACK_IMPORTED_MODULE_3___default()(h.some(function(e){return t.type===e}),"function"==typeof t.type?"You may be attempting to nest components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+h.join(", ")+" are allowed. Helmet does not support rendering <"+t.type+"> elements. Refer to our API for more information."),invariant__WEBPACK_IMPORTED_MODULE_3___default()(!e||"string"==typeof e||Array.isArray(e)&&!e.some(function(t){return"string"!=typeof t}),"Helmet expects a string as a child of <"+t.type+">. Did you forget to wrap your children in braces? ( <"+t.type+">{``} ) Refer to our API for more information."),!0},o.mapChildrenToProps=function(e,r){var n=this,i={};return react__WEBPACK_IMPORTED_MODULE_0__.Children.forEach(e,function(t){if(t&&t.props){var e=t.props,o=e.children,a=u(e,F),s=Object.keys(a).reduce(function(t,e){return t[y[e]||e]=a[e],t},{}),c=t.type;switch("symbol"==typeof c?c=c.toString():n.warnOnInvalidChildren(t,o),c){case l.FRAGMENT:r=n.mapChildrenToProps(o,r);break;case l.LINK:case l.META:case l.NOSCRIPT:case l.SCRIPT:case l.STYLE:i=n.flattenArrayTypeChildren({child:t,arrayTypeChildren:i,newChildProps:s,nestedChildren:o});break;default:r=n.mapObjectTypeChildren({child:t,newProps:r,newChildProps:s,nestedChildren:o})}}}),this.mapArrayTypeChildrenToProps(i,r)},o.render=function(){var e=this.props,r=e.children,n=u(e,G),i=a({},n),o=n.helmetData;return r&&(i=this.mapChildrenToProps(r,i)),!o||o instanceof N||(o=new N(o.context,o.instances)),o?/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(z,a({},i,{context:o.value,helmetData:void 0})):/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(R.Consumer,null,function(e){/*#__PURE__*/return react__WEBPACK_IMPORTED_MODULE_0__.createElement(z,a({},i,{context:e}))})},r}(react__WEBPACK_IMPORTED_MODULE_0__.Component);W.propTypes={base:(prop_types__WEBPACK_IMPORTED_MODULE_1___default().object),bodyAttributes:(prop_types__WEBPACK_IMPORTED_MODULE_1___default().object),children:prop_types__WEBPACK_IMPORTED_MODULE_1___default().oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_1___default().node)),(prop_types__WEBPACK_IMPORTED_MODULE_1___default().node)]),defaultTitle:(prop_types__WEBPACK_IMPORTED_MODULE_1___default().string),defer:(prop_types__WEBPACK_IMPORTED_MODULE_1___default().bool),encodeSpecialCharacters:(prop_types__WEBPACK_IMPORTED_MODULE_1___default().bool),htmlAttributes:(prop_types__WEBPACK_IMPORTED_MODULE_1___default().object),link:prop_types__WEBPACK_IMPORTED_MODULE_1___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_1___default().object)),meta:prop_types__WEBPACK_IMPORTED_MODULE_1___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_1___default().object)),noscript:prop_types__WEBPACK_IMPORTED_MODULE_1___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_1___default().object)),onChangeClientState:(prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),script:prop_types__WEBPACK_IMPORTED_MODULE_1___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_1___default().object)),style:prop_types__WEBPACK_IMPORTED_MODULE_1___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_1___default().object)),title:(prop_types__WEBPACK_IMPORTED_MODULE_1___default().string),titleAttributes:(prop_types__WEBPACK_IMPORTED_MODULE_1___default().object),titleTemplate:(prop_types__WEBPACK_IMPORTED_MODULE_1___default().string),prioritizeSeoTags:(prop_types__WEBPACK_IMPORTED_MODULE_1___default().bool),helmetData:(prop_types__WEBPACK_IMPORTED_MODULE_1___default().object)},W.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},W.displayName="Helmet"; -//# sourceMappingURL=index.module.js.map - - -/***/ }, - -/***/ 609 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ V: () => (/* binding */ DocsSidebarProvider), -/* harmony export */ t: () => (/* binding */ useDocsSidebar) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9532); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// Using a Symbol because null is a valid context value (a doc with no sidebar) -// Inspired by https://github.com/jamiebuilds/unstated-next/blob/master/src/unstated-next.tsx -const EmptyContext=Symbol('EmptyContext');const Context=/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(EmptyContext);/** - * Provide the current sidebar to your children. - */function DocsSidebarProvider({children,name,items}){const stableValue=(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>name&&items?{name,items}:null,[name,items]);return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(Context.Provider,{value:stableValue,children:children});}/** - * Gets the sidebar that's currently displayed, or `null` if there isn't one - */function useDocsSidebar(){const value=(0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(Context);if(value===EmptyContext){throw new _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_1__/* .ReactContextError */ .dV('DocsSidebarProvider');}return value;} - -/***/ }, - -/***/ 633 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ AdmonitionIconDanger) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function AdmonitionIconDanger(props){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("svg",{viewBox:"0 0 12 16",...props,children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"})});} - -/***/ }, - -/***/ 689 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ n: () => (/* binding */ dispatchLifecycleAction) -/* harmony export */ }); -/* harmony import */ var _generated_client_modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3586); -/* harmony import */ var _exports_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(205); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function dispatchLifecycleAction(lifecycleAction,...args){const callbacks=_generated_client_modules__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.map(clientModule=>{const lifecycleFunction=clientModule.default?.[lifecycleAction]??clientModule[lifecycleAction];return lifecycleFunction?.(...args);});return()=>callbacks.forEach(cb=>cb?.());}function scrollAfterNavigation({location,previousLocation}){if(!previousLocation){return;// no-op: use native browser feature -}const samePathname=location.pathname===previousLocation.pathname;const sameHash=location.hash===previousLocation.hash;const sameSearch=location.search===previousLocation.search;// Query-string changes: do not scroll to top/hash -if(samePathname&&sameHash&&!sameSearch){return;}const{hash}=location;if(!hash){window.scrollTo(0,0);}else{const id=decodeURIComponent(hash.substring(1));const element=document.getElementById(id);element?.scrollIntoView();}}function ClientLifecyclesDispatcher({children,location,previousLocation}){(0,_exports_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(()=>{if(previousLocation!==location){scrollAfterNavigation({location,previousLocation});dispatchLifecycleAction('onRouteDidUpdate',{previousLocation,location});}},[previousLocation,location]);return children;}/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ClientLifecyclesDispatcher); - -/***/ }, - -/***/ 721 -(module) { - -"use strict"; -module.exports = /*#__PURE__*/JSON.parse('{"id":"reference/examples","title":"Example Tools","description":"CmdForge comes with 28 pre-built tools. This document shows their configurations and usage.","source":"@site/docs/reference/examples.md","sourceDirName":"reference","slug":"/reference/examples","permalink":"/rob/CmdForge/reference/examples","draft":false,"unlisted":false,"tags":[],"version":"current","sidebarPosition":4,"frontMatter":{"sidebar_label":"Example Tools","sidebar_position":4,"format":"md"},"sidebar":"docs","previous":{"title":"Collections","permalink":"/rob/CmdForge/reference/collections"},"next":{"title":"Design Philosophy","permalink":"/rob/CmdForge/reference/design"}}'); - -/***/ }, - -/***/ 794 -(module) { - -"use strict"; -module.exports = /*#__PURE__*/JSON.parse('{"id":"reference/design","title":"CmdForge Design Document","description":"A lightweight personal tool builder for AI-powered CLI commands","source":"@site/docs/reference/design.md","sourceDirName":"reference","slug":"/reference/design","permalink":"/rob/CmdForge/reference/design","draft":false,"unlisted":false,"tags":[],"version":"current","sidebarPosition":5,"frontMatter":{"sidebar_label":"Design Philosophy","sidebar_position":5,"format":"md"},"sidebar":"docs","previous":{"title":"Example Tools","permalink":"/rob/CmdForge/reference/examples"},"next":{"title":"Web UI Design","permalink":"/rob/CmdForge/reference/web-ui-spec"}}'); - -/***/ }, - -/***/ 804 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ AdmonitionIconCaution) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function AdmonitionIconCaution(props){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("svg",{viewBox:"0 0 16 16",...props,children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"})});} - -/***/ }, - -/***/ 901 -(module) { - -// Exports -module.exports = { - "lastUpdated": `lastUpdated_JAkA`, - "noPrint": `noPrint_WFHX` -}; - - -/***/ }, - -/***/ 961 -(module, __unused_webpack_exports, __webpack_require__) { - -"use strict"; - - -function checkDCE() { - /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */ - if ( - typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' || - typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function' - ) { - return; - } - if (false) // removed by dead control flow -{} - try { - // Verify that the code above has been dead code eliminated (DCE'd). - __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE); - } catch (err) { - // DevTools shouldn't crash React, no matter what. - // We should still report in case we break this code. - console.error(err); - } -} - -if (true) { - // DCE check should happen before ReactDOM bundle executes so that - // DevTools can report bad minification during injection. - checkDCE(); - module.exports = __webpack_require__(6221); -} else // removed by dead control flow -{} - - -/***/ }, - -/***/ 986 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ Translate), -/* harmony export */ T: () => (/* binding */ translate) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_Interpolate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4195); -/* harmony import */ var _generated_codeTranslations__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2654); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// Can't read it from context, due to exposing imperative API -function getLocalizedMessage({id,message}){if(typeof id==='undefined'&&typeof message==='undefined'){throw new Error('Docusaurus translation declarations must have at least a translation id or a default translation message');}return _generated_codeTranslations__WEBPACK_IMPORTED_MODULE_2__[id??message]??message??id;}// Imperative translation API is useful for some edge-cases: -// - translating page titles (meta) -// - translating string props (input placeholders, image alt, aria labels...) -function translate({message,id},values){const localizedMessage=getLocalizedMessage({message,id});return (0,_docusaurus_Interpolate__WEBPACK_IMPORTED_MODULE_1__/* .interpolate */ .G)(localizedMessage,values);}// Maybe we'll want to improve this component with additional features -// Like toggling a translation mode that adds a little translation button near -// the text? -function Translate({children,id,values}){if(children&&typeof children!=='string'){console.warn('Illegal children',children);throw new Error('The Docusaurus component only accept simple string values');}const localizedMessage=getLocalizedMessage({message:children,id});return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.Fragment,{children:(0,_docusaurus_Interpolate__WEBPACK_IMPORTED_MODULE_1__/* .interpolate */ .G)(localizedMessage,values)});} - -/***/ }, - -/***/ 1011 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ ThemeProviderTitleFormatter) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4563); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */const formatter=params=>{// Add your own title formatting logic here! -return params.defaultFormatter(params);};function ThemeProviderTitleFormatter({children}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_1__/* .TitleFormatterProvider */ .AL,{formatter:formatter,children:children});} - -/***/ }, - -/***/ 1038 -(module) { - -// Exports -module.exports = { - "categoryLink": `categoryLink_byQd`, - "categoryLinkLabel": `categoryLinkLabel_W154` -}; - - -/***/ }, - -/***/ 1182 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ S: () => (/* binding */ useHideableNavbar) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _utils_useLocationChange__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5062); -/* harmony import */ var _utils_scrollUtils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(3104); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - *//** - * Wires the imperative logic of a hideable navbar. - * @param hideOnScroll If `false`, this hook is basically a no-op. - */function useHideableNavbar(hideOnScroll){const[isNavbarVisible,setIsNavbarVisible]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(hideOnScroll);const isFocusedAnchor=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(false);const navbarHeight=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(0);const navbarRef=(0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(node=>{if(node!==null){navbarHeight.current=node.getBoundingClientRect().height;}},[]);(0,_utils_scrollUtils__WEBPACK_IMPORTED_MODULE_2__/* .useScrollPosition */ .Mq)(({scrollY:scrollTop},lastPosition)=>{if(!hideOnScroll){return;}// Needed mostly for handling rubber band scrolling. -// See https://github.com/facebook/docusaurus/pull/5721 -if(scrollTop=lastScrollTop){setIsNavbarVisible(false);}else if(scrollTop+windowHeight{if(!hideOnScroll){return;}// See https://github.com/facebook/docusaurus/pull/8059#issuecomment-1239639480 -const currentHash=locationChangeEvent.location.hash;const currentHashAnchor=currentHash?document.getElementById(currentHash.substring(1)):undefined;if(currentHashAnchor){isFocusedAnchor.current=true;setIsNavbarVisible(false);return;}setIsNavbarVisible(true);});return{navbarRef,isNavbarVisible};} - -/***/ }, - -/***/ 1197 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ f: () => (/* binding */ useCodeWordWrap) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _useMutationObserver__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9701); -// Callback fires when the "hidden" attribute of a tabpanel changes -// See https://github.com/facebook/docusaurus/pull/7485 -function useTabBecameVisibleCallback(codeBlockRef,callback){const[hiddenTabElement,setHiddenTabElement]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)();const updateHiddenTabElement=(0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>{// No need to observe non-hidden tabs -// + we want to force a re-render when a tab becomes visible -setHiddenTabElement(codeBlockRef.current?.closest('[role=tabpanel][hidden]'));},[codeBlockRef,setHiddenTabElement]);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{updateHiddenTabElement();},[updateHiddenTabElement]);(0,_useMutationObserver__WEBPACK_IMPORTED_MODULE_1__/* .useMutationObserver */ .P)(hiddenTabElement,mutations=>{mutations.forEach(mutation=>{if(mutation.type==='attributes'&&mutation.attributeName==='hidden'){callback();updateHiddenTabElement();}});},{attributes:true,characterData:false,childList:false,subtree:false});}function useCodeWordWrap(){const[isEnabled,setIsEnabled]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);const[isCodeScrollable,setIsCodeScrollable]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);const codeBlockRef=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);const toggle=(0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>{const codeElement=codeBlockRef.current.querySelector('code');if(isEnabled){codeElement.removeAttribute('style');}else{codeElement.style.whiteSpace='pre-wrap';// When code wrap is enabled, we want to avoid a scrollbar in any case -// Ensure that very very long words/strings/tokens still wrap -codeElement.style.overflowWrap='anywhere';}setIsEnabled(value=>!value);},[codeBlockRef,isEnabled]);const updateCodeIsScrollable=(0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>{const{scrollWidth,clientWidth}=codeBlockRef.current;const isScrollable=scrollWidth>clientWidth||codeBlockRef.current.querySelector('code').hasAttribute('style');setIsCodeScrollable(isScrollable);},[codeBlockRef]);useTabBecameVisibleCallback(codeBlockRef,updateCodeIsScrollable);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{updateCodeIsScrollable();},[isEnabled,updateCodeIsScrollable]);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{window.addEventListener('resize',updateCodeIsScrollable,{passive:true});return()=>{window.removeEventListener('resize',updateCodeIsScrollable);};},[updateCodeIsScrollable]);return{codeBlockRef,isEnabled,isCodeScrollable,toggle};} - -/***/ }, - -/***/ 1203 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ Draft) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7559); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4084); -/* harmony import */ var _theme_Admonition__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4552); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function Draft({className}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_theme_Admonition__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A,{type:"caution",title:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__/* .DraftBannerTitle */ .Yh,{}),className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(className,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__/* .ThemeClassNames */ .G.common.draftBanner),children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__/* .DraftBannerMessage */ .TT,{})});} - -/***/ }, - -/***/ 1207 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ DropdownNavbarItemMobile) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1422); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1252); -/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(9342); -/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(9169); -/* harmony import */ var _docusaurus_Translate__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(986); -/* harmony import */ var _theme_NavbarItem_NavbarNavLink__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(9060); -/* harmony import */ var _theme_NavbarItem__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(7163); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(9907); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_9__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function isItemActive(item,localPathname){if((0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_5__/* .isSamePath */ .ys)(item.to,localPathname)){return true;}if((0,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__/* .isRegexpStringMatch */ .G)(item.activeBaseRegex,localPathname)){return true;}if(item.activeBasePath&&localPathname.startsWith(item.activeBasePath)){return true;}return false;}function containsActiveItems(items,localPathname){return items.some(item=>isItemActive(item,localPathname));}function CollapseButton({collapsed,onClick}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("button",{"aria-label":collapsed?(0,_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_6__/* .translate */ .T)({id:'theme.navbar.mobileDropdown.collapseButton.expandAriaLabel',message:'Expand the dropdown',description:'The ARIA label of the button to expand the mobile dropdown navbar item'}):(0,_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_6__/* .translate */ .T)({id:'theme.navbar.mobileDropdown.collapseButton.collapseAriaLabel',message:'Collapse the dropdown',description:'The ARIA label of the button to collapse the mobile dropdown navbar item'}),"aria-expanded":!collapsed,type:"button",className:"clean-btn menu__caret",onClick:onClick});}function useItemCollapsible({active}){const{collapsed,toggleCollapsed,setCollapsed}=(0,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__/* .useCollapsible */ .u)({initialState:()=>!active});// Expand if any item active after a navigation -(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{if(active){setCollapsed(false);}},[active,setCollapsed]);return{collapsed,toggleCollapsed};}function DropdownNavbarItemMobile({items,className,position,// Need to destructure position from props so that it doesn't get passed on. -onClick,...props}){const localPathname=(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_4__/* .useLocalPathname */ .B)();const isActive=(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_5__/* .isSamePath */ .ys)(props.to,localPathname);const containsActive=containsActiveItems(items,localPathname);const{collapsed,toggleCollapsed}=useItemCollapsible({active:isActive||containsActive});// # hash permits to make the tag focusable in case no link target -// See https://github.com/facebook/docusaurus/pull/6003 -// There's probably a better solution though... -const href=props.to?undefined:'#';return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("li",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('menu__list-item',{'menu__list-item--collapsed':collapsed}),children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("div",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('menu__list-item-collapsible',{'menu__list-item-collapsible--active':isActive}),children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_theme_NavbarItem_NavbarNavLink__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A,{role:"button",className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)((_styles_module_css__WEBPACK_IMPORTED_MODULE_9___default().dropdownNavbarItemMobile),'menu__link menu__link--sublist',className),href:href,...props,onClick:e=>{// Prevent navigation when link is "#" -if(href==='#'){e.preventDefault();}// Otherwise we let navigation eventually happen, and/or collapse -toggleCollapsed();},children:props.children??props.label}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(CollapseButton,{collapsed:collapsed,onClick:e=>{e.preventDefault();toggleCollapsed();}})]}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__/* .Collapsible */ .N,{lazy:true,as:"ul",className:"menu__list",collapsed:collapsed,children:items.map((childItemProps,i)=>/*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_theme_NavbarItem__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .A,{mobile:true,isDropdownItem:true,onClick:onClick,activeClassName:"menu__link--active",...childItemProps,key:i}))})]});} - -/***/ }, - -/***/ 1252 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ G: () => (/* binding */ isRegexpStringMatch) -/* harmony export */ }); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - *//** - * Matches a string regex (as provided from the config) against a target in a - * null-safe fashion, case insensitive and global. - */function isRegexpStringMatch(regexAsString,valueToTest){if(typeof regexAsString==='undefined'||typeof valueToTest==='undefined'){return false;}return new RegExp(regexAsString,'gi').test(valueToTest);} - -/***/ }, - -/***/ 1263 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ NavbarMobileSidebarHeader) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2069); -/* harmony import */ var _docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(986); -/* harmony import */ var _theme_Navbar_ColorModeToggle__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(5659); -/* harmony import */ var _theme_Icon_Close__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1752); -/* harmony import */ var _theme_Navbar_Logo__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(3502); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function CloseButton(){const mobileSidebar=(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_1__/* .useNavbarMobileSidebar */ .M)();return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("button",{type:"button","aria-label":(0,_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__/* .translate */ .T)({id:'theme.docs.sidebar.closeSidebarButtonAriaLabel',message:'Close navigation bar',description:'The ARIA label for close button of mobile sidebar'}),className:"clean-btn navbar-sidebar__close",onClick:()=>mobileSidebar.toggle(),children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_theme_Icon_Close__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A,{color:"var(--ifm-color-emphasis-600)"})});}function NavbarMobileSidebarHeader(){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)("div",{className:"navbar-sidebar__brand",children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_theme_Navbar_Logo__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A,{}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_theme_Navbar_ColorModeToggle__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A,{className:"margin-right--md"}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(CloseButton,{})]});} - -/***/ }, - -/***/ 1310 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ SearchNavbarItem) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _theme_SearchBar__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(418); -/* harmony import */ var _theme_Navbar_Search__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4289); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function SearchNavbarItem({mobile,className}){if(mobile){return null;}return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_theme_Navbar_Search__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{className:className,children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_theme_SearchBar__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A,{})});} - -/***/ }, - -/***/ 1398 -(module) { - -// Exports -module.exports = { - "menuExternalLink": `menuExternalLink_NmtK`, - "linkLabel": `linkLabel_WmDU` -}; - - -/***/ }, - -/***/ 1422 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ N: () => (/* binding */ Collapsible), -/* harmony export */ u: () => (/* binding */ useCollapsible) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(205); -/* harmony import */ var _utils_accessibilityUtils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(3109); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */const DefaultAnimationEasing='ease-in-out';/** - * This hook is a very thin wrapper around a `useState`. - */function useCollapsible({initialState}){const[collapsed,setCollapsed]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(initialState??false);const toggleCollapsed=(0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>{setCollapsed(expanded=>!expanded);},[]);return{collapsed,setCollapsed,toggleCollapsed};}const CollapsedStyles={display:'none',overflow:'hidden',height:'0px'};const ExpandedStyles={display:'block',overflow:'visible',height:'auto'};function applyCollapsedStyle(el,collapsed){const collapsedStyles=collapsed?CollapsedStyles:ExpandedStyles;el.style.display=collapsedStyles.display;el.style.overflow=collapsedStyles.overflow;el.style.height=collapsedStyles.height;}/* -Lex111: Dynamic transition duration is used in Material design, this technique -is good for a large number of items. -https://material.io/archive/guidelines/motion/duration-easing.html#duration-easing-dynamic-durations -https://github.com/mui-org/material-ui/blob/e724d98eba018e55e1a684236a2037e24bcf050c/packages/material-ui/src/styles/createTransitions.js#L40-L43 - */function getAutoHeightDuration(height){if((0,_utils_accessibilityUtils__WEBPACK_IMPORTED_MODULE_2__/* .prefersReducedMotion */ .O)()){// Not using 0 because it prevents onTransitionEnd to fire and bubble up :/ -// See https://github.com/facebook/docusaurus/pull/8906 -return 1;}const constant=height/36;return Math.round((4+15*constant**0.25+constant/5)*10);}function useCollapseAnimation({collapsibleRef,collapsed,animation}){const mounted=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(false);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{const el=collapsibleRef.current;function getTransitionStyles(){const height=el.scrollHeight;const duration=animation?.duration??getAutoHeightDuration(height);const easing=animation?.easing??DefaultAnimationEasing;return{transition:`height ${duration}ms ${easing}`,height:`${height}px`};}function applyTransitionStyles(){const transitionStyles=getTransitionStyles();el.style.transition=transitionStyles.transition;el.style.height=transitionStyles.height;}// On mount, we just apply styles, no animated transition -if(!mounted.current){applyCollapsedStyle(el,collapsed);mounted.current=true;return undefined;}// eslint-disable-next-line react-compiler/react-compiler -el.style.willChange='height';function startAnimation(){const animationFrame=requestAnimationFrame(()=>{// When collapsing -if(collapsed){applyTransitionStyles();requestAnimationFrame(()=>{el.style.height=CollapsedStyles.height;el.style.overflow=CollapsedStyles.overflow;});}// When expanding -else{el.style.display='block';requestAnimationFrame(()=>{applyTransitionStyles();});}});return()=>cancelAnimationFrame(animationFrame);}return startAnimation();},[collapsibleRef,collapsed,animation]);}function CollapsibleBase({as:As='div',collapsed,children,animation,onCollapseTransitionEnd,className}){const collapsibleRef=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);useCollapseAnimation({collapsibleRef,collapsed,animation});return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(As// @ts-expect-error: the "too complicated type" is produced from -// "CollapsibleElementType" being a huge union -,{ref:collapsibleRef// Refs are contravariant, which is not expressible in TS -,onTransitionEnd:e=>{if(e.propertyName!=='height'){return;}applyCollapsedStyle(collapsibleRef.current,collapsed);onCollapseTransitionEnd?.(collapsed);},className:className,children:children});}function CollapsibleLazy({collapsed,...props}){const[mounted,setMounted]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!collapsed);// Updated in effect so that first expansion transition can work -const[lazyCollapsed,setLazyCollapsed]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(collapsed);(0,_docusaurus_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(()=>{if(!collapsed){setMounted(true);}},[collapsed]);(0,_docusaurus_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(()=>{if(mounted){setLazyCollapsed(collapsed);}},[mounted,collapsed]);return mounted?/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(CollapsibleBase,{...props,collapsed:lazyCollapsed}):null;}/** - * A headless component providing smooth and uniform collapsing behavior. The - * component will be invisible (zero height) when collapsed. Doesn't provide - * interactivity by itself: collapse state is toggled through props. - */function Collapsible({lazy,...props}){const Comp=lazy?CollapsibleLazy:CollapsibleBase;return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Comp,{...props});} - -/***/ }, - -/***/ 1433 -() { - - - -/***/ }, - -/***/ 1435 -(module) { - -"use strict"; -module.exports = /*#__PURE__*/JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en","translate":false,"url":"https://pages.brrd.tech","baseUrl":"/rob/CmdForge/"}}}'); - -/***/ }, - -/***/ 1455 -(module) { - -// Exports -module.exports = { - "iconExternalLink": `iconExternalLink_nPIU` -}; - - -/***/ }, - -/***/ 1463 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ SearchMetadata) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_Head__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5260); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// Note: we bias toward using Algolia metadata on purpose -// Not doing so leads to confusion in the community, -// as it requires to first crawl the site with the Algolia plugin enabled first -// - https://github.com/facebook/docusaurus/issues/6693 -// - https://github.com/facebook/docusaurus/issues/4555 -function SearchMetadata({locale,version,tag}){// Seems safe to consider here the locale is the language, as the existing -// docsearch:language filter is afaik a regular string-based filter -const language=locale;return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(_docusaurus_Head__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A,{children:[locale&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("meta",{name:"docusaurus_locale",content:locale}),version&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("meta",{name:"docusaurus_version",content:version}),tag&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("meta",{name:"docusaurus_tag",content:tag}),language&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("meta",{name:"docsearch:language",content:language}),version&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("meta",{name:"docsearch:version",content:version}),tag&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("meta",{name:"docsearch:docusaurus_tag",content:tag})]});} - -/***/ }, - -/***/ 1473 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ IconCopy) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function IconCopy(props){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("svg",{viewBox:"0 0 24 24",...props,children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})});} - -/***/ }, - -/***/ 1556 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ DocSidebar) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4581); -/* harmony import */ var _theme_DocSidebar_Desktop__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(9456); -/* harmony import */ var _theme_DocSidebar_Mobile__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(3327); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function DocSidebar(props){const windowSize=(0,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_1__/* .useWindowSize */ .l)();// Desktop sidebar visible on hydration: need SSR rendering -const shouldRenderSidebarDesktop=windowSize==='desktop'||windowSize==='ssr';// Mobile sidebar not visible on hydration: can avoid SSR rendering -const shouldRenderSidebarMobile=windowSize==='mobile';return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.Fragment,{children:[shouldRenderSidebarDesktop&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_theme_DocSidebar_Desktop__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{...props}),shouldRenderSidebarMobile&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_theme_DocSidebar_Mobile__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A,{...props})]});} - -/***/ }, - -/***/ 1561 -(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ invariant) -/* harmony export */ }); -var isProduction = "production" === 'production'; -var prefix = 'Invariant failed'; -function invariant(condition, message) { - if (condition) { - return; - } - if (isProduction) { - throw new Error(prefix); - } - var provided = typeof message === 'function' ? message() : message; - var value = provided ? "".concat(prefix, ": ").concat(provided) : prefix; - throw new Error(value); -} - - - - -/***/ }, - -/***/ 1594 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ CodeBlockContent) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4291); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6058); -/* harmony import */ var prism_react_renderer__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1765); -/* harmony import */ var _theme_CodeBlock_Line__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(4887); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(6128); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// TODO Docusaurus v4: remove useless forwardRef -const Pre=/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef((props,ref)=>{return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("pre",{ref:ref/* eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex */,tabIndex:0,...props,className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(props.className,(_styles_module_css__WEBPACK_IMPORTED_MODULE_6___default().codeBlock),'thin-scrollbar')});});function Code(props){const{metadata}=(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_2__/* .useCodeBlockContext */ .Ph)();return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("code",{...props,className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(props.className,(_styles_module_css__WEBPACK_IMPORTED_MODULE_6___default().codeBlockLines),metadata.lineNumbersStart!==undefined&&(_styles_module_css__WEBPACK_IMPORTED_MODULE_6___default().codeBlockLinesWithNumbering)),style:{...props.style,counterReset:metadata.lineNumbersStart===undefined?undefined:`line-count ${metadata.lineNumbersStart-1}`}});}function CodeBlockContent({className:classNameProp}){const{metadata,wordWrap}=(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_2__/* .useCodeBlockContext */ .Ph)();const prismTheme=(0,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__/* .usePrismTheme */ .A)();const{code,language,lineNumbersStart,lineClassNames}=metadata;return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(prism_react_renderer__WEBPACK_IMPORTED_MODULE_4__/* .Highlight */ .f4,{theme:prismTheme,code:code,language:language,children:({className,style,tokens:lines,getLineProps,getTokenProps})=>/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(Pre,{ref:wordWrap.codeBlockRef,className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(classNameProp,className),style:style,children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(Code,{children:lines.map((line,i)=>/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_theme_CodeBlock_Line__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A,{line:line,getLineProps:getLineProps,getTokenProps:getTokenProps,classNames:lineClassNames[i],showLineNumbers:lineNumbersStart!==undefined},i))})})});} - -/***/ }, - -/***/ 1635 -(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ __addDisposableResource: () => (/* binding */ __addDisposableResource), -/* harmony export */ __assign: () => (/* binding */ __assign), -/* harmony export */ __asyncDelegator: () => (/* binding */ __asyncDelegator), -/* harmony export */ __asyncGenerator: () => (/* binding */ __asyncGenerator), -/* harmony export */ __asyncValues: () => (/* binding */ __asyncValues), -/* harmony export */ __await: () => (/* binding */ __await), -/* harmony export */ __awaiter: () => (/* binding */ __awaiter), -/* harmony export */ __classPrivateFieldGet: () => (/* binding */ __classPrivateFieldGet), -/* harmony export */ __classPrivateFieldIn: () => (/* binding */ __classPrivateFieldIn), -/* harmony export */ __classPrivateFieldSet: () => (/* binding */ __classPrivateFieldSet), -/* harmony export */ __createBinding: () => (/* binding */ __createBinding), -/* harmony export */ __decorate: () => (/* binding */ __decorate), -/* harmony export */ __disposeResources: () => (/* binding */ __disposeResources), -/* harmony export */ __esDecorate: () => (/* binding */ __esDecorate), -/* harmony export */ __exportStar: () => (/* binding */ __exportStar), -/* harmony export */ __extends: () => (/* binding */ __extends), -/* harmony export */ __generator: () => (/* binding */ __generator), -/* harmony export */ __importDefault: () => (/* binding */ __importDefault), -/* harmony export */ __importStar: () => (/* binding */ __importStar), -/* harmony export */ __makeTemplateObject: () => (/* binding */ __makeTemplateObject), -/* harmony export */ __metadata: () => (/* binding */ __metadata), -/* harmony export */ __param: () => (/* binding */ __param), -/* harmony export */ __propKey: () => (/* binding */ __propKey), -/* harmony export */ __read: () => (/* binding */ __read), -/* harmony export */ __rest: () => (/* binding */ __rest), -/* harmony export */ __rewriteRelativeImportExtension: () => (/* binding */ __rewriteRelativeImportExtension), -/* harmony export */ __runInitializers: () => (/* binding */ __runInitializers), -/* harmony export */ __setFunctionName: () => (/* binding */ __setFunctionName), -/* harmony export */ __spread: () => (/* binding */ __spread), -/* harmony export */ __spreadArray: () => (/* binding */ __spreadArray), -/* harmony export */ __spreadArrays: () => (/* binding */ __spreadArrays), -/* harmony export */ __values: () => (/* binding */ __values), -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/****************************************************************************** -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */ -/* global Reflect, Promise, SuppressedError, Symbol, Iterator */ - -var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); -}; - -function __extends(d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); -} - -var __assign = function() { - __assign = Object.assign || function __assign(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - return t; - } - return __assign.apply(this, arguments); -} - -function __rest(s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -} - -function __decorate(decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -} - -function __param(paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -} - -function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) { - function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; } - var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value"; - var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null; - var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {}); - var _, done = false; - for (var i = decorators.length - 1; i >= 0; i--) { - var context = {}; - for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p]; - for (var p in contextIn.access) context.access[p] = contextIn.access[p]; - context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); }; - var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context); - if (kind === "accessor") { - if (result === void 0) continue; - if (result === null || typeof result !== "object") throw new TypeError("Object expected"); - if (_ = accept(result.get)) descriptor.get = _; - if (_ = accept(result.set)) descriptor.set = _; - if (_ = accept(result.init)) initializers.unshift(_); - } - else if (_ = accept(result)) { - if (kind === "field") initializers.unshift(_); - else descriptor[key] = _; - } - } - if (target) Object.defineProperty(target, contextIn.name, descriptor); - done = true; -}; - -function __runInitializers(thisArg, initializers, value) { - var useValue = arguments.length > 2; - for (var i = 0; i < initializers.length; i++) { - value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg); - } - return useValue ? value : void 0; -}; - -function __propKey(x) { - return typeof x === "symbol" ? x : "".concat(x); -}; - -function __setFunctionName(f, name, prefix) { - if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : ""; - return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name }); -}; - -function __metadata(metadataKey, metadataValue) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue); -} - -function __awaiter(thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -} - -function __generator(thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); - return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (g && (g = 0, op[0] && (_ = 0)), _) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -} - -var __createBinding = Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -}); - -function __exportStar(m, o) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p); -} - -function __values(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -} - -function __read(o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -} - -/** @deprecated */ -function __spread() { - for (var ar = [], i = 0; i < arguments.length; i++) - ar = ar.concat(__read(arguments[i])); - return ar; -} - -/** @deprecated */ -function __spreadArrays() { - for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; - for (var r = Array(s), k = 0, i = 0; i < il; i++) - for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) - r[k] = a[j]; - return r; -} - -function __spreadArray(to, from, pack) { - if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { - if (ar || !(i in from)) { - if (!ar) ar = Array.prototype.slice.call(from, 0, i); - ar[i] = from[i]; - } - } - return to.concat(ar || Array.prototype.slice.call(from)); -} - -function __await(v) { - return this instanceof __await ? (this.v = v, this) : new __await(v); -} - -function __asyncGenerator(thisArg, _arguments, generator) { - if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), i, q = []; - return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i; - function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; } - function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } - function fulfill(value) { resume("next", value); } - function reject(value) { resume("throw", value); } - function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } -} - -function __asyncDelegator(o) { - var i, p; - return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; } -} - -function __asyncValues(o) { - if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator], i; - return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); - function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } - function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } -} - -function __makeTemplateObject(cooked, raw) { - if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } - return cooked; -}; - -var __setModuleDefault = Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}; - -var ownKeys = function(o) { - ownKeys = Object.getOwnPropertyNames || function (o) { - var ar = []; - for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; - return ar; - }; - return ownKeys(o); -}; - -function __importStar(mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); - __setModuleDefault(result, mod); - return result; -} - -function __importDefault(mod) { - return (mod && mod.__esModule) ? mod : { default: mod }; -} - -function __classPrivateFieldGet(receiver, state, kind, f) { - if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); - if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); - return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); -} - -function __classPrivateFieldSet(receiver, state, value, kind, f) { - if (kind === "m") throw new TypeError("Private method is not writable"); - if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); - if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); - return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; -} - -function __classPrivateFieldIn(state, receiver) { - if (receiver === null || (typeof receiver !== "object" && typeof receiver !== "function")) throw new TypeError("Cannot use 'in' operator on non-object"); - return typeof state === "function" ? receiver === state : state.has(receiver); -} - -function __addDisposableResource(env, value, async) { - if (value !== null && value !== void 0) { - if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); - var dispose, inner; - if (async) { - if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); - dispose = value[Symbol.asyncDispose]; - } - if (dispose === void 0) { - if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined."); - dispose = value[Symbol.dispose]; - if (async) inner = dispose; - } - if (typeof dispose !== "function") throw new TypeError("Object not disposable."); - if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } }; - env.stack.push({ value: value, dispose: dispose, async: async }); - } - else if (async) { - env.stack.push({ async: true }); - } - return value; -} - -var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) { - var e = new Error(message); - return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; -}; - -function __disposeResources(env) { - function fail(e) { - env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e; - env.hasError = true; - } - var r, s = 0; - function next() { - while (r = env.stack.pop()) { - try { - if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next); - if (r.dispose) { - var result = r.dispose.call(r.value); - if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); }); - } - else s |= 1; - } - catch (e) { - fail(e); - } - } - if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve(); - if (env.hasError) throw env.error; - } - return next(); -} - -function __rewriteRelativeImportExtension(path, preserveJsx) { - if (typeof path === "string" && /^\.\.?\//.test(path)) { - return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) { - return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js"); - }); - } - return path; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ - __extends, - __assign, - __rest, - __decorate, - __param, - __esDecorate, - __runInitializers, - __propKey, - __setFunctionName, - __metadata, - __awaiter, - __generator, - __createBinding, - __exportStar, - __values, - __read, - __spread, - __spreadArrays, - __spreadArray, - __await, - __asyncGenerator, - __asyncDelegator, - __asyncValues, - __makeTemplateObject, - __importStar, - __importDefault, - __classPrivateFieldGet, - __classPrivateFieldSet, - __classPrivateFieldIn, - __addDisposableResource, - __disposeResources, - __rewriteRelativeImportExtension, -}); - - -/***/ }, - -/***/ 1682 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ sb: () => (/* binding */ uniq) -/* harmony export */ }); -/* unused harmony exports duplicates, groupBy */ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// A replacement of lodash in client code -/** - * Gets the duplicate values in an array. - * @param arr The array. - * @param comparator Compares two values and returns `true` if they are equal - * (duplicated). - * @returns Value of the elements `v` that have a preceding element `u` where - * `comparator(u, v) === true`. Values within the returned array are not - * guaranteed to be unique. - */function duplicates(arr,comparator=(a,b)=>a===b){return arr.filter((v,vIndex)=>arr.findIndex(u=>comparator(u,v))!==vIndex);}/** - * Remove duplicate array items (similar to `_.uniq`) - * @param arr The array. - * @returns An array with duplicate elements removed by reference comparison. - */function uniq(arr){// Note: had problems with [...new Set()]: https://github.com/facebook/docusaurus/issues/4972#issuecomment-863895061 -return Array.from(new Set(arr));}// TODO 2025: replace by std Object.groupBy ? -// This is a local polyfill with exact same TS signature -// see https://github.com/microsoft/TypeScript/blob/main/src/lib/esnext.object.d.ts -function groupBy(items,keySelector){const result={};let index=0;for(const item of items){const key=keySelector(item,index);result[key]??=[];result[key].push(item);index+=1;}return result;} - -/***/ }, - -/***/ 1697 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ EditThisPage) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_Translate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(986); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7559); -/* harmony import */ var _docusaurus_Link__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(8774); -/* harmony import */ var _theme_Icon_Edit__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(9496); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function EditThisPage({editUrl}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_docusaurus_Link__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A,{to:editUrl,className:_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__/* .ThemeClassNames */ .G.common.editThisPage,children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_theme_Icon_Edit__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A,{}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A,{id:"theme.common.editThisPage",description:"The link label to edit the current page",children:"Edit this page"})]});} - -/***/ }, - -/***/ 1702 -(module) { - -// Exports -module.exports = { - "codeBlockContainer": `codeBlockContainer_Ckt0` -}; - - -/***/ }, - -/***/ 1733 -(module) { - -// Exports -module.exports = { - "menu": `menu_SIkG`, - "menuWithAnnouncementBar": `menuWithAnnouncementBar_GW3s` -}; - - -/***/ }, - -/***/ 1737 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ HomeBreadcrumbItem) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_Link__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8774); -/* harmony import */ var _docusaurus_useBaseUrl__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6025); -/* harmony import */ var _docusaurus_Translate__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(986); -/* harmony import */ var _theme_Icon_Home__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1999); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(3801); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function HomeBreadcrumbItem(){const homeHref=(0,_docusaurus_useBaseUrl__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Ay)('/');return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("li",{className:"breadcrumbs__item",children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_docusaurus_Link__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A,{"aria-label":(0,_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_3__/* .translate */ .T)({id:'theme.docs.breadcrumbs.home',message:'Home page',description:'The ARIA label for the home page in the breadcrumbs'}),className:"breadcrumbs__link",href:homeHref,children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_theme_Icon_Home__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A,{className:(_styles_module_css__WEBPACK_IMPORTED_MODULE_5___default().breadcrumbHomeIcon)})})});} - -/***/ }, - -/***/ 1752 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ IconClose) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function IconClose({width=21,height=21,color='currentColor',strokeWidth=1.2,className,...restProps}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("svg",{viewBox:"0 0 15 15",width:width,height:height,...restProps,children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("g",{stroke:color,strokeWidth:strokeWidth,children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})});} - -/***/ }, - -/***/ 1765 -(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ My: () => (/* binding */ Prism), -/* harmony export */ f4: () => (/* binding */ Highlight2) -/* harmony export */ }); -/* unused harmony exports normalizeTokens, themes, useTokenize */ -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -var __create = Object.create; -var __defProp = Object.defineProperty; -var __defProps = Object.defineProperties; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropDescs = Object.getOwnPropertyDescriptors; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __getOwnPropSymbols = Object.getOwnPropertySymbols; -var __getProtoOf = Object.getPrototypeOf; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __propIsEnum = Object.prototype.propertyIsEnumerable; -var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __spreadValues = (a, b) => { - for (var prop in b || (b = {})) - if (__hasOwnProp.call(b, prop)) - __defNormalProp(a, prop, b[prop]); - if (__getOwnPropSymbols) - for (var prop of __getOwnPropSymbols(b)) { - if (__propIsEnum.call(b, prop)) - __defNormalProp(a, prop, b[prop]); - } - return a; -}; -var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b)); -var __objRest = (source, exclude) => { - var target = {}; - for (var prop in source) - if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0) - target[prop] = source[prop]; - if (source != null && __getOwnPropSymbols) - for (var prop of __getOwnPropSymbols(source)) { - if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop)) - target[prop] = source[prop]; - } - return target; -}; -var __commonJS = (cb, mod) => function __require() { - return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; -}; -var __export = (target, all) => { - for (var name in all) - __defProp(target, name, { get: all[name], enumerable: true }); -}; -var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; -}; -var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( - // If the importer is in node compatibility mode or this is not an ESM - // file that has been converted to a CommonJS file using a Babel- - // compatible transform (i.e. "__esModule" has not been set), then set - // "default" to the CommonJS "module.exports" for node compatibility. - isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, - mod -)); - -// ../../node_modules/.pnpm/prismjs@1.29.0_patch_hash=vrxx3pzkik6jpmgpayxfjunetu/node_modules/prismjs/prism.js -var require_prism = __commonJS({ - "../../node_modules/.pnpm/prismjs@1.29.0_patch_hash=vrxx3pzkik6jpmgpayxfjunetu/node_modules/prismjs/prism.js"(exports, module) { - var Prism2 = function() { - var lang = /(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i; - var uniqueId = 0; - var plainTextGrammar = {}; - var _ = { - /** - * A namespace for utility methods. - * - * All function in this namespace that are not explicitly marked as _public_ are for __internal use only__ and may - * change or disappear at any time. - * - * @namespace - * @memberof Prism - */ - util: { - encode: function encode(tokens) { - if (tokens instanceof Token) { - return new Token(tokens.type, encode(tokens.content), tokens.alias); - } else if (Array.isArray(tokens)) { - return tokens.map(encode); - } else { - return tokens.replace(/&/g, "&").replace(/} [visited] - * @returns {T} - * @template T - */ - clone: function deepClone(o, visited) { - visited = visited || {}; - var clone; - var id; - switch (_.util.type(o)) { - case "Object": - id = _.util.objId(o); - if (visited[id]) { - return visited[id]; - } - clone = /** @type {Record} */ - {}; - visited[id] = clone; - for (var key in o) { - if (o.hasOwnProperty(key)) { - clone[key] = deepClone(o[key], visited); - } - } - return ( - /** @type {any} */ - clone - ); - case "Array": - id = _.util.objId(o); - if (visited[id]) { - return visited[id]; - } - clone = []; - visited[id] = clone; - /** @type {Array} */ - /** @type {any} */ - o.forEach(function(v, i) { - clone[i] = deepClone(v, visited); - }); - return ( - /** @type {any} */ - clone - ); - default: - return o; - } - }, - /** - * Returns the Prism language of the given element set by a `language-xxxx` or `lang-xxxx` class. - * - * If no language is set for the element or the element is `null` or `undefined`, `none` will be returned. - * - * @param {Element} element - * @returns {string} - */ - getLanguage: function(element) { - while (element) { - var m = lang.exec(element.className); - if (m) { - return m[1].toLowerCase(); - } - element = element.parentElement; - } - return "none"; - }, - /** - * Sets the Prism `language-xxxx` class of the given element. - * - * @param {Element} element - * @param {string} language - * @returns {void} - */ - setLanguage: function(element, language) { - element.className = element.className.replace(RegExp(lang, "gi"), ""); - element.classList.add("language-" + language); - }, - /** - * Returns whether a given class is active for `element`. - * - * The class can be activated if `element` or one of its ancestors has the given class and it can be deactivated - * if `element` or one of its ancestors has the negated version of the given class. The _negated version_ of the - * given class is just the given class with a `no-` prefix. - * - * Whether the class is active is determined by the closest ancestor of `element` (where `element` itself is - * closest ancestor) that has the given class or the negated version of it. If neither `element` nor any of its - * ancestors have the given class or the negated version of it, then the default activation will be returned. - * - * In the paradoxical situation where the closest ancestor contains __both__ the given class and the negated - * version of it, the class is considered active. - * - * @param {Element} element - * @param {string} className - * @param {boolean} [defaultActivation=false] - * @returns {boolean} - */ - isActive: function(element, className, defaultActivation) { - var no = "no-" + className; - while (element) { - var classList = element.classList; - if (classList.contains(className)) { - return true; - } - if (classList.contains(no)) { - return false; - } - element = element.parentElement; - } - return !!defaultActivation; - } - }, - /** - * This namespace contains all currently loaded languages and the some helper functions to create and modify languages. - * - * @namespace - * @memberof Prism - * @public - */ - languages: { - /** - * The grammar for plain, unformatted text. - */ - plain: plainTextGrammar, - plaintext: plainTextGrammar, - text: plainTextGrammar, - txt: plainTextGrammar, - /** - * Creates a deep copy of the language with the given id and appends the given tokens. - * - * If a token in `redef` also appears in the copied language, then the existing token in the copied language - * will be overwritten at its original position. - * - * ## Best practices - * - * Since the position of overwriting tokens (token in `redef` that overwrite tokens in the copied language) - * doesn't matter, they can technically be in any order. However, this can be confusing to others that trying to - * understand the language definition because, normally, the order of tokens matters in Prism grammars. - * - * Therefore, it is encouraged to order overwriting tokens according to the positions of the overwritten tokens. - * Furthermore, all non-overwriting tokens should be placed after the overwriting ones. - * - * @param {string} id The id of the language to extend. This has to be a key in `Prism.languages`. - * @param {Grammar} redef The new tokens to append. - * @returns {Grammar} The new language created. - * @public - * @example - * Prism.languages['css-with-colors'] = Prism.languages.extend('css', { - * // Prism.languages.css already has a 'comment' token, so this token will overwrite CSS' 'comment' token - * // at its original position - * 'comment': { ... }, - * // CSS doesn't have a 'color' token, so this token will be appended - * 'color': /\b(?:red|green|blue)\b/ - * }); - */ - extend: function(id, redef) { - var lang2 = _.util.clone(_.languages[id]); - for (var key in redef) { - lang2[key] = redef[key]; - } - return lang2; - }, - /** - * Inserts tokens _before_ another token in a language definition or any other grammar. - * - * ## Usage - * - * This helper method makes it easy to modify existing languages. For example, the CSS language definition - * not only defines CSS highlighting for CSS documents, but also needs to define highlighting for CSS embedded - * in HTML through `"), - currentlyRenderingBoundaryHasStylesToHoist = !1, - destinationHasCapacity = !0; -function flushStyleTagsLateForBoundary(styleQueue) { - var rules = styleQueue.rules, - hrefs = styleQueue.hrefs, - i = 0; - if (hrefs.length) { - writeChunk(this, currentlyFlushingRenderState.startInlineStyle); - writeChunk(this, lateStyleTagResourceOpen1); - writeChunk(this, styleQueue.precedence); - for (writeChunk(this, lateStyleTagResourceOpen2); i < hrefs.length - 1; i++) - writeChunk(this, hrefs[i]), writeChunk(this, spaceSeparator); - writeChunk(this, hrefs[i]); - writeChunk(this, lateStyleTagResourceOpen3); - for (i = 0; i < rules.length; i++) writeChunk(this, rules[i]); - destinationHasCapacity = writeChunkAndReturn( - this, - lateStyleTagTemplateClose - ); - currentlyRenderingBoundaryHasStylesToHoist = !0; - rules.length = 0; - hrefs.length = 0; - } -} -function hasStylesToHoist(stylesheet) { - return 2 !== stylesheet.state - ? (currentlyRenderingBoundaryHasStylesToHoist = !0) - : !1; -} -function writeHoistablesForBoundary(destination, hoistableState, renderState) { - currentlyRenderingBoundaryHasStylesToHoist = !1; - destinationHasCapacity = !0; - currentlyFlushingRenderState = renderState; - hoistableState.styles.forEach(flushStyleTagsLateForBoundary, destination); - currentlyFlushingRenderState = null; - hoistableState.stylesheets.forEach(hasStylesToHoist); - currentlyRenderingBoundaryHasStylesToHoist && - (renderState.stylesToHoist = !0); - return destinationHasCapacity; -} -function flushResource(resource) { - for (var i = 0; i < resource.length; i++) writeChunk(this, resource[i]); - resource.length = 0; -} -var stylesheetFlushingQueue = []; -function flushStyleInPreamble(stylesheet) { - pushLinkImpl(stylesheetFlushingQueue, stylesheet.props); - for (var i = 0; i < stylesheetFlushingQueue.length; i++) - writeChunk(this, stylesheetFlushingQueue[i]); - stylesheetFlushingQueue.length = 0; - stylesheet.state = 2; -} -var styleTagResourceOpen1 = stringToPrecomputedChunk(' data-precedence="'), - styleTagResourceOpen2 = stringToPrecomputedChunk('" data-href="'), - spaceSeparator = stringToPrecomputedChunk(" "), - styleTagResourceOpen3 = stringToPrecomputedChunk('">'), - styleTagResourceClose = stringToPrecomputedChunk(""); -function flushStylesInPreamble(styleQueue) { - var hasStylesheets = 0 < styleQueue.sheets.size; - styleQueue.sheets.forEach(flushStyleInPreamble, this); - styleQueue.sheets.clear(); - var rules = styleQueue.rules, - hrefs = styleQueue.hrefs; - if (!hasStylesheets || hrefs.length) { - writeChunk(this, currentlyFlushingRenderState.startInlineStyle); - writeChunk(this, styleTagResourceOpen1); - writeChunk(this, styleQueue.precedence); - styleQueue = 0; - if (hrefs.length) { - for ( - writeChunk(this, styleTagResourceOpen2); - styleQueue < hrefs.length - 1; - styleQueue++ - ) - writeChunk(this, hrefs[styleQueue]), writeChunk(this, spaceSeparator); - writeChunk(this, hrefs[styleQueue]); - } - writeChunk(this, styleTagResourceOpen3); - for (styleQueue = 0; styleQueue < rules.length; styleQueue++) - writeChunk(this, rules[styleQueue]); - writeChunk(this, styleTagResourceClose); - rules.length = 0; - hrefs.length = 0; - } -} -function preloadLateStyle(stylesheet) { - if (0 === stylesheet.state) { - stylesheet.state = 1; - var props = stylesheet.props; - pushLinkImpl(stylesheetFlushingQueue, { - rel: "preload", - as: "style", - href: stylesheet.props.href, - crossOrigin: props.crossOrigin, - fetchPriority: props.fetchPriority, - integrity: props.integrity, - media: props.media, - hrefLang: props.hrefLang, - referrerPolicy: props.referrerPolicy - }); - for ( - stylesheet = 0; - stylesheet < stylesheetFlushingQueue.length; - stylesheet++ - ) - writeChunk(this, stylesheetFlushingQueue[stylesheet]); - stylesheetFlushingQueue.length = 0; - } -} -function preloadLateStyles(styleQueue) { - styleQueue.sheets.forEach(preloadLateStyle, this); - styleQueue.sheets.clear(); -} -stringToPrecomputedChunk(''); -var completedShellIdAttributeStart = stringToPrecomputedChunk(' id="'); -function pushCompletedShellIdAttribute(target, resumableState) { - 0 === (resumableState.instructions & 32) && - ((resumableState.instructions |= 32), - target.push( - completedShellIdAttributeStart, - escapeTextForBrowser("_" + resumableState.idPrefix + "R_"), - attributeEnd - )); -} -var arrayFirstOpenBracket = stringToPrecomputedChunk("["), - arraySubsequentOpenBracket = stringToPrecomputedChunk(",["), - arrayInterstitial = stringToPrecomputedChunk(","), - arrayCloseBracket = stringToPrecomputedChunk("]"); -function writeStyleResourceDependenciesInJS(destination, hoistableState) { - writeChunk(destination, arrayFirstOpenBracket); - var nextArrayOpenBrackChunk = arrayFirstOpenBracket; - hoistableState.stylesheets.forEach(function (resource) { - if (2 !== resource.state) - if (3 === resource.state) - writeChunk(destination, nextArrayOpenBrackChunk), - writeChunk( - destination, - escapeJSObjectForInstructionScripts("" + resource.props.href) - ), - writeChunk(destination, arrayCloseBracket), - (nextArrayOpenBrackChunk = arraySubsequentOpenBracket); - else { - writeChunk(destination, nextArrayOpenBrackChunk); - var precedence = resource.props["data-precedence"], - props = resource.props, - coercedHref = sanitizeURL("" + resource.props.href); - writeChunk( - destination, - escapeJSObjectForInstructionScripts(coercedHref) - ); - precedence = "" + precedence; - writeChunk(destination, arrayInterstitial); - writeChunk( - destination, - escapeJSObjectForInstructionScripts(precedence) - ); - for (var propKey in props) - if ( - hasOwnProperty.call(props, propKey) && - ((precedence = props[propKey]), null != precedence) - ) - switch (propKey) { - case "href": - case "rel": - case "precedence": - case "data-precedence": - break; - case "children": - case "dangerouslySetInnerHTML": - throw Error( - "link is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`." - ); - default: - writeStyleResourceAttributeInJS( - destination, - propKey, - precedence - ); - } - writeChunk(destination, arrayCloseBracket); - nextArrayOpenBrackChunk = arraySubsequentOpenBracket; - resource.state = 3; - } - }); - writeChunk(destination, arrayCloseBracket); -} -function writeStyleResourceAttributeInJS(destination, name, value) { - var attributeName = name.toLowerCase(); - switch (typeof value) { - case "function": - case "symbol": - return; - } - switch (name) { - case "innerHTML": - case "dangerouslySetInnerHTML": - case "suppressContentEditableWarning": - case "suppressHydrationWarning": - case "style": - case "ref": - return; - case "className": - attributeName = "class"; - name = "" + value; - break; - case "hidden": - if (!1 === value) return; - name = ""; - break; - case "src": - case "href": - value = sanitizeURL(value); - name = "" + value; - break; - default: - if ( - (2 < name.length && - ("o" === name[0] || "O" === name[0]) && - ("n" === name[1] || "N" === name[1])) || - !isAttributeNameSafe(name) - ) - return; - name = "" + value; - } - writeChunk(destination, arrayInterstitial); - writeChunk(destination, escapeJSObjectForInstructionScripts(attributeName)); - writeChunk(destination, arrayInterstitial); - writeChunk(destination, escapeJSObjectForInstructionScripts(name)); -} -function createHoistableState() { - return { styles: new Set(), stylesheets: new Set(), suspenseyImages: !1 }; -} -function prefetchDNS(href) { - var request = resolveRequest(); - if (request) { - var resumableState = request.resumableState, - renderState = request.renderState; - if ("string" === typeof href && href) { - if (!resumableState.dnsResources.hasOwnProperty(href)) { - resumableState.dnsResources[href] = null; - resumableState = renderState.headers; - var header, JSCompiler_temp; - if ( - (JSCompiler_temp = - resumableState && 0 < resumableState.remainingCapacity) - ) - JSCompiler_temp = - ((header = - "<" + - ("" + href).replace( - regexForHrefInLinkHeaderURLContext, - escapeHrefForLinkHeaderURLContextReplacer - ) + - ">; rel=dns-prefetch"), - 0 <= (resumableState.remainingCapacity -= header.length + 2)); - JSCompiler_temp - ? ((renderState.resets.dns[href] = null), - resumableState.preconnects && (resumableState.preconnects += ", "), - (resumableState.preconnects += header)) - : ((header = []), - pushLinkImpl(header, { href: href, rel: "dns-prefetch" }), - renderState.preconnects.add(header)); - } - enqueueFlush(request); - } - } else previousDispatcher.D(href); -} -function preconnect(href, crossOrigin) { - var request = resolveRequest(); - if (request) { - var resumableState = request.resumableState, - renderState = request.renderState; - if ("string" === typeof href && href) { - var bucket = - "use-credentials" === crossOrigin - ? "credentials" - : "string" === typeof crossOrigin - ? "anonymous" - : "default"; - if (!resumableState.connectResources[bucket].hasOwnProperty(href)) { - resumableState.connectResources[bucket][href] = null; - resumableState = renderState.headers; - var header, JSCompiler_temp; - if ( - (JSCompiler_temp = - resumableState && 0 < resumableState.remainingCapacity) - ) { - JSCompiler_temp = - "<" + - ("" + href).replace( - regexForHrefInLinkHeaderURLContext, - escapeHrefForLinkHeaderURLContextReplacer - ) + - ">; rel=preconnect"; - if ("string" === typeof crossOrigin) { - var escapedCrossOrigin = ("" + crossOrigin).replace( - regexForLinkHeaderQuotedParamValueContext, - escapeStringForLinkHeaderQuotedParamValueContextReplacer - ); - JSCompiler_temp += '; crossorigin="' + escapedCrossOrigin + '"'; - } - JSCompiler_temp = - ((header = JSCompiler_temp), - 0 <= (resumableState.remainingCapacity -= header.length + 2)); - } - JSCompiler_temp - ? ((renderState.resets.connect[bucket][href] = null), - resumableState.preconnects && (resumableState.preconnects += ", "), - (resumableState.preconnects += header)) - : ((bucket = []), - pushLinkImpl(bucket, { - rel: "preconnect", - href: href, - crossOrigin: crossOrigin - }), - renderState.preconnects.add(bucket)); - } - enqueueFlush(request); - } - } else previousDispatcher.C(href, crossOrigin); -} -function preload(href, as, options) { - var request = resolveRequest(); - if (request) { - var resumableState = request.resumableState, - renderState = request.renderState; - if (as && href) { - switch (as) { - case "image": - if (options) { - var imageSrcSet = options.imageSrcSet; - var imageSizes = options.imageSizes; - var fetchPriority = options.fetchPriority; - } - var key = imageSrcSet - ? imageSrcSet + "\n" + (imageSizes || "") - : href; - if (resumableState.imageResources.hasOwnProperty(key)) return; - resumableState.imageResources[key] = PRELOAD_NO_CREDS; - resumableState = renderState.headers; - var header; - resumableState && - 0 < resumableState.remainingCapacity && - "string" !== typeof imageSrcSet && - "high" === fetchPriority && - ((header = getPreloadAsHeader(href, as, options)), - 0 <= (resumableState.remainingCapacity -= header.length + 2)) - ? ((renderState.resets.image[key] = PRELOAD_NO_CREDS), - resumableState.highImagePreloads && - (resumableState.highImagePreloads += ", "), - (resumableState.highImagePreloads += header)) - : ((resumableState = []), - pushLinkImpl( - resumableState, - assign( - { rel: "preload", href: imageSrcSet ? void 0 : href, as: as }, - options - ) - ), - "high" === fetchPriority - ? renderState.highImagePreloads.add(resumableState) - : (renderState.bulkPreloads.add(resumableState), - renderState.preloads.images.set(key, resumableState))); - break; - case "style": - if (resumableState.styleResources.hasOwnProperty(href)) return; - imageSrcSet = []; - pushLinkImpl( - imageSrcSet, - assign({ rel: "preload", href: href, as: as }, options) - ); - resumableState.styleResources[href] = - !options || - ("string" !== typeof options.crossOrigin && - "string" !== typeof options.integrity) - ? PRELOAD_NO_CREDS - : [options.crossOrigin, options.integrity]; - renderState.preloads.stylesheets.set(href, imageSrcSet); - renderState.bulkPreloads.add(imageSrcSet); - break; - case "script": - if (resumableState.scriptResources.hasOwnProperty(href)) return; - imageSrcSet = []; - renderState.preloads.scripts.set(href, imageSrcSet); - renderState.bulkPreloads.add(imageSrcSet); - pushLinkImpl( - imageSrcSet, - assign({ rel: "preload", href: href, as: as }, options) - ); - resumableState.scriptResources[href] = - !options || - ("string" !== typeof options.crossOrigin && - "string" !== typeof options.integrity) - ? PRELOAD_NO_CREDS - : [options.crossOrigin, options.integrity]; - break; - default: - if (resumableState.unknownResources.hasOwnProperty(as)) { - if ( - ((imageSrcSet = resumableState.unknownResources[as]), - imageSrcSet.hasOwnProperty(href)) - ) - return; - } else - (imageSrcSet = {}), - (resumableState.unknownResources[as] = imageSrcSet); - imageSrcSet[href] = PRELOAD_NO_CREDS; - if ( - (resumableState = renderState.headers) && - 0 < resumableState.remainingCapacity && - "font" === as && - ((key = getPreloadAsHeader(href, as, options)), - 0 <= (resumableState.remainingCapacity -= key.length + 2)) - ) - (renderState.resets.font[href] = PRELOAD_NO_CREDS), - resumableState.fontPreloads && - (resumableState.fontPreloads += ", "), - (resumableState.fontPreloads += key); - else - switch ( - ((resumableState = []), - (href = assign({ rel: "preload", href: href, as: as }, options)), - pushLinkImpl(resumableState, href), - as) - ) { - case "font": - renderState.fontPreloads.add(resumableState); - break; - default: - renderState.bulkPreloads.add(resumableState); - } - } - enqueueFlush(request); - } - } else previousDispatcher.L(href, as, options); -} -function preloadModule(href, options) { - var request = resolveRequest(); - if (request) { - var resumableState = request.resumableState, - renderState = request.renderState; - if (href) { - var as = - options && "string" === typeof options.as ? options.as : "script"; - switch (as) { - case "script": - if (resumableState.moduleScriptResources.hasOwnProperty(href)) return; - as = []; - resumableState.moduleScriptResources[href] = - !options || - ("string" !== typeof options.crossOrigin && - "string" !== typeof options.integrity) - ? PRELOAD_NO_CREDS - : [options.crossOrigin, options.integrity]; - renderState.preloads.moduleScripts.set(href, as); - break; - default: - if (resumableState.moduleUnknownResources.hasOwnProperty(as)) { - var resources = resumableState.unknownResources[as]; - if (resources.hasOwnProperty(href)) return; - } else - (resources = {}), - (resumableState.moduleUnknownResources[as] = resources); - as = []; - resources[href] = PRELOAD_NO_CREDS; - } - pushLinkImpl(as, assign({ rel: "modulepreload", href: href }, options)); - renderState.bulkPreloads.add(as); - enqueueFlush(request); - } - } else previousDispatcher.m(href, options); -} -function preinitStyle(href, precedence, options) { - var request = resolveRequest(); - if (request) { - var resumableState = request.resumableState, - renderState = request.renderState; - if (href) { - precedence = precedence || "default"; - var styleQueue = renderState.styles.get(precedence), - resourceState = resumableState.styleResources.hasOwnProperty(href) - ? resumableState.styleResources[href] - : void 0; - null !== resourceState && - ((resumableState.styleResources[href] = null), - styleQueue || - ((styleQueue = { - precedence: escapeTextForBrowser(precedence), - rules: [], - hrefs: [], - sheets: new Map() - }), - renderState.styles.set(precedence, styleQueue)), - (precedence = { - state: 0, - props: assign( - { rel: "stylesheet", href: href, "data-precedence": precedence }, - options - ) - }), - resourceState && - (2 === resourceState.length && - adoptPreloadCredentials(precedence.props, resourceState), - (renderState = renderState.preloads.stylesheets.get(href)) && - 0 < renderState.length - ? (renderState.length = 0) - : (precedence.state = 1)), - styleQueue.sheets.set(href, precedence), - enqueueFlush(request)); - } - } else previousDispatcher.S(href, precedence, options); -} -function preinitScript(src, options) { - var request = resolveRequest(); - if (request) { - var resumableState = request.resumableState, - renderState = request.renderState; - if (src) { - var resourceState = resumableState.scriptResources.hasOwnProperty(src) - ? resumableState.scriptResources[src] - : void 0; - null !== resourceState && - ((resumableState.scriptResources[src] = null), - (options = assign({ src: src, async: !0 }, options)), - resourceState && - (2 === resourceState.length && - adoptPreloadCredentials(options, resourceState), - (src = renderState.preloads.scripts.get(src))) && - (src.length = 0), - (src = []), - renderState.scripts.add(src), - pushScriptImpl(src, options), - enqueueFlush(request)); - } - } else previousDispatcher.X(src, options); -} -function preinitModuleScript(src, options) { - var request = resolveRequest(); - if (request) { - var resumableState = request.resumableState, - renderState = request.renderState; - if (src) { - var resourceState = resumableState.moduleScriptResources.hasOwnProperty( - src - ) - ? resumableState.moduleScriptResources[src] - : void 0; - null !== resourceState && - ((resumableState.moduleScriptResources[src] = null), - (options = assign({ src: src, type: "module", async: !0 }, options)), - resourceState && - (2 === resourceState.length && - adoptPreloadCredentials(options, resourceState), - (src = renderState.preloads.moduleScripts.get(src))) && - (src.length = 0), - (src = []), - renderState.scripts.add(src), - pushScriptImpl(src, options), - enqueueFlush(request)); - } - } else previousDispatcher.M(src, options); -} -function adoptPreloadCredentials(target, preloadState) { - null == target.crossOrigin && (target.crossOrigin = preloadState[0]); - null == target.integrity && (target.integrity = preloadState[1]); -} -function getPreloadAsHeader(href, as, params) { - href = ("" + href).replace( - regexForHrefInLinkHeaderURLContext, - escapeHrefForLinkHeaderURLContextReplacer - ); - as = ("" + as).replace( - regexForLinkHeaderQuotedParamValueContext, - escapeStringForLinkHeaderQuotedParamValueContextReplacer - ); - as = "<" + href + '>; rel=preload; as="' + as + '"'; - for (var paramName in params) - hasOwnProperty.call(params, paramName) && - ((href = params[paramName]), - "string" === typeof href && - (as += - "; " + - paramName.toLowerCase() + - '="' + - ("" + href).replace( - regexForLinkHeaderQuotedParamValueContext, - escapeStringForLinkHeaderQuotedParamValueContextReplacer - ) + - '"')); - return as; -} -var regexForHrefInLinkHeaderURLContext = /[<>\r\n]/g; -function escapeHrefForLinkHeaderURLContextReplacer(match) { - switch (match) { - case "<": - return "%3C"; - case ">": - return "%3E"; - case "\n": - return "%0A"; - case "\r": - return "%0D"; - default: - throw Error( - "escapeLinkHrefForHeaderContextReplacer encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React" - ); - } -} -var regexForLinkHeaderQuotedParamValueContext = /["';,\r\n]/g; -function escapeStringForLinkHeaderQuotedParamValueContextReplacer(match) { - switch (match) { - case '"': - return "%22"; - case "'": - return "%27"; - case ";": - return "%3B"; - case ",": - return "%2C"; - case "\n": - return "%0A"; - case "\r": - return "%0D"; - default: - throw Error( - "escapeStringForLinkHeaderQuotedParamValueContextReplacer encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React" - ); - } -} -function hoistStyleQueueDependency(styleQueue) { - this.styles.add(styleQueue); -} -function hoistStylesheetDependency(stylesheet) { - this.stylesheets.add(stylesheet); -} -function hoistHoistables(parentState, childState) { - childState.styles.forEach(hoistStyleQueueDependency, parentState); - childState.stylesheets.forEach(hoistStylesheetDependency, parentState); - childState.suspenseyImages && (parentState.suspenseyImages = !0); -} -function hasSuspenseyContent(hoistableState) { - return 0 < hoistableState.stylesheets.size || hoistableState.suspenseyImages; -} -var bind = Function.prototype.bind, - requestStorage = new async_hooks.AsyncLocalStorage(), - REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"); -function getComponentNameFromType(type) { - if (null == type) return null; - if ("function" === typeof type) - return type.$$typeof === REACT_CLIENT_REFERENCE - ? null - : type.displayName || type.name || null; - if ("string" === typeof type) return type; - switch (type) { - case REACT_FRAGMENT_TYPE: - return "Fragment"; - case REACT_PROFILER_TYPE: - return "Profiler"; - case REACT_STRICT_MODE_TYPE: - return "StrictMode"; - case REACT_SUSPENSE_TYPE: - return "Suspense"; - case REACT_SUSPENSE_LIST_TYPE: - return "SuspenseList"; - case REACT_ACTIVITY_TYPE: - return "Activity"; - } - if ("object" === typeof type) - switch (type.$$typeof) { - case REACT_PORTAL_TYPE: - return "Portal"; - case REACT_CONTEXT_TYPE: - return type.displayName || "Context"; - case REACT_CONSUMER_TYPE: - return (type._context.displayName || "Context") + ".Consumer"; - case REACT_FORWARD_REF_TYPE: - var innerType = type.render; - type = type.displayName; - type || - ((type = innerType.displayName || innerType.name || ""), - (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef")); - return type; - case REACT_MEMO_TYPE: - return ( - (innerType = type.displayName || null), - null !== innerType - ? innerType - : getComponentNameFromType(type.type) || "Memo" - ); - case REACT_LAZY_TYPE: - innerType = type._payload; - type = type._init; - try { - return getComponentNameFromType(type(innerType)); - } catch (x) {} - } - return null; -} -var emptyContextObject = {}, - currentActiveSnapshot = null; -function popToNearestCommonAncestor(prev, next) { - if (prev !== next) { - prev.context._currentValue = prev.parentValue; - prev = prev.parent; - var parentNext = next.parent; - if (null === prev) { - if (null !== parentNext) - throw Error( - "The stacks must reach the root at the same time. This is a bug in React." - ); - } else { - if (null === parentNext) - throw Error( - "The stacks must reach the root at the same time. This is a bug in React." - ); - popToNearestCommonAncestor(prev, parentNext); - } - next.context._currentValue = next.value; - } -} -function popAllPrevious(prev) { - prev.context._currentValue = prev.parentValue; - prev = prev.parent; - null !== prev && popAllPrevious(prev); -} -function pushAllNext(next) { - var parentNext = next.parent; - null !== parentNext && pushAllNext(parentNext); - next.context._currentValue = next.value; -} -function popPreviousToCommonLevel(prev, next) { - prev.context._currentValue = prev.parentValue; - prev = prev.parent; - if (null === prev) - throw Error( - "The depth must equal at least at zero before reaching the root. This is a bug in React." - ); - prev.depth === next.depth - ? popToNearestCommonAncestor(prev, next) - : popPreviousToCommonLevel(prev, next); -} -function popNextToCommonLevel(prev, next) { - var parentNext = next.parent; - if (null === parentNext) - throw Error( - "The depth must equal at least at zero before reaching the root. This is a bug in React." - ); - prev.depth === parentNext.depth - ? popToNearestCommonAncestor(prev, parentNext) - : popNextToCommonLevel(prev, parentNext); - next.context._currentValue = next.value; -} -function switchContext(newSnapshot) { - var prev = currentActiveSnapshot; - prev !== newSnapshot && - (null === prev - ? pushAllNext(newSnapshot) - : null === newSnapshot - ? popAllPrevious(prev) - : prev.depth === newSnapshot.depth - ? popToNearestCommonAncestor(prev, newSnapshot) - : prev.depth > newSnapshot.depth - ? popPreviousToCommonLevel(prev, newSnapshot) - : popNextToCommonLevel(prev, newSnapshot), - (currentActiveSnapshot = newSnapshot)); -} -var classComponentUpdater = { - enqueueSetState: function (inst, payload) { - inst = inst._reactInternals; - null !== inst.queue && inst.queue.push(payload); - }, - enqueueReplaceState: function (inst, payload) { - inst = inst._reactInternals; - inst.replace = !0; - inst.queue = [payload]; - }, - enqueueForceUpdate: function () {} - }, - emptyTreeContext = { id: 1, overflow: "" }; -function pushTreeContext(baseContext, totalChildren, index) { - var baseIdWithLeadingBit = baseContext.id; - baseContext = baseContext.overflow; - var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1; - baseIdWithLeadingBit &= ~(1 << baseLength); - index += 1; - var length = 32 - clz32(totalChildren) + baseLength; - if (30 < length) { - var numberOfOverflowBits = baseLength - (baseLength % 5); - length = ( - baseIdWithLeadingBit & - ((1 << numberOfOverflowBits) - 1) - ).toString(32); - baseIdWithLeadingBit >>= numberOfOverflowBits; - baseLength -= numberOfOverflowBits; - return { - id: - (1 << (32 - clz32(totalChildren) + baseLength)) | - (index << baseLength) | - baseIdWithLeadingBit, - overflow: length + baseContext - }; - } - return { - id: (1 << length) | (index << baseLength) | baseIdWithLeadingBit, - overflow: baseContext - }; -} -var clz32 = Math.clz32 ? Math.clz32 : clz32Fallback, - log = Math.log, - LN2 = Math.LN2; -function clz32Fallback(x) { - x >>>= 0; - return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0; -} -function noop() {} -var SuspenseException = Error( - "Suspense Exception: This is not a real error! It's an implementation detail of `use` to interrupt the current render. You must either rethrow it immediately, or move the `use` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\n\nTo handle async errors, wrap your component in an error boundary, or call the promise's `.catch` method and pass the result to `use`." -); -function trackUsedThenable(thenableState, thenable, index) { - index = thenableState[index]; - void 0 === index - ? thenableState.push(thenable) - : index !== thenable && (thenable.then(noop, noop), (thenable = index)); - switch (thenable.status) { - case "fulfilled": - return thenable.value; - case "rejected": - throw thenable.reason; - default: - "string" === typeof thenable.status - ? thenable.then(noop, noop) - : ((thenableState = thenable), - (thenableState.status = "pending"), - thenableState.then( - function (fulfilledValue) { - if ("pending" === thenable.status) { - var fulfilledThenable = thenable; - fulfilledThenable.status = "fulfilled"; - fulfilledThenable.value = fulfilledValue; - } - }, - function (error) { - if ("pending" === thenable.status) { - var rejectedThenable = thenable; - rejectedThenable.status = "rejected"; - rejectedThenable.reason = error; - } - } - )); - switch (thenable.status) { - case "fulfilled": - return thenable.value; - case "rejected": - throw thenable.reason; - } - suspendedThenable = thenable; - throw SuspenseException; - } -} -var suspendedThenable = null; -function getSuspendedThenable() { - if (null === suspendedThenable) - throw Error( - "Expected a suspended thenable. This is a bug in React. Please file an issue." - ); - var thenable = suspendedThenable; - suspendedThenable = null; - return thenable; -} -function is(x, y) { - return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y); -} -var objectIs = "function" === typeof Object.is ? Object.is : is, - currentlyRenderingComponent = null, - currentlyRenderingTask = null, - currentlyRenderingRequest = null, - currentlyRenderingKeyPath = null, - firstWorkInProgressHook = null, - workInProgressHook = null, - isReRender = !1, - didScheduleRenderPhaseUpdate = !1, - localIdCounter = 0, - actionStateCounter = 0, - actionStateMatchingIndex = -1, - thenableIndexCounter = 0, - thenableState = null, - renderPhaseUpdates = null, - numberOfReRenders = 0; -function resolveCurrentlyRenderingComponent() { - if (null === currentlyRenderingComponent) - throw Error( - "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." - ); - return currentlyRenderingComponent; -} -function createHook() { - if (0 < numberOfReRenders) - throw Error("Rendered more hooks than during the previous render"); - return { memoizedState: null, queue: null, next: null }; -} -function createWorkInProgressHook() { - null === workInProgressHook - ? null === firstWorkInProgressHook - ? ((isReRender = !1), - (firstWorkInProgressHook = workInProgressHook = createHook())) - : ((isReRender = !0), (workInProgressHook = firstWorkInProgressHook)) - : null === workInProgressHook.next - ? ((isReRender = !1), - (workInProgressHook = workInProgressHook.next = createHook())) - : ((isReRender = !0), (workInProgressHook = workInProgressHook.next)); - return workInProgressHook; -} -function getThenableStateAfterSuspending() { - var state = thenableState; - thenableState = null; - return state; -} -function resetHooksState() { - currentlyRenderingKeyPath = - currentlyRenderingRequest = - currentlyRenderingTask = - currentlyRenderingComponent = - null; - didScheduleRenderPhaseUpdate = !1; - firstWorkInProgressHook = null; - numberOfReRenders = 0; - workInProgressHook = renderPhaseUpdates = null; -} -function basicStateReducer(state, action) { - return "function" === typeof action ? action(state) : action; -} -function useReducer(reducer, initialArg, init) { - currentlyRenderingComponent = resolveCurrentlyRenderingComponent(); - workInProgressHook = createWorkInProgressHook(); - if (isReRender) { - var queue = workInProgressHook.queue; - initialArg = queue.dispatch; - if ( - null !== renderPhaseUpdates && - ((init = renderPhaseUpdates.get(queue)), void 0 !== init) - ) { - renderPhaseUpdates.delete(queue); - queue = workInProgressHook.memoizedState; - do (queue = reducer(queue, init.action)), (init = init.next); - while (null !== init); - workInProgressHook.memoizedState = queue; - return [queue, initialArg]; - } - return [workInProgressHook.memoizedState, initialArg]; - } - reducer = - reducer === basicStateReducer - ? "function" === typeof initialArg - ? initialArg() - : initialArg - : void 0 !== init - ? init(initialArg) - : initialArg; - workInProgressHook.memoizedState = reducer; - reducer = workInProgressHook.queue = { last: null, dispatch: null }; - reducer = reducer.dispatch = dispatchAction.bind( - null, - currentlyRenderingComponent, - reducer - ); - return [workInProgressHook.memoizedState, reducer]; -} -function useMemo(nextCreate, deps) { - currentlyRenderingComponent = resolveCurrentlyRenderingComponent(); - workInProgressHook = createWorkInProgressHook(); - deps = void 0 === deps ? null : deps; - if (null !== workInProgressHook) { - var prevState = workInProgressHook.memoizedState; - if (null !== prevState && null !== deps) { - var prevDeps = prevState[1]; - a: if (null === prevDeps) prevDeps = !1; - else { - for (var i = 0; i < prevDeps.length && i < deps.length; i++) - if (!objectIs(deps[i], prevDeps[i])) { - prevDeps = !1; - break a; - } - prevDeps = !0; - } - if (prevDeps) return prevState[0]; - } - } - nextCreate = nextCreate(); - workInProgressHook.memoizedState = [nextCreate, deps]; - return nextCreate; -} -function dispatchAction(componentIdentity, queue, action) { - if (25 <= numberOfReRenders) - throw Error( - "Too many re-renders. React limits the number of renders to prevent an infinite loop." - ); - if (componentIdentity === currentlyRenderingComponent) - if ( - ((didScheduleRenderPhaseUpdate = !0), - (componentIdentity = { action: action, next: null }), - null === renderPhaseUpdates && (renderPhaseUpdates = new Map()), - (action = renderPhaseUpdates.get(queue)), - void 0 === action) - ) - renderPhaseUpdates.set(queue, componentIdentity); - else { - for (queue = action; null !== queue.next; ) queue = queue.next; - queue.next = componentIdentity; - } -} -function throwOnUseEffectEventCall() { - throw Error( - "A function wrapped in useEffectEvent can't be called during rendering." - ); -} -function unsupportedStartTransition() { - throw Error("startTransition cannot be called during server rendering."); -} -function unsupportedSetOptimisticState() { - throw Error("Cannot update optimistic state while rendering."); -} -function createPostbackActionStateKey(permalink, componentKeyPath, hookIndex) { - if (void 0 !== permalink) return "p" + permalink; - permalink = JSON.stringify([componentKeyPath, null, hookIndex]); - componentKeyPath = crypto.createHash("md5"); - componentKeyPath.update(permalink); - return "k" + componentKeyPath.digest("hex"); -} -function useActionState(action, initialState, permalink) { - resolveCurrentlyRenderingComponent(); - var actionStateHookIndex = actionStateCounter++, - request = currentlyRenderingRequest; - if ("function" === typeof action.$$FORM_ACTION) { - var nextPostbackStateKey = null, - componentKeyPath = currentlyRenderingKeyPath; - request = request.formState; - var isSignatureEqual = action.$$IS_SIGNATURE_EQUAL; - if (null !== request && "function" === typeof isSignatureEqual) { - var postbackKey = request[1]; - isSignatureEqual.call(action, request[2], request[3]) && - ((nextPostbackStateKey = createPostbackActionStateKey( - permalink, - componentKeyPath, - actionStateHookIndex - )), - postbackKey === nextPostbackStateKey && - ((actionStateMatchingIndex = actionStateHookIndex), - (initialState = request[0]))); - } - var boundAction = action.bind(null, initialState); - action = function (payload) { - boundAction(payload); - }; - "function" === typeof boundAction.$$FORM_ACTION && - (action.$$FORM_ACTION = function (prefix) { - prefix = boundAction.$$FORM_ACTION(prefix); - void 0 !== permalink && - ((permalink += ""), (prefix.action = permalink)); - var formData = prefix.data; - formData && - (null === nextPostbackStateKey && - (nextPostbackStateKey = createPostbackActionStateKey( - permalink, - componentKeyPath, - actionStateHookIndex - )), - formData.append("$ACTION_KEY", nextPostbackStateKey)); - return prefix; - }); - return [initialState, action, !1]; - } - var boundAction$22 = action.bind(null, initialState); - return [ - initialState, - function (payload) { - boundAction$22(payload); - }, - !1 - ]; -} -function unwrapThenable(thenable) { - var index = thenableIndexCounter; - thenableIndexCounter += 1; - null === thenableState && (thenableState = []); - return trackUsedThenable(thenableState, thenable, index); -} -function unsupportedRefresh() { - throw Error("Cache cannot be refreshed during server rendering."); -} -var HooksDispatcher = { - readContext: function (context) { - return context._currentValue; - }, - use: function (usable) { - if (null !== usable && "object" === typeof usable) { - if ("function" === typeof usable.then) return unwrapThenable(usable); - if (usable.$$typeof === REACT_CONTEXT_TYPE) return usable._currentValue; - } - throw Error("An unsupported type was passed to use(): " + String(usable)); - }, - useContext: function (context) { - resolveCurrentlyRenderingComponent(); - return context._currentValue; - }, - useMemo: useMemo, - useReducer: useReducer, - useRef: function (initialValue) { - currentlyRenderingComponent = resolveCurrentlyRenderingComponent(); - workInProgressHook = createWorkInProgressHook(); - var previousRef = workInProgressHook.memoizedState; - return null === previousRef - ? ((initialValue = { current: initialValue }), - (workInProgressHook.memoizedState = initialValue)) - : previousRef; - }, - useState: function (initialState) { - return useReducer(basicStateReducer, initialState); - }, - useInsertionEffect: noop, - useLayoutEffect: noop, - useCallback: function (callback, deps) { - return useMemo(function () { - return callback; - }, deps); - }, - useImperativeHandle: noop, - useEffect: noop, - useDebugValue: noop, - useDeferredValue: function (value, initialValue) { - resolveCurrentlyRenderingComponent(); - return void 0 !== initialValue ? initialValue : value; - }, - useTransition: function () { - resolveCurrentlyRenderingComponent(); - return [!1, unsupportedStartTransition]; - }, - useId: function () { - var JSCompiler_inline_result = currentlyRenderingTask.treeContext; - var overflow = JSCompiler_inline_result.overflow; - JSCompiler_inline_result = JSCompiler_inline_result.id; - JSCompiler_inline_result = - ( - JSCompiler_inline_result & - ~(1 << (32 - clz32(JSCompiler_inline_result) - 1)) - ).toString(32) + overflow; - var resumableState = currentResumableState; - if (null === resumableState) - throw Error( - "Invalid hook call. Hooks can only be called inside of the body of a function component." - ); - overflow = localIdCounter++; - JSCompiler_inline_result = - "_" + resumableState.idPrefix + "R_" + JSCompiler_inline_result; - 0 < overflow && (JSCompiler_inline_result += "H" + overflow.toString(32)); - return JSCompiler_inline_result + "_"; - }, - useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) { - if (void 0 === getServerSnapshot) - throw Error( - "Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering." - ); - return getServerSnapshot(); - }, - useOptimistic: function (passthrough) { - resolveCurrentlyRenderingComponent(); - return [passthrough, unsupportedSetOptimisticState]; - }, - useActionState: useActionState, - useFormState: useActionState, - useHostTransitionStatus: function () { - resolveCurrentlyRenderingComponent(); - return sharedNotPendingObject; - }, - useMemoCache: function (size) { - for (var data = Array(size), i = 0; i < size; i++) - data[i] = REACT_MEMO_CACHE_SENTINEL; - return data; - }, - useCacheRefresh: function () { - return unsupportedRefresh; - }, - useEffectEvent: function () { - return throwOnUseEffectEventCall; - } - }, - currentResumableState = null, - DefaultAsyncDispatcher = { - getCacheForType: function () { - throw Error("Not implemented."); - }, - cacheSignal: function () { - throw Error("Not implemented."); - } - }; -function prepareStackTrace(error, structuredStackTrace) { - error = (error.name || "Error") + ": " + (error.message || ""); - for (var i = 0; i < structuredStackTrace.length; i++) - error += "\n at " + structuredStackTrace[i].toString(); - return error; -} -var prefix, suffix; -function describeBuiltInComponentFrame(name) { - if (void 0 === prefix) - try { - throw Error(); - } catch (x) { - var match = x.stack.trim().match(/\n( *(at )?)/); - prefix = (match && match[1]) || ""; - suffix = - -1 < x.stack.indexOf("\n at") - ? " ()" - : -1 < x.stack.indexOf("@") - ? "@unknown:0:0" - : ""; - } - return "\n" + prefix + name + suffix; -} -var reentry = !1; -function describeNativeComponentFrame(fn, construct) { - if (!fn || reentry) return ""; - reentry = !0; - var previousPrepareStackTrace = Error.prepareStackTrace; - Error.prepareStackTrace = prepareStackTrace; - try { - var RunInRootFrame = { - DetermineComponentFrameRoot: function () { - try { - if (construct) { - var Fake = function () { - throw Error(); - }; - Object.defineProperty(Fake.prototype, "props", { - set: function () { - throw Error(); - } - }); - if ("object" === typeof Reflect && Reflect.construct) { - try { - Reflect.construct(Fake, []); - } catch (x) { - var control = x; - } - Reflect.construct(fn, [], Fake); - } else { - try { - Fake.call(); - } catch (x$24) { - control = x$24; - } - fn.call(Fake.prototype); - } - } else { - try { - throw Error(); - } catch (x$25) { - control = x$25; - } - (Fake = fn()) && - "function" === typeof Fake.catch && - Fake.catch(function () {}); - } - } catch (sample) { - if (sample && control && "string" === typeof sample.stack) - return [sample.stack, control.stack]; - } - return [null, null]; - } - }; - RunInRootFrame.DetermineComponentFrameRoot.displayName = - "DetermineComponentFrameRoot"; - var namePropDescriptor = Object.getOwnPropertyDescriptor( - RunInRootFrame.DetermineComponentFrameRoot, - "name" - ); - namePropDescriptor && - namePropDescriptor.configurable && - Object.defineProperty( - RunInRootFrame.DetermineComponentFrameRoot, - "name", - { value: "DetermineComponentFrameRoot" } - ); - var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(), - sampleStack = _RunInRootFrame$Deter[0], - controlStack = _RunInRootFrame$Deter[1]; - if (sampleStack && controlStack) { - var sampleLines = sampleStack.split("\n"), - controlLines = controlStack.split("\n"); - for ( - namePropDescriptor = RunInRootFrame = 0; - RunInRootFrame < sampleLines.length && - !sampleLines[RunInRootFrame].includes("DetermineComponentFrameRoot"); - - ) - RunInRootFrame++; - for ( - ; - namePropDescriptor < controlLines.length && - !controlLines[namePropDescriptor].includes( - "DetermineComponentFrameRoot" - ); - - ) - namePropDescriptor++; - if ( - RunInRootFrame === sampleLines.length || - namePropDescriptor === controlLines.length - ) - for ( - RunInRootFrame = sampleLines.length - 1, - namePropDescriptor = controlLines.length - 1; - 1 <= RunInRootFrame && - 0 <= namePropDescriptor && - sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]; - - ) - namePropDescriptor--; - for ( - ; - 1 <= RunInRootFrame && 0 <= namePropDescriptor; - RunInRootFrame--, namePropDescriptor-- - ) - if (sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]) { - if (1 !== RunInRootFrame || 1 !== namePropDescriptor) { - do - if ( - (RunInRootFrame--, - namePropDescriptor--, - 0 > namePropDescriptor || - sampleLines[RunInRootFrame] !== - controlLines[namePropDescriptor]) - ) { - var frame = - "\n" + - sampleLines[RunInRootFrame].replace(" at new ", " at "); - fn.displayName && - frame.includes("") && - (frame = frame.replace("", fn.displayName)); - return frame; - } - while (1 <= RunInRootFrame && 0 <= namePropDescriptor); - } - break; - } - } - } finally { - (reentry = !1), (Error.prepareStackTrace = previousPrepareStackTrace); - } - return (previousPrepareStackTrace = fn ? fn.displayName || fn.name : "") - ? describeBuiltInComponentFrame(previousPrepareStackTrace) - : ""; -} -function describeComponentStackByType(type) { - if ("string" === typeof type) return describeBuiltInComponentFrame(type); - if ("function" === typeof type) - return type.prototype && type.prototype.isReactComponent - ? describeNativeComponentFrame(type, !0) - : describeNativeComponentFrame(type, !1); - if ("object" === typeof type && null !== type) { - switch (type.$$typeof) { - case REACT_FORWARD_REF_TYPE: - return describeNativeComponentFrame(type.render, !1); - case REACT_MEMO_TYPE: - return describeNativeComponentFrame(type.type, !1); - case REACT_LAZY_TYPE: - var lazyComponent = type, - payload = lazyComponent._payload; - lazyComponent = lazyComponent._init; - try { - type = lazyComponent(payload); - } catch (x) { - return describeBuiltInComponentFrame("Lazy"); - } - return describeComponentStackByType(type); - } - if ("string" === typeof type.name) { - a: { - payload = type.name; - lazyComponent = type.env; - var location = type.debugLocation; - if ( - null != location && - ((type = Error.prepareStackTrace), - (Error.prepareStackTrace = prepareStackTrace), - (location = location.stack), - (Error.prepareStackTrace = type), - location.startsWith("Error: react-stack-top-frame\n") && - (location = location.slice(29)), - (type = location.indexOf("\n")), - -1 !== type && (location = location.slice(type + 1)), - (type = location.indexOf("react_stack_bottom_frame")), - -1 !== type && (type = location.lastIndexOf("\n", type)), - (type = -1 !== type ? (location = location.slice(0, type)) : ""), - (location = type.lastIndexOf("\n")), - (type = -1 === location ? type : type.slice(location + 1)), - -1 !== type.indexOf(payload)) - ) { - payload = "\n" + type; - break a; - } - payload = describeBuiltInComponentFrame( - payload + (lazyComponent ? " [" + lazyComponent + "]" : "") - ); - } - return payload; - } - } - switch (type) { - case REACT_SUSPENSE_LIST_TYPE: - return describeBuiltInComponentFrame("SuspenseList"); - case REACT_SUSPENSE_TYPE: - return describeBuiltInComponentFrame("Suspense"); - } - return ""; -} -function isEligibleForOutlining(request, boundary) { - return ( - (500 < boundary.byteSize || hasSuspenseyContent(boundary.contentState)) && - null === boundary.contentPreamble - ); -} -function defaultErrorHandler(error) { - if ( - "object" === typeof error && - null !== error && - "string" === typeof error.environmentName - ) { - var JSCompiler_inline_result = error.environmentName; - error = [error].slice(0); - "string" === typeof error[0] - ? error.splice( - 0, - 1, - "\u001b[0m\u001b[7m%c%s\u001b[0m%c " + error[0], - "background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px", - " " + JSCompiler_inline_result + " ", - "" - ) - : error.splice( - 0, - 0, - "\u001b[0m\u001b[7m%c%s\u001b[0m%c", - "background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px", - " " + JSCompiler_inline_result + " ", - "" - ); - error.unshift(console); - JSCompiler_inline_result = bind.apply(console.error, error); - JSCompiler_inline_result(); - } else console.error(error); - return null; -} -function RequestInstance( - resumableState, - renderState, - rootFormatContext, - progressiveChunkSize, - onError, - onAllReady, - onShellReady, - onShellError, - onFatalError, - onPostpone, - formState -) { - var abortSet = new Set(); - this.destination = null; - this.flushScheduled = !1; - this.resumableState = resumableState; - this.renderState = renderState; - this.rootFormatContext = rootFormatContext; - this.progressiveChunkSize = - void 0 === progressiveChunkSize ? 12800 : progressiveChunkSize; - this.status = 10; - this.fatalError = null; - this.pendingRootTasks = this.allPendingTasks = this.nextSegmentId = 0; - this.completedPreambleSegments = this.completedRootSegment = null; - this.byteSize = 0; - this.abortableTasks = abortSet; - this.pingedTasks = []; - this.clientRenderedBoundaries = []; - this.completedBoundaries = []; - this.partialBoundaries = []; - this.trackedPostpones = null; - this.onError = void 0 === onError ? defaultErrorHandler : onError; - this.onPostpone = void 0 === onPostpone ? noop : onPostpone; - this.onAllReady = void 0 === onAllReady ? noop : onAllReady; - this.onShellReady = void 0 === onShellReady ? noop : onShellReady; - this.onShellError = void 0 === onShellError ? noop : onShellError; - this.onFatalError = void 0 === onFatalError ? noop : onFatalError; - this.formState = void 0 === formState ? null : formState; -} -function createRequest( - children, - resumableState, - renderState, - rootFormatContext, - progressiveChunkSize, - onError, - onAllReady, - onShellReady, - onShellError, - onFatalError, - onPostpone, - formState -) { - resumableState = new RequestInstance( - resumableState, - renderState, - rootFormatContext, - progressiveChunkSize, - onError, - onAllReady, - onShellReady, - onShellError, - onFatalError, - onPostpone, - formState - ); - renderState = createPendingSegment( - resumableState, - 0, - null, - rootFormatContext, - !1, - !1 - ); - renderState.parentFlushed = !0; - children = createRenderTask( - resumableState, - null, - children, - -1, - null, - renderState, - null, - null, - resumableState.abortableTasks, - null, - rootFormatContext, - null, - emptyTreeContext, - null, - null - ); - pushComponentStack(children); - resumableState.pingedTasks.push(children); - return resumableState; -} -function createPrerenderRequest( - children, - resumableState, - renderState, - rootFormatContext, - progressiveChunkSize, - onError, - onAllReady, - onShellReady, - onShellError, - onFatalError, - onPostpone -) { - children = createRequest( - children, - resumableState, - renderState, - rootFormatContext, - progressiveChunkSize, - onError, - onAllReady, - onShellReady, - onShellError, - onFatalError, - onPostpone, - void 0 - ); - children.trackedPostpones = { - workingMap: new Map(), - rootNodes: [], - rootSlots: null - }; - return children; -} -function resumeRequest( - children, - postponedState, - renderState, - onError, - onAllReady, - onShellReady, - onShellError, - onFatalError, - onPostpone -) { - renderState = new RequestInstance( - postponedState.resumableState, - renderState, - postponedState.rootFormatContext, - postponedState.progressiveChunkSize, - onError, - onAllReady, - onShellReady, - onShellError, - onFatalError, - onPostpone, - null - ); - renderState.nextSegmentId = postponedState.nextSegmentId; - if ("number" === typeof postponedState.replaySlots) - return ( - (onError = createPendingSegment( - renderState, - 0, - null, - postponedState.rootFormatContext, - !1, - !1 - )), - (onError.parentFlushed = !0), - (children = createRenderTask( - renderState, - null, - children, - -1, - null, - onError, - null, - null, - renderState.abortableTasks, - null, - postponedState.rootFormatContext, - null, - emptyTreeContext, - null, - null - )), - pushComponentStack(children), - renderState.pingedTasks.push(children), - renderState - ); - children = createReplayTask( - renderState, - null, - { - nodes: postponedState.replayNodes, - slots: postponedState.replaySlots, - pendingTasks: 0 - }, - children, - -1, - null, - null, - renderState.abortableTasks, - null, - postponedState.rootFormatContext, - null, - emptyTreeContext, - null, - null - ); - pushComponentStack(children); - renderState.pingedTasks.push(children); - return renderState; -} -function resumeAndPrerenderRequest( - children, - postponedState, - renderState, - onError, - onAllReady, - onShellReady, - onShellError, - onFatalError, - onPostpone -) { - children = resumeRequest( - children, - postponedState, - renderState, - onError, - onAllReady, - onShellReady, - onShellError, - onFatalError, - onPostpone - ); - children.trackedPostpones = { - workingMap: new Map(), - rootNodes: [], - rootSlots: null - }; - return children; -} -var currentRequest = null; -function resolveRequest() { - if (currentRequest) return currentRequest; - var store = requestStorage.getStore(); - return store ? store : null; -} -function pingTask(request, task) { - request.pingedTasks.push(task); - 1 === request.pingedTasks.length && - ((request.flushScheduled = null !== request.destination), - null !== request.trackedPostpones || 10 === request.status - ? scheduleMicrotask(function () { - return performWork(request); - }) - : setImmediate(function () { - return performWork(request); - })); -} -function createSuspenseBoundary( - request, - row, - fallbackAbortableTasks, - contentPreamble, - fallbackPreamble -) { - fallbackAbortableTasks = { - status: 0, - rootSegmentID: -1, - parentFlushed: !1, - pendingTasks: 0, - row: row, - completedSegments: [], - byteSize: 0, - fallbackAbortableTasks: fallbackAbortableTasks, - errorDigest: null, - contentState: createHoistableState(), - fallbackState: createHoistableState(), - contentPreamble: contentPreamble, - fallbackPreamble: fallbackPreamble, - trackedContentKeyPath: null, - trackedFallbackNode: null - }; - null !== row && - (row.pendingTasks++, - (contentPreamble = row.boundaries), - null !== contentPreamble && - (request.allPendingTasks++, - fallbackAbortableTasks.pendingTasks++, - contentPreamble.push(fallbackAbortableTasks)), - (request = row.inheritedHoistables), - null !== request && - hoistHoistables(fallbackAbortableTasks.contentState, request)); - return fallbackAbortableTasks; -} -function createRenderTask( - request, - thenableState, - node, - childIndex, - blockedBoundary, - blockedSegment, - blockedPreamble, - hoistableState, - abortSet, - keyPath, - formatContext, - context, - treeContext, - row, - componentStack -) { - request.allPendingTasks++; - null === blockedBoundary - ? request.pendingRootTasks++ - : blockedBoundary.pendingTasks++; - null !== row && row.pendingTasks++; - var task = { - replay: null, - node: node, - childIndex: childIndex, - ping: function () { - return pingTask(request, task); - }, - blockedBoundary: blockedBoundary, - blockedSegment: blockedSegment, - blockedPreamble: blockedPreamble, - hoistableState: hoistableState, - abortSet: abortSet, - keyPath: keyPath, - formatContext: formatContext, - context: context, - treeContext: treeContext, - row: row, - componentStack: componentStack, - thenableState: thenableState - }; - abortSet.add(task); - return task; -} -function createReplayTask( - request, - thenableState, - replay, - node, - childIndex, - blockedBoundary, - hoistableState, - abortSet, - keyPath, - formatContext, - context, - treeContext, - row, - componentStack -) { - request.allPendingTasks++; - null === blockedBoundary - ? request.pendingRootTasks++ - : blockedBoundary.pendingTasks++; - null !== row && row.pendingTasks++; - replay.pendingTasks++; - var task = { - replay: replay, - node: node, - childIndex: childIndex, - ping: function () { - return pingTask(request, task); - }, - blockedBoundary: blockedBoundary, - blockedSegment: null, - blockedPreamble: null, - hoistableState: hoistableState, - abortSet: abortSet, - keyPath: keyPath, - formatContext: formatContext, - context: context, - treeContext: treeContext, - row: row, - componentStack: componentStack, - thenableState: thenableState - }; - abortSet.add(task); - return task; -} -function createPendingSegment( - request, - index, - boundary, - parentFormatContext, - lastPushedText, - textEmbedded -) { - return { - status: 0, - parentFlushed: !1, - id: -1, - index: index, - chunks: [], - children: [], - preambleChildren: [], - parentFormatContext: parentFormatContext, - boundary: boundary, - lastPushedText: lastPushedText, - textEmbedded: textEmbedded - }; -} -function pushComponentStack(task) { - var node = task.node; - if ("object" === typeof node && null !== node) - switch (node.$$typeof) { - case REACT_ELEMENT_TYPE: - task.componentStack = { parent: task.componentStack, type: node.type }; - } -} -function replaceSuspenseComponentStackWithSuspenseFallbackStack( - componentStack -) { - return null === componentStack - ? null - : { parent: componentStack.parent, type: "Suspense Fallback" }; -} -function getThrownInfo(node$jscomp$0) { - var errorInfo = {}; - node$jscomp$0 && - Object.defineProperty(errorInfo, "componentStack", { - configurable: !0, - enumerable: !0, - get: function () { - try { - var info = "", - node = node$jscomp$0; - do - (info += describeComponentStackByType(node.type)), - (node = node.parent); - while (node); - var JSCompiler_inline_result = info; - } catch (x) { - JSCompiler_inline_result = - "\nError generating stack: " + x.message + "\n" + x.stack; - } - Object.defineProperty(errorInfo, "componentStack", { - value: JSCompiler_inline_result - }); - return JSCompiler_inline_result; - } - }); - return errorInfo; -} -function logRecoverableError(request, error, errorInfo) { - request = request.onError; - error = request(error, errorInfo); - if (null == error || "string" === typeof error) return error; -} -function fatalError(request, error) { - var onShellError = request.onShellError, - onFatalError = request.onFatalError; - onShellError(error); - onFatalError(error); - null !== request.destination - ? ((request.status = 14), request.destination.destroy(error)) - : ((request.status = 13), (request.fatalError = error)); -} -function finishSuspenseListRow(request, row) { - unblockSuspenseListRow(request, row.next, row.hoistables); -} -function unblockSuspenseListRow(request, unblockedRow, inheritedHoistables) { - for (; null !== unblockedRow; ) { - null !== inheritedHoistables && - (hoistHoistables(unblockedRow.hoistables, inheritedHoistables), - (unblockedRow.inheritedHoistables = inheritedHoistables)); - var unblockedBoundaries = unblockedRow.boundaries; - if (null !== unblockedBoundaries) { - unblockedRow.boundaries = null; - for (var i = 0; i < unblockedBoundaries.length; i++) { - var unblockedBoundary = unblockedBoundaries[i]; - null !== inheritedHoistables && - hoistHoistables(unblockedBoundary.contentState, inheritedHoistables); - finishedTask(request, unblockedBoundary, null, null); - } - } - unblockedRow.pendingTasks--; - if (0 < unblockedRow.pendingTasks) break; - inheritedHoistables = unblockedRow.hoistables; - unblockedRow = unblockedRow.next; - } -} -function tryToResolveTogetherRow(request, togetherRow) { - var boundaries = togetherRow.boundaries; - if (null !== boundaries && togetherRow.pendingTasks === boundaries.length) { - for (var allCompleteAndInlinable = !0, i = 0; i < boundaries.length; i++) { - var rowBoundary = boundaries[i]; - if ( - 1 !== rowBoundary.pendingTasks || - rowBoundary.parentFlushed || - isEligibleForOutlining(request, rowBoundary) - ) { - allCompleteAndInlinable = !1; - break; - } - } - allCompleteAndInlinable && - unblockSuspenseListRow(request, togetherRow, togetherRow.hoistables); - } -} -function createSuspenseListRow(previousRow) { - var newRow = { - pendingTasks: 1, - boundaries: null, - hoistables: createHoistableState(), - inheritedHoistables: null, - together: !1, - next: null - }; - null !== previousRow && - 0 < previousRow.pendingTasks && - (newRow.pendingTasks++, - (newRow.boundaries = []), - (previousRow.next = newRow)); - return newRow; -} -function renderSuspenseListRows(request, task, keyPath, rows, revealOrder) { - var prevKeyPath = task.keyPath, - prevTreeContext = task.treeContext, - prevRow = task.row; - task.keyPath = keyPath; - keyPath = rows.length; - var previousSuspenseListRow = null; - if (null !== task.replay) { - var resumeSlots = task.replay.slots; - if (null !== resumeSlots && "object" === typeof resumeSlots) - for (var n = 0; n < keyPath; n++) { - var i = - "backwards" !== revealOrder && - "unstable_legacy-backwards" !== revealOrder - ? n - : keyPath - 1 - n, - node = rows[i]; - task.row = previousSuspenseListRow = createSuspenseListRow( - previousSuspenseListRow - ); - task.treeContext = pushTreeContext(prevTreeContext, keyPath, i); - var resumeSegmentID = resumeSlots[i]; - "number" === typeof resumeSegmentID - ? (resumeNode(request, task, resumeSegmentID, node, i), - delete resumeSlots[i]) - : renderNode(request, task, node, i); - 0 === --previousSuspenseListRow.pendingTasks && - finishSuspenseListRow(request, previousSuspenseListRow); - } - else - for (resumeSlots = 0; resumeSlots < keyPath; resumeSlots++) - (n = - "backwards" !== revealOrder && - "unstable_legacy-backwards" !== revealOrder - ? resumeSlots - : keyPath - 1 - resumeSlots), - (i = rows[n]), - (task.row = previousSuspenseListRow = - createSuspenseListRow(previousSuspenseListRow)), - (task.treeContext = pushTreeContext(prevTreeContext, keyPath, n)), - renderNode(request, task, i, n), - 0 === --previousSuspenseListRow.pendingTasks && - finishSuspenseListRow(request, previousSuspenseListRow); - } else if ( - "backwards" !== revealOrder && - "unstable_legacy-backwards" !== revealOrder - ) - for (revealOrder = 0; revealOrder < keyPath; revealOrder++) - (resumeSlots = rows[revealOrder]), - (task.row = previousSuspenseListRow = - createSuspenseListRow(previousSuspenseListRow)), - (task.treeContext = pushTreeContext( - prevTreeContext, - keyPath, - revealOrder - )), - renderNode(request, task, resumeSlots, revealOrder), - 0 === --previousSuspenseListRow.pendingTasks && - finishSuspenseListRow(request, previousSuspenseListRow); - else { - revealOrder = task.blockedSegment; - resumeSlots = revealOrder.children.length; - n = revealOrder.chunks.length; - for (i = keyPath - 1; 0 <= i; i--) { - node = rows[i]; - task.row = previousSuspenseListRow = createSuspenseListRow( - previousSuspenseListRow - ); - task.treeContext = pushTreeContext(prevTreeContext, keyPath, i); - resumeSegmentID = createPendingSegment( - request, - n, - null, - task.formatContext, - 0 === i ? revealOrder.lastPushedText : !0, - !0 - ); - revealOrder.children.splice(resumeSlots, 0, resumeSegmentID); - task.blockedSegment = resumeSegmentID; - try { - renderNode(request, task, node, i), - resumeSegmentID.lastPushedText && - resumeSegmentID.textEmbedded && - resumeSegmentID.chunks.push(textSeparator), - (resumeSegmentID.status = 1), - finishedSegment(request, task.blockedBoundary, resumeSegmentID), - 0 === --previousSuspenseListRow.pendingTasks && - finishSuspenseListRow(request, previousSuspenseListRow); - } catch (thrownValue) { - throw ( - ((resumeSegmentID.status = 12 === request.status ? 3 : 4), - thrownValue) - ); - } - } - task.blockedSegment = revealOrder; - revealOrder.lastPushedText = !1; - } - null !== prevRow && - null !== previousSuspenseListRow && - 0 < previousSuspenseListRow.pendingTasks && - (prevRow.pendingTasks++, (previousSuspenseListRow.next = prevRow)); - task.treeContext = prevTreeContext; - task.row = prevRow; - task.keyPath = prevKeyPath; -} -function renderWithHooks(request, task, keyPath, Component, props, secondArg) { - var prevThenableState = task.thenableState; - task.thenableState = null; - currentlyRenderingComponent = {}; - currentlyRenderingTask = task; - currentlyRenderingRequest = request; - currentlyRenderingKeyPath = keyPath; - actionStateCounter = localIdCounter = 0; - actionStateMatchingIndex = -1; - thenableIndexCounter = 0; - thenableState = prevThenableState; - for (request = Component(props, secondArg); didScheduleRenderPhaseUpdate; ) - (didScheduleRenderPhaseUpdate = !1), - (actionStateCounter = localIdCounter = 0), - (actionStateMatchingIndex = -1), - (thenableIndexCounter = 0), - (numberOfReRenders += 1), - (workInProgressHook = null), - (request = Component(props, secondArg)); - resetHooksState(); - return request; -} -function finishFunctionComponent( - request, - task, - keyPath, - children, - hasId, - actionStateCount, - actionStateMatchingIndex -) { - var didEmitActionStateMarkers = !1; - if (0 !== actionStateCount && null !== request.formState) { - var segment = task.blockedSegment; - if (null !== segment) { - didEmitActionStateMarkers = !0; - segment = segment.chunks; - for (var i = 0; i < actionStateCount; i++) - i === actionStateMatchingIndex - ? segment.push(formStateMarkerIsMatching) - : segment.push(formStateMarkerIsNotMatching); - } - } - actionStateCount = task.keyPath; - task.keyPath = keyPath; - hasId - ? ((keyPath = task.treeContext), - (task.treeContext = pushTreeContext(keyPath, 1, 0)), - renderNode(request, task, children, -1), - (task.treeContext = keyPath)) - : didEmitActionStateMarkers - ? renderNode(request, task, children, -1) - : renderNodeDestructive(request, task, children, -1); - task.keyPath = actionStateCount; -} -function renderElement(request, task, keyPath, type, props, ref) { - if ("function" === typeof type) - if (type.prototype && type.prototype.isReactComponent) { - var newProps = props; - if ("ref" in props) { - newProps = {}; - for (var propName in props) - "ref" !== propName && (newProps[propName] = props[propName]); - } - var defaultProps = type.defaultProps; - if (defaultProps) { - newProps === props && (newProps = assign({}, newProps, props)); - for (var propName$44 in defaultProps) - void 0 === newProps[propName$44] && - (newProps[propName$44] = defaultProps[propName$44]); - } - props = newProps; - newProps = emptyContextObject; - defaultProps = type.contextType; - "object" === typeof defaultProps && - null !== defaultProps && - (newProps = defaultProps._currentValue); - newProps = new type(props, newProps); - var initialState = void 0 !== newProps.state ? newProps.state : null; - newProps.updater = classComponentUpdater; - newProps.props = props; - newProps.state = initialState; - defaultProps = { queue: [], replace: !1 }; - newProps._reactInternals = defaultProps; - ref = type.contextType; - newProps.context = - "object" === typeof ref && null !== ref - ? ref._currentValue - : emptyContextObject; - ref = type.getDerivedStateFromProps; - "function" === typeof ref && - ((ref = ref(props, initialState)), - (initialState = - null === ref || void 0 === ref - ? initialState - : assign({}, initialState, ref)), - (newProps.state = initialState)); - if ( - "function" !== typeof type.getDerivedStateFromProps && - "function" !== typeof newProps.getSnapshotBeforeUpdate && - ("function" === typeof newProps.UNSAFE_componentWillMount || - "function" === typeof newProps.componentWillMount) - ) - if ( - ((type = newProps.state), - "function" === typeof newProps.componentWillMount && - newProps.componentWillMount(), - "function" === typeof newProps.UNSAFE_componentWillMount && - newProps.UNSAFE_componentWillMount(), - type !== newProps.state && - classComponentUpdater.enqueueReplaceState( - newProps, - newProps.state, - null - ), - null !== defaultProps.queue && 0 < defaultProps.queue.length) - ) - if ( - ((type = defaultProps.queue), - (ref = defaultProps.replace), - (defaultProps.queue = null), - (defaultProps.replace = !1), - ref && 1 === type.length) - ) - newProps.state = type[0]; - else { - defaultProps = ref ? type[0] : newProps.state; - initialState = !0; - for (ref = ref ? 1 : 0; ref < type.length; ref++) - (propName$44 = type[ref]), - (propName$44 = - "function" === typeof propName$44 - ? propName$44.call(newProps, defaultProps, props, void 0) - : propName$44), - null != propName$44 && - (initialState - ? ((initialState = !1), - (defaultProps = assign({}, defaultProps, propName$44))) - : assign(defaultProps, propName$44)); - newProps.state = defaultProps; - } - else defaultProps.queue = null; - type = newProps.render(); - if (12 === request.status) throw null; - props = task.keyPath; - task.keyPath = keyPath; - renderNodeDestructive(request, task, type, -1); - task.keyPath = props; - } else { - type = renderWithHooks(request, task, keyPath, type, props, void 0); - if (12 === request.status) throw null; - finishFunctionComponent( - request, - task, - keyPath, - type, - 0 !== localIdCounter, - actionStateCounter, - actionStateMatchingIndex - ); - } - else if ("string" === typeof type) - if (((newProps = task.blockedSegment), null === newProps)) - (newProps = props.children), - (defaultProps = task.formatContext), - (initialState = task.keyPath), - (task.formatContext = getChildFormatContext(defaultProps, type, props)), - (task.keyPath = keyPath), - renderNode(request, task, newProps, -1), - (task.formatContext = defaultProps), - (task.keyPath = initialState); - else { - initialState = pushStartInstance( - newProps.chunks, - type, - props, - request.resumableState, - request.renderState, - task.blockedPreamble, - task.hoistableState, - task.formatContext, - newProps.lastPushedText - ); - newProps.lastPushedText = !1; - defaultProps = task.formatContext; - ref = task.keyPath; - task.keyPath = keyPath; - if ( - 3 === - (task.formatContext = getChildFormatContext(defaultProps, type, props)) - .insertionMode - ) { - keyPath = createPendingSegment( - request, - 0, - null, - task.formatContext, - !1, - !1 - ); - newProps.preambleChildren.push(keyPath); - task.blockedSegment = keyPath; - try { - (keyPath.status = 6), - renderNode(request, task, initialState, -1), - keyPath.lastPushedText && - keyPath.textEmbedded && - keyPath.chunks.push(textSeparator), - (keyPath.status = 1), - finishedSegment(request, task.blockedBoundary, keyPath); - } finally { - task.blockedSegment = newProps; - } - } else renderNode(request, task, initialState, -1); - task.formatContext = defaultProps; - task.keyPath = ref; - a: { - task = newProps.chunks; - request = request.resumableState; - switch (type) { - case "title": - case "style": - case "script": - case "area": - case "base": - case "br": - case "col": - case "embed": - case "hr": - case "img": - case "input": - case "keygen": - case "link": - case "meta": - case "param": - case "source": - case "track": - case "wbr": - break a; - case "body": - if (1 >= defaultProps.insertionMode) { - request.hasBody = !0; - break a; - } - break; - case "html": - if (0 === defaultProps.insertionMode) { - request.hasHtml = !0; - break a; - } - break; - case "head": - if (1 >= defaultProps.insertionMode) break a; - } - task.push(endChunkForTag(type)); - } - newProps.lastPushedText = !1; - } - else { - switch (type) { - case REACT_LEGACY_HIDDEN_TYPE: - case REACT_STRICT_MODE_TYPE: - case REACT_PROFILER_TYPE: - case REACT_FRAGMENT_TYPE: - type = task.keyPath; - task.keyPath = keyPath; - renderNodeDestructive(request, task, props.children, -1); - task.keyPath = type; - return; - case REACT_ACTIVITY_TYPE: - type = task.blockedSegment; - null === type - ? "hidden" !== props.mode && - ((type = task.keyPath), - (task.keyPath = keyPath), - renderNode(request, task, props.children, -1), - (task.keyPath = type)) - : "hidden" !== props.mode && - (type.chunks.push(startActivityBoundary), - (type.lastPushedText = !1), - (newProps = task.keyPath), - (task.keyPath = keyPath), - renderNode(request, task, props.children, -1), - (task.keyPath = newProps), - type.chunks.push(endActivityBoundary), - (type.lastPushedText = !1)); - return; - case REACT_SUSPENSE_LIST_TYPE: - a: { - type = props.children; - props = props.revealOrder; - if ( - "forwards" === props || - "backwards" === props || - "unstable_legacy-backwards" === props - ) { - if (isArrayImpl(type)) { - renderSuspenseListRows(request, task, keyPath, type, props); - break a; - } - if ((newProps = getIteratorFn(type))) - if ((newProps = newProps.call(type))) { - defaultProps = newProps.next(); - if (!defaultProps.done) { - do defaultProps = newProps.next(); - while (!defaultProps.done); - renderSuspenseListRows(request, task, keyPath, type, props); - } - break a; - } - } - "together" === props - ? ((props = task.keyPath), - (newProps = task.row), - (defaultProps = task.row = createSuspenseListRow(null)), - (defaultProps.boundaries = []), - (defaultProps.together = !0), - (task.keyPath = keyPath), - renderNodeDestructive(request, task, type, -1), - 0 === --defaultProps.pendingTasks && - finishSuspenseListRow(request, defaultProps), - (task.keyPath = props), - (task.row = newProps), - null !== newProps && - 0 < defaultProps.pendingTasks && - (newProps.pendingTasks++, (defaultProps.next = newProps))) - : ((props = task.keyPath), - (task.keyPath = keyPath), - renderNodeDestructive(request, task, type, -1), - (task.keyPath = props)); - } - return; - case REACT_VIEW_TRANSITION_TYPE: - case REACT_SCOPE_TYPE: - throw Error("ReactDOMServer does not yet support scope components."); - case REACT_SUSPENSE_TYPE: - a: if (null !== task.replay) { - type = task.keyPath; - newProps = task.formatContext; - defaultProps = task.row; - task.keyPath = keyPath; - task.formatContext = getSuspenseContentFormatContext( - request.resumableState, - newProps - ); - task.row = null; - keyPath = props.children; - try { - renderNode(request, task, keyPath, -1); - } finally { - (task.keyPath = type), - (task.formatContext = newProps), - (task.row = defaultProps); - } - } else { - type = task.keyPath; - ref = task.formatContext; - var prevRow = task.row; - propName$44 = task.blockedBoundary; - propName = task.blockedPreamble; - var parentHoistableState = task.hoistableState, - parentSegment = task.blockedSegment, - fallback = props.fallback; - props = props.children; - var fallbackAbortSet = new Set(); - var newBoundary = - 2 > task.formatContext.insertionMode - ? createSuspenseBoundary( - request, - task.row, - fallbackAbortSet, - createPreambleState(), - createPreambleState() - ) - : createSuspenseBoundary( - request, - task.row, - fallbackAbortSet, - null, - null - ); - null !== request.trackedPostpones && - (newBoundary.trackedContentKeyPath = keyPath); - var boundarySegment = createPendingSegment( - request, - parentSegment.chunks.length, - newBoundary, - task.formatContext, - !1, - !1 - ); - parentSegment.children.push(boundarySegment); - parentSegment.lastPushedText = !1; - var contentRootSegment = createPendingSegment( - request, - 0, - null, - task.formatContext, - !1, - !1 - ); - contentRootSegment.parentFlushed = !0; - if (null !== request.trackedPostpones) { - newProps = task.componentStack; - defaultProps = [keyPath[0], "Suspense Fallback", keyPath[2]]; - initialState = [defaultProps[1], defaultProps[2], [], null]; - request.trackedPostpones.workingMap.set(defaultProps, initialState); - newBoundary.trackedFallbackNode = initialState; - task.blockedSegment = boundarySegment; - task.blockedPreamble = newBoundary.fallbackPreamble; - task.keyPath = defaultProps; - task.formatContext = getSuspenseFallbackFormatContext( - request.resumableState, - ref - ); - task.componentStack = - replaceSuspenseComponentStackWithSuspenseFallbackStack(newProps); - boundarySegment.status = 6; - try { - renderNode(request, task, fallback, -1), - boundarySegment.lastPushedText && - boundarySegment.textEmbedded && - boundarySegment.chunks.push(textSeparator), - (boundarySegment.status = 1), - finishedSegment(request, propName$44, boundarySegment); - } catch (thrownValue) { - throw ( - ((boundarySegment.status = 12 === request.status ? 3 : 4), - thrownValue) - ); - } finally { - (task.blockedSegment = parentSegment), - (task.blockedPreamble = propName), - (task.keyPath = type), - (task.formatContext = ref); - } - task = createRenderTask( - request, - null, - props, - -1, - newBoundary, - contentRootSegment, - newBoundary.contentPreamble, - newBoundary.contentState, - task.abortSet, - keyPath, - getSuspenseContentFormatContext( - request.resumableState, - task.formatContext - ), - task.context, - task.treeContext, - null, - newProps - ); - pushComponentStack(task); - request.pingedTasks.push(task); - } else { - task.blockedBoundary = newBoundary; - task.blockedPreamble = newBoundary.contentPreamble; - task.hoistableState = newBoundary.contentState; - task.blockedSegment = contentRootSegment; - task.keyPath = keyPath; - task.formatContext = getSuspenseContentFormatContext( - request.resumableState, - ref - ); - task.row = null; - contentRootSegment.status = 6; - try { - if ( - (renderNode(request, task, props, -1), - contentRootSegment.lastPushedText && - contentRootSegment.textEmbedded && - contentRootSegment.chunks.push(textSeparator), - (contentRootSegment.status = 1), - finishedSegment(request, newBoundary, contentRootSegment), - queueCompletedSegment(newBoundary, contentRootSegment), - 0 === newBoundary.pendingTasks && 0 === newBoundary.status) - ) { - if ( - ((newBoundary.status = 1), - !isEligibleForOutlining(request, newBoundary)) - ) { - null !== prevRow && - 0 === --prevRow.pendingTasks && - finishSuspenseListRow(request, prevRow); - 0 === request.pendingRootTasks && - task.blockedPreamble && - preparePreamble(request); - break a; - } - } else - null !== prevRow && - prevRow.together && - tryToResolveTogetherRow(request, prevRow); - } catch (thrownValue$31) { - (newBoundary.status = 4), - 12 === request.status - ? ((contentRootSegment.status = 3), - (newProps = request.fatalError)) - : ((contentRootSegment.status = 4), - (newProps = thrownValue$31)), - (defaultProps = getThrownInfo(task.componentStack)), - (initialState = logRecoverableError( - request, - newProps, - defaultProps - )), - (newBoundary.errorDigest = initialState), - untrackBoundary(request, newBoundary); - } finally { - (task.blockedBoundary = propName$44), - (task.blockedPreamble = propName), - (task.hoistableState = parentHoistableState), - (task.blockedSegment = parentSegment), - (task.keyPath = type), - (task.formatContext = ref), - (task.row = prevRow); - } - task = createRenderTask( - request, - null, - fallback, - -1, - propName$44, - boundarySegment, - newBoundary.fallbackPreamble, - newBoundary.fallbackState, - fallbackAbortSet, - [keyPath[0], "Suspense Fallback", keyPath[2]], - getSuspenseFallbackFormatContext( - request.resumableState, - task.formatContext - ), - task.context, - task.treeContext, - task.row, - replaceSuspenseComponentStackWithSuspenseFallbackStack( - task.componentStack - ) - ); - pushComponentStack(task); - request.pingedTasks.push(task); - } - } - return; - } - if ("object" === typeof type && null !== type) - switch (type.$$typeof) { - case REACT_FORWARD_REF_TYPE: - if ("ref" in props) - for (parentSegment in ((newProps = {}), props)) - "ref" !== parentSegment && - (newProps[parentSegment] = props[parentSegment]); - else newProps = props; - type = renderWithHooks( - request, - task, - keyPath, - type.render, - newProps, - ref - ); - finishFunctionComponent( - request, - task, - keyPath, - type, - 0 !== localIdCounter, - actionStateCounter, - actionStateMatchingIndex - ); - return; - case REACT_MEMO_TYPE: - renderElement(request, task, keyPath, type.type, props, ref); - return; - case REACT_CONTEXT_TYPE: - defaultProps = props.children; - newProps = task.keyPath; - props = props.value; - initialState = type._currentValue; - type._currentValue = props; - ref = currentActiveSnapshot; - currentActiveSnapshot = type = { - parent: ref, - depth: null === ref ? 0 : ref.depth + 1, - context: type, - parentValue: initialState, - value: props - }; - task.context = type; - task.keyPath = keyPath; - renderNodeDestructive(request, task, defaultProps, -1); - request = currentActiveSnapshot; - if (null === request) - throw Error( - "Tried to pop a Context at the root of the app. This is a bug in React." - ); - request.context._currentValue = request.parentValue; - request = currentActiveSnapshot = request.parent; - task.context = request; - task.keyPath = newProps; - return; - case REACT_CONSUMER_TYPE: - props = props.children; - type = props(type._context._currentValue); - props = task.keyPath; - task.keyPath = keyPath; - renderNodeDestructive(request, task, type, -1); - task.keyPath = props; - return; - case REACT_LAZY_TYPE: - newProps = type._init; - type = newProps(type._payload); - if (12 === request.status) throw null; - renderElement(request, task, keyPath, type, props, ref); - return; - } - throw Error( - "Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: " + - ((null == type ? type : typeof type) + ".") - ); - } -} -function resumeNode(request, task, segmentId, node, childIndex) { - var prevReplay = task.replay, - blockedBoundary = task.blockedBoundary, - resumedSegment = createPendingSegment( - request, - 0, - null, - task.formatContext, - !1, - !1 - ); - resumedSegment.id = segmentId; - resumedSegment.parentFlushed = !0; - try { - (task.replay = null), - (task.blockedSegment = resumedSegment), - renderNode(request, task, node, childIndex), - (resumedSegment.status = 1), - finishedSegment(request, blockedBoundary, resumedSegment), - null === blockedBoundary - ? (request.completedRootSegment = resumedSegment) - : (queueCompletedSegment(blockedBoundary, resumedSegment), - blockedBoundary.parentFlushed && - request.partialBoundaries.push(blockedBoundary)); - } finally { - (task.replay = prevReplay), (task.blockedSegment = null); - } -} -function renderNodeDestructive(request, task, node, childIndex) { - null !== task.replay && "number" === typeof task.replay.slots - ? resumeNode(request, task, task.replay.slots, node, childIndex) - : ((task.node = node), - (task.childIndex = childIndex), - (node = task.componentStack), - pushComponentStack(task), - retryNode(request, task), - (task.componentStack = node)); -} -function retryNode(request, task) { - var node = task.node, - childIndex = task.childIndex; - if (null !== node) { - if ("object" === typeof node) { - switch (node.$$typeof) { - case REACT_ELEMENT_TYPE: - var type = node.type, - key = node.key, - props = node.props; - node = props.ref; - var ref = void 0 !== node ? node : null, - name = getComponentNameFromType(type), - keyOrIndex = - null == key ? (-1 === childIndex ? 0 : childIndex) : key; - key = [task.keyPath, name, keyOrIndex]; - if (null !== task.replay) - a: { - var replay = task.replay; - childIndex = replay.nodes; - for (node = 0; node < childIndex.length; node++) { - var node$jscomp$0 = childIndex[node]; - if (keyOrIndex === node$jscomp$0[1]) { - if (4 === node$jscomp$0.length) { - if (null !== name && name !== node$jscomp$0[0]) - throw Error( - "Expected the resume to render <" + - node$jscomp$0[0] + - "> in this slot but instead it rendered <" + - name + - ">. The tree doesn't match so React will fallback to client rendering." - ); - var childNodes = node$jscomp$0[2]; - name = node$jscomp$0[3]; - keyOrIndex = task.node; - task.replay = { - nodes: childNodes, - slots: name, - pendingTasks: 1 - }; - try { - renderElement(request, task, key, type, props, ref); - if ( - 1 === task.replay.pendingTasks && - 0 < task.replay.nodes.length - ) - throw Error( - "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering." - ); - task.replay.pendingTasks--; - } catch (x) { - if ( - "object" === typeof x && - null !== x && - (x === SuspenseException || - "function" === typeof x.then) - ) - throw ( - (task.node === keyOrIndex - ? (task.replay = replay) - : childIndex.splice(node, 1), - x) - ); - task.replay.pendingTasks--; - props = getThrownInfo(task.componentStack); - key = request; - request = task.blockedBoundary; - type = x; - props = logRecoverableError(key, type, props); - abortRemainingReplayNodes( - key, - request, - childNodes, - name, - type, - props - ); - } - task.replay = replay; - } else { - if (type !== REACT_SUSPENSE_TYPE) - throw Error( - "Expected the resume to render in this slot but instead it rendered <" + - (getComponentNameFromType(type) || "Unknown") + - ">. The tree doesn't match so React will fallback to client rendering." - ); - b: { - replay = void 0; - type = node$jscomp$0[5]; - ref = node$jscomp$0[2]; - name = node$jscomp$0[3]; - keyOrIndex = - null === node$jscomp$0[4] ? [] : node$jscomp$0[4][2]; - node$jscomp$0 = - null === node$jscomp$0[4] ? null : node$jscomp$0[4][3]; - var prevKeyPath = task.keyPath, - prevContext = task.formatContext, - prevRow = task.row, - previousReplaySet = task.replay, - parentBoundary = task.blockedBoundary, - parentHoistableState = task.hoistableState, - content = props.children, - fallback = props.fallback, - fallbackAbortSet = new Set(); - props = - 2 > task.formatContext.insertionMode - ? createSuspenseBoundary( - request, - task.row, - fallbackAbortSet, - createPreambleState(), - createPreambleState() - ) - : createSuspenseBoundary( - request, - task.row, - fallbackAbortSet, - null, - null - ); - props.parentFlushed = !0; - props.rootSegmentID = type; - task.blockedBoundary = props; - task.hoistableState = props.contentState; - task.keyPath = key; - task.formatContext = getSuspenseContentFormatContext( - request.resumableState, - prevContext - ); - task.row = null; - task.replay = { - nodes: ref, - slots: name, - pendingTasks: 1 - }; - try { - renderNode(request, task, content, -1); - if ( - 1 === task.replay.pendingTasks && - 0 < task.replay.nodes.length - ) - throw Error( - "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering." - ); - task.replay.pendingTasks--; - if (0 === props.pendingTasks && 0 === props.status) { - props.status = 1; - request.completedBoundaries.push(props); - break b; - } - } catch (error) { - (props.status = 4), - (childNodes = getThrownInfo(task.componentStack)), - (replay = logRecoverableError( - request, - error, - childNodes - )), - (props.errorDigest = replay), - task.replay.pendingTasks--, - request.clientRenderedBoundaries.push(props); - } finally { - (task.blockedBoundary = parentBoundary), - (task.hoistableState = parentHoistableState), - (task.replay = previousReplaySet), - (task.keyPath = prevKeyPath), - (task.formatContext = prevContext), - (task.row = prevRow); - } - childNodes = createReplayTask( - request, - null, - { - nodes: keyOrIndex, - slots: node$jscomp$0, - pendingTasks: 0 - }, - fallback, - -1, - parentBoundary, - props.fallbackState, - fallbackAbortSet, - [key[0], "Suspense Fallback", key[2]], - getSuspenseFallbackFormatContext( - request.resumableState, - task.formatContext - ), - task.context, - task.treeContext, - task.row, - replaceSuspenseComponentStackWithSuspenseFallbackStack( - task.componentStack - ) - ); - pushComponentStack(childNodes); - request.pingedTasks.push(childNodes); - } - } - childIndex.splice(node, 1); - break a; - } - } - } - else renderElement(request, task, key, type, props, ref); - return; - case REACT_PORTAL_TYPE: - throw Error( - "Portals are not currently supported by the server renderer. Render them conditionally so that they only appear on the client render." - ); - case REACT_LAZY_TYPE: - childNodes = node._init; - node = childNodes(node._payload); - if (12 === request.status) throw null; - renderNodeDestructive(request, task, node, childIndex); - return; - } - if (isArrayImpl(node)) { - renderChildrenArray(request, task, node, childIndex); - return; - } - if ((childNodes = getIteratorFn(node))) - if ((childNodes = childNodes.call(node))) { - node = childNodes.next(); - if (!node.done) { - props = []; - do props.push(node.value), (node = childNodes.next()); - while (!node.done); - renderChildrenArray(request, task, props, childIndex); - } - return; - } - if ("function" === typeof node.then) - return ( - (task.thenableState = null), - renderNodeDestructive(request, task, unwrapThenable(node), childIndex) - ); - if (node.$$typeof === REACT_CONTEXT_TYPE) - return renderNodeDestructive( - request, - task, - node._currentValue, - childIndex - ); - childIndex = Object.prototype.toString.call(node); - throw Error( - "Objects are not valid as a React child (found: " + - ("[object Object]" === childIndex - ? "object with keys {" + Object.keys(node).join(", ") + "}" - : childIndex) + - "). If you meant to render a collection of children, use an array instead." - ); - } - if ("string" === typeof node) - (childIndex = task.blockedSegment), - null !== childIndex && - (childIndex.lastPushedText = pushTextInstance( - childIndex.chunks, - node, - request.renderState, - childIndex.lastPushedText - )); - else if ("number" === typeof node || "bigint" === typeof node) - (childIndex = task.blockedSegment), - null !== childIndex && - (childIndex.lastPushedText = pushTextInstance( - childIndex.chunks, - "" + node, - request.renderState, - childIndex.lastPushedText - )); - } -} -function renderChildrenArray(request, task, children, childIndex) { - var prevKeyPath = task.keyPath; - if ( - -1 !== childIndex && - ((task.keyPath = [task.keyPath, "Fragment", childIndex]), - null !== task.replay) - ) { - for ( - var replay = task.replay, replayNodes = replay.nodes, j = 0; - j < replayNodes.length; - j++ - ) { - var node = replayNodes[j]; - if (node[1] === childIndex) { - childIndex = node[2]; - node = node[3]; - task.replay = { nodes: childIndex, slots: node, pendingTasks: 1 }; - try { - renderChildrenArray(request, task, children, -1); - if (1 === task.replay.pendingTasks && 0 < task.replay.nodes.length) - throw Error( - "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering." - ); - task.replay.pendingTasks--; - } catch (x) { - if ( - "object" === typeof x && - null !== x && - (x === SuspenseException || "function" === typeof x.then) - ) - throw x; - task.replay.pendingTasks--; - children = getThrownInfo(task.componentStack); - var boundary = task.blockedBoundary, - error = x; - children = logRecoverableError(request, error, children); - abortRemainingReplayNodes( - request, - boundary, - childIndex, - node, - error, - children - ); - } - task.replay = replay; - replayNodes.splice(j, 1); - break; - } - } - task.keyPath = prevKeyPath; - return; - } - replay = task.treeContext; - replayNodes = children.length; - if ( - null !== task.replay && - ((j = task.replay.slots), null !== j && "object" === typeof j) - ) { - for (childIndex = 0; childIndex < replayNodes; childIndex++) - (node = children[childIndex]), - (task.treeContext = pushTreeContext(replay, replayNodes, childIndex)), - (boundary = j[childIndex]), - "number" === typeof boundary - ? (resumeNode(request, task, boundary, node, childIndex), - delete j[childIndex]) - : renderNode(request, task, node, childIndex); - task.treeContext = replay; - task.keyPath = prevKeyPath; - return; - } - for (j = 0; j < replayNodes; j++) - (childIndex = children[j]), - (task.treeContext = pushTreeContext(replay, replayNodes, j)), - renderNode(request, task, childIndex, j); - task.treeContext = replay; - task.keyPath = prevKeyPath; -} -function trackPostponedBoundary(request, trackedPostpones, boundary) { - boundary.status = 5; - boundary.rootSegmentID = request.nextSegmentId++; - request = boundary.trackedContentKeyPath; - if (null === request) - throw Error( - "It should not be possible to postpone at the root. This is a bug in React." - ); - var fallbackReplayNode = boundary.trackedFallbackNode, - children = [], - boundaryNode = trackedPostpones.workingMap.get(request); - if (void 0 === boundaryNode) - return ( - (boundary = [ - request[1], - request[2], - children, - null, - fallbackReplayNode, - boundary.rootSegmentID - ]), - trackedPostpones.workingMap.set(request, boundary), - addToReplayParent(boundary, request[0], trackedPostpones), - boundary - ); - boundaryNode[4] = fallbackReplayNode; - boundaryNode[5] = boundary.rootSegmentID; - return boundaryNode; -} -function trackPostpone(request, trackedPostpones, task, segment) { - segment.status = 5; - var keyPath = task.keyPath, - boundary = task.blockedBoundary; - if (null === boundary) - (segment.id = request.nextSegmentId++), - (trackedPostpones.rootSlots = segment.id), - null !== request.completedRootSegment && - (request.completedRootSegment.status = 5); - else { - if (null !== boundary && 0 === boundary.status) { - var boundaryNode = trackPostponedBoundary( - request, - trackedPostpones, - boundary - ); - if ( - boundary.trackedContentKeyPath === keyPath && - -1 === task.childIndex - ) { - -1 === segment.id && - (segment.id = segment.parentFlushed - ? boundary.rootSegmentID - : request.nextSegmentId++); - boundaryNode[3] = segment.id; - return; - } - } - -1 === segment.id && - (segment.id = - segment.parentFlushed && null !== boundary - ? boundary.rootSegmentID - : request.nextSegmentId++); - if (-1 === task.childIndex) - null === keyPath - ? (trackedPostpones.rootSlots = segment.id) - : ((task = trackedPostpones.workingMap.get(keyPath)), - void 0 === task - ? ((task = [keyPath[1], keyPath[2], [], segment.id]), - addToReplayParent(task, keyPath[0], trackedPostpones)) - : (task[3] = segment.id)); - else { - if (null === keyPath) - if (((request = trackedPostpones.rootSlots), null === request)) - request = trackedPostpones.rootSlots = {}; - else { - if ("number" === typeof request) - throw Error( - "It should not be possible to postpone both at the root of an element as well as a slot below. This is a bug in React." - ); - } - else if ( - ((boundary = trackedPostpones.workingMap), - (boundaryNode = boundary.get(keyPath)), - void 0 === boundaryNode) - ) - (request = {}), - (boundaryNode = [keyPath[1], keyPath[2], [], request]), - boundary.set(keyPath, boundaryNode), - addToReplayParent(boundaryNode, keyPath[0], trackedPostpones); - else if (((request = boundaryNode[3]), null === request)) - request = boundaryNode[3] = {}; - else if ("number" === typeof request) - throw Error( - "It should not be possible to postpone both at the root of an element as well as a slot below. This is a bug in React." - ); - request[task.childIndex] = segment.id; - } - } -} -function untrackBoundary(request, boundary) { - request = request.trackedPostpones; - null !== request && - ((boundary = boundary.trackedContentKeyPath), - null !== boundary && - ((boundary = request.workingMap.get(boundary)), - void 0 !== boundary && - ((boundary.length = 4), (boundary[2] = []), (boundary[3] = null)))); -} -function spawnNewSuspendedReplayTask(request, task, thenableState) { - return createReplayTask( - request, - thenableState, - task.replay, - task.node, - task.childIndex, - task.blockedBoundary, - task.hoistableState, - task.abortSet, - task.keyPath, - task.formatContext, - task.context, - task.treeContext, - task.row, - task.componentStack - ); -} -function spawnNewSuspendedRenderTask(request, task, thenableState) { - var segment = task.blockedSegment, - newSegment = createPendingSegment( - request, - segment.chunks.length, - null, - task.formatContext, - segment.lastPushedText, - !0 - ); - segment.children.push(newSegment); - segment.lastPushedText = !1; - return createRenderTask( - request, - thenableState, - task.node, - task.childIndex, - task.blockedBoundary, - newSegment, - task.blockedPreamble, - task.hoistableState, - task.abortSet, - task.keyPath, - task.formatContext, - task.context, - task.treeContext, - task.row, - task.componentStack - ); -} -function renderNode(request, task, node, childIndex) { - var previousFormatContext = task.formatContext, - previousContext = task.context, - previousKeyPath = task.keyPath, - previousTreeContext = task.treeContext, - previousComponentStack = task.componentStack, - segment = task.blockedSegment; - if (null === segment) { - segment = task.replay; - try { - return renderNodeDestructive(request, task, node, childIndex); - } catch (thrownValue) { - if ( - (resetHooksState(), - (node = - thrownValue === SuspenseException - ? getSuspendedThenable() - : thrownValue), - 12 !== request.status && "object" === typeof node && null !== node) - ) { - if ("function" === typeof node.then) { - childIndex = - thrownValue === SuspenseException - ? getThenableStateAfterSuspending() - : null; - request = spawnNewSuspendedReplayTask(request, task, childIndex).ping; - node.then(request, request); - task.formatContext = previousFormatContext; - task.context = previousContext; - task.keyPath = previousKeyPath; - task.treeContext = previousTreeContext; - task.componentStack = previousComponentStack; - task.replay = segment; - switchContext(previousContext); - return; - } - if ("Maximum call stack size exceeded" === node.message) { - node = - thrownValue === SuspenseException - ? getThenableStateAfterSuspending() - : null; - node = spawnNewSuspendedReplayTask(request, task, node); - request.pingedTasks.push(node); - task.formatContext = previousFormatContext; - task.context = previousContext; - task.keyPath = previousKeyPath; - task.treeContext = previousTreeContext; - task.componentStack = previousComponentStack; - task.replay = segment; - switchContext(previousContext); - return; - } - } - } - } else { - var childrenLength = segment.children.length, - chunkLength = segment.chunks.length; - try { - return renderNodeDestructive(request, task, node, childIndex); - } catch (thrownValue$63) { - if ( - (resetHooksState(), - (segment.children.length = childrenLength), - (segment.chunks.length = chunkLength), - (node = - thrownValue$63 === SuspenseException - ? getSuspendedThenable() - : thrownValue$63), - 12 !== request.status && "object" === typeof node && null !== node) - ) { - if ("function" === typeof node.then) { - segment = node; - node = - thrownValue$63 === SuspenseException - ? getThenableStateAfterSuspending() - : null; - request = spawnNewSuspendedRenderTask(request, task, node).ping; - segment.then(request, request); - task.formatContext = previousFormatContext; - task.context = previousContext; - task.keyPath = previousKeyPath; - task.treeContext = previousTreeContext; - task.componentStack = previousComponentStack; - switchContext(previousContext); - return; - } - if ("Maximum call stack size exceeded" === node.message) { - segment = - thrownValue$63 === SuspenseException - ? getThenableStateAfterSuspending() - : null; - segment = spawnNewSuspendedRenderTask(request, task, segment); - request.pingedTasks.push(segment); - task.formatContext = previousFormatContext; - task.context = previousContext; - task.keyPath = previousKeyPath; - task.treeContext = previousTreeContext; - task.componentStack = previousComponentStack; - switchContext(previousContext); - return; - } - } - } - } - task.formatContext = previousFormatContext; - task.context = previousContext; - task.keyPath = previousKeyPath; - task.treeContext = previousTreeContext; - switchContext(previousContext); - throw node; -} -function abortTaskSoft(task) { - var boundary = task.blockedBoundary, - segment = task.blockedSegment; - null !== segment && - ((segment.status = 3), finishedTask(this, boundary, task.row, segment)); -} -function abortRemainingReplayNodes( - request$jscomp$0, - boundary, - nodes, - slots, - error, - errorDigest$jscomp$0 -) { - for (var i = 0; i < nodes.length; i++) { - var node = nodes[i]; - if (4 === node.length) - abortRemainingReplayNodes( - request$jscomp$0, - boundary, - node[2], - node[3], - error, - errorDigest$jscomp$0 - ); - else { - node = node[5]; - var request = request$jscomp$0, - errorDigest = errorDigest$jscomp$0, - resumedBoundary = createSuspenseBoundary( - request, - null, - new Set(), - null, - null - ); - resumedBoundary.parentFlushed = !0; - resumedBoundary.rootSegmentID = node; - resumedBoundary.status = 4; - resumedBoundary.errorDigest = errorDigest; - resumedBoundary.parentFlushed && - request.clientRenderedBoundaries.push(resumedBoundary); - } - } - nodes.length = 0; - if (null !== slots) { - if (null === boundary) - throw Error( - "We should not have any resumable nodes in the shell. This is a bug in React." - ); - 4 !== boundary.status && - ((boundary.status = 4), - (boundary.errorDigest = errorDigest$jscomp$0), - boundary.parentFlushed && - request$jscomp$0.clientRenderedBoundaries.push(boundary)); - if ("object" === typeof slots) for (var index in slots) delete slots[index]; - } -} -function abortTask(task, request, error) { - var boundary = task.blockedBoundary, - segment = task.blockedSegment; - if (null !== segment) { - if (6 === segment.status) return; - segment.status = 3; - } - var errorInfo = getThrownInfo(task.componentStack); - if (null === boundary) { - if (13 !== request.status && 14 !== request.status) { - boundary = task.replay; - if (null === boundary) { - null !== request.trackedPostpones && null !== segment - ? ((boundary = request.trackedPostpones), - logRecoverableError(request, error, errorInfo), - trackPostpone(request, boundary, task, segment), - finishedTask(request, null, task.row, segment)) - : (logRecoverableError(request, error, errorInfo), - fatalError(request, error)); - return; - } - boundary.pendingTasks--; - 0 === boundary.pendingTasks && - 0 < boundary.nodes.length && - ((segment = logRecoverableError(request, error, errorInfo)), - abortRemainingReplayNodes( - request, - null, - boundary.nodes, - boundary.slots, - error, - segment - )); - request.pendingRootTasks--; - 0 === request.pendingRootTasks && completeShell(request); - } - } else { - var trackedPostpones$64 = request.trackedPostpones; - if (4 !== boundary.status) { - if (null !== trackedPostpones$64 && null !== segment) - return ( - logRecoverableError(request, error, errorInfo), - trackPostpone(request, trackedPostpones$64, task, segment), - boundary.fallbackAbortableTasks.forEach(function (fallbackTask) { - return abortTask(fallbackTask, request, error); - }), - boundary.fallbackAbortableTasks.clear(), - finishedTask(request, boundary, task.row, segment) - ); - boundary.status = 4; - segment = logRecoverableError(request, error, errorInfo); - boundary.status = 4; - boundary.errorDigest = segment; - untrackBoundary(request, boundary); - boundary.parentFlushed && request.clientRenderedBoundaries.push(boundary); - } - boundary.pendingTasks--; - segment = boundary.row; - null !== segment && - 0 === --segment.pendingTasks && - finishSuspenseListRow(request, segment); - boundary.fallbackAbortableTasks.forEach(function (fallbackTask) { - return abortTask(fallbackTask, request, error); - }); - boundary.fallbackAbortableTasks.clear(); - } - task = task.row; - null !== task && - 0 === --task.pendingTasks && - finishSuspenseListRow(request, task); - request.allPendingTasks--; - 0 === request.allPendingTasks && completeAll(request); -} -function safelyEmitEarlyPreloads(request, shellComplete) { - try { - var renderState = request.renderState, - onHeaders = renderState.onHeaders; - if (onHeaders) { - var headers = renderState.headers; - if (headers) { - renderState.headers = null; - var linkHeader = headers.preconnects; - headers.fontPreloads && - (linkHeader && (linkHeader += ", "), - (linkHeader += headers.fontPreloads)); - headers.highImagePreloads && - (linkHeader && (linkHeader += ", "), - (linkHeader += headers.highImagePreloads)); - if (!shellComplete) { - var queueIter = renderState.styles.values(), - queueStep = queueIter.next(); - b: for ( - ; - 0 < headers.remainingCapacity && !queueStep.done; - queueStep = queueIter.next() - ) - for ( - var sheetIter = queueStep.value.sheets.values(), - sheetStep = sheetIter.next(); - 0 < headers.remainingCapacity && !sheetStep.done; - sheetStep = sheetIter.next() - ) { - var sheet = sheetStep.value, - props = sheet.props, - key = props.href, - props$jscomp$0 = sheet.props, - header = getPreloadAsHeader(props$jscomp$0.href, "style", { - crossOrigin: props$jscomp$0.crossOrigin, - integrity: props$jscomp$0.integrity, - nonce: props$jscomp$0.nonce, - type: props$jscomp$0.type, - fetchPriority: props$jscomp$0.fetchPriority, - referrerPolicy: props$jscomp$0.referrerPolicy, - media: props$jscomp$0.media - }); - if (0 <= (headers.remainingCapacity -= header.length + 2)) - (renderState.resets.style[key] = PRELOAD_NO_CREDS), - linkHeader && (linkHeader += ", "), - (linkHeader += header), - (renderState.resets.style[key] = - "string" === typeof props.crossOrigin || - "string" === typeof props.integrity - ? [props.crossOrigin, props.integrity] - : PRELOAD_NO_CREDS); - else break b; - } - } - linkHeader ? onHeaders({ Link: linkHeader }) : onHeaders({}); - } - } - } catch (error) { - logRecoverableError(request, error, {}); - } -} -function completeShell(request) { - null === request.trackedPostpones && safelyEmitEarlyPreloads(request, !0); - null === request.trackedPostpones && preparePreamble(request); - request.onShellError = noop; - request = request.onShellReady; - request(); -} -function completeAll(request) { - safelyEmitEarlyPreloads( - request, - null === request.trackedPostpones - ? !0 - : null === request.completedRootSegment || - 5 !== request.completedRootSegment.status - ); - preparePreamble(request); - request = request.onAllReady; - request(); -} -function queueCompletedSegment(boundary, segment) { - if ( - 0 === segment.chunks.length && - 1 === segment.children.length && - null === segment.children[0].boundary && - -1 === segment.children[0].id - ) { - var childSegment = segment.children[0]; - childSegment.id = segment.id; - childSegment.parentFlushed = !0; - (1 !== childSegment.status && - 3 !== childSegment.status && - 4 !== childSegment.status) || - queueCompletedSegment(boundary, childSegment); - } else boundary.completedSegments.push(segment); -} -function finishedSegment(request, boundary, segment) { - if (null !== byteLengthOfChunk) { - segment = segment.chunks; - for (var segmentByteSize = 0, i = 0; i < segment.length; i++) - segmentByteSize += byteLengthOfChunk(segment[i]); - null === boundary - ? (request.byteSize += segmentByteSize) - : (boundary.byteSize += segmentByteSize); - } -} -function finishedTask(request, boundary, row, segment) { - null !== row && - (0 === --row.pendingTasks - ? finishSuspenseListRow(request, row) - : row.together && tryToResolveTogetherRow(request, row)); - request.allPendingTasks--; - if (null === boundary) { - if (null !== segment && segment.parentFlushed) { - if (null !== request.completedRootSegment) - throw Error( - "There can only be one root segment. This is a bug in React." - ); - request.completedRootSegment = segment; - } - request.pendingRootTasks--; - 0 === request.pendingRootTasks && completeShell(request); - } else if ((boundary.pendingTasks--, 4 !== boundary.status)) - if (0 === boundary.pendingTasks) - if ( - (0 === boundary.status && (boundary.status = 1), - null !== segment && - segment.parentFlushed && - (1 === segment.status || 3 === segment.status) && - queueCompletedSegment(boundary, segment), - boundary.parentFlushed && request.completedBoundaries.push(boundary), - 1 === boundary.status) - ) - (row = boundary.row), - null !== row && - hoistHoistables(row.hoistables, boundary.contentState), - isEligibleForOutlining(request, boundary) || - (boundary.fallbackAbortableTasks.forEach(abortTaskSoft, request), - boundary.fallbackAbortableTasks.clear(), - null !== row && - 0 === --row.pendingTasks && - finishSuspenseListRow(request, row)), - 0 === request.pendingRootTasks && - null === request.trackedPostpones && - null !== boundary.contentPreamble && - preparePreamble(request); - else { - if ( - 5 === boundary.status && - ((boundary = boundary.row), null !== boundary) - ) { - if (null !== request.trackedPostpones) { - row = request.trackedPostpones; - var postponedRow = boundary.next; - if ( - null !== postponedRow && - ((segment = postponedRow.boundaries), null !== segment) - ) - for ( - postponedRow.boundaries = null, postponedRow = 0; - postponedRow < segment.length; - postponedRow++ - ) { - var postponedBoundary = segment[postponedRow]; - trackPostponedBoundary(request, row, postponedBoundary); - finishedTask(request, postponedBoundary, null, null); - } - } - 0 === --boundary.pendingTasks && - finishSuspenseListRow(request, boundary); - } - } - else - null === segment || - !segment.parentFlushed || - (1 !== segment.status && 3 !== segment.status) || - (queueCompletedSegment(boundary, segment), - 1 === boundary.completedSegments.length && - boundary.parentFlushed && - request.partialBoundaries.push(boundary)), - (boundary = boundary.row), - null !== boundary && - boundary.together && - tryToResolveTogetherRow(request, boundary); - 0 === request.allPendingTasks && completeAll(request); -} -function performWork(request$jscomp$2) { - if (14 !== request$jscomp$2.status && 13 !== request$jscomp$2.status) { - var prevContext = currentActiveSnapshot, - prevDispatcher = ReactSharedInternals.H; - ReactSharedInternals.H = HooksDispatcher; - var prevAsyncDispatcher = ReactSharedInternals.A; - ReactSharedInternals.A = DefaultAsyncDispatcher; - var prevRequest = currentRequest; - currentRequest = request$jscomp$2; - var prevResumableState = currentResumableState; - currentResumableState = request$jscomp$2.resumableState; - try { - var pingedTasks = request$jscomp$2.pingedTasks, - i; - for (i = 0; i < pingedTasks.length; i++) { - var task = pingedTasks[i], - request = request$jscomp$2, - segment = task.blockedSegment; - if (null === segment) { - var request$jscomp$0 = request; - if (0 !== task.replay.pendingTasks) { - switchContext(task.context); - try { - "number" === typeof task.replay.slots - ? resumeNode( - request$jscomp$0, - task, - task.replay.slots, - task.node, - task.childIndex - ) - : retryNode(request$jscomp$0, task); - if ( - 1 === task.replay.pendingTasks && - 0 < task.replay.nodes.length - ) - throw Error( - "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering." - ); - task.replay.pendingTasks--; - task.abortSet.delete(task); - finishedTask( - request$jscomp$0, - task.blockedBoundary, - task.row, - null - ); - } catch (thrownValue) { - resetHooksState(); - var x = - thrownValue === SuspenseException - ? getSuspendedThenable() - : thrownValue; - if ( - "object" === typeof x && - null !== x && - "function" === typeof x.then - ) { - var ping = task.ping; - x.then(ping, ping); - task.thenableState = - thrownValue === SuspenseException - ? getThenableStateAfterSuspending() - : null; - } else { - task.replay.pendingTasks--; - task.abortSet.delete(task); - var errorInfo = getThrownInfo(task.componentStack); - request = void 0; - var request$jscomp$1 = request$jscomp$0, - boundary = task.blockedBoundary, - error$jscomp$0 = - 12 === request$jscomp$0.status - ? request$jscomp$0.fatalError - : x, - replayNodes = task.replay.nodes, - resumeSlots = task.replay.slots; - request = logRecoverableError( - request$jscomp$1, - error$jscomp$0, - errorInfo - ); - abortRemainingReplayNodes( - request$jscomp$1, - boundary, - replayNodes, - resumeSlots, - error$jscomp$0, - request - ); - request$jscomp$0.pendingRootTasks--; - 0 === request$jscomp$0.pendingRootTasks && - completeShell(request$jscomp$0); - request$jscomp$0.allPendingTasks--; - 0 === request$jscomp$0.allPendingTasks && - completeAll(request$jscomp$0); - } - } finally { - } - } - } else if ( - ((request$jscomp$0 = void 0), - (request$jscomp$1 = segment), - 0 === request$jscomp$1.status) - ) { - request$jscomp$1.status = 6; - switchContext(task.context); - var childrenLength = request$jscomp$1.children.length, - chunkLength = request$jscomp$1.chunks.length; - try { - retryNode(request, task), - request$jscomp$1.lastPushedText && - request$jscomp$1.textEmbedded && - request$jscomp$1.chunks.push(textSeparator), - task.abortSet.delete(task), - (request$jscomp$1.status = 1), - finishedSegment(request, task.blockedBoundary, request$jscomp$1), - finishedTask( - request, - task.blockedBoundary, - task.row, - request$jscomp$1 - ); - } catch (thrownValue) { - resetHooksState(); - request$jscomp$1.children.length = childrenLength; - request$jscomp$1.chunks.length = chunkLength; - var x$jscomp$0 = - thrownValue === SuspenseException - ? getSuspendedThenable() - : 12 === request.status - ? request.fatalError - : thrownValue; - if (12 === request.status && null !== request.trackedPostpones) { - var trackedPostpones = request.trackedPostpones, - thrownInfo = getThrownInfo(task.componentStack); - task.abortSet.delete(task); - logRecoverableError(request, x$jscomp$0, thrownInfo); - trackPostpone(request, trackedPostpones, task, request$jscomp$1); - finishedTask( - request, - task.blockedBoundary, - task.row, - request$jscomp$1 - ); - } else if ( - "object" === typeof x$jscomp$0 && - null !== x$jscomp$0 && - "function" === typeof x$jscomp$0.then - ) { - request$jscomp$1.status = 0; - task.thenableState = - thrownValue === SuspenseException - ? getThenableStateAfterSuspending() - : null; - var ping$jscomp$0 = task.ping; - x$jscomp$0.then(ping$jscomp$0, ping$jscomp$0); - } else { - var errorInfo$jscomp$0 = getThrownInfo(task.componentStack); - task.abortSet.delete(task); - request$jscomp$1.status = 4; - var boundary$jscomp$0 = task.blockedBoundary, - row = task.row; - null !== row && - 0 === --row.pendingTasks && - finishSuspenseListRow(request, row); - request.allPendingTasks--; - request$jscomp$0 = logRecoverableError( - request, - x$jscomp$0, - errorInfo$jscomp$0 - ); - if (null === boundary$jscomp$0) fatalError(request, x$jscomp$0); - else if ( - (boundary$jscomp$0.pendingTasks--, - 4 !== boundary$jscomp$0.status) - ) { - boundary$jscomp$0.status = 4; - boundary$jscomp$0.errorDigest = request$jscomp$0; - untrackBoundary(request, boundary$jscomp$0); - var boundaryRow = boundary$jscomp$0.row; - null !== boundaryRow && - 0 === --boundaryRow.pendingTasks && - finishSuspenseListRow(request, boundaryRow); - boundary$jscomp$0.parentFlushed && - request.clientRenderedBoundaries.push(boundary$jscomp$0); - 0 === request.pendingRootTasks && - null === request.trackedPostpones && - null !== boundary$jscomp$0.contentPreamble && - preparePreamble(request); - } - 0 === request.allPendingTasks && completeAll(request); - } - } finally { - } - } - } - pingedTasks.splice(0, i); - null !== request$jscomp$2.destination && - flushCompletedQueues(request$jscomp$2, request$jscomp$2.destination); - } catch (error) { - logRecoverableError(request$jscomp$2, error, {}), - fatalError(request$jscomp$2, error); - } finally { - (currentResumableState = prevResumableState), - (ReactSharedInternals.H = prevDispatcher), - (ReactSharedInternals.A = prevAsyncDispatcher), - prevDispatcher === HooksDispatcher && switchContext(prevContext), - (currentRequest = prevRequest); - } - } -} -function preparePreambleFromSubtree( - request, - segment, - collectedPreambleSegments -) { - segment.preambleChildren.length && - collectedPreambleSegments.push(segment.preambleChildren); - for (var pendingPreambles = !1, i = 0; i < segment.children.length; i++) - pendingPreambles = - preparePreambleFromSegment( - request, - segment.children[i], - collectedPreambleSegments - ) || pendingPreambles; - return pendingPreambles; -} -function preparePreambleFromSegment( - request, - segment, - collectedPreambleSegments -) { - var boundary = segment.boundary; - if (null === boundary) - return preparePreambleFromSubtree( - request, - segment, - collectedPreambleSegments - ); - var preamble = boundary.contentPreamble, - fallbackPreamble = boundary.fallbackPreamble; - if (null === preamble || null === fallbackPreamble) return !1; - switch (boundary.status) { - case 1: - hoistPreambleState(request.renderState, preamble); - request.byteSize += boundary.byteSize; - segment = boundary.completedSegments[0]; - if (!segment) - throw Error( - "A previously unvisited boundary must have exactly one root segment. This is a bug in React." - ); - return preparePreambleFromSubtree( - request, - segment, - collectedPreambleSegments - ); - case 5: - if (null !== request.trackedPostpones) return !0; - case 4: - if (1 === segment.status) - return ( - hoistPreambleState(request.renderState, fallbackPreamble), - preparePreambleFromSubtree( - request, - segment, - collectedPreambleSegments - ) - ); - default: - return !0; - } -} -function preparePreamble(request) { - if ( - request.completedRootSegment && - null === request.completedPreambleSegments - ) { - var collectedPreambleSegments = [], - originalRequestByteSize = request.byteSize, - hasPendingPreambles = preparePreambleFromSegment( - request, - request.completedRootSegment, - collectedPreambleSegments - ), - preamble = request.renderState.preamble; - !1 === hasPendingPreambles || (preamble.headChunks && preamble.bodyChunks) - ? (request.completedPreambleSegments = collectedPreambleSegments) - : (request.byteSize = originalRequestByteSize); - } -} -function flushSubtree(request, destination, segment, hoistableState) { - segment.parentFlushed = !0; - switch (segment.status) { - case 0: - segment.id = request.nextSegmentId++; - case 5: - return ( - (hoistableState = segment.id), - (segment.lastPushedText = !1), - (segment.textEmbedded = !1), - (request = request.renderState), - writeChunk(destination, placeholder1), - writeChunk(destination, request.placeholderPrefix), - (request = hoistableState.toString(16)), - writeChunk(destination, request), - writeChunkAndReturn(destination, placeholder2) - ); - case 1: - segment.status = 2; - var r = !0, - chunks = segment.chunks, - chunkIdx = 0; - segment = segment.children; - for (var childIdx = 0; childIdx < segment.length; childIdx++) { - for (r = segment[childIdx]; chunkIdx < r.index; chunkIdx++) - writeChunk(destination, chunks[chunkIdx]); - r = flushSegment(request, destination, r, hoistableState); - } - for (; chunkIdx < chunks.length - 1; chunkIdx++) - writeChunk(destination, chunks[chunkIdx]); - chunkIdx < chunks.length && - (r = writeChunkAndReturn(destination, chunks[chunkIdx])); - return r; - case 3: - return !0; - default: - throw Error( - "Aborted, errored or already flushed boundaries should not be flushed again. This is a bug in React." - ); - } -} -var flushedByteSize = 0; -function flushSegment(request, destination, segment, hoistableState) { - var boundary = segment.boundary; - if (null === boundary) - return flushSubtree(request, destination, segment, hoistableState); - boundary.parentFlushed = !0; - if (4 === boundary.status) { - var row = boundary.row; - null !== row && - 0 === --row.pendingTasks && - finishSuspenseListRow(request, row); - boundary = boundary.errorDigest; - writeChunkAndReturn(destination, startClientRenderedSuspenseBoundary); - writeChunk(destination, clientRenderedSuspenseBoundaryError1); - boundary && - (writeChunk(destination, clientRenderedSuspenseBoundaryError1A), - writeChunk(destination, escapeTextForBrowser(boundary)), - writeChunk( - destination, - clientRenderedSuspenseBoundaryErrorAttrInterstitial - )); - writeChunkAndReturn(destination, clientRenderedSuspenseBoundaryError2); - flushSubtree(request, destination, segment, hoistableState); - } else if (1 !== boundary.status) - 0 === boundary.status && (boundary.rootSegmentID = request.nextSegmentId++), - 0 < boundary.completedSegments.length && - request.partialBoundaries.push(boundary), - writeStartPendingSuspenseBoundary( - destination, - request.renderState, - boundary.rootSegmentID - ), - hoistableState && hoistHoistables(hoistableState, boundary.fallbackState), - flushSubtree(request, destination, segment, hoistableState); - else if ( - !flushingPartialBoundaries && - isEligibleForOutlining(request, boundary) && - (flushedByteSize + boundary.byteSize > request.progressiveChunkSize || - hasSuspenseyContent(boundary.contentState)) - ) - (boundary.rootSegmentID = request.nextSegmentId++), - request.completedBoundaries.push(boundary), - writeStartPendingSuspenseBoundary( - destination, - request.renderState, - boundary.rootSegmentID - ), - flushSubtree(request, destination, segment, hoistableState); - else { - flushedByteSize += boundary.byteSize; - hoistableState && hoistHoistables(hoistableState, boundary.contentState); - segment = boundary.row; - null !== segment && - isEligibleForOutlining(request, boundary) && - 0 === --segment.pendingTasks && - finishSuspenseListRow(request, segment); - writeChunkAndReturn(destination, startCompletedSuspenseBoundary); - segment = boundary.completedSegments; - if (1 !== segment.length) - throw Error( - "A previously unvisited boundary must have exactly one root segment. This is a bug in React." - ); - flushSegment(request, destination, segment[0], hoistableState); - } - return writeChunkAndReturn(destination, endSuspenseBoundary); -} -function flushSegmentContainer(request, destination, segment, hoistableState) { - writeStartSegment( - destination, - request.renderState, - segment.parentFormatContext, - segment.id - ); - flushSegment(request, destination, segment, hoistableState); - return writeEndSegment(destination, segment.parentFormatContext); -} -function flushCompletedBoundary(request, destination, boundary) { - flushedByteSize = boundary.byteSize; - for ( - var completedSegments = boundary.completedSegments, i = 0; - i < completedSegments.length; - i++ - ) - flushPartiallyCompletedSegment( - request, - destination, - boundary, - completedSegments[i] - ); - completedSegments.length = 0; - completedSegments = boundary.row; - null !== completedSegments && - isEligibleForOutlining(request, boundary) && - 0 === --completedSegments.pendingTasks && - finishSuspenseListRow(request, completedSegments); - writeHoistablesForBoundary( - destination, - boundary.contentState, - request.renderState - ); - completedSegments = request.resumableState; - request = request.renderState; - i = boundary.rootSegmentID; - boundary = boundary.contentState; - var requiresStyleInsertion = request.stylesToHoist; - request.stylesToHoist = !1; - writeChunk(destination, request.startInlineScript); - writeChunk(destination, endOfStartTag); - requiresStyleInsertion - ? (0 === (completedSegments.instructions & 4) && - ((completedSegments.instructions |= 4), - writeChunk(destination, clientRenderScriptFunctionOnly)), - 0 === (completedSegments.instructions & 2) && - ((completedSegments.instructions |= 2), - writeChunk(destination, completeBoundaryScriptFunctionOnly)), - 0 === (completedSegments.instructions & 8) - ? ((completedSegments.instructions |= 8), - writeChunk(destination, completeBoundaryWithStylesScript1FullPartial)) - : writeChunk(destination, completeBoundaryWithStylesScript1Partial)) - : (0 === (completedSegments.instructions & 2) && - ((completedSegments.instructions |= 2), - writeChunk(destination, completeBoundaryScriptFunctionOnly)), - writeChunk(destination, completeBoundaryScript1Partial)); - completedSegments = i.toString(16); - writeChunk(destination, request.boundaryPrefix); - writeChunk(destination, completedSegments); - writeChunk(destination, completeBoundaryScript2); - writeChunk(destination, request.segmentPrefix); - writeChunk(destination, completedSegments); - requiresStyleInsertion - ? (writeChunk(destination, completeBoundaryScript3a), - writeStyleResourceDependenciesInJS(destination, boundary)) - : writeChunk(destination, completeBoundaryScript3b); - boundary = writeChunkAndReturn(destination, completeBoundaryScriptEnd); - return writeBootstrap(destination, request) && boundary; -} -function flushPartiallyCompletedSegment( - request, - destination, - boundary, - segment -) { - if (2 === segment.status) return !0; - var hoistableState = boundary.contentState, - segmentID = segment.id; - if (-1 === segmentID) { - if (-1 === (segment.id = boundary.rootSegmentID)) - throw Error( - "A root segment ID must have been assigned by now. This is a bug in React." - ); - return flushSegmentContainer(request, destination, segment, hoistableState); - } - if (segmentID === boundary.rootSegmentID) - return flushSegmentContainer(request, destination, segment, hoistableState); - flushSegmentContainer(request, destination, segment, hoistableState); - boundary = request.resumableState; - request = request.renderState; - writeChunk(destination, request.startInlineScript); - writeChunk(destination, endOfStartTag); - 0 === (boundary.instructions & 1) - ? ((boundary.instructions |= 1), - writeChunk(destination, completeSegmentScript1Full)) - : writeChunk(destination, completeSegmentScript1Partial); - writeChunk(destination, request.segmentPrefix); - segmentID = segmentID.toString(16); - writeChunk(destination, segmentID); - writeChunk(destination, completeSegmentScript2); - writeChunk(destination, request.placeholderPrefix); - writeChunk(destination, segmentID); - destination = writeChunkAndReturn(destination, completeSegmentScriptEnd); - return destination; -} -var flushingPartialBoundaries = !1; -function flushCompletedQueues(request, destination) { - currentView = new Uint8Array(2048); - writtenBytes = 0; - destinationHasCapacity$1 = !0; - try { - if (!(0 < request.pendingRootTasks)) { - var i, - completedRootSegment = request.completedRootSegment; - if (null !== completedRootSegment) { - if (5 === completedRootSegment.status) return; - var completedPreambleSegments = request.completedPreambleSegments; - if (null === completedPreambleSegments) return; - flushedByteSize = request.byteSize; - var resumableState = request.resumableState, - renderState = request.renderState, - preamble = renderState.preamble, - htmlChunks = preamble.htmlChunks, - headChunks = preamble.headChunks, - i$jscomp$0; - if (htmlChunks) { - for (i$jscomp$0 = 0; i$jscomp$0 < htmlChunks.length; i$jscomp$0++) - writeChunk(destination, htmlChunks[i$jscomp$0]); - if (headChunks) - for (i$jscomp$0 = 0; i$jscomp$0 < headChunks.length; i$jscomp$0++) - writeChunk(destination, headChunks[i$jscomp$0]); - else - writeChunk(destination, startChunkForTag("head")), - writeChunk(destination, endOfStartTag); - } else if (headChunks) - for (i$jscomp$0 = 0; i$jscomp$0 < headChunks.length; i$jscomp$0++) - writeChunk(destination, headChunks[i$jscomp$0]); - var charsetChunks = renderState.charsetChunks; - for (i$jscomp$0 = 0; i$jscomp$0 < charsetChunks.length; i$jscomp$0++) - writeChunk(destination, charsetChunks[i$jscomp$0]); - charsetChunks.length = 0; - renderState.preconnects.forEach(flushResource, destination); - renderState.preconnects.clear(); - var viewportChunks = renderState.viewportChunks; - for (i$jscomp$0 = 0; i$jscomp$0 < viewportChunks.length; i$jscomp$0++) - writeChunk(destination, viewportChunks[i$jscomp$0]); - viewportChunks.length = 0; - renderState.fontPreloads.forEach(flushResource, destination); - renderState.fontPreloads.clear(); - renderState.highImagePreloads.forEach(flushResource, destination); - renderState.highImagePreloads.clear(); - currentlyFlushingRenderState = renderState; - renderState.styles.forEach(flushStylesInPreamble, destination); - currentlyFlushingRenderState = null; - var importMapChunks = renderState.importMapChunks; - for (i$jscomp$0 = 0; i$jscomp$0 < importMapChunks.length; i$jscomp$0++) - writeChunk(destination, importMapChunks[i$jscomp$0]); - importMapChunks.length = 0; - renderState.bootstrapScripts.forEach(flushResource, destination); - renderState.scripts.forEach(flushResource, destination); - renderState.scripts.clear(); - renderState.bulkPreloads.forEach(flushResource, destination); - renderState.bulkPreloads.clear(); - htmlChunks || headChunks || (resumableState.instructions |= 32); - var hoistableChunks = renderState.hoistableChunks; - for (i$jscomp$0 = 0; i$jscomp$0 < hoistableChunks.length; i$jscomp$0++) - writeChunk(destination, hoistableChunks[i$jscomp$0]); - for ( - resumableState = hoistableChunks.length = 0; - resumableState < completedPreambleSegments.length; - resumableState++ - ) { - var segments = completedPreambleSegments[resumableState]; - for (renderState = 0; renderState < segments.length; renderState++) - flushSegment(request, destination, segments[renderState], null); - } - var preamble$jscomp$0 = request.renderState.preamble, - headChunks$jscomp$0 = preamble$jscomp$0.headChunks; - (preamble$jscomp$0.htmlChunks || headChunks$jscomp$0) && - writeChunk(destination, endChunkForTag("head")); - var bodyChunks = preamble$jscomp$0.bodyChunks; - if (bodyChunks) - for ( - completedPreambleSegments = 0; - completedPreambleSegments < bodyChunks.length; - completedPreambleSegments++ - ) - writeChunk(destination, bodyChunks[completedPreambleSegments]); - flushSegment(request, destination, completedRootSegment, null); - request.completedRootSegment = null; - var renderState$jscomp$0 = request.renderState; - if ( - 0 !== request.allPendingTasks || - 0 !== request.clientRenderedBoundaries.length || - 0 !== request.completedBoundaries.length || - (null !== request.trackedPostpones && - (0 !== request.trackedPostpones.rootNodes.length || - null !== request.trackedPostpones.rootSlots)) - ) { - var resumableState$jscomp$0 = request.resumableState; - if (0 === (resumableState$jscomp$0.instructions & 64)) { - resumableState$jscomp$0.instructions |= 64; - writeChunk(destination, renderState$jscomp$0.startInlineScript); - if (0 === (resumableState$jscomp$0.instructions & 32)) { - resumableState$jscomp$0.instructions |= 32; - var shellId = "_" + resumableState$jscomp$0.idPrefix + "R_"; - writeChunk(destination, completedShellIdAttributeStart); - writeChunk(destination, escapeTextForBrowser(shellId)); - writeChunk(destination, attributeEnd); - } - writeChunk(destination, endOfStartTag); - writeChunk(destination, shellTimeRuntimeScript); - writeChunkAndReturn(destination, endInlineScript); - } - } - writeBootstrap(destination, renderState$jscomp$0); - } - var renderState$jscomp$1 = request.renderState; - completedRootSegment = 0; - var viewportChunks$jscomp$0 = renderState$jscomp$1.viewportChunks; - for ( - completedRootSegment = 0; - completedRootSegment < viewportChunks$jscomp$0.length; - completedRootSegment++ - ) - writeChunk(destination, viewportChunks$jscomp$0[completedRootSegment]); - viewportChunks$jscomp$0.length = 0; - renderState$jscomp$1.preconnects.forEach(flushResource, destination); - renderState$jscomp$1.preconnects.clear(); - renderState$jscomp$1.fontPreloads.forEach(flushResource, destination); - renderState$jscomp$1.fontPreloads.clear(); - renderState$jscomp$1.highImagePreloads.forEach( - flushResource, - destination - ); - renderState$jscomp$1.highImagePreloads.clear(); - renderState$jscomp$1.styles.forEach(preloadLateStyles, destination); - renderState$jscomp$1.scripts.forEach(flushResource, destination); - renderState$jscomp$1.scripts.clear(); - renderState$jscomp$1.bulkPreloads.forEach(flushResource, destination); - renderState$jscomp$1.bulkPreloads.clear(); - var hoistableChunks$jscomp$0 = renderState$jscomp$1.hoistableChunks; - for ( - completedRootSegment = 0; - completedRootSegment < hoistableChunks$jscomp$0.length; - completedRootSegment++ - ) - writeChunk(destination, hoistableChunks$jscomp$0[completedRootSegment]); - hoistableChunks$jscomp$0.length = 0; - var clientRenderedBoundaries = request.clientRenderedBoundaries; - for (i = 0; i < clientRenderedBoundaries.length; i++) { - var boundary = clientRenderedBoundaries[i]; - renderState$jscomp$1 = destination; - var resumableState$jscomp$1 = request.resumableState, - renderState$jscomp$2 = request.renderState, - id = boundary.rootSegmentID, - errorDigest = boundary.errorDigest; - writeChunk( - renderState$jscomp$1, - renderState$jscomp$2.startInlineScript - ); - writeChunk(renderState$jscomp$1, endOfStartTag); - 0 === (resumableState$jscomp$1.instructions & 4) - ? ((resumableState$jscomp$1.instructions |= 4), - writeChunk(renderState$jscomp$1, clientRenderScript1Full)) - : writeChunk(renderState$jscomp$1, clientRenderScript1Partial); - writeChunk(renderState$jscomp$1, renderState$jscomp$2.boundaryPrefix); - writeChunk(renderState$jscomp$1, id.toString(16)); - writeChunk(renderState$jscomp$1, clientRenderScript1A); - errorDigest && - (writeChunk( - renderState$jscomp$1, - clientRenderErrorScriptArgInterstitial - ), - writeChunk( - renderState$jscomp$1, - escapeJSStringsForInstructionScripts(errorDigest || "") - )); - var JSCompiler_inline_result = writeChunkAndReturn( - renderState$jscomp$1, - clientRenderScriptEnd - ); - if (!JSCompiler_inline_result) { - request.destination = null; - i++; - clientRenderedBoundaries.splice(0, i); - return; - } - } - clientRenderedBoundaries.splice(0, i); - var completedBoundaries = request.completedBoundaries; - for (i = 0; i < completedBoundaries.length; i++) - if ( - !flushCompletedBoundary(request, destination, completedBoundaries[i]) - ) { - request.destination = null; - i++; - completedBoundaries.splice(0, i); - return; - } - completedBoundaries.splice(0, i); - completeWriting(destination); - currentView = new Uint8Array(2048); - writtenBytes = 0; - flushingPartialBoundaries = destinationHasCapacity$1 = !0; - var partialBoundaries = request.partialBoundaries; - for (i = 0; i < partialBoundaries.length; i++) { - var boundary$70 = partialBoundaries[i]; - a: { - clientRenderedBoundaries = request; - boundary = destination; - flushedByteSize = boundary$70.byteSize; - var completedSegments = boundary$70.completedSegments; - for ( - JSCompiler_inline_result = 0; - JSCompiler_inline_result < completedSegments.length; - JSCompiler_inline_result++ - ) - if ( - !flushPartiallyCompletedSegment( - clientRenderedBoundaries, - boundary, - boundary$70, - completedSegments[JSCompiler_inline_result] - ) - ) { - JSCompiler_inline_result++; - completedSegments.splice(0, JSCompiler_inline_result); - var JSCompiler_inline_result$jscomp$0 = !1; - break a; - } - completedSegments.splice(0, JSCompiler_inline_result); - var row = boundary$70.row; - null !== row && - row.together && - 1 === boundary$70.pendingTasks && - (1 === row.pendingTasks - ? unblockSuspenseListRow( - clientRenderedBoundaries, - row, - row.hoistables - ) - : row.pendingTasks--); - JSCompiler_inline_result$jscomp$0 = writeHoistablesForBoundary( - boundary, - boundary$70.contentState, - clientRenderedBoundaries.renderState - ); - } - if (!JSCompiler_inline_result$jscomp$0) { - request.destination = null; - i++; - partialBoundaries.splice(0, i); - return; - } - } - partialBoundaries.splice(0, i); - flushingPartialBoundaries = !1; - var largeBoundaries = request.completedBoundaries; - for (i = 0; i < largeBoundaries.length; i++) - if (!flushCompletedBoundary(request, destination, largeBoundaries[i])) { - request.destination = null; - i++; - largeBoundaries.splice(0, i); - return; - } - largeBoundaries.splice(0, i); - } - } finally { - (flushingPartialBoundaries = !1), - 0 === request.allPendingTasks && - 0 === request.clientRenderedBoundaries.length && - 0 === request.completedBoundaries.length - ? ((request.flushScheduled = !1), - (i = request.resumableState), - i.hasBody && writeChunk(destination, endChunkForTag("body")), - i.hasHtml && writeChunk(destination, endChunkForTag("html")), - completeWriting(destination), - flushBuffered(destination), - (request.status = 14), - destination.end(), - (request.destination = null)) - : (completeWriting(destination), flushBuffered(destination)); - } -} -function startWork(request) { - request.flushScheduled = null !== request.destination; - scheduleMicrotask(function () { - return requestStorage.run(request, performWork, request); - }); - setImmediate(function () { - 10 === request.status && (request.status = 11); - null === request.trackedPostpones && - requestStorage.run( - request, - enqueueEarlyPreloadsAfterInitialWork, - request - ); - }); -} -function enqueueEarlyPreloadsAfterInitialWork(request) { - safelyEmitEarlyPreloads(request, 0 === request.pendingRootTasks); -} -function enqueueFlush(request) { - !1 === request.flushScheduled && - 0 === request.pingedTasks.length && - null !== request.destination && - ((request.flushScheduled = !0), - setImmediate(function () { - var destination = request.destination; - destination - ? flushCompletedQueues(request, destination) - : (request.flushScheduled = !1); - })); -} -function startFlowing(request, destination) { - if (13 === request.status) - (request.status = 14), destination.destroy(request.fatalError); - else if (14 !== request.status && null === request.destination) { - request.destination = destination; - try { - flushCompletedQueues(request, destination); - } catch (error) { - logRecoverableError(request, error, {}), fatalError(request, error); - } - } -} -function abort(request, reason) { - if (11 === request.status || 10 === request.status) request.status = 12; - try { - var abortableTasks = request.abortableTasks; - if (0 < abortableTasks.size) { - var error = - void 0 === reason - ? Error("The render was aborted by the server without a reason.") - : "object" === typeof reason && - null !== reason && - "function" === typeof reason.then - ? Error("The render was aborted by the server with a promise.") - : reason; - request.fatalError = error; - abortableTasks.forEach(function (task) { - return abortTask(task, request, error); - }); - abortableTasks.clear(); - } - null !== request.destination && - flushCompletedQueues(request, request.destination); - } catch (error$72) { - logRecoverableError(request, error$72, {}), fatalError(request, error$72); - } -} -function addToReplayParent(node, parentKeyPath, trackedPostpones) { - if (null === parentKeyPath) trackedPostpones.rootNodes.push(node); - else { - var workingMap = trackedPostpones.workingMap, - parentNode = workingMap.get(parentKeyPath); - void 0 === parentNode && - ((parentNode = [parentKeyPath[1], parentKeyPath[2], [], null]), - workingMap.set(parentKeyPath, parentNode), - addToReplayParent(parentNode, parentKeyPath[0], trackedPostpones)); - parentNode[2].push(node); - } -} -function getPostponedState(request) { - var trackedPostpones = request.trackedPostpones; - if ( - null === trackedPostpones || - (0 === trackedPostpones.rootNodes.length && - null === trackedPostpones.rootSlots) - ) - return (request.trackedPostpones = null); - if ( - null === request.completedRootSegment || - (5 !== request.completedRootSegment.status && - null !== request.completedPreambleSegments) - ) { - var nextSegmentId = request.nextSegmentId; - var replaySlots = trackedPostpones.rootSlots; - var resumableState = request.resumableState; - resumableState.bootstrapScriptContent = void 0; - resumableState.bootstrapScripts = void 0; - resumableState.bootstrapModules = void 0; - } else { - nextSegmentId = 0; - replaySlots = -1; - resumableState = request.resumableState; - var renderState = request.renderState; - resumableState.nextFormID = 0; - resumableState.hasBody = !1; - resumableState.hasHtml = !1; - resumableState.unknownResources = { font: renderState.resets.font }; - resumableState.dnsResources = renderState.resets.dns; - resumableState.connectResources = renderState.resets.connect; - resumableState.imageResources = renderState.resets.image; - resumableState.styleResources = renderState.resets.style; - resumableState.scriptResources = {}; - resumableState.moduleUnknownResources = {}; - resumableState.moduleScriptResources = {}; - resumableState.instructions = 0; - } - return { - nextSegmentId: nextSegmentId, - rootFormatContext: request.rootFormatContext, - progressiveChunkSize: request.progressiveChunkSize, - resumableState: request.resumableState, - replayNodes: trackedPostpones.rootNodes, - replaySlots: replaySlots - }; -} -function ensureCorrectIsomorphicReactVersion() { - var isomorphicReactPackageVersion = React.version; - if ("19.2.3" !== isomorphicReactPackageVersion) - throw Error( - 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + - (isomorphicReactPackageVersion + - "\n - react-dom: 19.2.3\nLearn more: https://react.dev/warnings/version-mismatch") - ); -} -ensureCorrectIsomorphicReactVersion(); -function createDrainHandler(destination, request) { - return function () { - return startFlowing(request, destination); - }; -} -function createCancelHandler(request, reason) { - return function () { - request.destination = null; - abort(request, Error(reason)); - }; -} -function createRequestImpl(children, options) { - var resumableState = createResumableState( - options ? options.identifierPrefix : void 0, - options ? options.unstable_externalRuntimeSrc : void 0, - options ? options.bootstrapScriptContent : void 0, - options ? options.bootstrapScripts : void 0, - options ? options.bootstrapModules : void 0 - ); - return createRequest( - children, - resumableState, - createRenderState( - resumableState, - options ? options.nonce : void 0, - options ? options.unstable_externalRuntimeSrc : void 0, - options ? options.importMap : void 0, - options ? options.onHeaders : void 0, - options ? options.maxHeadersLength : void 0 - ), - createRootFormatContext(options ? options.namespaceURI : void 0), - options ? options.progressiveChunkSize : void 0, - options ? options.onError : void 0, - options ? options.onAllReady : void 0, - options ? options.onShellReady : void 0, - options ? options.onShellError : void 0, - void 0, - options ? options.onPostpone : void 0, - options ? options.formState : void 0 - ); -} -function createFakeWritableFromReadableStreamController$1(controller) { - return { - write: function (chunk) { - "string" === typeof chunk && (chunk = textEncoder.encode(chunk)); - controller.enqueue(chunk); - return !0; - }, - end: function () { - controller.close(); - }, - destroy: function (error) { - "function" === typeof controller.error - ? controller.error(error) - : controller.close(); - } - }; -} -function resumeRequestImpl(children, postponedState, options) { - return resumeRequest( - children, - postponedState, - createRenderState( - postponedState.resumableState, - options ? options.nonce : void 0, - void 0, - void 0, - void 0, - void 0 - ), - options ? options.onError : void 0, - options ? options.onAllReady : void 0, - options ? options.onShellReady : void 0, - options ? options.onShellError : void 0, - void 0, - options ? options.onPostpone : void 0 - ); -} -ensureCorrectIsomorphicReactVersion(); -function createFakeWritableFromReadableStreamController(controller) { - return { - write: function (chunk) { - "string" === typeof chunk && (chunk = textEncoder.encode(chunk)); - controller.enqueue(chunk); - return !0; - }, - end: function () { - controller.close(); - }, - destroy: function (error) { - "function" === typeof controller.error - ? controller.error(error) - : controller.close(); - } - }; -} -function createFakeWritableFromReadable(readable) { - return { - write: function (chunk) { - return readable.push(chunk); - }, - end: function () { - readable.push(null); - }, - destroy: function (error) { - readable.destroy(error); - } - }; -} -exports.prerender = function (children, options) { - return new Promise(function (resolve, reject) { - var onHeaders = options ? options.onHeaders : void 0, - onHeadersImpl; - onHeaders && - (onHeadersImpl = function (headersDescriptor) { - onHeaders(new Headers(headersDescriptor)); - }); - var resources = createResumableState( - options ? options.identifierPrefix : void 0, - options ? options.unstable_externalRuntimeSrc : void 0, - options ? options.bootstrapScriptContent : void 0, - options ? options.bootstrapScripts : void 0, - options ? options.bootstrapModules : void 0 - ), - request = createPrerenderRequest( - children, - resources, - createRenderState( - resources, - void 0, - options ? options.unstable_externalRuntimeSrc : void 0, - options ? options.importMap : void 0, - onHeadersImpl, - options ? options.maxHeadersLength : void 0 - ), - createRootFormatContext(options ? options.namespaceURI : void 0), - options ? options.progressiveChunkSize : void 0, - options ? options.onError : void 0, - function () { - var writable, - stream = new ReadableStream( - { - type: "bytes", - start: function (controller) { - writable = - createFakeWritableFromReadableStreamController(controller); - }, - pull: function () { - startFlowing(request, writable); - }, - cancel: function (reason) { - request.destination = null; - abort(request, reason); - } - }, - { highWaterMark: 0 } - ); - stream = { postponed: getPostponedState(request), prelude: stream }; - resolve(stream); - }, - void 0, - void 0, - reject, - options ? options.onPostpone : void 0 - ); - if (options && options.signal) { - var signal = options.signal; - if (signal.aborted) abort(request, signal.reason); - else { - var listener = function () { - abort(request, signal.reason); - signal.removeEventListener("abort", listener); - }; - signal.addEventListener("abort", listener); - } - } - startWork(request); - }); -}; -exports.prerenderToNodeStream = function (children, options) { - return new Promise(function (resolve, reject) { - var resumableState = createResumableState( - options ? options.identifierPrefix : void 0, - options ? options.unstable_externalRuntimeSrc : void 0, - options ? options.bootstrapScriptContent : void 0, - options ? options.bootstrapScripts : void 0, - options ? options.bootstrapModules : void 0 - ), - request = createPrerenderRequest( - children, - resumableState, - createRenderState( - resumableState, - void 0, - options ? options.unstable_externalRuntimeSrc : void 0, - options ? options.importMap : void 0, - options ? options.onHeaders : void 0, - options ? options.maxHeadersLength : void 0 - ), - createRootFormatContext(options ? options.namespaceURI : void 0), - options ? options.progressiveChunkSize : void 0, - options ? options.onError : void 0, - function () { - var readable = new stream.Readable({ - read: function () { - startFlowing(request, writable); - } - }), - writable = createFakeWritableFromReadable(readable); - readable = { - postponed: getPostponedState(request), - prelude: readable - }; - resolve(readable); - }, - void 0, - void 0, - reject, - options ? options.onPostpone : void 0 - ); - if (options && options.signal) { - var signal = options.signal; - if (signal.aborted) abort(request, signal.reason); - else { - var listener = function () { - abort(request, signal.reason); - signal.removeEventListener("abort", listener); - }; - signal.addEventListener("abort", listener); - } - } - startWork(request); - }); -}; -exports.renderToPipeableStream = function (children, options) { - var request = createRequestImpl(children, options), - hasStartedFlowing = !1; - startWork(request); - return { - pipe: function (destination) { - if (hasStartedFlowing) - throw Error( - "React currently only supports piping to one writable stream." - ); - hasStartedFlowing = !0; - safelyEmitEarlyPreloads( - request, - null === request.trackedPostpones - ? 0 === request.pendingRootTasks - : null === request.completedRootSegment - ? 0 === request.pendingRootTasks - : 5 !== request.completedRootSegment.status - ); - startFlowing(request, destination); - destination.on("drain", createDrainHandler(destination, request)); - destination.on( - "error", - createCancelHandler( - request, - "The destination stream errored while writing data." - ) - ); - destination.on( - "close", - createCancelHandler(request, "The destination stream closed early.") - ); - return destination; - }, - abort: function (reason) { - abort(request, reason); - } - }; -}; -exports.renderToReadableStream = function (children, options) { - return new Promise(function (resolve, reject) { - var onFatalError, - onAllReady, - allReady = new Promise(function (res, rej) { - onAllReady = res; - onFatalError = rej; - }), - onHeaders = options ? options.onHeaders : void 0, - onHeadersImpl; - onHeaders && - (onHeadersImpl = function (headersDescriptor) { - onHeaders(new Headers(headersDescriptor)); - }); - var resumableState = createResumableState( - options ? options.identifierPrefix : void 0, - options ? options.unstable_externalRuntimeSrc : void 0, - options ? options.bootstrapScriptContent : void 0, - options ? options.bootstrapScripts : void 0, - options ? options.bootstrapModules : void 0 - ), - request = createRequest( - children, - resumableState, - createRenderState( - resumableState, - options ? options.nonce : void 0, - options ? options.unstable_externalRuntimeSrc : void 0, - options ? options.importMap : void 0, - onHeadersImpl, - options ? options.maxHeadersLength : void 0 - ), - createRootFormatContext(options ? options.namespaceURI : void 0), - options ? options.progressiveChunkSize : void 0, - options ? options.onError : void 0, - onAllReady, - function () { - var writable, - stream = new ReadableStream( - { - type: "bytes", - start: function (controller) { - writable = - createFakeWritableFromReadableStreamController$1( - controller - ); - }, - pull: function () { - startFlowing(request, writable); - }, - cancel: function (reason) { - request.destination = null; - abort(request, reason); - } - }, - { highWaterMark: 0 } - ); - stream.allReady = allReady; - resolve(stream); - }, - function (error) { - allReady.catch(function () {}); - reject(error); - }, - onFatalError, - options ? options.onPostpone : void 0, - options ? options.formState : void 0 - ); - if (options && options.signal) { - var signal = options.signal; - if (signal.aborted) abort(request, signal.reason); - else { - var listener = function () { - abort(request, signal.reason); - signal.removeEventListener("abort", listener); - }; - signal.addEventListener("abort", listener); - } - } - startWork(request); - }); -}; -exports.resume = function (children, postponedState, options) { - return new Promise(function (resolve, reject) { - var onFatalError, - onAllReady, - allReady = new Promise(function (res, rej) { - onAllReady = res; - onFatalError = rej; - }), - request = resumeRequest( - children, - postponedState, - createRenderState( - postponedState.resumableState, - options ? options.nonce : void 0, - void 0, - void 0, - void 0, - void 0 - ), - options ? options.onError : void 0, - onAllReady, - function () { - var writable, - stream = new ReadableStream( - { - type: "bytes", - start: function (controller) { - writable = - createFakeWritableFromReadableStreamController$1( - controller - ); - }, - pull: function () { - startFlowing(request, writable); - }, - cancel: function (reason) { - request.destination = null; - abort(request, reason); - } - }, - { highWaterMark: 0 } - ); - stream.allReady = allReady; - resolve(stream); - }, - function (error) { - allReady.catch(function () {}); - reject(error); - }, - onFatalError, - options ? options.onPostpone : void 0 - ); - if (options && options.signal) { - var signal = options.signal; - if (signal.aborted) abort(request, signal.reason); - else { - var listener = function () { - abort(request, signal.reason); - signal.removeEventListener("abort", listener); - }; - signal.addEventListener("abort", listener); - } - } - startWork(request); - }); -}; -exports.resumeAndPrerender = function (children, postponedState, options) { - return new Promise(function (resolve, reject) { - var request = resumeAndPrerenderRequest( - children, - postponedState, - createRenderState( - postponedState.resumableState, - void 0, - void 0, - void 0, - void 0, - void 0 - ), - options ? options.onError : void 0, - function () { - var writable, - stream = new ReadableStream( - { - type: "bytes", - start: function (controller) { - writable = - createFakeWritableFromReadableStreamController(controller); - }, - pull: function () { - startFlowing(request, writable); - }, - cancel: function (reason) { - request.destination = null; - abort(request, reason); - } - }, - { highWaterMark: 0 } - ); - stream = { postponed: getPostponedState(request), prelude: stream }; - resolve(stream); - }, - void 0, - void 0, - reject, - options ? options.onPostpone : void 0 - ); - if (options && options.signal) { - var signal = options.signal; - if (signal.aborted) abort(request, signal.reason); - else { - var listener = function () { - abort(request, signal.reason); - signal.removeEventListener("abort", listener); - }; - signal.addEventListener("abort", listener); - } - } - startWork(request); - }); -}; -exports.resumeAndPrerenderToNodeStream = function ( - children, - postponedState, - options -) { - return new Promise(function (resolve, reject) { - var request = resumeAndPrerenderRequest( - children, - postponedState, - createRenderState( - postponedState.resumableState, - void 0, - void 0, - void 0, - void 0, - void 0 - ), - options ? options.onError : void 0, - function () { - var readable = new stream.Readable({ - read: function () { - startFlowing(request, writable); - } - }), - writable = createFakeWritableFromReadable(readable); - readable = { postponed: getPostponedState(request), prelude: readable }; - resolve(readable); - }, - void 0, - void 0, - reject, - options ? options.onPostpone : void 0 - ); - if (options && options.signal) { - var signal = options.signal; - if (signal.aborted) abort(request, signal.reason); - else { - var listener = function () { - abort(request, signal.reason); - signal.removeEventListener("abort", listener); - }; - signal.addEventListener("abort", listener); - } - } - startWork(request); - }); -}; -exports.resumeToPipeableStream = function (children, postponedState, options) { - var request = resumeRequestImpl(children, postponedState, options), - hasStartedFlowing = !1; - startWork(request); - return { - pipe: function (destination) { - if (hasStartedFlowing) - throw Error( - "React currently only supports piping to one writable stream." - ); - hasStartedFlowing = !0; - startFlowing(request, destination); - destination.on("drain", createDrainHandler(destination, request)); - destination.on( - "error", - createCancelHandler( - request, - "The destination stream errored while writing data." - ) - ); - destination.on( - "close", - createCancelHandler(request, "The destination stream closed early.") - ); - return destination; - }, - abort: function (reason) { - abort(request, reason); - } - }; -}; -exports.version = "19.2.3"; - - -/***/ }, - -/***/ 3886 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ VQ: () => (/* binding */ DocsPreferredVersionContextProvider), -/* harmony export */ g1: () => (/* binding */ useDocsPreferredVersion) -/* harmony export */ }); -/* unused harmony export useDocsPreferredVersionByPluginId */ -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7712); -/* harmony import */ var _docusaurus_constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7065); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6342); -/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(9466); -/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(9532); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */const storageKey=pluginId=>`docs-preferred-version-${pluginId}`;const DocsPreferredVersionStorage={save:(pluginId,persistence,versionName)=>{(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_4__/* .createStorageSlot */ .Wf)(storageKey(pluginId),{persistence}).set(versionName);},read:(pluginId,persistence)=>(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_4__/* .createStorageSlot */ .Wf)(storageKey(pluginId),{persistence}).get(),clear:(pluginId,persistence)=>{(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_4__/* .createStorageSlot */ .Wf)(storageKey(pluginId),{persistence}).del();}};/** - * Initial state is always null as we can't read local storage from node SSR - */const getInitialState=pluginIds=>Object.fromEntries(pluginIds.map(id=>[id,{preferredVersionName:null}]));/** - * Read storage for all docs plugins, assigning each doc plugin a preferred - * version (if found) - */function readStorageState({pluginIds,versionPersistence,allDocsData}){/** - * The storage value we read might be stale, and belong to a version that does - * not exist in the site anymore. In such case, we remove the storage value to - * avoid downstream errors. - */function restorePluginState(pluginId){const preferredVersionNameUnsafe=DocsPreferredVersionStorage.read(pluginId,versionPersistence);const pluginData=allDocsData[pluginId];const versionExists=pluginData.versions.some(version=>version.name===preferredVersionNameUnsafe);if(versionExists){return{preferredVersionName:preferredVersionNameUnsafe};}DocsPreferredVersionStorage.clear(pluginId,versionPersistence);return{preferredVersionName:null};}return Object.fromEntries(pluginIds.map(id=>[id,restorePluginState(id)]));}function useVersionPersistence(){return (0,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__/* .useThemeConfig */ .p)().docs.versionPersistence;}const Context=/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(null);function useContextValue(){const allDocsData=(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_1__/* .useAllDocsData */ .Gy)();const versionPersistence=useVersionPersistence();const pluginIds=(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>Object.keys(allDocsData),[allDocsData]);// Initial state is empty, as we can't read browser storage in node/SSR -const[state,setState]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(()=>getInitialState(pluginIds));// On mount, we set the state read from browser storage -(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{setState(readStorageState({allDocsData,versionPersistence,pluginIds}));},[allDocsData,versionPersistence,pluginIds]);// The API that we expose to consumer hooks (memo for constant object) -const api=(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>{function savePreferredVersion(pluginId,versionName){DocsPreferredVersionStorage.save(pluginId,versionPersistence,versionName);setState(s=>({...s,[pluginId]:{preferredVersionName:versionName}}));}return{savePreferredVersion};},[versionPersistence]);return[state,api];}function DocsPreferredVersionContextProviderUnsafe({children}){const value=useContextValue();return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(Context.Provider,{value:value,children:children});}/** - * This is a maybe-layer. If the docs plugin is not enabled, this provider is a - * simple pass-through. - */function DocsPreferredVersionContextProvider({children}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(DocsPreferredVersionContextProviderUnsafe,{children:children});}function useDocsPreferredVersionContext(){const value=(0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(Context);if(!value){throw new _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_5__/* .ReactContextError */ .dV('DocsPreferredVersionContextProvider');}return value;}/** - * Returns a read-write interface to a plugin's preferred version. The - * "preferred version" is defined as the last version that the user visited. - * For example, if a user is using v3, even when v4 is later published, the user - * would still be browsing v3 docs when she opens the website next time. Note, - * the `preferredVersion` attribute will always be `null` before mount. - */function useDocsPreferredVersion(pluginId=_docusaurus_constants__WEBPACK_IMPORTED_MODULE_2__/* .DEFAULT_PLUGIN_ID */ .W){const docsData=(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_1__/* .useDocsData */ .ht)(pluginId);const[state,api]=useDocsPreferredVersionContext();const{preferredVersionName}=state[pluginId];const preferredVersion=docsData.versions.find(version=>version.name===preferredVersionName)??null;const savePreferredVersionName=(0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(versionName=>{api.savePreferredVersion(pluginId,versionName);},[api,pluginId]);return{preferredVersion,savePreferredVersionName};}function useDocsPreferredVersionByPluginId(){const allDocsData=useAllDocsData();const[state]=useDocsPreferredVersionContext();function getPluginIdPreferredVersion(pluginId){const docsData=allDocsData[pluginId];const{preferredVersionName}=state[pluginId];return docsData.versions.find(version=>version.name===preferredVersionName)??null;}const pluginIds=Object.keys(allDocsData);return Object.fromEntries(pluginIds.map(id=>[id,getPluginIdPreferredVersion(id)]));} - -/***/ }, - -/***/ 3888 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ DocSidebarNavbarItem) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7712); -/* harmony import */ var _docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6972); -/* harmony import */ var _theme_NavbarItem_DefaultNavbarItem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(3828); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function DocSidebarNavbarItem({sidebarId,label,docsPluginId,...props}){const{activeDoc}=(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_1__/* .useActiveDocContext */ .zK)(docsPluginId);const sidebarLink=(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_2__/* .useLayoutDocsSidebar */ .fW)(sidebarId,docsPluginId).link;if(!sidebarLink){throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${sidebarId}" doesn't have anything to be linked to.`);}return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_theme_NavbarItem_DefaultNavbarItem__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A,{exact:true,...props,isActive:()=>activeDoc?.sidebar===sidebarId,label:label??sidebarLink.label,to:sidebarLink.path});} - -/***/ }, - -/***/ 3928 -(module) { - -// Exports -module.exports = { - "breadcrumbsContainer": `breadcrumbsContainer_Z_bl` -}; - - -/***/ }, - -/***/ 3956 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ DocBreadcrumbsStructuredData) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_Head__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5260); -/* harmony import */ var _docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(3336); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function DocBreadcrumbsStructuredData(props){const structuredData=(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_2__/* .useBreadcrumbsStructuredData */ .D)({breadcrumbs:props.breadcrumbs});return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_docusaurus_Head__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A,{children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("script",{type:"application/ld+json",children:JSON.stringify(structuredData)})});} - -/***/ }, - -/***/ 3982 -() { - - - -/***/ }, - -/***/ 3989 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ EditMetaRow) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _theme_EditThisPage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1697); -/* harmony import */ var _theme_LastUpdated__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9421); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(901); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function EditMetaRow({className,editUrl,lastUpdatedAt,lastUpdatedBy}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("div",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('row',className),children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("div",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('col',(_styles_module_css__WEBPACK_IMPORTED_MODULE_4___default().noPrint)),children:editUrl&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_theme_EditThisPage__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{editUrl:editUrl})}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("div",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('col',(_styles_module_css__WEBPACK_IMPORTED_MODULE_4___default().lastUpdated)),children:(lastUpdatedAt||lastUpdatedBy)&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_theme_LastUpdated__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A,{lastUpdatedAt:lastUpdatedAt,lastUpdatedBy:lastUpdatedBy})})]});} - -/***/ }, - -/***/ 4054 -(module) { - -"use strict"; -module.exports = /*#__PURE__*/JSON.parse('{"/rob/CmdForge/-805":{"__comp":"5e95c892","__context":{"plugin":"aba21aa0"}},"/rob/CmdForge/-327":{"__comp":"a7bd4aaa","__props":"3fbf7384"},"/rob/CmdForge/-4b4":{"__comp":"a94703ab"},"/rob/CmdForge/architecture/-66c":{"__comp":"17896441","content":"5281b7a2"},"/rob/CmdForge/category/reference/-d31":{"__comp":"14eb3368","__props":"28c758de"},"/rob/CmdForge/goals/-119":{"__comp":"17896441","content":"5eebbccf"},"/rob/CmdForge/ideas-and-exploration/-4fe":{"__comp":"17896441","content":"e719f3dc"},"/rob/CmdForge/milestones/-979":{"__comp":"17896441","content":"817f7194"},"/rob/CmdForge/reference/collections/-3ba":{"__comp":"17896441","content":"263e9506"},"/rob/CmdForge/reference/design/-af3":{"__comp":"17896441","content":"9bb76ab4"},"/rob/CmdForge/reference/examples/-211":{"__comp":"17896441","content":"de715384"},"/rob/CmdForge/reference/meta-tools/-541":{"__comp":"17896441","content":"0330220f"},"/rob/CmdForge/reference/providers/-94c":{"__comp":"17896441","content":"6704ba13"},"/rob/CmdForge/reference/registry-spec/-424":{"__comp":"17896441","content":"387720e6"},"/rob/CmdForge/reference/web-ui-spec/-12b":{"__comp":"17896441","content":"edbf8f3a"},"/rob/CmdForge/todos/-fa8":{"__comp":"17896441","content":"1db78e9f"},"/rob/CmdForge/-cc6":{"__comp":"17896441","content":"1db64337"}}'); - -/***/ }, - -/***/ 4061 -(module) { - -// Exports -module.exports = { - "tocMobile": `tocMobile_ITEo` -}; - - -/***/ }, - -/***/ 4084 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ AE: () => (/* binding */ UnlistedMetadata), -/* harmony export */ Rc: () => (/* binding */ UnlistedBannerTitle), -/* harmony export */ TT: () => (/* binding */ DraftBannerMessage), -/* harmony export */ Uh: () => (/* binding */ UnlistedBannerMessage), -/* harmony export */ Yh: () => (/* binding */ DraftBannerTitle) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_Translate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(986); -/* harmony import */ var _docusaurus_Head__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5260); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function UnlistedBannerTitle(){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A,{id:"theme.contentVisibility.unlistedBanner.title",description:"The unlisted content banner title",children:"Unlisted page"});}function UnlistedBannerMessage(){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A,{id:"theme.contentVisibility.unlistedBanner.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."});}// TODO Docusaurus v4 breaking change (since it's v3 public theme-common API :/) -// Move this to theme/ContentVisibility/Unlisted -function UnlistedMetadata(){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_docusaurus_Head__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("meta",{name:"robots",content:"noindex, nofollow"})});}function DraftBannerTitle(){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A,{id:"theme.contentVisibility.draftBanner.title",description:"The draft content banner title",children:"Draft page"});}function DraftBannerMessage(){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A,{id:"theme.contentVisibility.draftBanner.message",description:"The draft content banner message",children:"This page is a draft. It will only be visible in dev and be excluded from the production build."});} - -/***/ }, - -/***/ 4088 -(module) { - -// Exports -module.exports = { - "tags": `tags_jXut`, - "tag": `tag_QGVx` -}; - - -/***/ }, - -/***/ 4115 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ IconSuccess) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function IconSuccess(props){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("svg",{viewBox:"0 0 24 24",...props,children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})});} - -/***/ }, - -/***/ 4146 -(module, __unused_webpack_exports, __webpack_require__) { - -"use strict"; - - -var reactIs = __webpack_require__(4363); - -/** - * Copyright 2015, Yahoo! Inc. - * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -var REACT_STATICS = { - childContextTypes: true, - contextType: true, - contextTypes: true, - defaultProps: true, - displayName: true, - getDefaultProps: true, - getDerivedStateFromError: true, - getDerivedStateFromProps: true, - mixins: true, - propTypes: true, - type: true -}; -var KNOWN_STATICS = { - name: true, - length: true, - prototype: true, - caller: true, - callee: true, - arguments: true, - arity: true -}; -var FORWARD_REF_STATICS = { - '$$typeof': true, - render: true, - defaultProps: true, - displayName: true, - propTypes: true -}; -var MEMO_STATICS = { - '$$typeof': true, - compare: true, - defaultProps: true, - displayName: true, - propTypes: true, - type: true -}; -var TYPE_STATICS = {}; -TYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS; -TYPE_STATICS[reactIs.Memo] = MEMO_STATICS; - -function getStatics(component) { - // React v16.11 and below - if (reactIs.isMemo(component)) { - return MEMO_STATICS; - } // React v16.12 and above - - - return TYPE_STATICS[component['$$typeof']] || REACT_STATICS; -} - -var defineProperty = Object.defineProperty; -var getOwnPropertyNames = Object.getOwnPropertyNames; -var getOwnPropertySymbols = Object.getOwnPropertySymbols; -var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; -var getPrototypeOf = Object.getPrototypeOf; -var objectPrototype = Object.prototype; -function hoistNonReactStatics(targetComponent, sourceComponent, blacklist) { - if (typeof sourceComponent !== 'string') { - // don't hoist over string (html) components - if (objectPrototype) { - var inheritedComponent = getPrototypeOf(sourceComponent); - - if (inheritedComponent && inheritedComponent !== objectPrototype) { - hoistNonReactStatics(targetComponent, inheritedComponent, blacklist); - } - } - - var keys = getOwnPropertyNames(sourceComponent); - - if (getOwnPropertySymbols) { - keys = keys.concat(getOwnPropertySymbols(sourceComponent)); - } - - var targetStatics = getStatics(targetComponent); - var sourceStatics = getStatics(sourceComponent); - - for (var i = 0; i < keys.length; ++i) { - var key = keys[i]; - - if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) { - var descriptor = getOwnPropertyDescriptor(sourceComponent, key); - - try { - // Avoid failures from read-only properties - defineProperty(targetComponent, key, descriptor); - } catch (e) {} - } - } - } - - return targetComponent; -} - -module.exports = hoistNonReactStatics; - - -/***/ }, - -/***/ 4157 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ DocItemMetadata) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5500); -/* harmony import */ var _docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(542); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function DocItemMetadata(){const{metadata,frontMatter,assets}=(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_2__/* .useDoc */ .u)();return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_1__/* .PageMetadata */ .be,{title:metadata.title,description:metadata.description,keywords:frontMatter.keywords,image:assets.image??frontMatter.image});} - -/***/ }, - -/***/ 4164 -(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* unused harmony export clsx */ -function r(e){var t,f,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t (/* binding */ MDXPre) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function MDXPre(props){// With MDX 2, this element is only used for fenced code blocks -// It always receives a MDXComponents/Code as children -return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.Fragment,{children:props.children});} - -/***/ }, - -/***/ 4170 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ IconLanguage) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function IconLanguage({width=20,height=20,...props}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("svg",{viewBox:"0 0 24 24",width:width,height:height,"aria-hidden":true,...props,children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"})});} - -/***/ }, - -/***/ 4180 -(module) { - -"use strict"; -module.exports = /*#__PURE__*/JSON.parse('{"N":"localStorage","M":""}'); - -/***/ }, - -/***/ 4194 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ MDXLi) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_useBrokenLinks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2521); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1840); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function MDXLi(props){// MDX Footnotes have ids such as
  • -(0,_docusaurus_useBrokenLinks__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)().collectAnchor(props.id);const anchorTargetClassName=(0,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__/* .useAnchorTargetClassName */ .v)(props.id);return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("li",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(anchorTargetClassName,props.className),...props});} - -/***/ }, - -/***/ 4195 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ G: () => (/* binding */ interpolate) -/* harmony export */ }); -/* unused harmony export default */ -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function interpolate(text,values){// eslint-disable-next-line prefer-named-capture-group -const segments=text.split(/(\{\w+\})/).map((seg,index)=>{// Odd indices (1, 3, 5...) of the segments are (potentially) interpolatable -if(index%2===1){const value=values?.[seg.slice(1,-1)];if(value!==undefined){return value;}// No match: add warning? There's no way to "escape" interpolation though -}return seg;});if(segments.some(seg=>/*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.isValidElement)(seg))){return segments.map((seg,index)=>/*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.isValidElement)(seg)?/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.cloneElement(seg,{key:index}):seg).filter(seg=>seg!=='');}return segments.join('');}function Interpolate({children,values}){if(typeof children!=='string'){throw new Error(`The Docusaurus component only accept simple string values. Received: ${/*#__PURE__*/isValidElement(children)?'React element':typeof children}`);}return/*#__PURE__*/_jsx(_Fragment,{children:interpolate(children,values)});} - -/***/ }, - -/***/ 4259 -(module) { - -// Exports -module.exports = { - "wordWrapButtonIcon": `wordWrapButtonIcon_b1P5`, - "wordWrapButtonEnabled": `wordWrapButtonEnabled_uzNF` -}; - - -/***/ }, - -/***/ 4267 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ DocVersionBadge) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(986); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7559); -/* harmony import */ var _docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(3025); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function DocVersionBadge({className}){const versionMetadata=(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_4__/* .useDocsVersion */ .r)();if(versionMetadata.badge){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("span",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(className,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__/* .ThemeClassNames */ .G.docs.docVersionBadge,'badge badge--secondary'),children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{id:"theme.docs.versionBadge.label",values:{versionLabel:versionMetadata.label},children:'Version: {versionLabel}'})});}return null;} - -/***/ }, - -/***/ 4289 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ NavbarSearch) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7921); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function NavbarSearch({children,className}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("div",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(className,(_styles_module_css__WEBPACK_IMPORTED_MODULE_2___default().navbarSearchContainer)),children:children});} - -/***/ }, - -/***/ 4291 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ M$: () => (/* binding */ getPrismCssVariables), -/* harmony export */ Ph: () => (/* binding */ useCodeBlockContext), -/* harmony export */ l8: () => (/* binding */ CodeBlockContextProvider), -/* harmony export */ mU: () => (/* binding */ createCodeBlockMetadata) -/* harmony export */ }); -/* unused harmony exports parseCodeBlockTitle, getLineNumbersStart, containsLineNumbers, parseLines, parseClassNameLanguage */ -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var parse_numeric_range__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(8426); -/* harmony import */ var parse_numeric_range__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(parse_numeric_range__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _reactUtils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9532); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */const codeBlockTitleRegex=/title=(?["'])(?.*?)\1/;const metastringLinesRangeRegex=/\{(?<range>[\d,-]+)\}/;// Supported types of highlight comments -const popularCommentPatterns={js:{start:'\\/\\/',end:''},jsBlock:{start:'\\/\\*',end:'\\*\\/'},jsx:{start:'\\{\\s*\\/\\*',end:'\\*\\/\\s*\\}'},bash:{start:'#',end:''},html:{start:'<!--',end:'-->'}};const commentPatterns={...popularCommentPatterns,// shallow copy is sufficient -// minor comment styles -lua:{start:'--',end:''},wasm:{start:'\\;\\;',end:''},tex:{start:'%',end:''},vb:{start:"['‘’]",end:''},vbnet:{start:"(?:_\\s*)?['‘’]",end:''},// Visual Studio 2019 or later -rem:{start:'[Rr][Ee][Mm]\\b',end:''},f90:{start:'!',end:''},// Free format only -ml:{start:'\\(\\*',end:'\\*\\)'},cobol:{start:'\\*>',end:''}// Free format only -};const popularCommentTypes=Object.keys(popularCommentPatterns);function getCommentPattern(languages,magicCommentDirectives){// To be more reliable, the opening and closing comment must match -const commentPattern=languages.map(lang=>{const{start,end}=commentPatterns[lang];return`(?:${start}\\s*(${magicCommentDirectives.flatMap(d=>[d.line,d.block?.start,d.block?.end].filter(Boolean)).join('|')})\\s*${end})`;}).join('|');// White space is allowed, but otherwise it should be on it's own line -return new RegExp(`^\\s*(?:${commentPattern})\\s*$`);}/** - * Select comment styles based on language - */function getAllMagicCommentDirectiveStyles(lang,magicCommentDirectives){switch(lang){case'js':case'javascript':case'ts':case'typescript':return getCommentPattern(['js','jsBlock'],magicCommentDirectives);case'jsx':case'tsx':return getCommentPattern(['js','jsBlock','jsx'],magicCommentDirectives);case'html':return getCommentPattern(['js','jsBlock','html'],magicCommentDirectives);case'python':case'py':case'bash':return getCommentPattern(['bash'],magicCommentDirectives);case'markdown':case'md':// Text uses HTML, front matter uses bash -return getCommentPattern(['html','jsx','bash'],magicCommentDirectives);case'tex':case'latex':case'matlab':return getCommentPattern(['tex'],magicCommentDirectives);case'lua':case'haskell':return getCommentPattern(['lua'],magicCommentDirectives);case'sql':return getCommentPattern(['lua','jsBlock'],magicCommentDirectives);case'wasm':return getCommentPattern(['wasm'],magicCommentDirectives);case'vb':case'vba':case'visual-basic':return getCommentPattern(['vb','rem'],magicCommentDirectives);case'vbnet':return getCommentPattern(['vbnet','rem'],magicCommentDirectives);case'batch':return getCommentPattern(['rem'],magicCommentDirectives);case'basic':// https://github.com/PrismJS/prism/blob/master/components/prism-basic.js#L3 -return getCommentPattern(['rem','f90'],magicCommentDirectives);case'fsharp':return getCommentPattern(['js','ml'],magicCommentDirectives);case'ocaml':case'sml':return getCommentPattern(['ml'],magicCommentDirectives);case'fortran':return getCommentPattern(['f90'],magicCommentDirectives);case'cobol':return getCommentPattern(['cobol'],magicCommentDirectives);default:// All popular comment types -return getCommentPattern(popularCommentTypes,magicCommentDirectives);}}function parseCodeBlockTitle(metastring){return metastring?.match(codeBlockTitleRegex)?.groups.title??'';}function getMetaLineNumbersStart(metastring){const showLineNumbersMeta=metastring?.split(' ').find(str=>str.startsWith('showLineNumbers'));if(showLineNumbersMeta){if(showLineNumbersMeta.startsWith('showLineNumbers=')){const value=showLineNumbersMeta.replace('showLineNumbers=','');return parseInt(value,10);}return 1;}return undefined;}function getLineNumbersStart({showLineNumbers,metastring}){const defaultStart=1;if(typeof showLineNumbers==='boolean'){return showLineNumbers?defaultStart:undefined;}if(typeof showLineNumbers==='number'){return showLineNumbers;}return getMetaLineNumbersStart(metastring);}// TODO Docusaurus v4: remove, only kept for internal retro-compatibility -// See https://github.com/facebook/docusaurus/pull/11153 -function containsLineNumbers(metastring){return Boolean(metastring?.includes('showLineNumbers'));}function parseCodeLinesFromMetastring(code,{metastring,magicComments}){// Highlighted lines specified in props: don't parse the content -if(metastring&&metastringLinesRangeRegex.test(metastring)){const linesRange=metastring.match(metastringLinesRangeRegex).groups.range;if(magicComments.length===0){throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${metastring}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);}const metastringRangeClassName=magicComments[0].className;const lines=parse_numeric_range__WEBPACK_IMPORTED_MODULE_2___default()(linesRange).filter(n=>n>0).map(n=>[n-1,[metastringRangeClassName]]);return{lineClassNames:Object.fromEntries(lines),code};}return null;}function parseCodeLinesFromContent(code,params){const{language,magicComments}=params;if(language===undefined){return{lineClassNames:{},code};}const directiveRegex=getAllMagicCommentDirectiveStyles(language,magicComments);// Go through line by line -const lines=code.split(/\r?\n/);const blocks=Object.fromEntries(magicComments.map(d=>[d.className,{start:0,range:''}]));const lineToClassName=Object.fromEntries(magicComments.filter(d=>d.line).map(({className,line})=>[line,className]));const blockStartToClassName=Object.fromEntries(magicComments.filter(d=>d.block).map(({className,block})=>[block.start,className]));const blockEndToClassName=Object.fromEntries(magicComments.filter(d=>d.block).map(({className,block})=>[block.end,className]));for(let lineNumber=0;lineNumber<lines.length;){const line=lines[lineNumber];const match=line.match(directiveRegex);if(!match){// Lines without directives are unchanged -lineNumber+=1;continue;}const directive=match.slice(1).find(item=>item!==undefined);if(lineToClassName[directive]){blocks[lineToClassName[directive]].range+=`${lineNumber},`;}else if(blockStartToClassName[directive]){blocks[blockStartToClassName[directive]].start=lineNumber;}else if(blockEndToClassName[directive]){blocks[blockEndToClassName[directive]].range+=`${blocks[blockEndToClassName[directive]].start}-${lineNumber-1},`;}lines.splice(lineNumber,1);}const lineClassNames={};Object.entries(blocks).forEach(([className,{range}])=>{parse_numeric_range__WEBPACK_IMPORTED_MODULE_2___default()(range).forEach(l=>{lineClassNames[l]??=[];lineClassNames[l].push(className);});});return{code:lines.join('\n'),lineClassNames};}/** - * Parses the code content, strips away any magic comments, and returns the - * clean content and the highlighted lines marked by the comments or metastring. - * - * If the metastring contains a range, the `content` will be returned as-is - * without any parsing. The returned `lineClassNames` will be a map from that - * number range to the first magic comment config entry (which _should_ be for - * line highlight directives.) - */function parseLines(code,params){// Historical behavior: we remove last line break -const newCode=code.replace(/\r?\n$/,'');// Historical behavior: we try one strategy after the other -// we don't support mixing metastring ranges + magic comments -return parseCodeLinesFromMetastring(newCode,{...params})??parseCodeLinesFromContent(newCode,{...params});}/** - * Gets the language name from the class name (set by MDX). - * e.g. `"language-javascript"` => `"javascript"`. - * Returns undefined if there is no language class name. - */function parseClassNameLanguage(className){if(!className){return undefined;}const languageClassName=className.split(' ').find(str=>str.startsWith('language-'));return languageClassName?.replace(/language-/,'');}// Prism languages are always lowercase -// We want to fail-safe and allow both "php" and "PHP" -// See https://github.com/facebook/docusaurus/issues/9012 -function normalizeLanguage(language){return language?.toLowerCase();}function getLanguage(params){return normalizeLanguage(params.language??parseClassNameLanguage(params.className)??params.defaultLanguage)??'text';// There's always a language, required by Prism; -}/** - * This ensures that we always have the code block language as className - * For MDX code blocks this is provided automatically by MDX - * For JSX code blocks, the language gets added by this function - * This ensures both cases lead to a consistent HTML output - */function ensureLanguageClassName({className,language}){return (0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(className,language&&!className?.includes(`language-${language}`)&&`language-${language}`);}function createCodeBlockMetadata(params){const language=getLanguage({language:params.language,defaultLanguage:params.defaultLanguage,className:params.className});const{lineClassNames,code}=parseLines(params.code,{metastring:params.metastring,magicComments:params.magicComments,language});const className=ensureLanguageClassName({className:params.className,language});const title=parseCodeBlockTitle(params.metastring)||params.title;const lineNumbersStart=getLineNumbersStart({showLineNumbers:params.showLineNumbers,metastring:params.metastring});return{codeInput:params.code,code,className,language,title,lineNumbersStart,lineClassNames};}function getPrismCssVariables(prismTheme){const mapping={color:'--prism-color',backgroundColor:'--prism-background-color'};const properties={};Object.entries(prismTheme.plain).forEach(([key,value])=>{const varName=mapping[key];if(varName&&typeof value==='string'){properties[varName]=value;}});return properties;}const CodeBlockContext=/*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(null);function CodeBlockContextProvider({metadata,wordWrap,children}){// Should we optimize this in 2 contexts? -// Unlike metadata, wordWrap is stateful and likely to trigger re-renders -const value=(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>{return{metadata,wordWrap};},[metadata,wordWrap]);return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(CodeBlockContext.Provider,{value:value,children:children});}function useCodeBlockContext(){const value=(0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(CodeBlockContext);if(value===null){throw new _reactUtils__WEBPACK_IMPORTED_MODULE_3__/* .ReactContextError */ .dV('CodeBlockContextProvider');}return value;} - -/***/ }, - -/***/ 4300 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ NavbarMobileSidebarLayout) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(8695); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7559); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// TODO Docusaurus v4: remove temporary inert workaround -// See https://github.com/facebook/react/issues/17157 -// See https://github.com/radix-ui/themes/pull/509 -function inertProps(inert){const isBeforeReact19=parseInt(react__WEBPACK_IMPORTED_MODULE_0__.version.split('.')[0],10)<19;if(isBeforeReact19){return{inert:inert?'':undefined};}return{inert};}function NavbarMobileSidebarPanel({children,inert}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("div",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__/* .ThemeClassNames */ .G.layout.navbar.mobileSidebar.panel,'navbar-sidebar__item menu'),...inertProps(inert),children:children});}function NavbarMobileSidebarLayout({header,primaryMenu,secondaryMenu}){const{shown:secondaryMenuShown}=(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_2__/* .useNavbarSecondaryMenu */ .T)();return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)("div",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__/* .ThemeClassNames */ .G.layout.navbar.mobileSidebar.container,'navbar-sidebar'),children:[header,/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)("div",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('navbar-sidebar__items',{'navbar-sidebar__items--show-secondary':secondaryMenuShown}),children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(NavbarMobileSidebarPanel,{inert:secondaryMenuShown,children:primaryMenu}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(NavbarMobileSidebarPanel,{inert:!secondaryMenuShown,children:secondaryMenu})]})]});} - -/***/ }, - -/***/ 4307 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -function isAbsolute(pathname) { - return pathname.charAt(0) === '/'; -} - -// About 1.5x faster than the two-arg version of Array#splice() -function spliceOne(list, index) { - for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) { - list[i] = list[k]; - } - - list.pop(); -} - -// This implementation is based heavily on node's url.parse -function resolvePathname(to, from) { - if (from === undefined) from = ''; - - var toParts = (to && to.split('/')) || []; - var fromParts = (from && from.split('/')) || []; - - var isToAbs = to && isAbsolute(to); - var isFromAbs = from && isAbsolute(from); - var mustEndAbs = isToAbs || isFromAbs; - - if (to && isAbsolute(to)) { - // to is absolute - fromParts = toParts; - } else if (toParts.length) { - // to is relative, drop the filename - fromParts.pop(); - fromParts = fromParts.concat(toParts); - } - - if (!fromParts.length) return '/'; - - var hasTrailingSlash; - if (fromParts.length) { - var last = fromParts[fromParts.length - 1]; - hasTrailingSlash = last === '.' || last === '..' || last === ''; - } else { - hasTrailingSlash = false; - } - - var up = 0; - for (var i = fromParts.length; i >= 0; i--) { - var part = fromParts[i]; - - if (part === '.') { - spliceOne(fromParts, i); - } else if (part === '..') { - spliceOne(fromParts, i); - up++; - } else if (up) { - spliceOne(fromParts, i); - up--; - } - } - - if (!mustEndAbs) for (; up--; up) fromParts.unshift('..'); - - if ( - mustEndAbs && - fromParts[0] !== '' && - (!fromParts[0] || !isAbsolute(fromParts[0])) - ) - fromParts.unshift(''); - - var result = fromParts.join('/'); - - if (hasTrailingSlash && result.substr(-1) !== '/') result += '/'; - - return result; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (resolvePathname); - - -/***/ }, - -/***/ 4332 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ FooterCopyright) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function FooterCopyright({copyright}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",{className:"footer__copyright"// Developer provided the HTML, so assume it's safe. -// eslint-disable-next-line react/no-danger -,dangerouslySetInnerHTML:{__html:copyright}});} - -/***/ }, - -/***/ 4338 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_Link__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8774); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// Recursive component rendering the toc tree -function TOCItemTree({toc,className,linkClassName,isChild}){if(!toc.length){return null;}return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("ul",{className:isChild?undefined:className,children:toc.map(heading=>/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("li",{children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(_docusaurus_Link__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A,{to:`#${heading.id}`,className:linkClassName??undefined// Developer provided the HTML, so assume it's safe. -,dangerouslySetInnerHTML:{__html:heading.value}}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(TOCItemTree,{isChild:true,toc:heading.children,className:className,linkClassName:linkClassName})]},heading.id))});}// Memo only the tree root is enough -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.memo(TOCItemTree)); - -/***/ }, - -/***/ 4350 -(module) { - -"use strict"; -module.exports = /*#__PURE__*/JSON.parse('{"docusaurusVersion":"3.9.2","siteVersion":"1.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.9.2"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.9.2"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.9.2"},"docusaurus-plugin-svgr":{"type":"package","name":"@docusaurus/plugin-svgr","version":"3.9.2"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.9.2"}}}'); - -/***/ }, - -/***/ 4362 -(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; -var __webpack_unused_export__; - - -var l, s; -if (true) { - l = __webpack_require__(6845); - s = __webpack_require__(3839); -} else // removed by dead control flow -{} - -__webpack_unused_export__ = l.version; -__webpack_unused_export__ = l.renderToString; -__webpack_unused_export__ = l.renderToStaticMarkup; -exports.renderToPipeableStream = s.renderToPipeableStream; -__webpack_unused_export__ = s.renderToReadableStream; -__webpack_unused_export__ = s.resumeToPipeableStream; -__webpack_unused_export__ = s.resume; - - -/***/ }, - -/***/ 4363 -(module, __unused_webpack_exports, __webpack_require__) { - -"use strict"; - - -if (true) { - module.exports = __webpack_require__(2799); -} else // removed by dead control flow -{} - - -/***/ }, - -/***/ 4468 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ FooterLayout) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7559); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function FooterLayout({style,links,logo,copyright}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("footer",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__/* .ThemeClassNames */ .G.layout.footer.container,'footer',{'footer--dark':style==='dark'}),children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)("div",{className:"container container-fluid",children:[links,(logo||copyright)&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)("div",{className:"footer__bottom text--center",children:[logo&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("div",{className:"margin-bottom--sm",children:logo}),copyright]})]})});} - -/***/ }, - -/***/ 4499 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ AO: () => (/* binding */ createPath), -/* harmony export */ TM: () => (/* binding */ createHashHistory), -/* harmony export */ sC: () => (/* binding */ createMemoryHistory), -/* harmony export */ yJ: () => (/* binding */ createLocation), -/* harmony export */ zR: () => (/* binding */ createBrowserHistory) -/* harmony export */ }); -/* unused harmony exports locationsAreEqual, parsePath */ -/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8168); -/* harmony import */ var resolve_pathname__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4307); -/* harmony import */ var tiny_invariant__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1561); - - - - - - -function addLeadingSlash(path) { - return path.charAt(0) === '/' ? path : '/' + path; -} -function stripLeadingSlash(path) { - return path.charAt(0) === '/' ? path.substr(1) : path; -} -function hasBasename(path, prefix) { - return path.toLowerCase().indexOf(prefix.toLowerCase()) === 0 && '/?#'.indexOf(path.charAt(prefix.length)) !== -1; -} -function stripBasename(path, prefix) { - return hasBasename(path, prefix) ? path.substr(prefix.length) : path; -} -function stripTrailingSlash(path) { - return path.charAt(path.length - 1) === '/' ? path.slice(0, -1) : path; -} -function parsePath(path) { - var pathname = path || '/'; - var search = ''; - var hash = ''; - var hashIndex = pathname.indexOf('#'); - - if (hashIndex !== -1) { - hash = pathname.substr(hashIndex); - pathname = pathname.substr(0, hashIndex); - } - - var searchIndex = pathname.indexOf('?'); - - if (searchIndex !== -1) { - search = pathname.substr(searchIndex); - pathname = pathname.substr(0, searchIndex); - } - - return { - pathname: pathname, - search: search === '?' ? '' : search, - hash: hash === '#' ? '' : hash - }; -} -function createPath(location) { - var pathname = location.pathname, - search = location.search, - hash = location.hash; - var path = pathname || '/'; - if (search && search !== '?') path += search.charAt(0) === '?' ? search : "?" + search; - if (hash && hash !== '#') path += hash.charAt(0) === '#' ? hash : "#" + hash; - return path; -} - -function createLocation(path, state, key, currentLocation) { - var location; - - if (typeof path === 'string') { - // Two-arg form: push(path, state) - location = parsePath(path); - location.state = state; - } else { - // One-arg form: push(location) - location = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)({}, path); - if (location.pathname === undefined) location.pathname = ''; - - if (location.search) { - if (location.search.charAt(0) !== '?') location.search = '?' + location.search; - } else { - location.search = ''; - } - - if (location.hash) { - if (location.hash.charAt(0) !== '#') location.hash = '#' + location.hash; - } else { - location.hash = ''; - } - - if (state !== undefined && location.state === undefined) location.state = state; - } - - try { - location.pathname = decodeURI(location.pathname); - } catch (e) { - if (e instanceof URIError) { - throw new URIError('Pathname "' + location.pathname + '" could not be decoded. ' + 'This is likely caused by an invalid percent-encoding.'); - } else { - throw e; - } - } - - if (key) location.key = key; - - if (currentLocation) { - // Resolve incomplete/relative pathname relative to current location. - if (!location.pathname) { - location.pathname = currentLocation.pathname; - } else if (location.pathname.charAt(0) !== '/') { - location.pathname = (0,resolve_pathname__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(location.pathname, currentLocation.pathname); - } - } else { - // When there is no prior location and pathname is empty, set it to / - if (!location.pathname) { - location.pathname = '/'; - } - } - - return location; -} -function locationsAreEqual(a, b) { - return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash && a.key === b.key && valueEqual(a.state, b.state); -} - -function createTransitionManager() { - var prompt = null; - - function setPrompt(nextPrompt) { - false ? 0 : void 0; - prompt = nextPrompt; - return function () { - if (prompt === nextPrompt) prompt = null; - }; - } - - function confirmTransitionTo(location, action, getUserConfirmation, callback) { - // TODO: If another transition starts while we're still confirming - // the previous one, we may end up in a weird state. Figure out the - // best way to handle this. - if (prompt != null) { - var result = typeof prompt === 'function' ? prompt(location, action) : prompt; - - if (typeof result === 'string') { - if (typeof getUserConfirmation === 'function') { - getUserConfirmation(result, callback); - } else { - false ? 0 : void 0; - callback(true); - } - } else { - // Return false from a transition hook to cancel the transition. - callback(result !== false); - } - } else { - callback(true); - } - } - - var listeners = []; - - function appendListener(fn) { - var isActive = true; - - function listener() { - if (isActive) fn.apply(void 0, arguments); - } - - listeners.push(listener); - return function () { - isActive = false; - listeners = listeners.filter(function (item) { - return item !== listener; - }); - }; - } - - function notifyListeners() { - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - listeners.forEach(function (listener) { - return listener.apply(void 0, args); - }); - } - - return { - setPrompt: setPrompt, - confirmTransitionTo: confirmTransitionTo, - appendListener: appendListener, - notifyListeners: notifyListeners - }; -} - -var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement); -function getConfirmation(message, callback) { - callback(window.confirm(message)); // eslint-disable-line no-alert -} -/** - * Returns true if the HTML5 history API is supported. Taken from Modernizr. - * - * https://github.com/Modernizr/Modernizr/blob/master/LICENSE - * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js - * changed to avoid false negatives for Windows Phones: https://github.com/reactjs/react-router/issues/586 - */ - -function supportsHistory() { - var ua = window.navigator.userAgent; - if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) return false; - return window.history && 'pushState' in window.history; -} -/** - * Returns true if browser fires popstate on hash change. - * IE10 and IE11 do not. - */ - -function supportsPopStateOnHashChange() { - return window.navigator.userAgent.indexOf('Trident') === -1; -} -/** - * Returns false if using go(n) with hash history causes a full page reload. - */ - -function supportsGoWithoutReloadUsingHash() { - return window.navigator.userAgent.indexOf('Firefox') === -1; -} -/** - * Returns true if a given popstate event is an extraneous WebKit event. - * Accounts for the fact that Chrome on iOS fires real popstate events - * containing undefined state when pressing the back button. - */ - -function isExtraneousPopstateEvent(event) { - return event.state === undefined && navigator.userAgent.indexOf('CriOS') === -1; -} - -var PopStateEvent = 'popstate'; -var HashChangeEvent = 'hashchange'; - -function getHistoryState() { - try { - return window.history.state || {}; - } catch (e) { - // IE 11 sometimes throws when accessing window.history.state - // See https://github.com/ReactTraining/history/pull/289 - return {}; - } -} -/** - * Creates a history object that uses the HTML5 history API including - * pushState, replaceState, and the popstate event. - */ - - -function createBrowserHistory(props) { - if (props === void 0) { - props = {}; - } - - !canUseDOM ? false ? 0 : (0,tiny_invariant__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(false) : void 0; - var globalHistory = window.history; - var canUseHistory = supportsHistory(); - var needsHashChangeListener = !supportsPopStateOnHashChange(); - var _props = props, - _props$forceRefresh = _props.forceRefresh, - forceRefresh = _props$forceRefresh === void 0 ? false : _props$forceRefresh, - _props$getUserConfirm = _props.getUserConfirmation, - getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm, - _props$keyLength = _props.keyLength, - keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength; - var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : ''; - - function getDOMLocation(historyState) { - var _ref = historyState || {}, - key = _ref.key, - state = _ref.state; - - var _window$location = window.location, - pathname = _window$location.pathname, - search = _window$location.search, - hash = _window$location.hash; - var path = pathname + search + hash; - false ? 0 : void 0; - if (basename) path = stripBasename(path, basename); - return createLocation(path, state, key); - } - - function createKey() { - return Math.random().toString(36).substr(2, keyLength); - } - - var transitionManager = createTransitionManager(); - - function setState(nextState) { - (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(history, nextState); - - history.length = globalHistory.length; - transitionManager.notifyListeners(history.location, history.action); - } - - function handlePopState(event) { - // Ignore extraneous popstate events in WebKit. - if (isExtraneousPopstateEvent(event)) return; - handlePop(getDOMLocation(event.state)); - } - - function handleHashChange() { - handlePop(getDOMLocation(getHistoryState())); - } - - var forceNextPop = false; - - function handlePop(location) { - if (forceNextPop) { - forceNextPop = false; - setState(); - } else { - var action = 'POP'; - transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) { - if (ok) { - setState({ - action: action, - location: location - }); - } else { - revertPop(location); - } - }); - } - } - - function revertPop(fromLocation) { - var toLocation = history.location; // TODO: We could probably make this more reliable by - // keeping a list of keys we've seen in sessionStorage. - // Instead, we just default to 0 for keys we don't know. - - var toIndex = allKeys.indexOf(toLocation.key); - if (toIndex === -1) toIndex = 0; - var fromIndex = allKeys.indexOf(fromLocation.key); - if (fromIndex === -1) fromIndex = 0; - var delta = toIndex - fromIndex; - - if (delta) { - forceNextPop = true; - go(delta); - } - } - - var initialLocation = getDOMLocation(getHistoryState()); - var allKeys = [initialLocation.key]; // Public interface - - function createHref(location) { - return basename + createPath(location); - } - - function push(path, state) { - false ? 0 : void 0; - var action = 'PUSH'; - var location = createLocation(path, state, createKey(), history.location); - transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) { - if (!ok) return; - var href = createHref(location); - var key = location.key, - state = location.state; - - if (canUseHistory) { - globalHistory.pushState({ - key: key, - state: state - }, null, href); - - if (forceRefresh) { - window.location.href = href; - } else { - var prevIndex = allKeys.indexOf(history.location.key); - var nextKeys = allKeys.slice(0, prevIndex + 1); - nextKeys.push(location.key); - allKeys = nextKeys; - setState({ - action: action, - location: location - }); - } - } else { - false ? 0 : void 0; - window.location.href = href; - } - }); - } - - function replace(path, state) { - false ? 0 : void 0; - var action = 'REPLACE'; - var location = createLocation(path, state, createKey(), history.location); - transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) { - if (!ok) return; - var href = createHref(location); - var key = location.key, - state = location.state; - - if (canUseHistory) { - globalHistory.replaceState({ - key: key, - state: state - }, null, href); - - if (forceRefresh) { - window.location.replace(href); - } else { - var prevIndex = allKeys.indexOf(history.location.key); - if (prevIndex !== -1) allKeys[prevIndex] = location.key; - setState({ - action: action, - location: location - }); - } - } else { - false ? 0 : void 0; - window.location.replace(href); - } - }); - } - - function go(n) { - globalHistory.go(n); - } - - function goBack() { - go(-1); - } - - function goForward() { - go(1); - } - - var listenerCount = 0; - - function checkDOMListeners(delta) { - listenerCount += delta; - - if (listenerCount === 1 && delta === 1) { - window.addEventListener(PopStateEvent, handlePopState); - if (needsHashChangeListener) window.addEventListener(HashChangeEvent, handleHashChange); - } else if (listenerCount === 0) { - window.removeEventListener(PopStateEvent, handlePopState); - if (needsHashChangeListener) window.removeEventListener(HashChangeEvent, handleHashChange); - } - } - - var isBlocked = false; - - function block(prompt) { - if (prompt === void 0) { - prompt = false; - } - - var unblock = transitionManager.setPrompt(prompt); - - if (!isBlocked) { - checkDOMListeners(1); - isBlocked = true; - } - - return function () { - if (isBlocked) { - isBlocked = false; - checkDOMListeners(-1); - } - - return unblock(); - }; - } - - function listen(listener) { - var unlisten = transitionManager.appendListener(listener); - checkDOMListeners(1); - return function () { - checkDOMListeners(-1); - unlisten(); - }; - } - - var history = { - length: globalHistory.length, - action: 'POP', - location: initialLocation, - createHref: createHref, - push: push, - replace: replace, - go: go, - goBack: goBack, - goForward: goForward, - block: block, - listen: listen - }; - return history; -} - -var HashChangeEvent$1 = 'hashchange'; -var HashPathCoders = { - hashbang: { - encodePath: function encodePath(path) { - return path.charAt(0) === '!' ? path : '!/' + stripLeadingSlash(path); - }, - decodePath: function decodePath(path) { - return path.charAt(0) === '!' ? path.substr(1) : path; - } - }, - noslash: { - encodePath: stripLeadingSlash, - decodePath: addLeadingSlash - }, - slash: { - encodePath: addLeadingSlash, - decodePath: addLeadingSlash - } -}; - -function stripHash(url) { - var hashIndex = url.indexOf('#'); - return hashIndex === -1 ? url : url.slice(0, hashIndex); -} - -function getHashPath() { - // We can't use window.location.hash here because it's not - // consistent across browsers - Firefox will pre-decode it! - var href = window.location.href; - var hashIndex = href.indexOf('#'); - return hashIndex === -1 ? '' : href.substring(hashIndex + 1); -} - -function pushHashPath(path) { - window.location.hash = path; -} - -function replaceHashPath(path) { - window.location.replace(stripHash(window.location.href) + '#' + path); -} - -function createHashHistory(props) { - if (props === void 0) { - props = {}; - } - - !canUseDOM ? false ? 0 : (0,tiny_invariant__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)(false) : void 0; - var globalHistory = window.history; - var canGoWithoutReload = supportsGoWithoutReloadUsingHash(); - var _props = props, - _props$getUserConfirm = _props.getUserConfirmation, - getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm, - _props$hashType = _props.hashType, - hashType = _props$hashType === void 0 ? 'slash' : _props$hashType; - var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : ''; - var _HashPathCoders$hashT = HashPathCoders[hashType], - encodePath = _HashPathCoders$hashT.encodePath, - decodePath = _HashPathCoders$hashT.decodePath; - - function getDOMLocation() { - var path = decodePath(getHashPath()); - false ? 0 : void 0; - if (basename) path = stripBasename(path, basename); - return createLocation(path); - } - - var transitionManager = createTransitionManager(); - - function setState(nextState) { - (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(history, nextState); - - history.length = globalHistory.length; - transitionManager.notifyListeners(history.location, history.action); - } - - var forceNextPop = false; - var ignorePath = null; - - function locationsAreEqual$$1(a, b) { - return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash; - } - - function handleHashChange() { - var path = getHashPath(); - var encodedPath = encodePath(path); - - if (path !== encodedPath) { - // Ensure we always have a properly-encoded hash. - replaceHashPath(encodedPath); - } else { - var location = getDOMLocation(); - var prevLocation = history.location; - if (!forceNextPop && locationsAreEqual$$1(prevLocation, location)) return; // A hashchange doesn't always == location change. - - if (ignorePath === createPath(location)) return; // Ignore this change; we already setState in push/replace. - - ignorePath = null; - handlePop(location); - } - } - - function handlePop(location) { - if (forceNextPop) { - forceNextPop = false; - setState(); - } else { - var action = 'POP'; - transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) { - if (ok) { - setState({ - action: action, - location: location - }); - } else { - revertPop(location); - } - }); - } - } - - function revertPop(fromLocation) { - var toLocation = history.location; // TODO: We could probably make this more reliable by - // keeping a list of paths we've seen in sessionStorage. - // Instead, we just default to 0 for paths we don't know. - - var toIndex = allPaths.lastIndexOf(createPath(toLocation)); - if (toIndex === -1) toIndex = 0; - var fromIndex = allPaths.lastIndexOf(createPath(fromLocation)); - if (fromIndex === -1) fromIndex = 0; - var delta = toIndex - fromIndex; - - if (delta) { - forceNextPop = true; - go(delta); - } - } // Ensure the hash is encoded properly before doing anything else. - - - var path = getHashPath(); - var encodedPath = encodePath(path); - if (path !== encodedPath) replaceHashPath(encodedPath); - var initialLocation = getDOMLocation(); - var allPaths = [createPath(initialLocation)]; // Public interface - - function createHref(location) { - var baseTag = document.querySelector('base'); - var href = ''; - - if (baseTag && baseTag.getAttribute('href')) { - href = stripHash(window.location.href); - } - - return href + '#' + encodePath(basename + createPath(location)); - } - - function push(path, state) { - false ? 0 : void 0; - var action = 'PUSH'; - var location = createLocation(path, undefined, undefined, history.location); - transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) { - if (!ok) return; - var path = createPath(location); - var encodedPath = encodePath(basename + path); - var hashChanged = getHashPath() !== encodedPath; - - if (hashChanged) { - // We cannot tell if a hashchange was caused by a PUSH, so we'd - // rather setState here and ignore the hashchange. The caveat here - // is that other hash histories in the page will consider it a POP. - ignorePath = path; - pushHashPath(encodedPath); - var prevIndex = allPaths.lastIndexOf(createPath(history.location)); - var nextPaths = allPaths.slice(0, prevIndex + 1); - nextPaths.push(path); - allPaths = nextPaths; - setState({ - action: action, - location: location - }); - } else { - false ? 0 : void 0; - setState(); - } - }); - } - - function replace(path, state) { - false ? 0 : void 0; - var action = 'REPLACE'; - var location = createLocation(path, undefined, undefined, history.location); - transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) { - if (!ok) return; - var path = createPath(location); - var encodedPath = encodePath(basename + path); - var hashChanged = getHashPath() !== encodedPath; - - if (hashChanged) { - // We cannot tell if a hashchange was caused by a REPLACE, so we'd - // rather setState here and ignore the hashchange. The caveat here - // is that other hash histories in the page will consider it a POP. - ignorePath = path; - replaceHashPath(encodedPath); - } - - var prevIndex = allPaths.indexOf(createPath(history.location)); - if (prevIndex !== -1) allPaths[prevIndex] = path; - setState({ - action: action, - location: location - }); - }); - } - - function go(n) { - false ? 0 : void 0; - globalHistory.go(n); - } - - function goBack() { - go(-1); - } - - function goForward() { - go(1); - } - - var listenerCount = 0; - - function checkDOMListeners(delta) { - listenerCount += delta; - - if (listenerCount === 1 && delta === 1) { - window.addEventListener(HashChangeEvent$1, handleHashChange); - } else if (listenerCount === 0) { - window.removeEventListener(HashChangeEvent$1, handleHashChange); - } - } - - var isBlocked = false; - - function block(prompt) { - if (prompt === void 0) { - prompt = false; - } - - var unblock = transitionManager.setPrompt(prompt); - - if (!isBlocked) { - checkDOMListeners(1); - isBlocked = true; - } - - return function () { - if (isBlocked) { - isBlocked = false; - checkDOMListeners(-1); - } - - return unblock(); - }; - } - - function listen(listener) { - var unlisten = transitionManager.appendListener(listener); - checkDOMListeners(1); - return function () { - checkDOMListeners(-1); - unlisten(); - }; - } - - var history = { - length: globalHistory.length, - action: 'POP', - location: initialLocation, - createHref: createHref, - push: push, - replace: replace, - go: go, - goBack: goBack, - goForward: goForward, - block: block, - listen: listen - }; - return history; -} - -function clamp(n, lowerBound, upperBound) { - return Math.min(Math.max(n, lowerBound), upperBound); -} -/** - * Creates a history object that stores locations in memory. - */ - - -function createMemoryHistory(props) { - if (props === void 0) { - props = {}; - } - - var _props = props, - getUserConfirmation = _props.getUserConfirmation, - _props$initialEntries = _props.initialEntries, - initialEntries = _props$initialEntries === void 0 ? ['/'] : _props$initialEntries, - _props$initialIndex = _props.initialIndex, - initialIndex = _props$initialIndex === void 0 ? 0 : _props$initialIndex, - _props$keyLength = _props.keyLength, - keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength; - var transitionManager = createTransitionManager(); - - function setState(nextState) { - (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(history, nextState); - - history.length = history.entries.length; - transitionManager.notifyListeners(history.location, history.action); - } - - function createKey() { - return Math.random().toString(36).substr(2, keyLength); - } - - var index = clamp(initialIndex, 0, initialEntries.length - 1); - var entries = initialEntries.map(function (entry) { - return typeof entry === 'string' ? createLocation(entry, undefined, createKey()) : createLocation(entry, undefined, entry.key || createKey()); - }); // Public interface - - var createHref = createPath; - - function push(path, state) { - false ? 0 : void 0; - var action = 'PUSH'; - var location = createLocation(path, state, createKey(), history.location); - transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) { - if (!ok) return; - var prevIndex = history.index; - var nextIndex = prevIndex + 1; - var nextEntries = history.entries.slice(0); - - if (nextEntries.length > nextIndex) { - nextEntries.splice(nextIndex, nextEntries.length - nextIndex, location); - } else { - nextEntries.push(location); - } - - setState({ - action: action, - location: location, - index: nextIndex, - entries: nextEntries - }); - }); - } - - function replace(path, state) { - false ? 0 : void 0; - var action = 'REPLACE'; - var location = createLocation(path, state, createKey(), history.location); - transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) { - if (!ok) return; - history.entries[history.index] = location; - setState({ - action: action, - location: location - }); - }); - } - - function go(n) { - var nextIndex = clamp(history.index + n, 0, history.entries.length - 1); - var action = 'POP'; - var location = history.entries[nextIndex]; - transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) { - if (ok) { - setState({ - action: action, - location: location, - index: nextIndex - }); - } else { - // Mimic the behavior of DOM histories by - // causing a render after a cancelled POP. - setState(); - } - }); - } - - function goBack() { - go(-1); - } - - function goForward() { - go(1); - } - - function canGo(n) { - var nextIndex = history.index + n; - return nextIndex >= 0 && nextIndex < history.entries.length; - } - - function block(prompt) { - if (prompt === void 0) { - prompt = false; - } - - return transitionManager.setPrompt(prompt); - } - - function listen(listener) { - return transitionManager.appendListener(listener); - } - - var history = { - length: entries.length, - action: 'POP', - location: entries[index], - index: index, - entries: entries, - createHref: createHref, - push: push, - replace: replace, - go: go, - goBack: goBack, - goForward: goForward, - canGo: canGo, - block: block, - listen: listen - }; - return history; -} - - - - -/***/ }, - -/***/ 4532 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ DocVersionRoot) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5500); -/* harmony import */ var _docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(3025); -/* harmony import */ var _docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(2565); -/* harmony import */ var _docusaurus_renderRoutes__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(2831); -/* harmony import */ var _theme_SearchMetadata__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(1463); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function DocVersionRootMetadata(props){const{version}=props;return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment,{children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_theme_SearchMetadata__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A,{version:version.version,tag:(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_3__/* .getDocsVersionSearchTag */ .k)(version.pluginId,version.version)}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_1__/* .PageMetadata */ .be,{children:version.noIndex&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})]});}function DocVersionRootContent(props){const{version,route}=props;return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_1__/* .HtmlClassNameProvider */ .e3,{className:version.className,children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_2__/* .DocsVersionProvider */ .n,{version:version,children:(0,_docusaurus_renderRoutes__WEBPACK_IMPORTED_MODULE_4__/* .renderRoutes */ .v)(route.routes)})});}function DocVersionRoot(props){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment,{children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(DocVersionRootMetadata,{...props}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(DocVersionRootContent,{...props})]});} - -/***/ }, - -/***/ 4552 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ Admonition) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8473); -/* harmony import */ var _theme_Admonition_Types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5309); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function getAdmonitionTypeComponent(type){const component=_theme_Admonition_Types__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A[type];if(component){return component;}console.warn(`No admonition component found for admonition type "${type}". Using Info as fallback.`);return _theme_Admonition_Types__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A.info;}function Admonition(unprocessedProps){const props=(0,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_1__/* .processAdmonitionProps */ .c)(unprocessedProps);const AdmonitionTypeComponent=getAdmonitionTypeComponent(props.type);return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(AdmonitionTypeComponent,{...props});} - -/***/ }, - -/***/ 4563 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ AL: () => (/* binding */ TitleFormatterProvider), -/* harmony export */ s$: () => (/* binding */ useTitleFormatter) -/* harmony export */ }); -/* unused harmony export TitleFormatterFnDefault */ -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4586); -/* harmony import */ var _docusaurus_useRouteContext__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6803); -/* harmony import */ var _reactUtils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9532); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */const TitleFormatterFnDefault=({title,siteTitle,titleDelimiter})=>{const trimmedTitle=title?.trim();if(!trimmedTitle||trimmedTitle===siteTitle){return siteTitle;}return`${trimmedTitle} ${titleDelimiter} ${siteTitle}`;};const TitleFormatterContext=/*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(null);function TitleFormatterProvider({formatter,children}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(TitleFormatterContext.Provider,{value:formatter,children:children});}function useTitleFormatterContext(){const value=(0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(TitleFormatterContext);if(value===null){throw new _reactUtils__WEBPACK_IMPORTED_MODULE_3__/* .ReactContextError */ .dV('TitleFormatterProvider');}return value;}/** - * Returns a function to format the page title - */function useTitleFormatter(){const formatter=useTitleFormatterContext();const{siteConfig}=(0,_docusaurus_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)();const{title:siteTitle,titleDelimiter}=siteConfig;// Unfortunately we can only call this hook here, not in the provider -// Route context can't be accessed in any provider applied above the router -const{plugin}=(0,_docusaurus_useRouteContext__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)();return{format:title=>formatter({title,siteTitle,titleDelimiter,plugin,defaultFormatter:TitleFormatterFnDefault})};} - -/***/ }, - -/***/ 4581 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ l: () => (/* binding */ useWindowSize) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_ExecutionEnvironment__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8193); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */const windowSizes={desktop:'desktop',mobile:'mobile',ssr:'ssr'};// Note: this value is also hardcoded in Infima -// Both JS and CSS must have the same value -// Updating this JS value alone is not enough -// See https://github.com/facebook/docusaurus/issues/9603 -const DesktopBreakpoint=996;function getWindowSize(desktopBreakpoint){if(!_docusaurus_ExecutionEnvironment__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A.canUseDOM){throw new Error('getWindowSize() should only be called after React hydration');}return window.innerWidth>desktopBreakpoint?windowSizes.desktop:windowSizes.mobile;}/** - * Gets the current window size as an enum value. We don't want it to return the - * actual width value, so that it only re-renders once a breakpoint is crossed. - * - * It may return `"ssr"`, which is very important to handle hydration FOUC or - * layout shifts. You have to handle it explicitly upfront. On the server, you - * may need to render BOTH the mobile/desktop elements (and hide one of them - * with mediaquery). We don't return `undefined` on purpose, to make it more - * explicit. - */function useWindowSize({desktopBreakpoint=DesktopBreakpoint}={}){const[windowSize,setWindowSize]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(()=>// super important to return a constant value to avoid hydration mismatch -// see https://github.com/facebook/docusaurus/issues/9379 -'ssr');(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{function updateWindowSize(){setWindowSize(getWindowSize(desktopBreakpoint));}updateWindowSize();window.addEventListener('resize',updateWindowSize);return()=>{window.removeEventListener('resize',updateWindowSize);};},[desktopBreakpoint]);return windowSize;} - -/***/ }, - -/***/ 4586 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ useDocusaurusContext) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurusContext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1989); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function useDocusaurusContext(){return (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_docusaurusContext__WEBPACK_IMPORTED_MODULE_1__/* .Context */ .o);} - -/***/ }, - -/***/ 4607 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ App) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _generated_client_modules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3586); -/* harmony import */ var _generated_routes__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(467); -/* harmony import */ var _docusaurus_router__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6347); -/* harmony import */ var _docusaurus_renderRoutes__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(2831); -/* harmony import */ var _theme_Root__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(7808); -/* harmony import */ var _theme_ThemeProvider__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(6578); -/* harmony import */ var _theme_SiteMetadata__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(7368); -/* harmony import */ var _normalizeLocation__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(6956); -/* harmony import */ var _browserContext__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(6125); -/* harmony import */ var _docusaurusContext__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(1989); -/* harmony import */ var _PendingNavigation__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(5509); -/* harmony import */ var _BaseUrlIssueBanner__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(5114); -/* harmony import */ var _SiteMetadataDefaults__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(9130); -/* harmony import */ var _docusaurus_ErrorBoundary__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(7788); -/* harmony import */ var _hasHydratedDataAttribute__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(3249); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// TODO, quick fix for CSS insertion order -// eslint-disable-next-line import/order -const routesElement=(0,_docusaurus_renderRoutes__WEBPACK_IMPORTED_MODULE_4__/* .renderRoutes */ .v)(_generated_routes__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A);function AppNavigation(){const location=(0,_docusaurus_router__WEBPACK_IMPORTED_MODULE_3__/* .useLocation */ .zy)();const normalizedLocation=(0,_normalizeLocation__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .A)(location);return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_16__.jsx)(_PendingNavigation__WEBPACK_IMPORTED_MODULE_11__/* ["default"] */ .A,{location:normalizedLocation,children:routesElement});}function App(){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_16__.jsx)(_docusaurus_ErrorBoundary__WEBPACK_IMPORTED_MODULE_14__/* ["default"] */ .A,{children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_16__.jsx)(_docusaurusContext__WEBPACK_IMPORTED_MODULE_10__/* .DocusaurusContextProvider */ .l,{children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_16__.jsxs)(_browserContext__WEBPACK_IMPORTED_MODULE_9__/* .BrowserContextProvider */ .x,{children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_16__.jsx)(_theme_Root__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A,{children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_16__.jsxs)(_theme_ThemeProvider__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A,{children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_16__.jsx)(_SiteMetadataDefaults__WEBPACK_IMPORTED_MODULE_13__/* ["default"] */ .A,{}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_16__.jsx)(_theme_SiteMetadata__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A,{}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_16__.jsx)(_BaseUrlIssueBanner__WEBPACK_IMPORTED_MODULE_12__/* ["default"] */ .A,{}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_16__.jsx)(AppNavigation,{})]})}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_16__.jsx)(_hasHydratedDataAttribute__WEBPACK_IMPORTED_MODULE_15__/* ["default"] */ .A,{})]})})});} - -/***/ }, - -/***/ 4608 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ Heading) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(986); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1840); -/* harmony import */ var _docusaurus_Link__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(8774); -/* harmony import */ var _docusaurus_useBrokenLinks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(2521); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(4738); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function Heading({as:As,id,...props}){const brokenLinks=(0,_docusaurus_useBrokenLinks__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A)();const anchorTargetClassName=(0,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__/* .useAnchorTargetClassName */ .v)(id);// H1 headings do not need an id because they don't appear in the TOC. -if(As==='h1'||!id){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(As,{...props,id:undefined});}brokenLinks.collectAnchor(id);const anchorTitle=(0,_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__/* .translate */ .T)({id:'theme.common.headingLinkTitle',message:'Direct link to {heading}',description:'Title for link to heading'},{heading:typeof props.children==='string'?props.children:id});return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)(As,{...props,className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('anchor',anchorTargetClassName,props.className),id:id,children:[props.children,/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_docusaurus_Link__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A,{className:"hash-link",to:`#${id}`,"aria-label":anchorTitle,title:anchorTitle,translate:"no",children:"\u200B"})]});} - -/***/ }, - -/***/ 4614 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ LocaleDropdownNavbarItem) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4586); -/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2131); -/* harmony import */ var _docusaurus_Translate__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(986); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(7485); -/* harmony import */ var _theme_NavbarItem_DropdownNavbarItem__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(9788); -/* harmony import */ var _theme_Icon_Language__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(4170); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(8244); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function useLocaleDropdownUtils(){const{siteConfig,i18n:{localeConfigs}}=(0,_docusaurus_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)();const alternatePageUtils=(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_2__/* .useAlternatePageUtils */ .o)();const search=(0,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_4__/* .useHistorySelector */ .Hl)(history=>history.location.search);const hash=(0,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_4__/* .useHistorySelector */ .Hl)(history=>history.location.hash);const getLocaleConfig=locale=>{const localeConfig=localeConfigs[locale];if(!localeConfig){throw new Error(`Docusaurus bug, no locale config found for locale=${locale}`);}return localeConfig;};const getBaseURLForLocale=locale=>{const localeConfig=getLocaleConfig(locale);const isSameDomain=localeConfig.url===siteConfig.url;if(isSameDomain){// Shorter paths if localized sites are hosted on the same domain -// This reduces HTML size a bit -return`pathname://${alternatePageUtils.createUrl({locale,fullyQualified:false})}`;}return alternatePageUtils.createUrl({locale,fullyQualified:true});};return{getURL:(locale,options)=>{// We have 2 query strings because -// - there's the current one -// - there's one user can provide through navbar config -// see https://github.com/facebook/docusaurus/pull/8915 -const finalSearch=(0,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_4__/* .mergeSearchStrings */ .jy)([search,options.queryString],'append');return`${getBaseURLForLocale(locale)}${finalSearch}${hash}`;},getLabel:locale=>{return getLocaleConfig(locale).label;},getLang:locale=>{return getLocaleConfig(locale).htmlLang;}};}function LocaleDropdownNavbarItem({mobile,dropdownItemsBefore,dropdownItemsAfter,queryString,...props}){const utils=useLocaleDropdownUtils();const{i18n:{currentLocale,locales}}=(0,_docusaurus_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)();const localeItems=locales.map(locale=>{return{label:utils.getLabel(locale),lang:utils.getLang(locale),to:utils.getURL(locale,{queryString}),target:'_self',autoAddBaseUrl:false,className:// eslint-disable-next-line no-nested-ternary -locale===currentLocale?// Similar idea as DefaultNavbarItem: select the right Infima active -// class name. This cannot be substituted with isActive, because the -// target URLs contain `pathname://` and therefore are not NavLinks! -mobile?'menu__link--active':'dropdown__link--active':''};});const items=[...dropdownItemsBefore,...localeItems,...dropdownItemsAfter];// Mobile is handled a bit differently -const dropdownLabel=mobile?(0,_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_3__/* .translate */ .T)({message:'Languages',id:'theme.navbar.mobileLanguageDropdown.label',description:'The label for the mobile language switcher dropdown'}):utils.getLabel(currentLocale);return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(_theme_NavbarItem_DropdownNavbarItem__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A,{...props,mobile:mobile,label:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.Fragment,{children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(_theme_Icon_Language__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A,{className:(_styles_module_css__WEBPACK_IMPORTED_MODULE_7___default().iconLanguage)}),dropdownLabel]}),items:items});} - -/***/ }, - -/***/ 4625 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ N_: () => (/* binding */ Link), -/* harmony export */ k2: () => (/* binding */ NavLink) -/* harmony export */ }); -/* unused harmony exports BrowserRouter, HashRouter */ -/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6347); -/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7387); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6540); -/* harmony import */ var history__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4499); -/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(8168); -/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(8587); -/* harmony import */ var tiny_invariant__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(1561); - - - - - - - - - - - -/** - * The public API for a <Router> that uses HTML5 history. - */ - -var BrowserRouter = /*#__PURE__*/function (_React$Component) { - (0,_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(BrowserRouter, _React$Component); - - function BrowserRouter() { - var _this; - - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this; - _this.history = (0,history__WEBPACK_IMPORTED_MODULE_3__/* .createBrowserHistory */ .zR)(_this.props); - return _this; - } - - var _proto = BrowserRouter.prototype; - - _proto.render = function render() { - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(react_router__WEBPACK_IMPORTED_MODULE_0__/* .Router */ .Ix, { - history: this.history, - children: this.props.children - }); - }; - - return BrowserRouter; -}(react__WEBPACK_IMPORTED_MODULE_2__.Component); - -if (false) // removed by dead control flow -{} - -/** - * The public API for a <Router> that uses window.location.hash. - */ - -var HashRouter = /*#__PURE__*/function (_React$Component) { - (0,_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(HashRouter, _React$Component); - - function HashRouter() { - var _this; - - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this; - _this.history = (0,history__WEBPACK_IMPORTED_MODULE_3__/* .createHashHistory */ .TM)(_this.props); - return _this; - } - - var _proto = HashRouter.prototype; - - _proto.render = function render() { - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(react_router__WEBPACK_IMPORTED_MODULE_0__/* .Router */ .Ix, { - history: this.history, - children: this.props.children - }); - }; - - return HashRouter; -}(react__WEBPACK_IMPORTED_MODULE_2__.Component); - -if (false) // removed by dead control flow -{} - -var resolveToLocation = function resolveToLocation(to, currentLocation) { - return typeof to === "function" ? to(currentLocation) : to; -}; -var normalizeToLocation = function normalizeToLocation(to, currentLocation) { - return typeof to === "string" ? (0,history__WEBPACK_IMPORTED_MODULE_3__/* .createLocation */ .yJ)(to, null, null, currentLocation) : to; -}; - -var forwardRefShim = function forwardRefShim(C) { - return C; -}; - -var forwardRef = react__WEBPACK_IMPORTED_MODULE_2__.forwardRef; - -if (typeof forwardRef === "undefined") { - forwardRef = forwardRefShim; -} - -function isModifiedEvent(event) { - return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey); -} - -var LinkAnchor = forwardRef(function (_ref, forwardedRef) { - var innerRef = _ref.innerRef, - navigate = _ref.navigate, - _onClick = _ref.onClick, - rest = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A)(_ref, ["innerRef", "navigate", "onClick"]); - - var target = rest.target; - - var props = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A)({}, rest, { - onClick: function onClick(event) { - try { - if (_onClick) _onClick(event); - } catch (ex) { - event.preventDefault(); - throw ex; - } - - if (!event.defaultPrevented && // onClick prevented default - event.button === 0 && ( // ignore everything but left clicks - !target || target === "_self") && // let browser handle "target=_blank" etc. - !isModifiedEvent(event) // ignore clicks with modifier keys - ) { - event.preventDefault(); - navigate(); - } - } - }); // React 15 compat - - - if (forwardRefShim !== forwardRef) { - props.ref = forwardedRef || innerRef; - } else { - props.ref = innerRef; - } - /* eslint-disable-next-line jsx-a11y/anchor-has-content */ - - - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement("a", props); -}); - -if (false) // removed by dead control flow -{} -/** - * The public API for rendering a history-aware <a>. - */ - - -var Link = forwardRef(function (_ref2, forwardedRef) { - var _ref2$component = _ref2.component, - component = _ref2$component === void 0 ? LinkAnchor : _ref2$component, - replace = _ref2.replace, - to = _ref2.to, - innerRef = _ref2.innerRef, - rest = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A)(_ref2, ["component", "replace", "to", "innerRef"]); - - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(react_router__WEBPACK_IMPORTED_MODULE_0__/* .__RouterContext */ .XZ.Consumer, null, function (context) { - !context ? false ? 0 : (0,tiny_invariant__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A)(false) : void 0; - var history = context.history; - var location = normalizeToLocation(resolveToLocation(to, context.location), context.location); - var href = location ? history.createHref(location) : ""; - - var props = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A)({}, rest, { - href: href, - navigate: function navigate() { - var location = resolveToLocation(to, context.location); - var isDuplicateNavigation = (0,history__WEBPACK_IMPORTED_MODULE_3__/* .createPath */ .AO)(context.location) === (0,history__WEBPACK_IMPORTED_MODULE_3__/* .createPath */ .AO)(normalizeToLocation(location)); - var method = replace || isDuplicateNavigation ? history.replace : history.push; - method(location); - } - }); // React 15 compat - - - if (forwardRefShim !== forwardRef) { - props.ref = forwardedRef || innerRef; - } else { - props.innerRef = innerRef; - } - - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(component, props); - }); -}); - -if (false) // removed by dead control flow -{ var refType, toType; } - -var forwardRefShim$1 = function forwardRefShim(C) { - return C; -}; - -var forwardRef$1 = react__WEBPACK_IMPORTED_MODULE_2__.forwardRef; - -if (typeof forwardRef$1 === "undefined") { - forwardRef$1 = forwardRefShim$1; -} - -function joinClassnames() { - for (var _len = arguments.length, classnames = new Array(_len), _key = 0; _key < _len; _key++) { - classnames[_key] = arguments[_key]; - } - - return classnames.filter(function (i) { - return i; - }).join(" "); -} -/** - * A <Link> wrapper that knows if it's "active" or not. - */ - - -var NavLink = forwardRef$1(function (_ref, forwardedRef) { - var _ref$ariaCurrent = _ref["aria-current"], - ariaCurrent = _ref$ariaCurrent === void 0 ? "page" : _ref$ariaCurrent, - _ref$activeClassName = _ref.activeClassName, - activeClassName = _ref$activeClassName === void 0 ? "active" : _ref$activeClassName, - activeStyle = _ref.activeStyle, - classNameProp = _ref.className, - exact = _ref.exact, - isActiveProp = _ref.isActive, - locationProp = _ref.location, - sensitive = _ref.sensitive, - strict = _ref.strict, - styleProp = _ref.style, - to = _ref.to, - innerRef = _ref.innerRef, - rest = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A)(_ref, ["aria-current", "activeClassName", "activeStyle", "className", "exact", "isActive", "location", "sensitive", "strict", "style", "to", "innerRef"]); - - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(react_router__WEBPACK_IMPORTED_MODULE_0__/* .__RouterContext */ .XZ.Consumer, null, function (context) { - !context ? false ? 0 : (0,tiny_invariant__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A)(false) : void 0; - var currentLocation = locationProp || context.location; - var toLocation = normalizeToLocation(resolveToLocation(to, currentLocation), currentLocation); - var path = toLocation.pathname; // Regex taken from: https://github.com/pillarjs/path-to-regexp/blob/master/index.js#L202 - - var escapedPath = path && path.replace(/([.+*?=^!:${}()[\]|/\\])/g, "\\$1"); - var match = escapedPath ? (0,react_router__WEBPACK_IMPORTED_MODULE_0__/* .matchPath */ .B6)(currentLocation.pathname, { - path: escapedPath, - exact: exact, - sensitive: sensitive, - strict: strict - }) : null; - var isActive = !!(isActiveProp ? isActiveProp(match, currentLocation) : match); - var className = typeof classNameProp === "function" ? classNameProp(isActive) : classNameProp; - var style = typeof styleProp === "function" ? styleProp(isActive) : styleProp; - - if (isActive) { - className = joinClassnames(className, activeClassName); - style = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A)({}, style, activeStyle); - } - - var props = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A)({ - "aria-current": isActive && ariaCurrent || null, - className: className, - style: style, - to: toLocation - }, rest); // React 15 compat - - - if (forwardRefShim$1 !== forwardRef$1) { - props.ref = forwardedRef || innerRef; - } else { - props.innerRef = innerRef; - } - - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(Link, props); - }); -}); - -if (false) // removed by dead control flow -{ var ariaCurrentType; } - - -//# sourceMappingURL=react-router-dom.js.map - - -/***/ }, - -/***/ 4634 -(module) { - -module.exports = Array.isArray || function (arr) { - return Object.prototype.toString.call(arr) == '[object Array]'; -}; - - -/***/ }, - -/***/ 4692 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ Loading) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// Should we translate theme-fallback? -/* eslint-disable @docusaurus/no-untranslated-text */function Loading({error,retry,pastDelay}){if(error){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",{style:{textAlign:'center',color:'#fff',backgroundColor:'#fa383e',borderColor:'#fa383e',borderStyle:'solid',borderRadius:'0.25rem',borderWidth:'1px',boxSizing:'border-box',display:'block',padding:'1rem',flex:'0 0 50%',marginLeft:'25%',marginRight:'25%',marginTop:'5rem',maxWidth:'50%',width:'100%'},children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("p",{children:String(error)}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",{children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("button",{type:"button",onClick:retry,children:"Retry"})})]});}if(pastDelay){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",{style:{display:'flex',justifyContent:'center',alignItems:'center',height:'100vh'},children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("svg",{id:"loader",style:{width:128,height:110,position:'absolute',top:'calc(100vh - 64%)'},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("circle",{cx:"22",cy:"22",r:"8",children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})});}return null;} - -/***/ }, - -/***/ 4733 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ CA: () => (/* binding */ getLatestVersion), -/* harmony export */ QA: () => (/* binding */ getDocVersionSuggestions), -/* harmony export */ Yz: () => (/* binding */ getActiveDocContext), -/* harmony export */ uX: () => (/* binding */ getActivePlugin) -/* harmony export */ }); -/* unused harmony export getActiveVersion */ -/* harmony import */ var _docusaurus_router__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6347); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// This code is not part of the api surface, not in ./theme on purpose -// get the data of the plugin that is currently "active" -// ie the docs of that plugin are currently browsed -// it is useful to support multiple docs plugin instances -function getActivePlugin(allPluginData,pathname,options={}){const activeEntry=Object.entries(allPluginData)// Route sorting: '/android/foo' should match '/android' instead of '/' -.sort((a,b)=>b[1].path.localeCompare(a[1].path)).find(([,pluginData])=>!!(0,_docusaurus_router__WEBPACK_IMPORTED_MODULE_0__/* .matchPath */ .B6)(pathname,{path:pluginData.path,exact:false,strict:false}));const activePlugin=activeEntry?{pluginId:activeEntry[0],pluginData:activeEntry[1]}:undefined;if(!activePlugin&&options.failfast){throw new Error(`Can't find active docs plugin for "${pathname}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(allPluginData).map(plugin=>plugin.path).join(', ')}`);}return activePlugin;}const getLatestVersion=data=>data.versions.find(version=>version.isLast);function getActiveVersion(data,pathname){// Sort paths so that a match-all version like /docs/* is matched last -// Otherwise /docs/* would match /docs/1.0.0/* routes -// This is simplified but similar to the core sortRoutes() logic -const sortedVersions=[...data.versions].sort((a,b)=>{if(a.path===b.path){return 0;}if(a.path.includes(b.path)){return-1;}if(b.path.includes(a.path)){return 1;}return 0;});return sortedVersions.find(version=>!!(0,_docusaurus_router__WEBPACK_IMPORTED_MODULE_0__/* .matchPath */ .B6)(pathname,{path:version.path,exact:false,strict:false}));}function getActiveDocContext(data,pathname){const activeVersion=getActiveVersion(data,pathname);const activeDoc=activeVersion?.docs.find(doc=>!!(0,_docusaurus_router__WEBPACK_IMPORTED_MODULE_0__/* .matchPath */ .B6)(pathname,{path:doc.path,exact:true,strict:false}));function getAlternateVersionDocs(docId){const result={};data.versions.forEach(version=>{version.docs.forEach(doc=>{if(doc.id===docId){result[version.name]=doc;}});});return result;}const alternateVersionDocs=activeDoc?getAlternateVersionDocs(activeDoc.id):{};return{activeVersion,activeDoc,alternateDocVersions:alternateVersionDocs};}function getDocVersionSuggestions(data,pathname){const latestVersion=getLatestVersion(data);const activeDocContext=getActiveDocContext(data,pathname);const latestDocSuggestion=activeDocContext.alternateDocVersions[latestVersion.name];return{latestDocSuggestion,latestVersionSuggestion:latestVersion};} - -/***/ }, - -/***/ 4738 -(module) { - -// Exports -module.exports = { - -}; - - -/***/ }, - -/***/ 4745 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ CodeBlockLineToken) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// Pass-through components that users can swizzle and customize -function CodeBlockLineToken({line,token,...props}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("span",{...props});} - -/***/ }, - -/***/ 4784 -(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* - * AUTOGENERATED - DON'T EDIT - * Your edits in this file will be overwritten in the next build! - * Modify the docusaurus.config.js file at your site's root instead. - */ -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ - "title": "CmdForge", - "tagline": "AI-powered CLI tool builder", - "favicon": "img/favicon.ico", - "url": "https://pages.brrd.tech", - "baseUrl": "/rob/CmdForge/", - "trailingSlash": true, - "organizationName": "rob", - "projectName": "CmdForge", - "onBrokenLinks": "warn", - "i18n": { - "defaultLocale": "en", - "locales": [ - "en" - ], - "path": "i18n", - "localeConfigs": {} - }, - "presets": [ - [ - "classic", - { - "docs": { - "routeBasePath": "/", - "sidebarPath": "./sidebars.js" - }, - "blog": false, - "theme": { - "customCss": "./src/css/custom.css" - } - } - ] - ], - "themeConfig": { - "colorMode": { - "defaultMode": "dark", - "disableSwitch": false, - "respectPrefersColorScheme": true - }, - "navbar": { - "title": "CmdForge", - "items": [ - { - "href": "https://gitea.brrd.tech/rob/CmdForge", - "label": "Source Code", - "position": "right" - } - ], - "hideOnScroll": false - }, - "footer": { - "style": "dark", - "links": [ - { - "title": "Docs", - "items": [ - { - "label": "Overview", - "to": "/" - } - ] - }, - { - "title": "More", - "items": [ - { - "label": "Gitea", - "href": "https://gitea.brrd.tech/rob/CmdForge" - } - ] - } - ], - "copyright": "CmdForge Documentation" - }, - "prism": { - "theme": { - "plain": { - "color": "#393A34", - "backgroundColor": "#f6f8fa" - }, - "styles": [ - { - "types": [ - "comment", - "prolog", - "doctype", - "cdata" - ], - "style": { - "color": "#999988", - "fontStyle": "italic" - } - }, - { - "types": [ - "namespace" - ], - "style": { - "opacity": 0.7 - } - }, - { - "types": [ - "string", - "attr-value" - ], - "style": { - "color": "#e3116c" - } - }, - { - "types": [ - "punctuation", - "operator" - ], - "style": { - "color": "#393A34" - } - }, - { - "types": [ - "entity", - "url", - "symbol", - "number", - "boolean", - "variable", - "constant", - "property", - "regex", - "inserted" - ], - "style": { - "color": "#36acaa" - } - }, - { - "types": [ - "atrule", - "keyword", - "attr-name", - "selector" - ], - "style": { - "color": "#00a4db" - } - }, - { - "types": [ - "function", - "deleted", - "tag" - ], - "style": { - "color": "#d73a49" - } - }, - { - "types": [ - "function-variable" - ], - "style": { - "color": "#6f42c1" - } - }, - { - "types": [ - "tag", - "selector", - "keyword" - ], - "style": { - "color": "#00009f" - } - } - ] - }, - "darkTheme": { - "plain": { - "color": "#F8F8F2", - "backgroundColor": "#282A36" - }, - "styles": [ - { - "types": [ - "prolog", - "constant", - "builtin" - ], - "style": { - "color": "rgb(189, 147, 249)" - } - }, - { - "types": [ - "inserted", - "function" - ], - "style": { - "color": "rgb(80, 250, 123)" - } - }, - { - "types": [ - "deleted" - ], - "style": { - "color": "rgb(255, 85, 85)" - } - }, - { - "types": [ - "changed" - ], - "style": { - "color": "rgb(255, 184, 108)" - } - }, - { - "types": [ - "punctuation", - "symbol" - ], - "style": { - "color": "rgb(248, 248, 242)" - } - }, - { - "types": [ - "string", - "char", - "tag", - "selector" - ], - "style": { - "color": "rgb(255, 121, 198)" - } - }, - { - "types": [ - "keyword", - "variable" - ], - "style": { - "color": "rgb(189, 147, 249)", - "fontStyle": "italic" - } - }, - { - "types": [ - "comment" - ], - "style": { - "color": "rgb(98, 114, 164)" - } - }, - { - "types": [ - "attr-name" - ], - "style": { - "color": "rgb(241, 250, 140)" - } - } - ] - }, - "additionalLanguages": [], - "magicComments": [ - { - "className": "theme-code-block-highlighted-line", - "line": "highlight-next-line", - "block": { - "start": "highlight-start", - "end": "highlight-end" - } - } - ] - }, - "docs": { - "versionPersistence": "localStorage", - "sidebar": { - "hideable": false, - "autoCollapseCategories": false - } - }, - "blog": { - "sidebar": { - "groupByYear": true - } - }, - "metadata": [], - "tableOfContents": { - "minHeadingLevel": 2, - "maxHeadingLevel": 3 - } - }, - "baseUrlIssueBanner": true, - "future": { - "v4": { - "removeLegacyPostBuildHeadAttribute": false, - "useCssCascadeLayers": false - }, - "experimental_faster": { - "swcJsLoader": false, - "swcJsMinimizer": false, - "swcHtmlMinimizer": false, - "lightningCssMinimizer": false, - "mdxCrossCompilerCache": false, - "rspackBundler": false, - "rspackPersistentCache": false, - "ssgWorkerThreads": false - }, - "experimental_storage": { - "type": "localStorage", - "namespace": false - }, - "experimental_router": "browser" - }, - "onBrokenAnchors": "warn", - "onDuplicateRoutes": "warn", - "staticDirectories": [ - "static" - ], - "customFields": {}, - "plugins": [], - "themes": [], - "scripts": [], - "headTags": [], - "stylesheets": [], - "clientModules": [], - "titleDelimiter": "|", - "noIndex": false, - "markdown": { - "format": "mdx", - "mermaid": false, - "emoji": true, - "mdx1Compat": { - "comments": true, - "admonitions": true, - "headingIds": true - }, - "anchors": { - "maintainCase": false - }, - "hooks": { - "onBrokenMarkdownLinks": "warn", - "onBrokenMarkdownImages": "throw" - } - } -}); - - -/***/ }, - -/***/ 4817 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ AdmonitionTypeInfo) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(986); -/* harmony import */ var _theme_Admonition_Layout__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7611); -/* harmony import */ var _theme_Admonition_Icon_Info__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(2382); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */const infimaClassName='alert alert--info';const defaultProps={icon:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_theme_Admonition_Icon_Info__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A,{}),title:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})};function AdmonitionTypeInfo(props){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_theme_Admonition_Layout__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A,{...defaultProps,...props,className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(infimaClassName,props.className),children:props.children});} - -/***/ }, - -/***/ 4820 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ DocNavbarItem) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7712); -/* harmony import */ var _docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6972); -/* harmony import */ var _theme_NavbarItem_DefaultNavbarItem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(3828); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function DocNavbarItem({docId,label:staticLabel,docsPluginId,...props}){const{activeDoc}=(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_1__/* .useActiveDocContext */ .zK)(docsPluginId);const doc=(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_2__/* .useLayoutDoc */ .QB)(docId,docsPluginId);const pageActive=activeDoc?.path===doc?.path;// Draft and unlisted items are not displayed in the navbar. -if(doc===null||doc.unlisted&&!pageActive){return null;}return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_theme_NavbarItem_DefaultNavbarItem__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A,{exact:true,...props,isActive:()=>pageActive||!!activeDoc?.sidebar&&activeDoc.sidebar===doc.sidebar,label:staticLabel??doc.id,to:doc.path});} - -/***/ }, - -/***/ 4839 -(module) { - -"use strict"; -module.exports = /*#__PURE__*/JSON.parse('{"id":"architecture","title":"CmdForge Architecture","description":"Module Structure","source":"@site/docs/architecture.md","sourceDirName":".","slug":"/architecture","permalink":"/rob/CmdForge/architecture","draft":false,"unlisted":false,"tags":[],"version":"current","sidebarPosition":2,"frontMatter":{"sidebar_position":2},"sidebar":"docs","previous":{"title":"CmdForge Overview","permalink":"/rob/CmdForge/"},"next":{"title":"Reference","permalink":"/rob/CmdForge/category/reference"}}'); - -/***/ }, - -/***/ 4848 -(module, __unused_webpack_exports, __webpack_require__) { - -"use strict"; - - -if (true) { - module.exports = __webpack_require__(9698); -} else // removed by dead control flow -{} - - -/***/ }, - -/***/ 4887 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ CodeBlockLine) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _theme_CodeBlock_Line_Token__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4745); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(3083); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// Replaces '\n' by '' -// Historical code, not sure why we even need this :/ -function fixLineBreak(line){const singleLineBreakToken=line.length===1&&line[0].content==='\n'?line[0]:undefined;if(singleLineBreakToken){return[{...singleLineBreakToken,content:''}];}return line;}function CodeBlockLine({line:lineProp,classNames,showLineNumbers,getLineProps,getTokenProps}){const line=fixLineBreak(lineProp);const lineProps=getLineProps({line,className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(classNames,showLineNumbers&&(_styles_module_css__WEBPACK_IMPORTED_MODULE_3___default().codeLine))});const lineTokens=line.map((token,key)=>{const tokenProps=getTokenProps({token});return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_theme_CodeBlock_Line_Token__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{...tokenProps,line:line,token:token,children:tokenProps.children},key);});return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)("span",{...lineProps,children:[showLineNumbers?/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.Fragment,{children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("span",{className:(_styles_module_css__WEBPACK_IMPORTED_MODULE_3___default().codeLineNumber)}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("span",{className:(_styles_module_css__WEBPACK_IMPORTED_MODULE_3___default().codeLineContent),children:lineTokens})]}):lineTokens,/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("br",{})]});} - -/***/ }, - -/***/ 4905 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6347); -/* harmony import */ var react_helmet_async__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(545); -/* harmony import */ var react_loadable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(3259); -/* harmony import */ var react_loadable__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_loadable__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _renderToHtml__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(5598); -/* harmony import */ var _preload__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(6877); -/* harmony import */ var _App__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(4607); -/* harmony import */ var _BrokenLinksContext__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(5643); -/* harmony import */ var _serverHelmetUtils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(3587); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */const render=async({pathname,v4RemoveLegacyPostBuildHeadAttribute})=>{await (0,_preload__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A)(pathname);const modules=new Set();const routerContext={};const helmetContext={};const statefulBrokenLinks=(0,_BrokenLinksContext__WEBPACK_IMPORTED_MODULE_7__/* .createStatefulBrokenLinks */ .$3)();const app=/*#__PURE__*/// @ts-expect-error: we are migrating away from react-loadable anyways -(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)((react_loadable__WEBPACK_IMPORTED_MODULE_3___default().Capture),{report:moduleName=>modules.add(moduleName),children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(react_helmet_async__WEBPACK_IMPORTED_MODULE_2__/* .HelmetProvider */ .vd,{context:helmetContext,children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(react_router_dom__WEBPACK_IMPORTED_MODULE_1__/* .StaticRouter */ .kO,{location:pathname,context:routerContext,children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(_BrokenLinksContext__WEBPACK_IMPORTED_MODULE_7__/* .BrokenLinksProvider */ .k5,{brokenLinks:statefulBrokenLinks,children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(_App__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A,{})})})})});const html=await (0,_renderToHtml__WEBPACK_IMPORTED_MODULE_4__/* .renderToHtml */ .b)(app);const{helmet}=helmetContext;const metadata=(0,_serverHelmetUtils__WEBPACK_IMPORTED_MODULE_8__/* .toPageCollectedMetadataInternal */ .I)({helmet});// TODO Docusaurus v4 remove with deprecated postBuild({head}) API -// the returned collectedData must be serializable to run in workers -if(v4RemoveLegacyPostBuildHeadAttribute){metadata.helmet=null;}const collectedData={metadata,anchors:statefulBrokenLinks.getCollectedAnchors(),links:statefulBrokenLinks.getCollectedLinks(),modules:Array.from(modules)};return{html,collectedData};};/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (render); - -/***/ }, - -/***/ 4935 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ ContentVisibility) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _theme_ContentVisibility_Draft__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1203); -/* harmony import */ var _theme_ContentVisibility_Unlisted__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2234); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function ContentVisibility({metadata}){const{unlisted,frontMatter}=metadata;// Reading draft/unlisted status from frontMatter is useful to display -// the banners in dev mode (in dev, metadata.unlisted is always false) -// See https://github.com/facebook/docusaurus/issues/8285 -return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.Fragment,{children:[(unlisted||frontMatter.unlisted)&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_theme_ContentVisibility_Unlisted__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{}),frontMatter.draft&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_theme_ContentVisibility_Draft__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A,{})]});} - -/***/ }, - -/***/ 4943 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ IconSystemColorMode) -/* harmony export */ }); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function IconSystemColorMode(props){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...props,children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path",{fill:"currentColor",d:"m12 21c4.971 0 9-4.029 9-9s-4.029-9-9-9-9 4.029-9 9 4.029 9 9 9zm4.95-13.95c1.313 1.313 2.05 3.093 2.05 4.95s-0.738 3.637-2.05 4.95c-1.313 1.313-3.093 2.05-4.95 2.05v-14c1.857 0 3.637 0.737 4.95 2.05z"})});} - -/***/ }, - -/***/ 4950 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _home_rob_PycharmProjects_project_docs_temp_build_cmdforge_node_modules_babel_runtime_helpers_esm_interopRequireWildcard_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(9867); -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({"0330220f":[()=>Promise.resolve().then(()=>(0,_home_rob_PycharmProjects_project_docs_temp_build_cmdforge_node_modules_babel_runtime_helpers_esm_interopRequireWildcard_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(__webpack_require__(2052))),"@site/docs/reference/meta-tools.md",/*require.resolve*/(2052)],"14eb3368":[()=>Promise.resolve().then(()=>(0,_home_rob_PycharmProjects_project_docs_temp_build_cmdforge_node_modules_babel_runtime_helpers_esm_interopRequireWildcard_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(__webpack_require__(8780))),"@theme/DocCategoryGeneratedIndexPage",/*require.resolve*/(8780)],"17896441":[()=>Promise.resolve().then(()=>(0,_home_rob_PycharmProjects_project_docs_temp_build_cmdforge_node_modules_babel_runtime_helpers_esm_interopRequireWildcard_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(__webpack_require__(6915))),"@theme/DocItem",/*require.resolve*/(6915)],"1db64337":[()=>Promise.resolve().then(()=>(0,_home_rob_PycharmProjects_project_docs_temp_build_cmdforge_node_modules_babel_runtime_helpers_esm_interopRequireWildcard_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(__webpack_require__(3022))),"@site/docs/overview.md",/*require.resolve*/(3022)],"1db78e9f":[()=>Promise.resolve().then(()=>(0,_home_rob_PycharmProjects_project_docs_temp_build_cmdforge_node_modules_babel_runtime_helpers_esm_interopRequireWildcard_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(__webpack_require__(9840))),"@site/docs/todos.md",/*require.resolve*/(9840)],"263e9506":[()=>Promise.resolve().then(()=>(0,_home_rob_PycharmProjects_project_docs_temp_build_cmdforge_node_modules_babel_runtime_helpers_esm_interopRequireWildcard_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(__webpack_require__(7909))),"@site/docs/reference/collections.md",/*require.resolve*/(7909)],"28c758de":[()=>Promise.resolve().then(()=>(0,_home_rob_PycharmProjects_project_docs_temp_build_cmdforge_node_modules_babel_runtime_helpers_esm_interopRequireWildcard_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(__webpack_require__(7411))),"@generated/docusaurus-plugin-content-docs/default/p/rob-cmd-forge-category-reference-7cf.json",/*require.resolve*/(7411)],"387720e6":[()=>Promise.resolve().then(()=>(0,_home_rob_PycharmProjects_project_docs_temp_build_cmdforge_node_modules_babel_runtime_helpers_esm_interopRequireWildcard_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(__webpack_require__(9494))),"@site/docs/reference/registry-spec.md",/*require.resolve*/(9494)],"3fbf7384":[()=>Promise.resolve().then(()=>(0,_home_rob_PycharmProjects_project_docs_temp_build_cmdforge_node_modules_babel_runtime_helpers_esm_interopRequireWildcard_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(__webpack_require__(5253))),"@generated/docusaurus-plugin-content-docs/default/p/rob-cmd-forge-3f4.json",/*require.resolve*/(5253)],"5281b7a2":[()=>Promise.resolve().then(()=>(0,_home_rob_PycharmProjects_project_docs_temp_build_cmdforge_node_modules_babel_runtime_helpers_esm_interopRequireWildcard_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(__webpack_require__(8798))),"@site/docs/architecture.md",/*require.resolve*/(8798)],"5e95c892":[()=>Promise.resolve().then(()=>(0,_home_rob_PycharmProjects_project_docs_temp_build_cmdforge_node_modules_babel_runtime_helpers_esm_interopRequireWildcard_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(__webpack_require__(7121))),"@theme/DocsRoot",/*require.resolve*/(7121)],"5eebbccf":[()=>Promise.resolve().then(()=>(0,_home_rob_PycharmProjects_project_docs_temp_build_cmdforge_node_modules_babel_runtime_helpers_esm_interopRequireWildcard_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(__webpack_require__(5821))),"@site/docs/goals.md",/*require.resolve*/(5821)],"6704ba13":[()=>Promise.resolve().then(()=>(0,_home_rob_PycharmProjects_project_docs_temp_build_cmdforge_node_modules_babel_runtime_helpers_esm_interopRequireWildcard_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(__webpack_require__(2525))),"@site/docs/reference/providers.md",/*require.resolve*/(2525)],"817f7194":[()=>Promise.resolve().then(()=>(0,_home_rob_PycharmProjects_project_docs_temp_build_cmdforge_node_modules_babel_runtime_helpers_esm_interopRequireWildcard_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(__webpack_require__(5102))),"@site/docs/milestones.md",/*require.resolve*/(5102)],"9bb76ab4":[()=>Promise.resolve().then(()=>(0,_home_rob_PycharmProjects_project_docs_temp_build_cmdforge_node_modules_babel_runtime_helpers_esm_interopRequireWildcard_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(__webpack_require__(2141))),"@site/docs/reference/design.md",/*require.resolve*/(2141)],"a7bd4aaa":[()=>Promise.resolve().then(()=>(0,_home_rob_PycharmProjects_project_docs_temp_build_cmdforge_node_modules_babel_runtime_helpers_esm_interopRequireWildcard_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(__webpack_require__(4532))),"@theme/DocVersionRoot",/*require.resolve*/(4532)],"a94703ab":[()=>Promise.resolve().then(()=>(0,_home_rob_PycharmProjects_project_docs_temp_build_cmdforge_node_modules_babel_runtime_helpers_esm_interopRequireWildcard_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(__webpack_require__(8944))),"@theme/DocRoot",/*require.resolve*/(8944)],"aba21aa0":[()=>Promise.resolve().then(()=>(0,_home_rob_PycharmProjects_project_docs_temp_build_cmdforge_node_modules_babel_runtime_helpers_esm_interopRequireWildcard_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(__webpack_require__(7093))),"@generated/docusaurus-plugin-content-docs/default/__plugin.json",/*require.resolve*/(7093)],"de715384":[()=>Promise.resolve().then(()=>(0,_home_rob_PycharmProjects_project_docs_temp_build_cmdforge_node_modules_babel_runtime_helpers_esm_interopRequireWildcard_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(__webpack_require__(5552))),"@site/docs/reference/examples.md",/*require.resolve*/(5552)],"e719f3dc":[()=>Promise.resolve().then(()=>(0,_home_rob_PycharmProjects_project_docs_temp_build_cmdforge_node_modules_babel_runtime_helpers_esm_interopRequireWildcard_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(__webpack_require__(7037))),"@site/docs/ideas-and-exploration.md",/*require.resolve*/(7037)],"edbf8f3a":[()=>Promise.resolve().then(()=>(0,_home_rob_PycharmProjects_project_docs_temp_build_cmdforge_node_modules_babel_runtime_helpers_esm_interopRequireWildcard_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(__webpack_require__(230))),"@site/docs/reference/web-ui-spec.md",/*require.resolve*/(230)]}); - -/***/ }, - -/***/ 5041 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ M: () => (/* binding */ useAnnouncementBar), -/* harmony export */ o: () => (/* binding */ AnnouncementBarProvider) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_useIsBrowser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2303); -/* harmony import */ var _utils_storageUtils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(9466); -/* harmony import */ var _utils_reactUtils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9532); -/* harmony import */ var _utils_useThemeConfig__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(6342); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// Keep these keys in sync with the inlined script -// See packages/docusaurus-theme-classic/src/inlineScripts.ts -const AnnouncementBarDismissStorage=(0,_utils_storageUtils__WEBPACK_IMPORTED_MODULE_2__/* .createStorageSlot */ .Wf)('docusaurus.announcement.dismiss');const IdStorage=(0,_utils_storageUtils__WEBPACK_IMPORTED_MODULE_2__/* .createStorageSlot */ .Wf)('docusaurus.announcement.id');const isDismissedInStorage=()=>AnnouncementBarDismissStorage.get()==='true';const setDismissedInStorage=bool=>AnnouncementBarDismissStorage.set(String(bool));const Context=/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(null);function useContextValue(){const{announcementBar}=(0,_utils_useThemeConfig__WEBPACK_IMPORTED_MODULE_4__/* .useThemeConfig */ .p)();const isBrowser=(0,_docusaurus_useIsBrowser__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)();const[isClosed,setClosed]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(()=>isBrowser?// On client navigation: init with local storage value -isDismissedInStorage():// On server/hydration: always visible to prevent layout shifts (will be hidden with css if needed) -false);// Update state after hydration -(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{setClosed(isDismissedInStorage());},[]);const handleClose=(0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>{setDismissedInStorage(true);setClosed(true);},[]);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{if(!announcementBar){return;}const{id}=announcementBar;let viewedId=IdStorage.get();// Retrocompatibility due to spelling mistake of default id -// see https://github.com/facebook/docusaurus/issues/3338 -// cSpell:ignore annoucement -if(viewedId==='annoucement-bar'){viewedId='announcement-bar';}const isNewAnnouncement=id!==viewedId;IdStorage.set(id);if(isNewAnnouncement){setDismissedInStorage(false);}if(isNewAnnouncement||!isDismissedInStorage()){setClosed(false);}},[announcementBar]);return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>({isActive:!!announcementBar&&!isClosed,close:handleClose}),[announcementBar,isClosed,handleClose]);}function AnnouncementBarProvider({children}){const value=useContextValue();return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(Context.Provider,{value:value,children:children});}function useAnnouncementBar(){const api=(0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(Context);if(!api){throw new _utils_reactUtils__WEBPACK_IMPORTED_MODULE_3__/* .ReactContextError */ .dV('AnnouncementBarProvider');}return api;} - -/***/ }, - -/***/ 5044 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ ThemedComponent) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_useIsBrowser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2303); -/* harmony import */ var _contexts_colorMode__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(5293); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(6878); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */const AllThemes=(/* unused pure expression or super */ null && (['light','dark']));/** - * Generic component to render anything themed in light/dark - * Note: it's preferable to use CSS for theming because this component - * will need to render all the variants during SSR to avoid a theme flash. - * - * Use this only when CSS customizations are not convenient or impossible. - * For example, rendering themed images or SVGs... - * - * @param className applied to all the variants - * @param children function to render a theme variant - * @constructor - */function ThemedComponent({className,children}){const isBrowser=(0,_docusaurus_useIsBrowser__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)();const{colorMode}=(0,_contexts_colorMode__WEBPACK_IMPORTED_MODULE_3__/* .useColorMode */ .G)();function getThemesToRender(){if(isBrowser){return colorMode==='dark'?['dark']:['light'];}// We need to render both components on the server / hydration to avoid: -// - a flash of wrong theme before hydration -// - React hydration mismatches -// See https://github.com/facebook/docusaurus/pull/3730 -return['light','dark'];}return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.Fragment,{children:getThemesToRender().map(theme=>{const themedElement=children({theme,className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(className,(_styles_module_css__WEBPACK_IMPORTED_MODULE_4___default().themedComponent),(_styles_module_css__WEBPACK_IMPORTED_MODULE_4___default())[`themedComponent--${theme}`])});return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment,{children:themedElement},theme);})});} - -/***/ }, - -/***/ 5048 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ IconWordWrap) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function IconWordWrap(props){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("svg",{viewBox:"0 0 24 24",...props,children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})});} - -/***/ }, - -/***/ 5062 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ $: () => (/* binding */ useLocationChange) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6347); -/* harmony import */ var _reactUtils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(9532); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - *//** - * Fires an effect when the location changes (which includes hash, query, etc.). - * Importantly, doesn't fire when there's no previous location: see - * https://github.com/facebook/docusaurus/pull/6696 - */function useLocationChange(onLocationChange){const location=(0,_docusaurus_router__WEBPACK_IMPORTED_MODULE_1__/* .useLocation */ .zy)();const previousLocation=(0,_reactUtils__WEBPACK_IMPORTED_MODULE_2__/* .usePrevious */ .ZC)(location);const onLocationChangeDynamic=(0,_reactUtils__WEBPACK_IMPORTED_MODULE_2__/* .useEvent */ ._q)(onLocationChange);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{if(!previousLocation){return;}if(location!==previousLocation){onLocationChangeDynamic({location,previousLocation});}},[onLocationChangeDynamic,location,previousLocation]);} - -/***/ }, - -/***/ 5102 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ assets: () => (/* binding */ assets), -/* harmony export */ contentTitle: () => (/* binding */ contentTitle), -/* harmony export */ "default": () => (/* binding */ MDXContent), -/* harmony export */ frontMatter: () => (/* binding */ frontMatter), -/* harmony export */ metadata: () => (/* reexport default export from named module */ _site_docusaurus_docusaurus_plugin_content_docs_default_site_docs_milestones_md_817_json__WEBPACK_IMPORTED_MODULE_0__), -/* harmony export */ toc: () => (/* binding */ toc) -/* harmony export */ }); -/* harmony import */ var _site_docusaurus_docusaurus_plugin_content_docs_default_site_docs_milestones_md_817_json__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1970); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4848); -/* harmony import */ var _mdx_js_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(8453); - - -const frontMatter = { - type: 'milestones', - project: 'cmdforge', - updated: new Date('2026-01-17T00:00:00.000Z') -}; -const contentTitle = 'Milestones'; - -const assets = { - -}; - - - -const toc = [{ - "value": "Active", - "id": "active", - "level": 2 -}, { - "value": "Completed", - "id": "completed", - "level": 2 -}, { - "value": "M5: Testing & Polish", - "id": "m5-testing--polish", - "level": 4 -}, { - "value": "M0: Core Platform", - "id": "m0-core-platform", - "level": 4 -}, { - "value": "M1: Production Ready", - "id": "m1-production-ready", - "level": 4 -}, { - "value": "M2: Tool Discovery", - "id": "m2-tool-discovery", - "level": 4 -}, { - "value": "M3: Content & Automation", - "id": "m3-content--automation", - "level": 4 -}, { - "value": "M4: User Experience", - "id": "m4-user-experience", - "level": 4 -}]; -function _createMdxContent(props) { - const _components = { - code: "code", - h1: "h1", - h2: "h2", - h4: "h4", - header: "header", - hr: "hr", - p: "p", - strong: "strong", - table: "table", - tbody: "tbody", - td: "td", - th: "th", - thead: "thead", - tr: "tr", - ...(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__/* .useMDXComponents */ .R)(), - ...props.components - }; - return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.Fragment, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.header, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h1, { - id: "milestones", - children: "Milestones" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "active", - children: "Active" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "(none)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.hr, {}), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "completed", - children: "Completed" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h4, { - id: "m5-testing--polish", - children: "M5: Testing & Polish" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Target" - }), ": Q1 2027\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Status" - }), ": Completed (100%)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: ["Testing framework, theming, and version management. ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Project dependencies" - }), " (completed): - ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "cmdforge.yaml" - }), " manifest format for declaring tool dependencies - ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "cmdforge install" - }), " to install all dependencies from manifest - ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "cmdforge add official/toolname" - }), " to add a dependency to manifest - Automatic dependency checking before running meta-tools. ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Tool testing framework" - }), " includes: - TestStepDialog for interactive step testing from GUI - Test button in Tool Builder to test individual steps - Variable input forms auto-detect ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "{variable}" - }), " references from step templates - Multiple assertion types (not_empty, contains, valid_json, matches_regex, min/max_length, etc.) - Background execution with timing metrics - Output variable display and assertion pass/fail results - Provider override for testing with mock provider"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Deliverable" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Status" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Tool testing framework" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Simple theming (external QSS files)" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Dark mode" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Tool versioning support" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Version constraints in manifests" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.td, { - children: ["Project dependency system (", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "cmdforge install" - }), ")"] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.td, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "cmdforge add" - }), " command"] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Dependency resolution for meta-tools" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.hr, {}), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h4, { - id: "m0-core-platform", - children: "M0: Core Platform" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Target" - }), ": December 2025\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Status" - }), ": Completed (100%)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "The foundational CmdForge platform with AI-powered CLI tool builder, YAML tool definitions, web UI, offline caching, and provider abstraction." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Deliverable" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Status" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "YAML tool definition system" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "CLI entry point and subcommands" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Provider abstraction layer" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Offline caching for tools" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Web UI for tool browsing" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Tool execution engine" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.hr, {}), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h4, { - id: "m1-production-ready", - children: "M1: Production Ready" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Target" - }), ": February 2026\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Status" - }), ": Completed (100%)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Production deployment with proper server configuration, complete documentation, and improved reliability." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Deliverable" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Status" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Public documentation" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Systemd service setup" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Gunicorn production server" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Systemd linger for persistence" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "CI/CD pipeline" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Error message improvements" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Source field display in web UI" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.hr, {}), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h4, { - id: "m2-tool-discovery", - children: "M2: Tool Discovery" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Target" - }), ": Q2 2026\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Status" - }), ": Completed (100%)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: ["Enable users to discover, rate, and share tools through a marketplace interface with curation to maintain quality. ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Tool search and filtering" - }), " includes: - ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/api/v1/tags" - }), " endpoint for listing tags with counts - Advanced search with tag filtering (AND logic), multi-category (OR logic), owner, download range, date range - Faceted search responses with category/tag/owner counts - CLI: ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "--tag" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "--owner" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "--min-downloads" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "--popular" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "--since" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "--json" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "--show-facets" - }), " options - CLI: ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "registry tags" - }), " subcommand - Web UI: Filter sidebar with checkboxes, dropdowns, active filter chips, URL-based state ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "PySide6 GUI conversion" - }), " includes: - Modern desktop GUI replacing urwid TUI - Sidebar navigation (My Tools, Registry, Providers, Profiles) - Tool Builder with visual form for creating/editing tools - Keyboard shortcuts (Ctrl+N, Ctrl+S, Ctrl+R, Ctrl+1/2/3/4, Escape, Ctrl+Q) - Window geometry persistence ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "GUI Registry browser" - }), " includes: - Browse/search tools with category and sort filters - Star ratings display in table and details - Clickable tags for filtering - Installed indicator (✓) and update available (↑) - Pagination for large result sets - Publisher reputation info ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "GUI Publishing" - }), " includes: - Connect dialog with polling-based account pairing - Publish workflow with version selection - Full publish workflow with confirmation ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Infrastructure improvements" - }), ": - ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "Dockerfile.test-install" - }), ": Fresh environment for testing installer - ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "Dockerfile.ready" - }), ": Pre-installed container for quick usage - ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "install.sh" - }), ": Interactive installer with venv, PATH setup, optional example tools - Database migration: Auto-adds missing columns on server start ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Registry curation system" - }), " includes: - Role-based access control (user, moderator, admin) - Tool moderation workflow (pending → approved/rejected/removed) - Publisher management (ban/unban, role changes) - Private/unlisted tool visibility (auto-approved, owner-only access) - Audit logging for all moderation actions - Admin web UI pages (pending queue, publishers, reports, audit log) - Report resolution workflow ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "App pairing/connection flow" - }), " includes: - ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "cmdforge config connect <username>" - }), " CLI command - GUI Connect dialog with polling-based approval - Web UI \"Connections\" page (replaces API Tokens) - Device hostname tracking for connected apps ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Tool ratings/reviews" - }), " includes: - 5-star rating system with review text - Average rating display on tool cards - Publisher reputation scores - Rating count and distribution ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Tool marketplace UI enhancements" - }), " includes: - Browse all tools on page load - Category filter dropdown - Sort by popularity, rating, newest, name - Clickable tags for filtering - Installed/update indicators - Pagination controls ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "AI persona profiles" - }), " includes: - Profile dataclass with name, description, system_prompt - 8 built-in profiles (Comedian, Technical Writer, Teacher, Concise, Creative, Code Reviewer, Analyst) - Custom profile creation and storage - Profile selector in Prompt Step dialog - Profile injection during tool execution - Profiles page in GUI (Ctrl+4) ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "AI-assisted code generation" - }), " includes: - Split-view Code Step dialog (editor + AI assist panel) - Provider selector for AI calls - Smart prompt template with available variables - Background thread for non-blocking AI calls - Automatic markdown fence stripping - Python syntax checking before save"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Deliverable" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Status" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Tool search and filtering" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "PySide6 GUI conversion" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "GUI Registry browser" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "GUI Publishing with connect flow" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Docker containers (test + ready)" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Interactive installer script" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Database migration system" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Registry curation system" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "App pairing/connection flow" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Tool ratings/reviews" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Tool marketplace UI enhancements" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "AI persona profiles" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "AI-assisted code generation" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.hr, {}), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h4, { - id: "m3-content--automation", - children: "M3: Content & Automation" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Target" - }), ": Q3 2026\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Status" - }), ": Completed (100%)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: ["Automated content ingestion and quality assurance for the tool ecosystem. ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Import Fabric patterns" - }), " includes: - Run existing ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "scripts/import_fabric.py" - }), " to populate registry - Automatic attribution with source fields (imported, MIT license, Daniel Miessler) - Category mapping based on pattern name prefixes - README generation with original pattern attribution ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Auto-vetting pipeline" - }), " includes: - Integration with existing ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "scrutiny.py" - }), " (honesty, transparency, scope, efficiency checks) - Integration with existing ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "similarity.py" - }), " (duplicate detection) - Auto-approve/review/reject decision logic - Helpful suggestions for tool improvements ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Scheduled sync" - }), " includes: - Periodic checks for Fabric repo updates - Automatic import of new patterns - Version tracking for updated patterns - Admin notifications for review queue"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Deliverable" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Status" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Import Fabric patterns (233 total)" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Scheduled Fabric repo sync" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Auto-vetting pipeline integration" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Community tool submissions workflow" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Duplicate detection automation" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.hr, {}), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h4, { - id: "m4-user-experience", - children: "M4: User Experience" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Target" - }), ": Q4 2026\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Status" - }), ": Completed (87%)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: ["Visual improvements, interactive guidance, and missing registry features. ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Collections CLI commands" - }), " includes: - ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "cmdforge collections list" - }), " - List available collections with tool counts - ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "cmdforge collections info <name>" - }), " - Show collection details with tool list - ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "cmdforge collections install <name>" - }), " - Install all tools in a collection - ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "--json" - }), " flag for machine-readable output - ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "--pinned" - }), " flag to use pinned versions from collection ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Admin collections management" - }), " includes: - Admin dashboard page at ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/dashboard/admin/collections" - }), " - Create/edit/delete collections via web UI - Tool reference input with version pinning - Admin API endpoints (GET/POST/PUT/DELETE) ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Password reset flow" - }), " includes: - ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/forgot-password" - }), " page with email input form - ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/reset-password?token=xxx" - }), " page with new password form - API endpoints: request, validate, complete password reset - Email utility module (logs to console in dev mode, SMTP-ready for production) - Security: 1-hour token expiry, single-use tokens, rate limiting (5/hour per IP, 3/hour per email) - Session invalidation on password change - Email enumeration prevention (always returns success message) ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Visual node-based editor" - }), " includes: - NodeGraphQt-based flow visualization (", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "flow_graph.py" - }), ") - Custom node types: InputNode, PromptNode, CodeNode, OutputNode - Visual connections showing data flow between steps - Double-click nodes to edit steps - Auto-layout with fit-to-view - Keyboard shortcuts (A: select all, F: fit view) - Context menu for common actions - Help banner overlay with controls ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Drag-and-drop step reordering" - }), " includes: - Drag-drop reordering in list view - Reordering support from flow view - Variable dependency warnings when reordering breaks references - Automatic step index updates ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Tool visualization improvements" - }), " includes: - Flow graph widget showing tool execution pipeline - Color-coded nodes by step type (indigo=prompt, green=code, purple=tool) - Input/output port visualization - Variable flow connections between steps ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Tool composition and chaining UI" - }), " includes: - ToolStep data class for calling other tools as pipeline steps - ToolStepDialog for configuring tool steps (tool selection, input mapping, args) - \"Add Tool\" button in Tool Builder alongside Add Prompt/Add Code - ToolNode in flow graph visualization (purple node) - Input template with variable substitution from previous steps - Argument passing with variable substitution - Provider override option for nested tool calls - Recursion depth protection (max 10 levels) - Dependency checking and missing tool warnings - Auto-populate dependencies when adding ToolStep in GUI - ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "--auto-install" - }), " flag for automatic dependency installation at runtime ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Interactive walkthroughs" - }), " includes: - First-time user onboarding - Guided tool creation tutorial - Feature discovery tooltips - Context-sensitive help"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Deliverable" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Status" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Collections CLI commands" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Admin collections management UI" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Visual node-based step editor" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Interactive onboarding walkthroughs" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Not Started" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Tool visualization improvements" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Tool composition and chaining UI" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Drag-and-drop step reordering" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Password reset flow" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.hr, {})] - }); -} -function MDXContent(props = {}) { - const {wrapper: MDXLayout} = { - ...(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__/* .useMDXComponents */ .R)(), - ...props.components - }; - return MDXLayout ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(MDXLayout, { - ...props, - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_createMdxContent, { - ...props - }) - }) : _createMdxContent(props); -} - - - -/***/ }, - -/***/ 5114 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ MaybeBaseUrlIssueBanner) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6347); -/* harmony import */ var _docusaurus_Head__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5260); -/* harmony import */ var _docusaurus_ExecutionEnvironment__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(8193); -/* harmony import */ var _docusaurus_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4586); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(9832); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// Double-security: critical CSS will hide the banner if CSS can load! -// __ prefix allows search crawlers (Algolia/DocSearch) to ignore anchors -// https://github.com/facebook/docusaurus/issues/8883#issuecomment-1516328368 -const BannerContainerId='__docusaurus-base-url-issue-banner-container';const BannerId='__docusaurus-base-url-issue-banner';const SuggestionContainerId='__docusaurus-base-url-issue-banner-suggestion-container';// It is important to not use React to render this banner -// otherwise Google would index it, even if it's hidden with some critical CSS! -// See https://github.com/facebook/docusaurus/issues/4028 -// - We can't SSR (or it would be indexed) -// - We can't CSR (as it means the baseurl is correct) -function createInlineHtmlBanner(baseUrl){return` -<div id="${BannerId}" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;"> - <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p> - <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseUrl" style="font-weight: bold;">baseUrl configuration</a>.</p> - <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">${baseUrl}</span> ${baseUrl==='/'?' (default value)':''}</p> - <p>We suggest trying baseUrl = <span id="${SuggestionContainerId}" style="font-weight: bold; color: green;"></span></p> -</div> -`;}// Needs to work for older browsers! -function createInlineScript(baseUrl){/* language=js */return` -document.addEventListener('DOMContentLoaded', function maybeInsertBanner() { - var shouldInsert = typeof window['docusaurus'] === 'undefined'; - shouldInsert && insertBanner(); -}); - -function insertBanner() { - var bannerContainer = document.createElement('div'); - bannerContainer.id = '${BannerContainerId}'; - var bannerHtml = ${JSON.stringify(createInlineHtmlBanner(baseUrl))// See https://redux.js.org/recipes/server-rendering/#security-considerations -.replace(/</g,'\\\u003c')}; - bannerContainer.innerHTML = bannerHtml; - document.body.prepend(bannerContainer); - var suggestionContainer = document.getElementById('${SuggestionContainerId}'); - var actualHomePagePath = window.location.pathname; - var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/' - ? actualHomePagePath - : actualHomePagePath + '/'; - suggestionContainer.innerHTML = suggestedBaseUrl; -} -`;}function BaseUrlIssueBanner(){const{siteConfig:{baseUrl}}=(0,_docusaurus_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A)();return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment,{children:!_docusaurus_ExecutionEnvironment__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A.canUseDOM&&/*#__PURE__*/// Safe to use `ExecutionEnvironment`, because `Head` is purely -// side-effect and doesn't affect hydration -(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_docusaurus_Head__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("script",{children:createInlineScript(baseUrl)})})});}/** - * We want to help the users with a bad baseUrl configuration (very common - * error). Help message is inlined, and hidden if JS or CSS is able to load. - * - * This component only inserts the base URL banner for the homepage, to avoid - * polluting every statically rendered page. - * - * Note: it might create false positives (ie network failures): not a big deal - * - * @see https://github.com/facebook/docusaurus/pull/3621 - */function MaybeBaseUrlIssueBanner(){const{siteConfig:{baseUrl,baseUrlIssueBanner}}=(0,_docusaurus_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A)();const{pathname}=(0,_docusaurus_router__WEBPACK_IMPORTED_MODULE_1__/* .useLocation */ .zy)();const isHomePage=pathname===baseUrl;const enabled=baseUrlIssueBanner&&isHomePage;return enabled?/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(BaseUrlIssueBanner,{}):null;} - -/***/ }, - -/***/ 5144 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ Navbar) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _theme_Navbar_Layout__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5419); -/* harmony import */ var _theme_Navbar_Content__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7182); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function Navbar(){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_theme_Navbar_Layout__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A,{children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_theme_Navbar_Content__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{})});} - -/***/ }, - -/***/ 5146 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ DocItemLayout) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4581); -/* harmony import */ var _docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(542); -/* harmony import */ var _theme_DocItem_Paginator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(3679); -/* harmony import */ var _theme_DocVersionBanner__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(1878); -/* harmony import */ var _theme_DocVersionBadge__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(4267); -/* harmony import */ var _theme_DocItem_Footer__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(3223); -/* harmony import */ var _theme_DocItem_TOC_Mobile__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(9021); -/* harmony import */ var _theme_DocItem_TOC_Desktop__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(2217); -/* harmony import */ var _theme_DocItem_Content__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(7325); -/* harmony import */ var _theme_DocBreadcrumbs__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(9978); -/* harmony import */ var _theme_ContentVisibility__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(4935); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(6024); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_13__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - *//** - * Decide if the toc should be rendered, on mobile or desktop viewports - */function useDocTOC(){const{frontMatter,toc}=(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_3__/* .useDoc */ .u)();const windowSize=(0,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__/* .useWindowSize */ .l)();const hidden=frontMatter.hide_table_of_contents;const canRender=!hidden&&toc.length>0;const mobile=canRender?/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_theme_DocItem_TOC_Mobile__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .A,{}):undefined;const desktop=canRender&&(windowSize==='desktop'||windowSize==='ssr')?/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_theme_DocItem_TOC_Desktop__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .A,{}):undefined;return{hidden,mobile,desktop};}function DocItemLayout({children}){const docTOC=useDocTOC();const{metadata}=(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_3__/* .useDoc */ .u)();return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)("div",{className:"row",children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)("div",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('col',!docTOC.hidden&&(_styles_module_css__WEBPACK_IMPORTED_MODULE_13___default().docItemCol)),children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_theme_ContentVisibility__WEBPACK_IMPORTED_MODULE_12__/* ["default"] */ .A,{metadata:metadata}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_theme_DocVersionBanner__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A,{}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)("div",{className:(_styles_module_css__WEBPACK_IMPORTED_MODULE_13___default().docItemContainer),children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)("article",{children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_theme_DocBreadcrumbs__WEBPACK_IMPORTED_MODULE_11__/* ["default"] */ .A,{}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_theme_DocVersionBadge__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A,{}),docTOC.mobile,/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_theme_DocItem_Content__WEBPACK_IMPORTED_MODULE_10__/* ["default"] */ .A,{children:children}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_theme_DocItem_Footer__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A,{})]}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_theme_DocItem_Paginator__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A,{})]})]}),docTOC.desktop&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)("div",{className:"col col--3",children:docTOC.desktop})]});} - -/***/ }, - -/***/ 5236 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ K: () => (/* binding */ SkipToContentLink), -/* harmony export */ j: () => (/* binding */ SkipToContentFallbackId) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6347); -/* harmony import */ var _docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(986); -/* harmony import */ var _useLocationChange__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(5062); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - *//** - * The id of the element that should become focused on a page - * that does not have a <main> html tag. - * Focusing the Docusaurus Layout children is a reasonable fallback. - * - * __ prefix allows search crawlers (Algolia/DocSearch) to ignore anchors - * https://github.com/facebook/docusaurus/issues/8883#issuecomment-1516328368 - */const SkipToContentFallbackId='__docusaurus_skipToContent_fallback';/** - * Returns the skip to content element to focus when the link is clicked. - */function getSkipToContentTarget(){return(// Try to focus the <main> in priority -// Note: this will only work if JS is enabled -// See https://github.com/facebook/docusaurus/issues/6411#issuecomment-1284136069 -document.querySelector('main:first-of-type')??// Then try to focus the fallback element (usually the Layout children) -document.getElementById(SkipToContentFallbackId));}function programmaticFocus(el){el.setAttribute('tabindex','-1');el.focus();el.removeAttribute('tabindex');}/** This hook wires the logic for a skip-to-content link. */function useSkipToContent(){const containerRef=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);const{action}=(0,_docusaurus_router__WEBPACK_IMPORTED_MODULE_1__/* .useHistory */ .W6)();const onClick=(0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(e=>{e.preventDefault();const targetElement=getSkipToContentTarget();if(targetElement){programmaticFocus(targetElement);}},[]);// "Reset" focus when navigating. -// See https://github.com/facebook/docusaurus/pull/8204#issuecomment-1276547558 -(0,_useLocationChange__WEBPACK_IMPORTED_MODULE_3__/* .useLocationChange */ .$)(({location})=>{if(containerRef.current&&!location.hash&&action==='PUSH'){programmaticFocus(containerRef.current);}});return{containerRef,onClick};}const DefaultSkipToContentLabel=(0,_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__/* .translate */ .T)({id:'theme.common.skipToMainContent',description:'The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation',message:'Skip to main content'});function SkipToContentLink(props){const linkLabel=props.children??DefaultSkipToContentLabel;const{containerRef,onClick}=useSkipToContent();return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("div",{ref:containerRef,role:"region","aria-label":DefaultSkipToContentLabel,children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("a",{...props,// Note this is a fallback href in case JS is disabled -// It has limitations, see https://github.com/facebook/docusaurus/issues/6411#issuecomment-1284136069 -href:`#${SkipToContentFallbackId}`,onClick:onClick,children:linkLabel})});} - -/***/ }, - -/***/ 5253 -(module) { - -"use strict"; -module.exports = /*#__PURE__*/JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docs":[{"type":"link","href":"/rob/CmdForge/","label":"CmdForge Overview","docId":"overview","unlisted":false},{"type":"link","href":"/rob/CmdForge/architecture","label":"CmdForge Architecture","docId":"architecture","unlisted":false},{"type":"category","label":"Reference","collapsible":true,"collapsed":true,"items":[{"type":"link","href":"/rob/CmdForge/reference/providers","label":"Provider Setup","docId":"reference/providers","unlisted":false},{"type":"link","href":"/rob/CmdForge/reference/registry-spec","label":"Registry API","docId":"reference/registry-spec","unlisted":false},{"type":"link","href":"/rob/CmdForge/reference/meta-tools","label":"Meta-Tools","docId":"reference/meta-tools","unlisted":false},{"type":"link","href":"/rob/CmdForge/reference/collections","label":"Collections","docId":"reference/collections","unlisted":false},{"type":"link","href":"/rob/CmdForge/reference/examples","label":"Example Tools","docId":"reference/examples","unlisted":false},{"type":"link","href":"/rob/CmdForge/reference/design","label":"Design Philosophy","docId":"reference/design","unlisted":false},{"type":"link","href":"/rob/CmdForge/reference/web-ui-spec","label":"Web UI Design","docId":"reference/web-ui-spec","unlisted":false}],"href":"/rob/CmdForge/category/reference"},{"type":"link","href":"/rob/CmdForge/todos","label":"CmdForge TODOs","docId":"todos","unlisted":false},{"type":"link","href":"/rob/CmdForge/goals","label":"Goals","docId":"goals","unlisted":false},{"type":"link","href":"/rob/CmdForge/ideas-and-exploration","label":"Ideas & Exploration","docId":"ideas-and-exploration","unlisted":false},{"type":"link","href":"/rob/CmdForge/milestones","label":"Milestones","docId":"milestones","unlisted":false}]},"docs":{"architecture":{"id":"architecture","title":"CmdForge Architecture","description":"Module Structure","sidebar":"docs"},"goals":{"id":"goals","title":"Goals","description":"Vision","sidebar":"docs"},"ideas-and-exploration":{"id":"ideas-and-exploration","title":"Ideas & Exploration","description":"Completed","sidebar":"docs"},"milestones":{"id":"milestones","title":"Milestones","description":"Active","sidebar":"docs"},"overview":{"id":"overview","title":"CmdForge Overview","description":"A lightweight personal tool builder for AI-powered CLI commands.","sidebar":"docs"},"reference/collections":{"id":"reference/collections","title":"CmdForge Collections","description":"Collections are curated groups of tools that can be installed together with a single command.","sidebar":"docs"},"reference/design":{"id":"reference/design","title":"CmdForge Design Document","description":"A lightweight personal tool builder for AI-powered CLI commands","sidebar":"docs"},"reference/examples":{"id":"reference/examples","title":"Example Tools","description":"CmdForge comes with 28 pre-built tools. This document shows their configurations and usage.","sidebar":"docs"},"reference/meta-tools":{"id":"reference/meta-tools","title":"Meta-Tools: Tools That Call Other Tools","description":"Meta-tools are CmdForge tools that can invoke other tools as steps in their workflow. This enables powerful composition and reuse of existing tools.","sidebar":"docs"},"reference/providers":{"id":"reference/providers","title":"Provider Setup Guide","description":"CmdForge works with any AI CLI tool that accepts input via stdin or arguments. This guide covers setup for the most popular providers.","sidebar":"docs"},"reference/registry-spec":{"id":"reference/registry-spec","title":"CmdForge Registry Design","description":"Purpose","sidebar":"docs"},"reference/web-ui-spec":{"id":"reference/web-ui-spec","title":"CmdForge Web UI Design","description":"Purpose","sidebar":"docs"},"todos":{"id":"todos","title":"CmdForge TODOs","description":"Active Tasks","sidebar":"docs"}}}}'); - -/***/ }, - -/***/ 5260 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ Head) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var react_helmet_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(545); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function Head(props){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(react_helmet_async__WEBPACK_IMPORTED_MODULE_1__/* .Helmet */ .mg,{...props});} - -/***/ }, - -/***/ 5293 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ G: () => (/* binding */ useColorMode), -/* harmony export */ a: () => (/* binding */ ColorModeProvider) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_useIsBrowser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2303); -/* harmony import */ var _utils_reactUtils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(9532); -/* harmony import */ var _utils_storageUtils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9466); -/* harmony import */ var _utils_useThemeConfig__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(6342); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function getSystemColorMode(){return window.matchMedia('(prefers-color-scheme: dark)').matches?'dark':'light';}function subscribeToMedia(query,listener){const mql=window.matchMedia(query);mql.addEventListener('change',listener);return()=>mql.removeEventListener('change',listener);}function subscribeToSystemColorModeChange(onChange){return subscribeToMedia('(prefers-color-scheme: dark)',()=>onChange(getSystemColorMode()));}const Context=/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(undefined);const ColorModeStorageKey='theme';const ColorModeStorage=(0,_utils_storageUtils__WEBPACK_IMPORTED_MODULE_3__/* .createStorageSlot */ .Wf)(ColorModeStorageKey);// We use data-theme-choice="system", not an absent attribute -// This is easier to handle for users with CSS -const SystemAttribute='system';// Ensure to always return a valid colorMode even if input is invalid -const coerceToColorMode=colorMode=>colorMode==='dark'?'dark':'light';const coerceToColorModeChoice=colorMode=>colorMode===null||colorMode===SystemAttribute?null:coerceToColorMode(colorMode);const ColorModeAttribute={get:()=>{return coerceToColorMode(document.documentElement.getAttribute('data-theme'));},set:colorMode=>{document.documentElement.setAttribute('data-theme',coerceToColorMode(colorMode));}};const ColorModeChoiceAttribute={get:()=>{return coerceToColorModeChoice(document.documentElement.getAttribute('data-theme-choice'));},set:colorMode=>{document.documentElement.setAttribute('data-theme-choice',coerceToColorModeChoice(colorMode)??SystemAttribute);}};const persistColorModeChoice=newColorMode=>{if(newColorMode===null){ColorModeStorage.del();}else{ColorModeStorage.set(coerceToColorMode(newColorMode));}};// The color mode state is initialized in useEffect on purpose -// to avoid a React hydration mismatch errors -// The useColorMode() hook value lags behind on purpose -// This helps users avoid hydration mismatch errors in their code -// See also https://github.com/facebook/docusaurus/issues/7986 -function useColorModeState(){const{colorMode:{defaultMode}}=(0,_utils_useThemeConfig__WEBPACK_IMPORTED_MODULE_4__/* .useThemeConfig */ .p)();const isBrowser=(0,_docusaurus_useIsBrowser__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)();// Since the provider may unmount/remount on client navigation, we need to -// reinitialize the state with the correct values to avoid visual glitches. -// See also https://github.com/facebook/docusaurus/issues/11399#issuecomment-3279181314 -const[colorMode,setColorModeState]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(isBrowser?ColorModeAttribute.get():defaultMode);const[colorModeChoice,setColorModeChoiceState]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(isBrowser?ColorModeChoiceAttribute.get():null);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{setColorModeState(ColorModeAttribute.get());setColorModeChoiceState(ColorModeChoiceAttribute.get());},[]);return{colorMode,setColorModeState,colorModeChoice,setColorModeChoiceState};}function useContextValue(){const{colorMode:{defaultMode,disableSwitch,respectPrefersColorScheme}}=(0,_utils_useThemeConfig__WEBPACK_IMPORTED_MODULE_4__/* .useThemeConfig */ .p)();const{colorMode,setColorModeState,colorModeChoice,setColorModeChoiceState}=useColorModeState();(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{// A site is deployed without disableSwitch -// => User visits the site and has a persisted value -// => Site later enabled disableSwitch -// => Clear the previously stored value to apply the site's setting -if(disableSwitch){ColorModeStorage.del();}},[disableSwitch]);const setColorMode=(0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((newColorModeChoice,options={})=>{const{persist=true}=options;// Reset to system/default color mode -if(newColorModeChoice===null){// Set the effective color -const newColorMode=respectPrefersColorScheme?getSystemColorMode():defaultMode;ColorModeAttribute.set(newColorMode);setColorModeState(newColorMode);// Set the chosen color -ColorModeChoiceAttribute.set(null);setColorModeChoiceState(null);}// Happy case, when an explicit color is provided -else{ColorModeAttribute.set(newColorModeChoice);ColorModeChoiceAttribute.set(newColorModeChoice);setColorModeState(newColorModeChoice);setColorModeChoiceState(newColorModeChoice);}if(persist){persistColorModeChoice(newColorModeChoice);}},[setColorModeState,setColorModeChoiceState,respectPrefersColorScheme,defaultMode]);// Synchronize theme color/choice mode with browser storage -(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{return ColorModeStorage.listen(e=>{setColorMode(coerceToColorModeChoice(e.newValue));});},[setColorMode]);// Synchronize theme color with system color -(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{if(colorModeChoice!==null||!respectPrefersColorScheme){return undefined;}return subscribeToSystemColorModeChange(newSystemColorMode=>{// Note: we don't use "setColorMode" on purpose -// The system changes should never be considered an explicit theme choice -// They only affect the "effective" color, and should never be persisted -// Note: this listener also fire when printing, see https://github.com/facebook/docusaurus/pull/6490 -setColorModeState(newSystemColorMode);ColorModeAttribute.set(newSystemColorMode);});},[respectPrefersColorScheme,colorModeChoice,setColorModeState]);return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>({colorMode,colorModeChoice,setColorMode,get isDarkTheme(){if(false)// removed by dead control flow -{}return colorMode==='dark';},setLightTheme(){if(false)// removed by dead control flow -{}setColorMode('light');},setDarkTheme(){if(false)// removed by dead control flow -{}setColorMode('dark');}}),[colorMode,colorModeChoice,setColorMode]);}function ColorModeProvider({children}){const value=useContextValue();return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(Context.Provider,{value:value,children:children});}function useColorMode(){const context=(0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(Context);if(context==null){throw new _utils_reactUtils__WEBPACK_IMPORTED_MODULE_2__/* .ReactContextError */ .dV('ColorModeProvider','Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.');}return context;} - -/***/ }, - -/***/ 5302 -(module, __unused_webpack_exports, __webpack_require__) { - -var isarray = __webpack_require__(4634) - -/** - * Expose `pathToRegexp`. - */ -module.exports = pathToRegexp -module.exports.parse = parse -module.exports.compile = compile -module.exports.tokensToFunction = tokensToFunction -module.exports.tokensToRegExp = tokensToRegExp - -/** - * The main path matching regexp utility. - * - * @type {RegExp} - */ -var PATH_REGEXP = new RegExp([ - // Match escaped characters that would otherwise appear in future matches. - // This allows the user to escape special characters that won't transform. - '(\\\\.)', - // Match Express-style parameters and un-named parameters with a prefix - // and optional suffixes. Matches appear as: - // - // "/:test(\\d+)?" => ["/", "test", "\d+", undefined, "?", undefined] - // "/route(\\d+)" => [undefined, undefined, undefined, "\d+", undefined, undefined] - // "/*" => ["/", undefined, undefined, undefined, undefined, "*"] - '([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))' -].join('|'), 'g') - -/** - * Parse a string for the raw tokens. - * - * @param {string} str - * @param {Object=} options - * @return {!Array} - */ -function parse (str, options) { - var tokens = [] - var key = 0 - var index = 0 - var path = '' - var defaultDelimiter = options && options.delimiter || '/' - var res - - while ((res = PATH_REGEXP.exec(str)) != null) { - var m = res[0] - var escaped = res[1] - var offset = res.index - path += str.slice(index, offset) - index = offset + m.length - - // Ignore already escaped sequences. - if (escaped) { - path += escaped[1] - continue - } - - var next = str[index] - var prefix = res[2] - var name = res[3] - var capture = res[4] - var group = res[5] - var modifier = res[6] - var asterisk = res[7] - - // Push the current path onto the tokens. - if (path) { - tokens.push(path) - path = '' - } - - var partial = prefix != null && next != null && next !== prefix - var repeat = modifier === '+' || modifier === '*' - var optional = modifier === '?' || modifier === '*' - var delimiter = prefix || defaultDelimiter - var pattern = capture || group - var prevText = prefix || (typeof tokens[tokens.length - 1] === 'string' ? tokens[tokens.length - 1] : '') - - tokens.push({ - name: name || key++, - prefix: prefix || '', - delimiter: delimiter, - optional: optional, - repeat: repeat, - partial: partial, - asterisk: !!asterisk, - pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : restrictBacktrack(delimiter, prevText)) - }) - } - - // Match any characters still remaining. - if (index < str.length) { - path += str.substr(index) - } - - // If the path exists, push it onto the end. - if (path) { - tokens.push(path) - } - - return tokens -} - -function restrictBacktrack(delimiter, prevText) { - if (!prevText || prevText.indexOf(delimiter) > -1) { - return '[^' + escapeString(delimiter) + ']+?' - } - - return escapeString(prevText) + '|(?:(?!' + escapeString(prevText) + ')[^' + escapeString(delimiter) + '])+?' -} - -/** - * Compile a string to a template function for the path. - * - * @param {string} str - * @param {Object=} options - * @return {!function(Object=, Object=)} - */ -function compile (str, options) { - return tokensToFunction(parse(str, options), options) -} - -/** - * Prettier encoding of URI path segments. - * - * @param {string} - * @return {string} - */ -function encodeURIComponentPretty (str) { - return encodeURI(str).replace(/[\/?#]/g, function (c) { - return '%' + c.charCodeAt(0).toString(16).toUpperCase() - }) -} - -/** - * Encode the asterisk parameter. Similar to `pretty`, but allows slashes. - * - * @param {string} - * @return {string} - */ -function encodeAsterisk (str) { - return encodeURI(str).replace(/[?#]/g, function (c) { - return '%' + c.charCodeAt(0).toString(16).toUpperCase() - }) -} - -/** - * Expose a method for transforming tokens into the path function. - */ -function tokensToFunction (tokens, options) { - // Compile all the tokens into regexps. - var matches = new Array(tokens.length) - - // Compile all the patterns before compilation. - for (var i = 0; i < tokens.length; i++) { - if (typeof tokens[i] === 'object') { - matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options)) - } - } - - return function (obj, opts) { - var path = '' - var data = obj || {} - var options = opts || {} - var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent - - for (var i = 0; i < tokens.length; i++) { - var token = tokens[i] - - if (typeof token === 'string') { - path += token - - continue - } - - var value = data[token.name] - var segment - - if (value == null) { - if (token.optional) { - // Prepend partial segment prefixes. - if (token.partial) { - path += token.prefix - } - - continue - } else { - throw new TypeError('Expected "' + token.name + '" to be defined') - } - } - - if (isarray(value)) { - if (!token.repeat) { - throw new TypeError('Expected "' + token.name + '" to not repeat, but received `' + JSON.stringify(value) + '`') - } - - if (value.length === 0) { - if (token.optional) { - continue - } else { - throw new TypeError('Expected "' + token.name + '" to not be empty') - } - } - - for (var j = 0; j < value.length; j++) { - segment = encode(value[j]) - - if (!matches[i].test(segment)) { - throw new TypeError('Expected all "' + token.name + '" to match "' + token.pattern + '", but received `' + JSON.stringify(segment) + '`') - } - - path += (j === 0 ? token.prefix : token.delimiter) + segment - } - - continue - } - - segment = token.asterisk ? encodeAsterisk(value) : encode(value) - - if (!matches[i].test(segment)) { - throw new TypeError('Expected "' + token.name + '" to match "' + token.pattern + '", but received "' + segment + '"') - } - - path += token.prefix + segment - } - - return path - } -} - -/** - * Escape a regular expression string. - * - * @param {string} str - * @return {string} - */ -function escapeString (str) { - return str.replace(/([.+*?=^!:${}()[\]|\/\\])/g, '\\$1') -} - -/** - * Escape the capturing group by escaping special characters and meaning. - * - * @param {string} group - * @return {string} - */ -function escapeGroup (group) { - return group.replace(/([=!:$\/()])/g, '\\$1') -} - -/** - * Attach the keys as a property of the regexp. - * - * @param {!RegExp} re - * @param {Array} keys - * @return {!RegExp} - */ -function attachKeys (re, keys) { - re.keys = keys - return re -} - -/** - * Get the flags for a regexp from the options. - * - * @param {Object} options - * @return {string} - */ -function flags (options) { - return options && options.sensitive ? '' : 'i' -} - -/** - * Pull out keys from a regexp. - * - * @param {!RegExp} path - * @param {!Array} keys - * @return {!RegExp} - */ -function regexpToRegexp (path, keys) { - // Use a negative lookahead to match only capturing groups. - var groups = path.source.match(/\((?!\?)/g) - - if (groups) { - for (var i = 0; i < groups.length; i++) { - keys.push({ - name: i, - prefix: null, - delimiter: null, - optional: false, - repeat: false, - partial: false, - asterisk: false, - pattern: null - }) - } - } - - return attachKeys(path, keys) -} - -/** - * Transform an array into a regexp. - * - * @param {!Array} path - * @param {Array} keys - * @param {!Object} options - * @return {!RegExp} - */ -function arrayToRegexp (path, keys, options) { - var parts = [] - - for (var i = 0; i < path.length; i++) { - parts.push(pathToRegexp(path[i], keys, options).source) - } - - var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options)) - - return attachKeys(regexp, keys) -} - -/** - * Create a path regexp from string input. - * - * @param {string} path - * @param {!Array} keys - * @param {!Object} options - * @return {!RegExp} - */ -function stringToRegexp (path, keys, options) { - return tokensToRegExp(parse(path, options), keys, options) -} - -/** - * Expose a function for taking tokens and returning a RegExp. - * - * @param {!Array} tokens - * @param {(Array|Object)=} keys - * @param {Object=} options - * @return {!RegExp} - */ -function tokensToRegExp (tokens, keys, options) { - if (!isarray(keys)) { - options = /** @type {!Object} */ (keys || options) - keys = [] - } - - options = options || {} - - var strict = options.strict - var end = options.end !== false - var route = '' - - // Iterate over the tokens and create our regexp string. - for (var i = 0; i < tokens.length; i++) { - var token = tokens[i] - - if (typeof token === 'string') { - route += escapeString(token) - } else { - var prefix = escapeString(token.prefix) - var capture = '(?:' + token.pattern + ')' - - keys.push(token) - - if (token.repeat) { - capture += '(?:' + prefix + capture + ')*' - } - - if (token.optional) { - if (!token.partial) { - capture = '(?:' + prefix + '(' + capture + '))?' - } else { - capture = prefix + '(' + capture + ')?' - } - } else { - capture = prefix + '(' + capture + ')' - } - - route += capture - } - } - - var delimiter = escapeString(options.delimiter || '/') - var endsWithDelimiter = route.slice(-delimiter.length) === delimiter - - // In non-strict mode we allow a slash at the end of match. If the path to - // match already ends with a slash, we remove it for consistency. The slash - // is valid at the end of a path match, not in the middle. This is important - // in non-ending mode, where "/test/" shouldn't match "/test//route". - if (!strict) { - route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?' - } - - if (end) { - route += '$' - } else { - // In non-ending mode, we need the capturing groups to match as much as - // possible by using a positive lookahead to the end or next path segment. - route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)' - } - - return attachKeys(new RegExp('^' + route, flags(options)), keys) -} - -/** - * Normalize the given path string, returning a regular expression. - * - * An empty array can be passed in for the keys, which will hold the - * placeholder key descriptions. For example, using `/user/:id`, `keys` will - * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`. - * - * @param {(string|RegExp|Array)} path - * @param {(Array|Object)=} keys - * @param {Object=} options - * @return {!RegExp} - */ -function pathToRegexp (path, keys, options) { - if (!isarray(keys)) { - options = /** @type {!Object} */ (keys || options) - keys = [] - } - - options = options || {} - - if (path instanceof RegExp) { - return regexpToRegexp(path, /** @type {!Array} */ (keys)) - } - - if (isarray(path)) { - return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options) - } - - return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options) -} - - -/***/ }, - -/***/ 5309 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _theme_Admonition_Type_Note__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7069); -/* harmony import */ var _theme_Admonition_Type_Tip__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(8716); -/* harmony import */ var _theme_Admonition_Type_Info__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4817); -/* harmony import */ var _theme_Admonition_Type_Warning__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(6157); -/* harmony import */ var _theme_Admonition_Type_Danger__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(7022); -/* harmony import */ var _theme_Admonition_Type_Caution__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(188); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */const admonitionTypes={note:_theme_Admonition_Type_Note__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A,tip:_theme_Admonition_Type_Tip__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,info:_theme_Admonition_Type_Info__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A,warning:_theme_Admonition_Type_Warning__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A,danger:_theme_Admonition_Type_Danger__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A};// Undocumented legacy admonition type aliases -// Provide hardcoded/untranslated retrocompatible label -// See also https://github.com/facebook/docusaurus/issues/7767 -const admonitionAliases={secondary:props=>/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_theme_Admonition_Type_Note__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A,{title:"secondary",...props}),important:props=>/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_theme_Admonition_Type_Info__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A,{title:"important",...props}),success:props=>/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_theme_Admonition_Type_Tip__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{title:"success",...props}),caution:_theme_Admonition_Type_Caution__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A};/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({...admonitionTypes,...admonitionAliases}); - -/***/ }, - -/***/ 5417 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ AnnouncementBarCloseButton) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(986); -/* harmony import */ var _theme_Icon_Close__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1752); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(7521); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function AnnouncementBarCloseButton(props){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("button",{type:"button","aria-label":(0,_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__/* .translate */ .T)({id:'theme.AnnouncementBar.closeButtonAriaLabel',message:'Close',description:'The ARIA label for close button of announcement bar'}),...props,className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('clean-btn close',(_styles_module_css__WEBPACK_IMPORTED_MODULE_4___default().closeButton),props.className),children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_theme_Icon_Close__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A,{width:14,height:14,strokeWidth:3.1})});} - -/***/ }, - -/***/ 5419 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ NavbarLayout) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6342); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7559); -/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(2069); -/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(1182); -/* harmony import */ var _docusaurus_Translate__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(986); -/* harmony import */ var _theme_Navbar_MobileSidebar__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(2033); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(231); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_8__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function NavbarBackdrop(props){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)("div",{role:"presentation",...props,className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('navbar-sidebar__backdrop',props.className)});}function NavbarLayout({children}){const{navbar:{hideOnScroll,style}}=(0,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__/* .useThemeConfig */ .p)();const mobileSidebar=(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_4__/* .useNavbarMobileSidebar */ .M)();const{navbarRef,isNavbarVisible}=(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_5__/* .useHideableNavbar */ .S)(hideOnScroll);return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxs)("nav",{ref:navbarRef,"aria-label":(0,_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_6__/* .translate */ .T)({id:'theme.NavBar.navAriaLabel',message:'Main',description:'The ARIA label for the main navigation'}),className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__/* .ThemeClassNames */ .G.layout.navbar.container,'navbar','navbar--fixed-top',hideOnScroll&&[(_styles_module_css__WEBPACK_IMPORTED_MODULE_8___default().navbarHideable),!isNavbarVisible&&(_styles_module_css__WEBPACK_IMPORTED_MODULE_8___default().navbarHidden)],{'navbar--dark':style==='dark','navbar--primary':style==='primary','navbar-sidebar--show':mobileSidebar.shown}),children:[children,/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(NavbarBackdrop,{onClick:mobileSidebar.toggle}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(_theme_Navbar_MobileSidebar__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A,{})]});} - -/***/ }, - -/***/ 5490 -(module) { - -// Exports -module.exports = { - "tableOfContents": `tableOfContents_bqdL`, - "docItemContainer": `docItemContainer_F8PC` -}; - - -/***/ }, - -/***/ 5500 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ Jx: () => (/* binding */ PluginHtmlClassNameProvider), -/* harmony export */ be: () => (/* binding */ PageMetadata), -/* harmony export */ e3: () => (/* binding */ HtmlClassNameProvider) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_Head__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5260); -/* harmony import */ var _docusaurus_useRouteContext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6803); -/* harmony import */ var _docusaurus_useBaseUrl__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(6025); -/* harmony import */ var _titleFormatterUtils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(4563); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function TitleMetadata({title}){const titleFormatter=(0,_titleFormatterUtils__WEBPACK_IMPORTED_MODULE_5__/* .useTitleFormatter */ .s$)();const formattedTitle=titleFormatter.format(title);return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_docusaurus_Head__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("title",{children:formattedTitle}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("meta",{property:"og:title",content:formattedTitle})]});}function DescriptionMetadata({description}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_docusaurus_Head__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("meta",{name:"description",content:description}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("meta",{property:"og:description",content:description})]});}function ImageMetadata({image}){const{withBaseUrl}=(0,_docusaurus_useBaseUrl__WEBPACK_IMPORTED_MODULE_4__/* .useBaseUrlUtils */ .hH)();const pageImage=withBaseUrl(image,{absolute:true});return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_docusaurus_Head__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("meta",{property:"og:image",content:pageImage}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("meta",{name:"twitter:image",content:pageImage})]});}function KeywordsMetadata({keywords}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_docusaurus_Head__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("meta",{name:"keywords",content:// https://github.com/microsoft/TypeScript/issues/17002 -Array.isArray(keywords)?keywords.join(','):keywords})});}/** - * Helper component to manipulate page metadata and override site defaults. - * Works in the same way as Helmet. - */function PageMetadata({title,description,keywords,image,children}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment,{children:[title&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(TitleMetadata,{title:title}),description&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(DescriptionMetadata,{description:description}),keywords&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(KeywordsMetadata,{keywords:keywords}),image&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(ImageMetadata,{image:image}),children&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_docusaurus_Head__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{children:children})]});}const HtmlClassNameContext=/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(undefined);/** - * Every layer of this provider will append a class name to the HTML element. - * There's no consumer for this hook: it's side-effect-only. This wrapper is - * necessary because Helmet does not "merge" classes. - * @see https://github.com/staylor/react-helmet-async/issues/161 - */function HtmlClassNameProvider({className:classNameProp,children}){const classNameContext=react__WEBPACK_IMPORTED_MODULE_0__.useContext(HtmlClassNameContext);const className=(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(classNameContext,classNameProp);return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(HtmlClassNameContext.Provider,{value:className,children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_docusaurus_Head__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("html",{className:className})}),children]});}function pluginNameToClassName(pluginName){return`plugin-${pluginName.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,'')}`;}/** - * A very thin wrapper around `HtmlClassNameProvider` that adds the plugin ID + - * name to the HTML class name. - */function PluginHtmlClassNameProvider({children}){const routeContext=(0,_docusaurus_useRouteContext__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)();const nameClass=pluginNameToClassName(routeContext.plugin.name);const idClass=`plugin-id-${routeContext.plugin.id}`;return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(HtmlClassNameProvider,{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(nameClass,idClass),children:children});} - -/***/ }, - -/***/ 5509 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6347); -/* harmony import */ var _ClientLifecyclesDispatcher__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(689); -/* harmony import */ var _exports_ExecutionEnvironment__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(8193); -/* harmony import */ var _preload__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(6877); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */class PendingNavigation extends react__WEBPACK_IMPORTED_MODULE_0__.Component{previousLocation;routeUpdateCleanupCb;constructor(props){super(props);// previousLocation doesn't affect rendering, hence not stored in state. -this.previousLocation=null;this.routeUpdateCleanupCb=_exports_ExecutionEnvironment__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A.canUseDOM?(0,_ClientLifecyclesDispatcher__WEBPACK_IMPORTED_MODULE_2__/* .dispatchLifecycleAction */ .n)('onRouteUpdate',{previousLocation:null,location:this.props.location}):()=>{};this.state={nextRouteHasLoaded:true};}// Intercept location update and still show current route until next route -// is done loading. -shouldComponentUpdate(nextProps,nextState){if(nextProps.location===this.props.location){// `nextRouteHasLoaded` is false means there's a pending route transition. -// Don't update until it's done. -return nextState.nextRouteHasLoaded;}// props.location being different means the router is trying to navigate to -// a new route. We will preload the new route. -const nextLocation=nextProps.location;// Save the location first. -this.previousLocation=this.props.location;this.setState({nextRouteHasLoaded:false});this.routeUpdateCleanupCb=(0,_ClientLifecyclesDispatcher__WEBPACK_IMPORTED_MODULE_2__/* .dispatchLifecycleAction */ .n)('onRouteUpdate',{previousLocation:this.previousLocation,location:nextLocation});// Load data while the old screen remains. Force preload instead of using -// `window.docusaurus`, because we want to avoid loading screen even when -// user is on saveData -(0,_preload__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A)(nextLocation.pathname).then(()=>{this.routeUpdateCleanupCb();this.setState({nextRouteHasLoaded:true});}).catch(e=>{console.warn(e);// If chunk loading failed, it could be because the path to a chunk -// no longer exists due to a new deployment. Force refresh the page -// instead of just not navigating. -window.location.reload();});return false;}render(){const{children,location}=this.props;// Use a controlled <Route> to trick all descendants into rendering the old -// location. -return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_ClientLifecyclesDispatcher__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{previousLocation:this.previousLocation,location:location,children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(react_router_dom__WEBPACK_IMPORTED_MODULE_1__/* .Route */ .qh,{location:location,render:()=>children})});}}/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (PendingNavigation); - -/***/ }, - -/***/ 5521 -(module) { - -// Exports -module.exports = { - "skipToContent": `skipToContent_fXgn` -}; - - -/***/ }, - -/***/ 5536 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6972); -/* harmony import */ var _docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(3082); -/* harmony import */ var _theme_DocSidebarItem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7263); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function DocSidebarItems({items,...props}){const visibleItems=(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_1__/* .useVisibleSidebarItems */ .Y)(items,props.activePath);return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_2__/* .DocSidebarItemsExpandedStateProvider */ .A,{children:visibleItems.map((item,index)=>/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_theme_DocSidebarItem__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A,{item:item,index:index,...props},index))});}// Optimize sidebar at each "level" -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (/*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.memo)(DocSidebarItems)); - -/***/ }, - -/***/ 5552 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ assets: () => (/* binding */ assets), -/* harmony export */ contentTitle: () => (/* binding */ contentTitle), -/* harmony export */ "default": () => (/* binding */ MDXContent), -/* harmony export */ frontMatter: () => (/* binding */ frontMatter), -/* harmony export */ metadata: () => (/* reexport default export from named module */ _site_docusaurus_docusaurus_plugin_content_docs_default_site_docs_reference_examples_md_de7_json__WEBPACK_IMPORTED_MODULE_0__), -/* harmony export */ toc: () => (/* binding */ toc) -/* harmony export */ }); -/* harmony import */ var _site_docusaurus_docusaurus_plugin_content_docs_default_site_docs_reference_examples_md_de7_json__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(721); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4848); -/* harmony import */ var _mdx_js_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(8453); - - -const frontMatter = { - sidebar_label: 'Example Tools', - sidebar_position: 4, - format: 'md' -}; -const contentTitle = 'Example Tools'; - -const assets = { - -}; - - - -const toc = [{ - "value": "Quick Install", - "id": "quick-install", - "level": 2 -}, { - "value": "Text Processing Tools", - "id": "text-processing-tools", - "level": 2 -}, { - "value": "summarize", - "id": "summarize", - "level": 3 -}, { - "value": "translate", - "id": "translate", - "level": 3 -}, { - "value": "fix-grammar", - "id": "fix-grammar", - "level": 3 -}, { - "value": "simplify", - "id": "simplify", - "level": 3 -}, { - "value": "tone-shift", - "id": "tone-shift", - "level": 3 -}, { - "value": "eli5", - "id": "eli5", - "level": 3 -}, { - "value": "tldr", - "id": "tldr", - "level": 3 -}, { - "value": "expand", - "id": "expand", - "level": 3 -}, { - "value": "Developer Tools", - "id": "developer-tools", - "level": 2 -}, { - "value": "explain-error", - "id": "explain-error", - "level": 3 -}, { - "value": "explain-code", - "id": "explain-code", - "level": 3 -}, { - "value": "review-code", - "id": "review-code", - "level": 3 -}, { - "value": "gen-tests", - "id": "gen-tests", - "level": 3 -}, { - "value": "docstring", - "id": "docstring", - "level": 3 -}, { - "value": "commit-msg", - "id": "commit-msg", - "level": 3 -}, { - "value": "Data Tools", - "id": "data-tools", - "level": 2 -}, { - "value": "json-extract", - "id": "json-extract", - "level": 3 -}, { - "value": "sql-from-text", - "id": "sql-from-text", - "level": 3 -}, { - "value": "Advanced Multi-Step Tools", - "id": "advanced-multi-step-tools", - "level": 2 -}, { - "value": "log-errors", - "id": "log-errors", - "level": 3 -}, { - "value": "diff-focus", - "id": "diff-focus", - "level": 3 -}, { - "value": "Pipeline Recipes", - "id": "pipeline-recipes", - "level": 2 -}, { - "value": "Development Workflows", - "id": "development-workflows", - "level": 3 -}, { - "value": "Data Processing", - "id": "data-processing", - "level": 3 -}, { - "value": "Text Processing Pipelines", - "id": "text-processing-pipelines", - "level": 3 -}, { - "value": "Shell Functions", - "id": "shell-functions", - "level": 3 -}]; -function _createMdxContent(props) { - const _components = { - code: "code", - h1: "h1", - h2: "h2", - h3: "h3", - header: "header", - hr: "hr", - p: "p", - pre: "pre", - strong: "strong", - ...(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__/* .useMDXComponents */ .R)(), - ...props.components - }; - return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.Fragment, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.header, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h1, { - id: "example-tools", - children: "Example Tools" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "CmdForge comes with 28 pre-built tools. This document shows their configurations and usage." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "quick-install", - children: "Quick Install" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "# Install all example tools (from the CmdForge directory)\npython examples/install.py\ncmdforge refresh\n\n# Or install from anywhere\ncurl -sSL https://gitea.brrd.tech/rob/cmdforge/raw/branch/main/examples/install.py | python3\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "text-processing-tools", - children: "Text Processing Tools" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "summarize", - children: "summarize" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Condense long documents to key points." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-yaml", - children: "name: summarize\ndescription: Condense long documents to key points\narguments:\n - flag: --length\n variable: length\n default: \"3-5 bullet points\"\nsteps:\n - type: prompt\n prompt: |\n Summarize the following text into {length}. Be concise and capture the key points:\n\n {input}\n provider: opencode-pickle\n output_var: response\noutput: \"{response}\"\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Usage:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "cat article.txt | summarize\ncat book.txt | summarize --length \"10 bullet points\"\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.hr, {}), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "translate", - children: "translate" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Translate text to any language." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-yaml", - children: "name: translate\ndescription: Translate text to any language\narguments:\n - flag: --lang\n variable: lang\n default: Spanish\nsteps:\n - type: prompt\n prompt: |\n Translate the following text to {lang}. Only output the translation, nothing else:\n\n {input}\n provider: claude-haiku\n output_var: response\noutput: \"{response}\"\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Usage:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "echo \"Hello, world!\" | translate --lang French\ncat readme.md | translate --lang Japanese\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.hr, {}), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "fix-grammar", - children: "fix-grammar" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Fix grammar and spelling errors." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-yaml", - children: "name: fix-grammar\ndescription: Fix grammar and spelling errors\narguments: []\nsteps:\n - type: prompt\n prompt: |\n Fix all grammar, spelling, and punctuation errors in the following text. Only output the corrected text, no explanations:\n\n {input}\n provider: opencode-deepseek\n output_var: response\noutput: \"{response}\"\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Usage:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "echo \"teh cat sat on teh mat\" | fix-grammar\ncat draft.txt | fix-grammar > fixed.txt\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.hr, {}), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "simplify", - children: "simplify" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Rewrite text for easier understanding." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-yaml", - children: "name: simplify\ndescription: Rewrite text for easier understanding\narguments:\n - flag: --level\n variable: level\n default: \"5th grade reading level\"\nsteps:\n - type: prompt\n prompt: |\n Rewrite the following text for a {level}. Keep the meaning but use simpler words and shorter sentences:\n\n {input}\n provider: opencode-pickle\n output_var: response\noutput: \"{response}\"\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Usage:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "cat legal_document.txt | simplify\ncat technical.md | simplify --level \"non-technical reader\"\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.hr, {}), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "tone-shift", - children: "tone-shift" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Change the tone of text." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-yaml", - children: "name: tone-shift\ndescription: Change the tone of text\narguments:\n - flag: --tone\n variable: tone\n default: professional\nsteps:\n - type: prompt\n prompt: |\n Rewrite the following text in a {tone} tone. Keep the core message but adjust the style:\n\n {input}\n provider: opencode-deepseek\n output_var: response\noutput: \"{response}\"\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Usage:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "cat angry_email.txt | tone-shift --tone \"calm and professional\"\ncat casual_note.txt | tone-shift --tone formal\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.hr, {}), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "eli5", - children: "eli5" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Explain like I'm 5." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-yaml", - children: "name: eli5\ndescription: Explain like I'm 5\narguments: []\nsteps:\n - type: prompt\n prompt: |\n Explain this like I'm 5 years old. Use simple words and fun analogies:\n\n {input}\n provider: opencode-pickle\n output_var: response\noutput: \"{response}\"\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Usage:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "echo \"What is quantum computing?\" | eli5\ncat whitepaper.txt | eli5\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.hr, {}), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "tldr", - children: "tldr" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "One-line summary." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-yaml", - children: "name: tldr\ndescription: One-line summary\narguments: []\nsteps:\n - type: prompt\n prompt: |\n Give a one-line TL;DR summary of this text:\n\n {input}\n provider: opencode-grok\n output_var: response\noutput: \"{response}\"\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Usage:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "cat long_article.txt | tldr\ncurl -s https://example.com | tldr\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.hr, {}), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "expand", - children: "expand" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Expand bullet points to paragraphs." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-yaml", - children: "name: expand\ndescription: Expand bullet points to paragraphs\narguments: []\nsteps:\n - type: prompt\n prompt: |\n Expand these bullet points into well-written paragraphs:\n\n {input}\n provider: opencode-pickle\n output_var: response\noutput: \"{response}\"\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Usage:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "cat notes.txt | expand\necho \"- Fast\\n- Reliable\\n- Easy to use\" | expand\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.hr, {}), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "developer-tools", - children: "Developer Tools" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "explain-error", - children: "explain-error" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Explain error messages and stack traces." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-yaml", - children: "name: explain-error\ndescription: Explain error messages and stack traces\narguments: []\nsteps:\n - type: prompt\n prompt: |\n Explain this error/stack trace in plain English. What went wrong and how to fix it:\n\n {input}\n provider: claude-haiku\n output_var: response\noutput: \"{response}\"\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Usage:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "cat error.log | explain-error\npython script.py 2>&1 | explain-error\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.hr, {}), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "explain-code", - children: "explain-code" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Explain what code does." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-yaml", - children: "name: explain-code\ndescription: Explain what code does\narguments:\n - flag: --detail\n variable: detail\n default: moderate\nsteps:\n - type: prompt\n prompt: |\n Explain what this code does at a {detail} level of detail:\n\n" - }) - }), "\n", input, "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "provider: opencode-pickle\noutput_var: response\noutput: \"{response}\"\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Usage:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "cat script.py | explain-code\ncat complex.js | explain-code --detail \"very detailed\"\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.hr, {}), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "review-code", - children: "review-code" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Quick code review with suggestions." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-yaml", - children: "name: review-code\ndescription: Quick code review with suggestions\narguments:\n - flag: --focus\n variable: focus\n default: \"bugs, security, and improvements\"\nsteps:\n - type: prompt\n prompt: |\n Review this code focusing on {focus}. Be concise and actionable:\n\n" - }) - }), "\n", input, "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "provider: claude-sonnet\noutput_var: response\noutput: \"{response}\"\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Usage:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "cat pull_request.diff | review-code\ncat auth.py | review-code --focus \"security vulnerabilities\"\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.hr, {}), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "gen-tests", - children: "gen-tests" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Generate unit tests for code." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-yaml", - children: "name: gen-tests\ndescription: Generate unit tests for code\narguments:\n - flag: --framework\n variable: framework\n default: pytest\nsteps:\n - type: prompt\n prompt: |\n Generate comprehensive unit tests for this code using {framework}. Include edge cases:\n\n" - }) - }), "\n", input, "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "provider: claude-haiku\noutput_var: response\noutput: \"{response}\"\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Usage:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "cat utils.py | gen-tests\ncat api.js | gen-tests --framework jest\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.hr, {}), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "docstring", - children: "docstring" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Add docstrings to functions/classes." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-yaml", - children: "name: docstring\ndescription: Add docstrings to functions/classes\narguments:\n - flag: --style\n variable: style\n default: Google style\nsteps:\n - type: prompt\n prompt: |\n Add {style} docstrings to all functions and classes in this code. Output the complete code with docstrings:\n\n" - }) - }), "\n", input, "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "provider: opencode-deepseek\noutput_var: response\noutput: \"{response}\"\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Usage:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "cat module.py | docstring\ncat functions.py | docstring --style \"NumPy style\"\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.hr, {}), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "commit-msg", - children: "commit-msg" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Generate commit message from diff." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-yaml", - children: "name: commit-msg\ndescription: Generate commit message from diff\narguments:\n - flag: --style\n variable: style\n default: conventional commits\nsteps:\n - type: prompt\n prompt: |\n Generate a concise {style} commit message for this diff. Just the message, no explanation:\n\n {input}\n provider: opencode-pickle\n output_var: response\noutput: \"{response}\"\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Usage:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "git diff --staged | commit-msg\ngit diff HEAD~1 | commit-msg --style \"simple\"\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.hr, {}), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "data-tools", - children: "Data Tools" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "json-extract", - children: "json-extract" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Extract structured data as validated JSON." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-yaml", - children: "name: json-extract\ndescription: Extract structured data as validated JSON\narguments:\n - flag: --fields\n variable: fields\n default: any relevant fields\nsteps:\n - type: prompt\n prompt: |\n Extract {fields} from this text as a JSON object. Output ONLY valid JSON, no markdown, no explanation:\n\n {input}\n provider: opencode-deepseek\n output_var: raw_json\n - type: code\n code: |\n import json\n import re\n text = raw_json.strip()\n text = re.sub(r'^```json?\\s*', '', text)\n text = re.sub(r'\\s*```$', '', text)\n try:\n parsed = json.loads(text)\n validated = json.dumps(parsed, indent=2)\n except json.JSONDecodeError as e:\n validated = f\"ERROR: Invalid JSON - {e}\\nRaw output: {text[:500]}\"\n output_var: validated\noutput: \"{validated}\"\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Usage:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "echo \"Price $49.99, SKU ABC-123\" | json-extract --fields \"price, sku\"\ncat invoice.txt | json-extract --fields \"total, date, items\"\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.hr, {}), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "sql-from-text", - children: "sql-from-text" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Generate SQL from natural language." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-yaml", - children: "name: sql-from-text\ndescription: Generate SQL from natural language\narguments:\n - flag: --dialect\n variable: dialect\n default: PostgreSQL\nsteps:\n - type: prompt\n prompt: |\n Generate a {dialect} SQL query for this request. Output only the SQL, no explanation:\n\n {input}\n provider: claude-haiku\n output_var: response\noutput: \"{response}\"\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Usage:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "echo \"get all users who signed up last month\" | sql-from-text\necho \"count orders by status\" | sql-from-text --dialect MySQL\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.hr, {}), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "advanced-multi-step-tools", - children: "Advanced Multi-Step Tools" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "log-errors", - children: "log-errors" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Extract and explain errors from large log files." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-yaml", - children: "name: log-errors\ndescription: Extract and explain errors from large log files\narguments: []\nsteps:\n - type: code\n code: |\n import re\n lines = input.split('\\n')\n result = []\n for i, line in enumerate(lines):\n if re.search(r'\\b(ERROR|CRITICAL|FATAL|Exception|Traceback)\\b', line, re.I):\n result.extend(lines[i:i+5])\n extracted = '\\n'.join(result[:200])\n output_var: extracted\n - type: prompt\n prompt: |\n Analyze these error log entries. Group by error type, explain likely causes, and suggest fixes:\n\n {extracted}\n provider: claude-haiku\n output_var: response\noutput: \"{response}\"\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Usage:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "cat huge_app.log | log-errors\nzcat archived.log.gz | log-errors\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.hr, {}), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "diff-focus", - children: "diff-focus" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Review only the added/changed code in a diff." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-yaml", - children: "name: diff-focus\ndescription: Review only the added/changed code in a diff\narguments: []\nsteps:\n - type: code\n code: |\n lines = input.split('\\n')\n result = []\n for i, line in enumerate(lines):\n if line.startswith('@@') or line.startswith('+++') or line.startswith('---'):\n result.append(line)\n elif line.startswith('+') and not line.startswith('+++'):\n result.append(line)\n extracted = '\\n'.join(result)\n output_var: extracted\n - type: prompt\n prompt: |\n Review these added lines of code. Focus on bugs, security issues, and improvements:\n\n {extracted}\n provider: claude-haiku\n output_var: response\noutput: \"{response}\"\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Usage:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "git diff | diff-focus\ngit diff HEAD~5 | diff-focus\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.hr, {}), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "pipeline-recipes", - children: "Pipeline Recipes" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "CmdForge tools chain together like Unix commands:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "development-workflows", - children: "Development Workflows" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "# Quick PR review: extract changes, review, summarize\ngit diff main | diff-focus | review-code --focus \"bugs and security\" | tldr\n\n# Explain and fix an error in one pipeline\npython script.py 2>&1 | explain-error | tee error_analysis.txt\n\n# Generate tests for changed files only\ngit diff --name-only | grep '\\.py$' | xargs cat | gen-tests > new_tests.py\n\n# Create release notes from commits\ngit log v1.0..v1.1 --oneline | changelog | translate --lang French > RELEASE_FR.md\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "data-processing", - children: "Data Processing" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "# Extract, transform, analyze\ncurl -s api.example.com/data | json-extract --fields \"users, revenue\" | json2csv | csv-insights\n\n# Process multiple files\nfor f in reports/*.txt; do\n cat \"$f\" | json-extract --fields \"total, date\"\ndone | json2csv > summary.csv\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "text-processing-pipelines", - children: "Text Processing Pipelines" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "# Translate technical docs for international team\ncat API.md | simplify --level \"non-technical\" | translate --lang Spanish > API_ES.md\n\n# Process customer feedback\ncat feedback.txt | summarize --length \"10 points\" | tone-shift --tone analytical\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "shell-functions", - children: "Shell Functions" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: ["Add to ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "~/.bashrc" - }), " for common workflows:"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "# Review recent changes\nreview-recent() {\n git diff HEAD~\"${1:-1}\" | diff-focus | review-code | tldr\n}\n\n# Quick translate with summary\ntranslate-summary() {\n cat \"$1\" | summarize | translate --lang \"${2:-Spanish}\"\n}\n\n# Generate commit message and commit\nauto-commit() {\n msg=$(git diff --staged | commit-msg)\n echo \"Commit message: $msg\"\n read -p \"Commit? [y/N] \" confirm\n [[ $confirm == [yY] ]] && git commit -m \"$msg\"\n}\n" - }) - })] - }); -} -function MDXContent(props = {}) { - const {wrapper: MDXLayout} = { - ...(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__/* .useMDXComponents */ .R)(), - ...props.components - }; - return MDXLayout ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(MDXLayout, { - ...props, - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_createMdxContent, { - ...props - }) - }) : _createMdxContent(props); -} - - - -/***/ }, - -/***/ 5556 -(module, __unused_webpack_exports, __webpack_require__) { - -/** - * Copyright (c) 2013-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -if (false) // removed by dead control flow -{ var throwOnDirectAccess, ReactIs; } else { - // By explicitly using `prop-types` you are opting into new production behavior. - // http://fb.me/prop-types-in-prod - module.exports = __webpack_require__(2694)(); -} - - -/***/ }, - -/***/ 5598 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ b: () => (/* binding */ renderToHtml) -/* harmony export */ }); -/* harmony import */ var react_dom_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7422); -/* harmony import */ var node_stream__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7075); -/* harmony import */ var node_stream__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(node_stream__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var node_stream_consumers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(8321); -/* harmony import */ var node_stream_consumers__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(node_stream_consumers__WEBPACK_IMPORTED_MODULE_2__); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// See also https://github.com/facebook/react/issues/31134 -// See also https://github.com/facebook/docusaurus/issues/9985#issuecomment-2396367797 -async function renderToHtml(app){return new Promise((resolve,reject)=>{const passThrough=new node_stream__WEBPACK_IMPORTED_MODULE_1__.PassThrough();const{pipe}=(0,react_dom_server__WEBPACK_IMPORTED_MODULE_0__.renderToPipeableStream)(app,{onError(error){reject(error);},onAllReady(){pipe(passThrough);(0,node_stream_consumers__WEBPACK_IMPORTED_MODULE_2__.text)(passThrough).then(resolve,reject);}});});} - -/***/ }, - -/***/ 5599 -(module) { - -// Exports -module.exports = { - "collapseSidebarButton": `collapseSidebarButton_PEFL`, - "collapseSidebarButtonIcon": `collapseSidebarButtonIcon_kv0_` -}; - - -/***/ }, - -/***/ 5600 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ GX: () => (/* binding */ NavbarSecondaryMenuFiller), -/* harmony export */ YL: () => (/* binding */ useNavbarSecondaryMenuContent), -/* harmony export */ y_: () => (/* binding */ NavbarSecondaryMenuContentProvider) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _utils_reactUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9532); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */const Context=/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(null);/** @internal */function NavbarSecondaryMenuContentProvider({children}){const value=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({component:null,props:null});return(/*#__PURE__*/// @ts-expect-error: this context is hard to type -(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(Context.Provider,{value:value,children:children}));}/** @internal */function useNavbarSecondaryMenuContent(){const value=(0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(Context);if(!value){throw new _utils_reactUtils__WEBPACK_IMPORTED_MODULE_1__/* .ReactContextError */ .dV('NavbarSecondaryMenuContentProvider');}return value[0];}/** - * This component renders nothing by itself, but it fills the placeholder in the - * generic secondary menu layout. This reduces coupling between the main layout - * and the specific page. - * - * This kind of feature is often called portal/teleport/gateway/outlet... - * Various unmaintained React libs exist. Most up-to-date one: - * https://github.com/gregberge/react-teleporter - * Not sure any of those is safe regarding concurrent mode. - */function NavbarSecondaryMenuFiller({component,props}){const context=(0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(Context);if(!context){throw new _utils_reactUtils__WEBPACK_IMPORTED_MODULE_1__/* .ReactContextError */ .dV('NavbarSecondaryMenuContentProvider');}const[,setContent]=context;// To avoid useless context re-renders, props are memoized shallowly -const memoizedProps=(0,_utils_reactUtils__WEBPACK_IMPORTED_MODULE_1__/* .useShallowMemoObject */ .Be)(props);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{// @ts-expect-error: this context is hard to type -setContent({component,props:memoizedProps});},[setContent,component,memoizedProps]);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>()=>setContent({component:null,props:null}),[setContent]);return null;} - -/***/ }, - -/***/ 5626 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ ThemedImage) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5044); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function ThemedImage(props){const{sources,className:parentClassName,alt,...propsRest}=props;return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A,{className:parentClassName,children:({theme,className})=>/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("img",{src:sources[theme],alt:alt,className:className,...propsRest})});} - -/***/ }, - -/***/ 5643 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ $3: () => (/* binding */ createStatefulBrokenLinks), -/* harmony export */ B6: () => (/* binding */ useBrokenLinksContext), -/* harmony export */ k5: () => (/* binding */ BrokenLinksProvider) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */const createStatefulBrokenLinks=()=>{// Set to dedup, as it's not useful to collect multiple times the same value -const allAnchors=new Set();const allLinks=new Set();return{collectAnchor:anchor=>{typeof anchor!=='undefined'&&allAnchors.add(anchor);},collectLink:link=>{typeof link!=='undefined'&&allLinks.add(link);},getCollectedAnchors:()=>[...allAnchors],getCollectedLinks:()=>[...allLinks]};};const Context=/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext({collectAnchor:()=>{// No-op for client -},collectLink:()=>{// No-op for client -}});const useBrokenLinksContext=()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(Context);function BrokenLinksProvider({children,brokenLinks}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(Context.Provider,{value:brokenLinks,children:children});} - -/***/ }, - -/***/ 5659 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ NavbarColorModeToggle) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6342); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5293); -/* harmony import */ var _theme_ColorModeToggle__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(10); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(3127); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function NavbarColorModeToggle({className}){const navbarStyle=(0,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_1__/* .useThemeConfig */ .p)().navbar.style;const{disableSwitch,respectPrefersColorScheme}=(0,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_1__/* .useThemeConfig */ .p)().colorMode;const{colorModeChoice,setColorMode}=(0,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__/* .useColorMode */ .G)();if(disableSwitch){return null;}return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_theme_ColorModeToggle__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A,{className:className,buttonClassName:navbarStyle==='dark'?(_styles_module_css__WEBPACK_IMPORTED_MODULE_4___default().darkNavbarColorModeToggle):undefined,respectPrefersColorScheme:respectPrefersColorScheme,value:colorModeChoice,onChange:setColorMode});} - -/***/ }, - -/***/ 5682 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ TOCCollapsibleCollapseButton) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(986); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9136); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function TOCCollapsibleCollapseButton({collapsed,...props}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("button",{type:"button",...props,className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('clean-btn',(_styles_module_css__WEBPACK_IMPORTED_MODULE_3___default().tocCollapsibleButton),!collapsed&&(_styles_module_css__WEBPACK_IMPORTED_MODULE_3___default().tocCollapsibleButtonExpanded),props.className),children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component",children:"On this page"})});} - -/***/ }, - -/***/ 5708 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ DocSidebarItemCategory) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6342); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1422); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(7559); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(9532); -/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(9169); -/* harmony import */ var _docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(6972); -/* harmony import */ var _docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(3082); -/* harmony import */ var _docusaurus_Link__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(8774); -/* harmony import */ var _docusaurus_Translate__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(986); -/* harmony import */ var _docusaurus_useIsBrowser__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(2303); -/* harmony import */ var _theme_DocSidebarItems__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(5536); -/* harmony import */ var _theme_DocSidebarItem_Link__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(8084); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(1038); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_14__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// If we navigate to a category and it becomes active, it should automatically -// expand itself -function useAutoExpandActiveCategory({isActive,collapsed,updateCollapsed,activePath}){const wasActive=(0,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_5__/* .usePrevious */ .ZC)(isActive);const previousActivePath=(0,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_5__/* .usePrevious */ .ZC)(activePath);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{const justBecameActive=isActive&&!wasActive;const stillActiveButPathChanged=isActive&&wasActive&&activePath!==previousActivePath;if((justBecameActive||stillActiveButPathChanged)&&collapsed){updateCollapsed(false);}},[isActive,wasActive,collapsed,updateCollapsed,activePath,previousActivePath]);}/** - * When a collapsible category has no link, we still link it to its first child - * during SSR as a temporary fallback. This allows to be able to navigate inside - * the category even when JS fails to load, is delayed or simply disabled - * React hydration becomes an optional progressive enhancement - * see https://github.com/facebookincubator/infima/issues/36#issuecomment-772543188 - * see https://github.com/facebook/docusaurus/issues/3030 - */function useCategoryHrefWithSSRFallback(item){const isBrowser=(0,_docusaurus_useIsBrowser__WEBPACK_IMPORTED_MODULE_11__/* ["default"] */ .A)();return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>{if(item.href&&!item.linkUnlisted){return item.href;}// In these cases, it's not necessary to render a fallback -// We skip the "findFirstCategoryLink" computation -if(isBrowser||!item.collapsible){return undefined;}return (0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_7__/* .findFirstSidebarItemLink */ .Nr)(item);},[item,isBrowser]);}function CollapseButton({collapsed,categoryLabel,onClick}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_15__.jsx)("button",{"aria-label":collapsed?(0,_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_10__/* .translate */ .T)({id:'theme.DocSidebarItem.expandCategoryAriaLabel',message:"Expand sidebar category '{label}'",description:'The ARIA label to expand the sidebar category'},{label:categoryLabel}):(0,_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_10__/* .translate */ .T)({id:'theme.DocSidebarItem.collapseCategoryAriaLabel',message:"Collapse sidebar category '{label}'",description:'The ARIA label to collapse the sidebar category'},{label:categoryLabel}),"aria-expanded":!collapsed,type:"button",className:"clean-btn menu__caret",onClick:onClick});}function CategoryLinkLabel({label}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_15__.jsx)("span",{title:label,className:(_styles_module_css__WEBPACK_IMPORTED_MODULE_14___default().categoryLinkLabel),children:label});}function DocSidebarItemCategory(props){const visibleChildren=(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_7__/* .useVisibleSidebarItems */ .Y)(props.item.items,props.activePath);if(visibleChildren.length===0){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_15__.jsx)(DocSidebarItemCategoryEmpty,{...props});}else{return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_15__.jsx)(DocSidebarItemCategoryCollapsible,{...props});}}function isCategoryWithHref(category){return typeof category.href==='string';}// If a category doesn't have any visible children, we render it as a link -function DocSidebarItemCategoryEmpty({item,...props}){// If the category has no link, we don't render anything -// It's not super useful to render a category you can't open nor click -if(!isCategoryWithHref(item)){return null;}// We remove props that don't make sense for a link and forward the rest -const{type,collapsed,collapsible,items,linkUnlisted,...forwardableProps}=item;const linkItem={type:'link',...forwardableProps};return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_15__.jsx)(_theme_DocSidebarItem_Link__WEBPACK_IMPORTED_MODULE_13__/* ["default"] */ .A,{item:linkItem,...props});}function DocSidebarItemCategoryCollapsible({item,onItemClick,activePath,level,index,...props}){const{items,label,collapsible,className,href}=item;const{docs:{sidebar:{autoCollapseCategories}}}=(0,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__/* .useThemeConfig */ .p)();const hrefWithSSRFallback=useCategoryHrefWithSSRFallback(item);const isActive=(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_7__/* .isActiveSidebarItem */ .w8)(item,activePath);const isCurrentPage=(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_6__/* .isSamePath */ .ys)(href,activePath);const{collapsed,setCollapsed}=(0,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__/* .useCollapsible */ .u)({// Active categories are always initialized as expanded. The default -// (`item.collapsed`) is only used for non-active categories. -initialState:()=>{if(!collapsible){return false;}return isActive?false:item.collapsed;}});const{expandedItem,setExpandedItem}=(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_8__/* .useDocSidebarItemsExpandedState */ .G)();// Use this instead of `setCollapsed`, because it is also reactive -const updateCollapsed=(toCollapsed=!collapsed)=>{setExpandedItem(toCollapsed?null:index);setCollapsed(toCollapsed);};useAutoExpandActiveCategory({isActive,collapsed,updateCollapsed,activePath});(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{if(collapsible&&expandedItem!=null&&expandedItem!==index&&autoCollapseCategories){setCollapsed(true);}},[collapsible,expandedItem,index,setCollapsed,autoCollapseCategories]);const handleItemClick=e=>{onItemClick?.(item);if(collapsible){if(href){// When already on the category's page, we collapse it -// We don't use "isActive" because it would collapse the -// category even when we browse a children element -// See https://github.com/facebook/docusaurus/issues/11213 -if(isCurrentPage){e.preventDefault();updateCollapsed();}else{// When navigating to a new category, we always expand -// see https://github.com/facebook/docusaurus/issues/10854#issuecomment-2609616182 -updateCollapsed(false);}}else{e.preventDefault();updateCollapsed();}}};return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_15__.jsxs)("li",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_4__/* .ThemeClassNames */ .G.docs.docSidebarItemCategory,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_4__/* .ThemeClassNames */ .G.docs.docSidebarItemCategoryLevel(level),'menu__list-item',{'menu__list-item--collapsed':collapsed},className),children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_15__.jsxs)("div",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('menu__list-item-collapsible',{'menu__list-item-collapsible--active':isCurrentPage}),children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_15__.jsx)(_docusaurus_Link__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .A,{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)((_styles_module_css__WEBPACK_IMPORTED_MODULE_14___default().categoryLink),'menu__link',{'menu__link--sublist':collapsible,'menu__link--sublist-caret':!href&&collapsible,'menu__link--active':isActive}),onClick:handleItemClick,"aria-current":isCurrentPage?'page':undefined,role:collapsible&&!href?'button':undefined,"aria-expanded":collapsible&&!href?!collapsed:undefined,href:collapsible?hrefWithSSRFallback??'#':hrefWithSSRFallback,...props,children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_15__.jsx)(CategoryLinkLabel,{label:label})}),href&&collapsible&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_15__.jsx)(CollapseButton,{collapsed:collapsed,categoryLabel:label,onClick:e=>{e.preventDefault();updateCollapsed();}})]}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_15__.jsx)(_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__/* .Collapsible */ .N,{lazy:true,as:"ul",className:"menu__list",collapsed:collapsed,children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_15__.jsx)(_theme_DocSidebarItems__WEBPACK_IMPORTED_MODULE_12__/* ["default"] */ .A,{items:items,tabIndex:collapsed?-1:0,onItemClick:onItemClick,activePath:activePath,level:level+1})})]});} - -/***/ }, - -/***/ 5710 -(module) { - -// Exports -module.exports = { - "docSidebarContainer": `docSidebarContainer_YfHR`, - "docSidebarContainerHidden": `docSidebarContainerHidden_DPk8`, - "sidebarViewport": `sidebarViewport_aRkj` -}; - - -/***/ }, - -/***/ 5745 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ CodeBlockString) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6342); -/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4291); -/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1197); -/* harmony import */ var _theme_CodeBlock_Layout__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(5903); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function useCodeBlockMetadata(props){const{prism}=(0,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_1__/* .useThemeConfig */ .p)();return (0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_2__/* .createCodeBlockMetadata */ .mU)({code:props.children,className:props.className,metastring:props.metastring,magicComments:prism.magicComments,defaultLanguage:prism.defaultLanguage,language:props.language,title:props.title,showLineNumbers:props.showLineNumbers});}// TODO Docusaurus v4: move this component at the root? -function CodeBlockString(props){const metadata=useCodeBlockMetadata(props);const wordWrap=(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_3__/* .useCodeWordWrap */ .f)();return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_2__/* .CodeBlockContextProvider */ .l8,{metadata:metadata,wordWrap:wordWrap,children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_theme_CodeBlock_Layout__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A,{})});} - -/***/ }, - -/***/ 5817 -(module) { - -"use strict"; -module.exports = /*#__PURE__*/JSON.parse('{"id":"reference/collections","title":"CmdForge Collections","description":"Collections are curated groups of tools that can be installed together with a single command.","source":"@site/docs/reference/collections.md","sourceDirName":"reference","slug":"/reference/collections","permalink":"/rob/CmdForge/reference/collections","draft":false,"unlisted":false,"tags":[],"version":"current","sidebarPosition":3,"frontMatter":{"sidebar_label":"Collections","sidebar_position":3,"format":"md"},"sidebar":"docs","previous":{"title":"Meta-Tools","permalink":"/rob/CmdForge/reference/meta-tools"},"next":{"title":"Example Tools","permalink":"/rob/CmdForge/reference/examples"}}'); - -/***/ }, - -/***/ 5821 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ assets: () => (/* binding */ assets), -/* harmony export */ contentTitle: () => (/* binding */ contentTitle), -/* harmony export */ "default": () => (/* binding */ MDXContent), -/* harmony export */ frontMatter: () => (/* binding */ frontMatter), -/* harmony export */ metadata: () => (/* reexport default export from named module */ _site_docusaurus_docusaurus_plugin_content_docs_default_site_docs_goals_md_5ee_json__WEBPACK_IMPORTED_MODULE_0__), -/* harmony export */ toc: () => (/* binding */ toc) -/* harmony export */ }); -/* harmony import */ var _site_docusaurus_docusaurus_plugin_content_docs_default_site_docs_goals_md_5ee_json__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8310); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4848); -/* harmony import */ var _mdx_js_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(8453); - - -const frontMatter = { - type: 'goals', - project: 'cmdforge', - updated: new Date('2026-01-13T00:00:00.000Z') -}; -const contentTitle = 'Goals'; - -const assets = { - -}; - - - -const toc = [{ - "value": "Vision", - "id": "vision", - "level": 2 -}, { - "value": "Active", - "id": "active", - "level": 2 -}, { - "value": "Future", - "id": "future", - "level": 2 -}, { - "value": "Non-Goals", - "id": "non-goals", - "level": 2 -}]; -function _createMdxContent(props) { - const _components = { - h1: "h1", - h2: "h2", - header: "header", - input: "input", - li: "li", - p: "p", - ul: "ul", - ...(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__/* .useMDXComponents */ .R)(), - ...props.components - }; - return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.Fragment, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.header, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h1, { - id: "goals", - children: "Goals" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "vision", - children: "Vision" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "CmdForge empowers users to create custom AI-powered CLI commands as easily as writing a config file. It bridges the gap between powerful AI capabilities and the simplicity of Unix pipes, letting anyone build tools that fit their workflow without writing code." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "active", - children: "Active" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - className: "contains-task-list", - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Provide a simple, intuitive way for users to create AI-powered CLI tools without coding #high"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Enable tool sharing so users can discover, use, and improve community-created tools #high"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Integrate seamlessly with Unix workflows through standard stdin/stdout piping #medium"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Abstract away AI provider complexity so tools work with any backend #medium"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Maintain tool reliability through offline caching and graceful degradation #medium"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Ensure tool quality through a curation system that prevents duplication and maintains standards #low"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "future", - children: "Future" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - className: "contains-task-list", - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Support tool composition where tools can chain together and build on each other #medium"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Create a monetization plan for sustainable tool ecosystem #low"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Provide extensibility for custom AI backends and integrations #low"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "non-goals", - children: "Non-Goals" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - className: "contains-task-list", - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Replace shell scripting #medium"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Build a full IDE #medium"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Require coding knowledge #medium"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Lock users to specific providers #medium"] - }), "\n"] - })] - }); -} -function MDXContent(props = {}) { - const {wrapper: MDXLayout} = { - ...(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__/* .useMDXComponents */ .R)(), - ...props.components - }; - return MDXLayout ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(MDXLayout, { - ...props, - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_createMdxContent, { - ...props - }) - }) : _createMdxContent(props); -} - - - -/***/ }, - -/***/ 5835 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ IconExternalLink) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_Translate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(986); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1455); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// References symbol in docusaurus-theme-classic/src/inlineSvgSprites.ts -// See why: https://github.com/facebook/docusaurus/issues/5865 -const svgSprite='#theme-svg-external-link';function IconExternalLink({width=13.5,height=13.5}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("svg",{width:width,height:height,"aria-label":(0,_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_1__/* .translate */ .T)({id:'theme.IconExternalLink.ariaLabel',message:'(opens in new tab)',description:'The ARIA label for the external link icon'}),className:(_styles_module_css__WEBPACK_IMPORTED_MODULE_2___default().iconExternalLink),children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("use",{href:svgSprite})});} - -/***/ }, - -/***/ 5846 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ Logo) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_Link__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8774); -/* harmony import */ var _docusaurus_useBaseUrl__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6025); -/* harmony import */ var _docusaurus_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4586); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(6342); -/* harmony import */ var _theme_ThemedImage__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(5626); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function LogoThemedImage({logo,alt,imageClassName}){const sources={light:(0,_docusaurus_useBaseUrl__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Ay)(logo.src),dark:(0,_docusaurus_useBaseUrl__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Ay)(logo.srcDark||logo.src)};const themedImage=/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_theme_ThemedImage__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A,{className:logo.className,sources:sources,height:logo.height,width:logo.width,alt:alt,style:logo.style});// Is this extra div really necessary? -// introduced in https://github.com/facebook/docusaurus/pull/5666 -return imageClassName?/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("div",{className:imageClassName,children:themedImage}):themedImage;}function Logo(props){const{siteConfig:{title}}=(0,_docusaurus_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)();const{navbar:{title:navbarTitle,logo}}=(0,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_4__/* .useThemeConfig */ .p)();const{imageClassName,titleClassName,...propsRest}=props;const logoLink=(0,_docusaurus_useBaseUrl__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Ay)(logo?.href||'/');// If visible title is shown, fallback alt text should be -// an empty string to mark the logo as decorative. -const fallbackAlt=navbarTitle?'':title;// Use logo alt text if provided (including empty string), -// and provide a sensible fallback otherwise. -const alt=logo?.alt??fallbackAlt;return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_docusaurus_Link__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A,{to:logoLink,...propsRest,...(logo?.target&&{target:logo.target}),children:[logo&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(LogoThemedImage,{logo:logo,alt:alt,imageClassName:imageClassName}),navbarTitle!=null&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("b",{className:titleClassName,children:navbarTitle})]});} - -/***/ }, - -/***/ 5859 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ prismIncludeLanguages) -/* harmony export */ }); -/* harmony import */ var _generated_docusaurus_config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4784); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function prismIncludeLanguages(PrismObject){const{themeConfig:{prism}}=_generated_docusaurus_config__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A;const{additionalLanguages}=prism;// Prism components work on the Prism instance on the window, while prism- -// react-renderer uses its own Prism instance. We temporarily mount the -// instance onto window, import components to enhance it, then remove it to -// avoid polluting global namespace. -// You can mutate PrismObject: registering plugins, deleting languages... As -// long as you don't re-assign it -const PrismBefore=globalThis.Prism;globalThis.Prism=PrismObject;additionalLanguages.forEach(lang=>{if(lang==='php'){// eslint-disable-next-line global-require -__webpack_require__(9700);}// eslint-disable-next-line global-require, import/no-dynamic-require -__webpack_require__(6018)(`./prism-${lang}`);});// Clean up and eventually restore former globalThis.Prism object (if any) -delete globalThis.Prism;if(typeof PrismBefore!=='undefined'){globalThis.Prism=PrismObject;}} - -/***/ }, - -/***/ 5861 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ IconArrow) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function IconArrow(props){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("svg",{width:"20",height:"20","aria-hidden":"true",...props,children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("g",{fill:"#7a7a7a",children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("path",{d:"M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("path",{d:"M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"})]})});} - -/***/ }, - -/***/ 5863 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ NavbarMobilePrimaryMenu) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6342); -/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2069); -/* harmony import */ var _theme_NavbarItem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7163); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function useNavbarItems(){// TODO temporary casting until ThemeConfig type is improved -return (0,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_1__/* .useThemeConfig */ .p)().navbar.items;}// The primary menu displays the navbar items -function NavbarMobilePrimaryMenu(){const mobileSidebar=(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_2__/* .useNavbarMobileSidebar */ .M)();// TODO how can the order be defined for mobile? -// Should we allow providing a different list of items? -const items=useNavbarItems();return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("ul",{className:"menu__list",children:items.map((item,i)=>/*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_theme_NavbarItem__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A,{mobile:true,...item,onClick:()=>mobileSidebar.toggle(),key:i}))});} - -/***/ }, - -/***/ 5903 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ CodeBlockLayout) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4291); -/* harmony import */ var _theme_CodeBlock_Container__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(236); -/* harmony import */ var _theme_CodeBlock_Title__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(6509); -/* harmony import */ var _theme_CodeBlock_Content__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(1594); -/* harmony import */ var _theme_CodeBlock_Buttons__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(5926); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(7851); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function CodeBlockLayout({className}){const{metadata}=(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_2__/* .useCodeBlockContext */ .Ph)();return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxs)(_theme_CodeBlock_Container__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A,{as:"div",className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(className,metadata.className),children:[metadata.title&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)("div",{className:(_styles_module_css__WEBPACK_IMPORTED_MODULE_7___default().codeBlockTitle),children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(_theme_CodeBlock_Title__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A,{children:metadata.title})}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxs)("div",{className:(_styles_module_css__WEBPACK_IMPORTED_MODULE_7___default().codeBlockContent),children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(_theme_CodeBlock_Content__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A,{}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(_theme_CodeBlock_Buttons__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A,{})]})]});} - -/***/ }, - -/***/ 5926 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ CodeBlockButtons) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_BrowserOnly__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(8478); -/* harmony import */ var _theme_CodeBlock_Buttons_CopyButton__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(274); -/* harmony import */ var _theme_CodeBlock_Buttons_WordWrapButton__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(63); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(9588); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// Code block buttons are not server-rendered on purpose -// Adding them to the initial HTML is useless and expensive (due to JSX SVG) -// They are hidden by default and require React to become interactive -function CodeBlockButtons({className}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_docusaurus_BrowserOnly__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{children:()=>/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)("div",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(className,(_styles_module_css__WEBPACK_IMPORTED_MODULE_5___default().buttonGroup)),children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_theme_CodeBlock_Buttons_WordWrapButton__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A,{}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_theme_CodeBlock_Buttons_CopyButton__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A,{})]})});} - -/***/ }, - -/***/ 5947 -(module, exports, __webpack_require__) { - -var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress - * @license MIT */ - -;(function(root, factory) { - - if (true) { - !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory), - __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? - (__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) : - __WEBPACK_AMD_DEFINE_FACTORY__), - __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - } else // removed by dead control flow -{} - -})(this, function() { - var NProgress = {}; - - NProgress.version = '0.2.0'; - - var Settings = NProgress.settings = { - minimum: 0.08, - easing: 'ease', - positionUsing: '', - speed: 200, - trickle: true, - trickleRate: 0.02, - trickleSpeed: 800, - showSpinner: true, - barSelector: '[role="bar"]', - spinnerSelector: '[role="spinner"]', - parent: 'body', - template: '<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>' - }; - - /** - * Updates configuration. - * - * NProgress.configure({ - * minimum: 0.1 - * }); - */ - NProgress.configure = function(options) { - var key, value; - for (key in options) { - value = options[key]; - if (value !== undefined && options.hasOwnProperty(key)) Settings[key] = value; - } - - return this; - }; - - /** - * Last number. - */ - - NProgress.status = null; - - /** - * Sets the progress bar status, where `n` is a number from `0.0` to `1.0`. - * - * NProgress.set(0.4); - * NProgress.set(1.0); - */ - - NProgress.set = function(n) { - var started = NProgress.isStarted(); - - n = clamp(n, Settings.minimum, 1); - NProgress.status = (n === 1 ? null : n); - - var progress = NProgress.render(!started), - bar = progress.querySelector(Settings.barSelector), - speed = Settings.speed, - ease = Settings.easing; - - progress.offsetWidth; /* Repaint */ - - queue(function(next) { - // Set positionUsing if it hasn't already been set - if (Settings.positionUsing === '') Settings.positionUsing = NProgress.getPositioningCSS(); - - // Add transition - css(bar, barPositionCSS(n, speed, ease)); - - if (n === 1) { - // Fade out - css(progress, { - transition: 'none', - opacity: 1 - }); - progress.offsetWidth; /* Repaint */ - - setTimeout(function() { - css(progress, { - transition: 'all ' + speed + 'ms linear', - opacity: 0 - }); - setTimeout(function() { - NProgress.remove(); - next(); - }, speed); - }, speed); - } else { - setTimeout(next, speed); - } - }); - - return this; - }; - - NProgress.isStarted = function() { - return typeof NProgress.status === 'number'; - }; - - /** - * Shows the progress bar. - * This is the same as setting the status to 0%, except that it doesn't go backwards. - * - * NProgress.start(); - * - */ - NProgress.start = function() { - if (!NProgress.status) NProgress.set(0); - - var work = function() { - setTimeout(function() { - if (!NProgress.status) return; - NProgress.trickle(); - work(); - }, Settings.trickleSpeed); - }; - - if (Settings.trickle) work(); - - return this; - }; - - /** - * Hides the progress bar. - * This is the *sort of* the same as setting the status to 100%, with the - * difference being `done()` makes some placebo effect of some realistic motion. - * - * NProgress.done(); - * - * If `true` is passed, it will show the progress bar even if its hidden. - * - * NProgress.done(true); - */ - - NProgress.done = function(force) { - if (!force && !NProgress.status) return this; - - return NProgress.inc(0.3 + 0.5 * Math.random()).set(1); - }; - - /** - * Increments by a random amount. - */ - - NProgress.inc = function(amount) { - var n = NProgress.status; - - if (!n) { - return NProgress.start(); - } else { - if (typeof amount !== 'number') { - amount = (1 - n) * clamp(Math.random() * n, 0.1, 0.95); - } - - n = clamp(n + amount, 0, 0.994); - return NProgress.set(n); - } - }; - - NProgress.trickle = function() { - return NProgress.inc(Math.random() * Settings.trickleRate); - }; - - /** - * Waits for all supplied jQuery promises and - * increases the progress as the promises resolve. - * - * @param $promise jQUery Promise - */ - (function() { - var initial = 0, current = 0; - - NProgress.promise = function($promise) { - if (!$promise || $promise.state() === "resolved") { - return this; - } - - if (current === 0) { - NProgress.start(); - } - - initial++; - current++; - - $promise.always(function() { - current--; - if (current === 0) { - initial = 0; - NProgress.done(); - } else { - NProgress.set((initial - current) / initial); - } - }); - - return this; - }; - - })(); - - /** - * (Internal) renders the progress bar markup based on the `template` - * setting. - */ - - NProgress.render = function(fromStart) { - if (NProgress.isRendered()) return document.getElementById('nprogress'); - - addClass(document.documentElement, 'nprogress-busy'); - - var progress = document.createElement('div'); - progress.id = 'nprogress'; - progress.innerHTML = Settings.template; - - var bar = progress.querySelector(Settings.barSelector), - perc = fromStart ? '-100' : toBarPerc(NProgress.status || 0), - parent = document.querySelector(Settings.parent), - spinner; - - css(bar, { - transition: 'all 0 linear', - transform: 'translate3d(' + perc + '%,0,0)' - }); - - if (!Settings.showSpinner) { - spinner = progress.querySelector(Settings.spinnerSelector); - spinner && removeElement(spinner); - } - - if (parent != document.body) { - addClass(parent, 'nprogress-custom-parent'); - } - - parent.appendChild(progress); - return progress; - }; - - /** - * Removes the element. Opposite of render(). - */ - - NProgress.remove = function() { - removeClass(document.documentElement, 'nprogress-busy'); - removeClass(document.querySelector(Settings.parent), 'nprogress-custom-parent'); - var progress = document.getElementById('nprogress'); - progress && removeElement(progress); - }; - - /** - * Checks if the progress bar is rendered. - */ - - NProgress.isRendered = function() { - return !!document.getElementById('nprogress'); - }; - - /** - * Determine which positioning CSS rule to use. - */ - - NProgress.getPositioningCSS = function() { - // Sniff on document.body.style - var bodyStyle = document.body.style; - - // Sniff prefixes - var vendorPrefix = ('WebkitTransform' in bodyStyle) ? 'Webkit' : - ('MozTransform' in bodyStyle) ? 'Moz' : - ('msTransform' in bodyStyle) ? 'ms' : - ('OTransform' in bodyStyle) ? 'O' : ''; - - if (vendorPrefix + 'Perspective' in bodyStyle) { - // Modern browsers with 3D support, e.g. Webkit, IE10 - return 'translate3d'; - } else if (vendorPrefix + 'Transform' in bodyStyle) { - // Browsers without 3D support, e.g. IE9 - return 'translate'; - } else { - // Browsers without translate() support, e.g. IE7-8 - return 'margin'; - } - }; - - /** - * Helpers - */ - - function clamp(n, min, max) { - if (n < min) return min; - if (n > max) return max; - return n; - } - - /** - * (Internal) converts a percentage (`0..1`) to a bar translateX - * percentage (`-100%..0%`). - */ - - function toBarPerc(n) { - return (-1 + n) * 100; - } - - - /** - * (Internal) returns the correct CSS for changing the bar's - * position given an n percentage, and speed and ease from Settings - */ - - function barPositionCSS(n, speed, ease) { - var barCSS; - - if (Settings.positionUsing === 'translate3d') { - barCSS = { transform: 'translate3d('+toBarPerc(n)+'%,0,0)' }; - } else if (Settings.positionUsing === 'translate') { - barCSS = { transform: 'translate('+toBarPerc(n)+'%,0)' }; - } else { - barCSS = { 'margin-left': toBarPerc(n)+'%' }; - } - - barCSS.transition = 'all '+speed+'ms '+ease; - - return barCSS; - } - - /** - * (Internal) Queues a function to be executed. - */ - - var queue = (function() { - var pending = []; - - function next() { - var fn = pending.shift(); - if (fn) { - fn(next); - } - } - - return function(fn) { - pending.push(fn); - if (pending.length == 1) next(); - }; - })(); - - /** - * (Internal) Applies css properties to an element, similar to the jQuery - * css method. - * - * While this helper does assist with vendor prefixed property names, it - * does not perform any manipulation of values prior to setting styles. - */ - - var css = (function() { - var cssPrefixes = [ 'Webkit', 'O', 'Moz', 'ms' ], - cssProps = {}; - - function camelCase(string) { - return string.replace(/^-ms-/, 'ms-').replace(/-([\da-z])/gi, function(match, letter) { - return letter.toUpperCase(); - }); - } - - function getVendorProp(name) { - var style = document.body.style; - if (name in style) return name; - - var i = cssPrefixes.length, - capName = name.charAt(0).toUpperCase() + name.slice(1), - vendorName; - while (i--) { - vendorName = cssPrefixes[i] + capName; - if (vendorName in style) return vendorName; - } - - return name; - } - - function getStyleProp(name) { - name = camelCase(name); - return cssProps[name] || (cssProps[name] = getVendorProp(name)); - } - - function applyCss(element, prop, value) { - prop = getStyleProp(prop); - element.style[prop] = value; - } - - return function(element, properties) { - var args = arguments, - prop, - value; - - if (args.length == 2) { - for (prop in properties) { - value = properties[prop]; - if (value !== undefined && properties.hasOwnProperty(prop)) applyCss(element, prop, value); - } - } else { - applyCss(element, args[1], args[2]); - } - } - })(); - - /** - * (Internal) Determines if an element or space separated list of class names contains a class name. - */ - - function hasClass(element, name) { - var list = typeof element == 'string' ? element : classList(element); - return list.indexOf(' ' + name + ' ') >= 0; - } - - /** - * (Internal) Adds a class to an element. - */ - - function addClass(element, name) { - var oldList = classList(element), - newList = oldList + name; - - if (hasClass(oldList, name)) return; - - // Trim the opening space. - element.className = newList.substring(1); - } - - /** - * (Internal) Removes a class from an element. - */ - - function removeClass(element, name) { - var oldList = classList(element), - newList; - - if (!hasClass(element, name)) return; - - // Replace the class name. - newList = oldList.replace(' ' + name + ' ', ' '); - - // Trim the opening and closing spaces. - element.className = newList.substring(1, newList.length - 1); - } - - /** - * (Internal) Gets a space separated list of the class names on the element. - * The list is wrapped with a single space on each end to facilitate finding - * matches within the list. - */ - - function classList(element) { - return (' ' + (element.className || '') + ' ').replace(/\s+/gi, ' '); - } - - /** - * (Internal) Removes an element from the DOM. - */ - - function removeElement(element) { - element && element.parentNode && element.parentNode.removeChild(element); - } - - return NProgress; -}); - - - -/***/ }, - -/***/ 6018 -(module, __unused_webpack_exports, __webpack_require__) { - -var map = { - "./": 8722 -}; - - -function webpackContext(req) { - var id = webpackContextResolve(req); - return __webpack_require__(id); -} -function webpackContextResolve(req) { - if(!__webpack_require__.o(map, req)) { - var e = new Error("Cannot find module '" + req + "'"); - e.code = 'MODULE_NOT_FOUND'; - throw e; - } - return map[req]; -} -webpackContext.keys = function webpackContextKeys() { - return Object.keys(map); -}; -webpackContext.resolve = webpackContextResolve; -module.exports = webpackContext; -webpackContext.id = 6018; - -/***/ }, - -/***/ 6024 -(module) { - -// Exports -module.exports = { - "docItemContainer": `docItemContainer_Djhp`, - "docItemCol": `docItemCol_VOVn` -}; - - -/***/ }, - -/***/ 6025 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ Ay: () => (/* binding */ useBaseUrl), -/* harmony export */ hH: () => (/* binding */ useBaseUrlUtils) -/* harmony export */ }); -/* unused harmony export addBaseUrl */ -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _useDocusaurusContext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4586); -/* harmony import */ var _isInternalUrl__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6654); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function addBaseUrl({siteUrl,baseUrl,url,options:{forcePrependBaseUrl=false,absolute=false}={},router}){// It never makes sense to add base url to a local anchor url, or one with a -// protocol -if(!url||url.startsWith('#')||(0,_isInternalUrl__WEBPACK_IMPORTED_MODULE_2__/* .hasProtocol */ .z)(url)){return url;}// TODO hash router + /baseUrl/ is unlikely to work well in all situations -// This will support most cases, but not all -// See https://github.com/facebook/docusaurus/pull/9859 -if(router==='hash'){return url.startsWith('/')?`.${url}`:`./${url}`;}if(forcePrependBaseUrl){return baseUrl+url.replace(/^\//,'');}// /baseUrl -> /baseUrl/ -// https://github.com/facebook/docusaurus/issues/6315 -if(url===baseUrl.replace(/\/$/,'')){return baseUrl;}// We should avoid adding the baseurl twice if it's already there -const shouldAddBaseUrl=!url.startsWith(baseUrl);const basePath=shouldAddBaseUrl?baseUrl+url.replace(/^\//,''):url;return absolute?siteUrl+basePath:basePath;}function useBaseUrlUtils(){const{siteConfig}=(0,_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)();const{baseUrl,url:siteUrl}=siteConfig;const router=siteConfig.future.experimental_router;const withBaseUrl=(0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((url,options)=>addBaseUrl({siteUrl,baseUrl,url,options,router}),[siteUrl,baseUrl,router]);return{withBaseUrl};}function useBaseUrl(url,options={}){const{withBaseUrl}=useBaseUrlUtils();return withBaseUrl(url,options);} - -/***/ }, - -/***/ 6031 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ FooterLinksMultiColumn) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7559); -/* harmony import */ var _theme_Footer_LinkItem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7126); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function ColumnLinkItem({item}){return item.html?/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("li",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('footer__item',item.className)// Developer provided the HTML, so assume it's safe. -// eslint-disable-next-line react/no-danger -,dangerouslySetInnerHTML:{__html:item.html}}):/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("li",{className:"footer__item",children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_theme_Footer_LinkItem__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A,{item:item})},item.href??item.to);}function Column({column}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)("div",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__/* .ThemeClassNames */ .G.layout.footer.column,'col footer__col',column.className),children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("div",{className:"footer__title",children:column.title}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("ul",{className:"footer__items clean-list",children:column.items.map((item,i)=>/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(ColumnLinkItem,{item:item},i))})]});}function FooterLinksMultiColumn({columns}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("div",{className:"row footer__links",children:columns.map((column,i)=>/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(Column,{column:column},i))});} - -/***/ }, - -/***/ 6058 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ usePrismTheme) -/* harmony export */ }); -/* harmony import */ var _contexts_colorMode__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5293); -/* harmony import */ var _utils_useThemeConfig__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6342); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - *//** - * Returns a color-mode-dependent Prism theme: whatever the user specified in - * the config. Falls back to `palenight`. - */function usePrismTheme(){const{prism}=(0,_utils_useThemeConfig__WEBPACK_IMPORTED_MODULE_1__/* .useThemeConfig */ .p)();const{colorMode}=(0,_contexts_colorMode__WEBPACK_IMPORTED_MODULE_0__/* .useColorMode */ .G)();const lightModeTheme=prism.theme;const darkModeTheme=prism.darkTheme||lightModeTheme;const prismTheme=colorMode==='dark'?darkModeTheme:lightModeTheme;return prismTheme;} - -/***/ }, - -/***/ 6062 -(module) { - -// Exports -module.exports = { - "details": `details_lb9f`, - "isBrowser": `isBrowser_bmU9`, - "collapsibleContent": `collapsibleContent_i85q` -}; - - -/***/ }, - -/***/ 6112 -(module) { - -// Exports -module.exports = { - "cardContainer": `cardContainer_fWXF`, - "cardTitle": `cardTitle_rnsV`, - "cardDescription": `cardDescription_PWke` -}; - - -/***/ }, - -/***/ 6125 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ o: () => (/* binding */ Context), -/* harmony export */ x: () => (/* binding */ BrowserContextProvider) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// Encapsulate the logic to avoid React hydration problems -// See https://www.joshwcomeau.com/react/the-perils-of-rehydration/ -// On first client-side render, we need to render exactly as the server rendered -// isBrowser is set to true only after a successful hydration -// Note, isBrowser is not part of useDocusaurusContext() for perf reasons -// Using useDocusaurusContext() (much more common need) should not trigger -// re-rendering after a successful hydration -const Context=/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(false);function BrowserContextProvider({children}){const[isBrowser,setIsBrowser]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{setIsBrowser(true);},[]);return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(Context.Provider,{value:isBrowser,children:children});} - -/***/ }, - -/***/ 6128 -(module) { - -// Exports -module.exports = { - "codeBlock": `codeBlock_bY9V`, - "codeBlockStandalone": `codeBlockStandalone_MEMb`, - "codeBlockLines": `codeBlockLines_e6Vv`, - "codeBlockLinesWithNumbering": `codeBlockLinesWithNumbering_o6Pm` -}; - - -/***/ }, - -/***/ 6157 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ AdmonitionTypeWarning) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(986); -/* harmony import */ var _theme_Admonition_Layout__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7611); -/* harmony import */ var _theme_Admonition_Icon_Warning__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(804); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */const infimaClassName='alert alert--warning';const defaultProps={icon:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_theme_Admonition_Icon_Warning__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A,{}),title:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})};function AdmonitionTypeWarning(props){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_theme_Admonition_Layout__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A,{...defaultProps,...props,className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(infimaClassName,props.className),children:props.children});} - -/***/ }, - -/***/ 6175 -(module) { - -// Exports -module.exports = { - "admonition": `admonition_xJq3`, - "admonitionHeading": `admonitionHeading_Gvgb`, - "admonitionIcon": `admonitionIcon_Rf37`, - "admonitionContent": `admonitionContent_BuS1` -}; - - -/***/ }, - -/***/ 6218 -(module) { - -// Exports -module.exports = { - "mainWrapper": `mainWrapper_z2l0` -}; - - -/***/ }, - -/***/ 6221 -(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; -/** - * @license React - * react-dom.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - - -var React = __webpack_require__(6540); -function formatProdErrorMessage(code) { - var url = "https://react.dev/errors/" + code; - if (1 < arguments.length) { - url += "?args[]=" + encodeURIComponent(arguments[1]); - for (var i = 2; i < arguments.length; i++) - url += "&args[]=" + encodeURIComponent(arguments[i]); - } - return ( - "Minified React error #" + - code + - "; visit " + - url + - " for the full message or use the non-minified dev environment for full errors and additional helpful warnings." - ); -} -function noop() {} -var Internals = { - d: { - f: noop, - r: function () { - throw Error(formatProdErrorMessage(522)); - }, - D: noop, - C: noop, - L: noop, - m: noop, - X: noop, - S: noop, - M: noop - }, - p: 0, - findDOMNode: null - }, - REACT_PORTAL_TYPE = Symbol.for("react.portal"); -function createPortal$1(children, containerInfo, implementation) { - var key = - 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null; - return { - $$typeof: REACT_PORTAL_TYPE, - key: null == key ? null : "" + key, - children: children, - containerInfo: containerInfo, - implementation: implementation - }; -} -var ReactSharedInternals = - React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE; -function getCrossOriginStringAs(as, input) { - if ("font" === as) return ""; - if ("string" === typeof input) - return "use-credentials" === input ? input : ""; -} -exports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = - Internals; -exports.createPortal = function (children, container) { - var key = - 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null; - if ( - !container || - (1 !== container.nodeType && - 9 !== container.nodeType && - 11 !== container.nodeType) - ) - throw Error(formatProdErrorMessage(299)); - return createPortal$1(children, container, null, key); -}; -exports.flushSync = function (fn) { - var previousTransition = ReactSharedInternals.T, - previousUpdatePriority = Internals.p; - try { - if (((ReactSharedInternals.T = null), (Internals.p = 2), fn)) return fn(); - } finally { - (ReactSharedInternals.T = previousTransition), - (Internals.p = previousUpdatePriority), - Internals.d.f(); - } -}; -exports.preconnect = function (href, options) { - "string" === typeof href && - (options - ? ((options = options.crossOrigin), - (options = - "string" === typeof options - ? "use-credentials" === options - ? options - : "" - : void 0)) - : (options = null), - Internals.d.C(href, options)); -}; -exports.prefetchDNS = function (href) { - "string" === typeof href && Internals.d.D(href); -}; -exports.preinit = function (href, options) { - if ("string" === typeof href && options && "string" === typeof options.as) { - var as = options.as, - crossOrigin = getCrossOriginStringAs(as, options.crossOrigin), - integrity = - "string" === typeof options.integrity ? options.integrity : void 0, - fetchPriority = - "string" === typeof options.fetchPriority - ? options.fetchPriority - : void 0; - "style" === as - ? Internals.d.S( - href, - "string" === typeof options.precedence ? options.precedence : void 0, - { - crossOrigin: crossOrigin, - integrity: integrity, - fetchPriority: fetchPriority - } - ) - : "script" === as && - Internals.d.X(href, { - crossOrigin: crossOrigin, - integrity: integrity, - fetchPriority: fetchPriority, - nonce: "string" === typeof options.nonce ? options.nonce : void 0 - }); - } -}; -exports.preinitModule = function (href, options) { - if ("string" === typeof href) - if ("object" === typeof options && null !== options) { - if (null == options.as || "script" === options.as) { - var crossOrigin = getCrossOriginStringAs( - options.as, - options.crossOrigin - ); - Internals.d.M(href, { - crossOrigin: crossOrigin, - integrity: - "string" === typeof options.integrity ? options.integrity : void 0, - nonce: "string" === typeof options.nonce ? options.nonce : void 0 - }); - } - } else null == options && Internals.d.M(href); -}; -exports.preload = function (href, options) { - if ( - "string" === typeof href && - "object" === typeof options && - null !== options && - "string" === typeof options.as - ) { - var as = options.as, - crossOrigin = getCrossOriginStringAs(as, options.crossOrigin); - Internals.d.L(href, as, { - crossOrigin: crossOrigin, - integrity: - "string" === typeof options.integrity ? options.integrity : void 0, - nonce: "string" === typeof options.nonce ? options.nonce : void 0, - type: "string" === typeof options.type ? options.type : void 0, - fetchPriority: - "string" === typeof options.fetchPriority - ? options.fetchPriority - : void 0, - referrerPolicy: - "string" === typeof options.referrerPolicy - ? options.referrerPolicy - : void 0, - imageSrcSet: - "string" === typeof options.imageSrcSet ? options.imageSrcSet : void 0, - imageSizes: - "string" === typeof options.imageSizes ? options.imageSizes : void 0, - media: "string" === typeof options.media ? options.media : void 0 - }); - } -}; -exports.preloadModule = function (href, options) { - if ("string" === typeof href) - if (options) { - var crossOrigin = getCrossOriginStringAs(options.as, options.crossOrigin); - Internals.d.m(href, { - as: - "string" === typeof options.as && "script" !== options.as - ? options.as - : void 0, - crossOrigin: crossOrigin, - integrity: - "string" === typeof options.integrity ? options.integrity : void 0 - }); - } else Internals.d.m(href); -}; -exports.requestFormReset = function (form) { - Internals.d.r(form); -}; -exports.unstable_batchedUpdates = function (fn, a) { - return fn(a); -}; -exports.useFormState = function (action, initialState, permalink) { - return ReactSharedInternals.H.useFormState(action, initialState, permalink); -}; -exports.useFormStatus = function () { - return ReactSharedInternals.H.useHostTransitionStatus(); -}; -exports.version = "19.2.3"; - - -/***/ }, - -/***/ 6234 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ FooterLinksSimple) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _theme_Footer_LinkItem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7126); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function Separator(){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("span",{className:"footer__link-separator",children:"\xB7"});}function SimpleLinkItem({item}){return item.html?/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("span",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('footer__link-item',item.className)// Developer provided the HTML, so assume it's safe. -// eslint-disable-next-line react/no-danger -,dangerouslySetInnerHTML:{__html:item.html}}):/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_theme_Footer_LinkItem__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{item:item});}function FooterLinksSimple({links}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("div",{className:"footer__links text--center",children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("div",{className:"footer__links",children:links.map((item,i)=>/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment,{children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(SimpleLinkItem,{item:item}),links.length!==i+1&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Separator,{})]},i))})});} - -/***/ }, - -/***/ 6263 -(module) { - -// Exports -module.exports = { - "sidebar": `sidebar_njMd`, - "sidebarWithHideableNavbar": `sidebarWithHideableNavbar_wUlq`, - "sidebarHidden": `sidebarHidden_VK0M`, - "sidebarLogo": `sidebarLogo_isFc` -}; - - -/***/ }, - -/***/ 6266 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ i: () => (/* binding */ useDateTimeFormat) -/* harmony export */ }); -/* unused harmony export useCalendar */ -/* harmony import */ var _docusaurus_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4586); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function useCalendar(){const{i18n:{currentLocale,localeConfigs}}=(0,_docusaurus_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)();return localeConfigs[currentLocale].calendar;}function useDateTimeFormat(options={}){const{i18n:{currentLocale}}=(0,_docusaurus_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)();const calendar=useCalendar();return new Intl.DateTimeFormat(currentLocale,{calendar,...options});} - -/***/ }, - -/***/ 6294 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var nprogress__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5947); -/* harmony import */ var nprogress__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(nprogress__WEBPACK_IMPORTED_MODULE_0__); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */nprogress__WEBPACK_IMPORTED_MODULE_0___default().configure({showSpinner:false});const delay=200;const clientModule={onRouteUpdate({location,previousLocation}){if(previousLocation&&location.pathname!==previousLocation.pathname){const progressBarTimeout=window.setTimeout(()=>{nprogress__WEBPACK_IMPORTED_MODULE_0___default().start();},delay);return()=>window.clearTimeout(progressBarTimeout);}return undefined;},onRouteDidUpdate(){nprogress__WEBPACK_IMPORTED_MODULE_0___default().done();}};/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (clientModule); - -/***/ }, - -/***/ 6305 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ D: () => (/* binding */ splitNavbarItems), -/* harmony export */ G: () => (/* binding */ NavbarProvider) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _contexts_navbarMobileSidebar__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2069); -/* harmony import */ var _contexts_navbarSecondaryMenu_content__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5600); -/* harmony import */ var _contexts_navbarSecondaryMenu_display__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(8695); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */const DefaultNavItemPosition='right';/** - * Split links by left/right. If position is unspecified, fallback to right. - */function splitNavbarItems(items){function isLeft(item){return(item.position??DefaultNavItemPosition)==='left';}const leftItems=items.filter(isLeft);const rightItems=items.filter(item=>!isLeft(item));return[leftItems,rightItems];}/** - * Composes multiple navbar state providers that are mutually dependent and - * hence can't be re-ordered. - */function NavbarProvider({children}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_contexts_navbarSecondaryMenu_content__WEBPACK_IMPORTED_MODULE_2__/* .NavbarSecondaryMenuContentProvider */ .y_,{children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_contexts_navbarMobileSidebar__WEBPACK_IMPORTED_MODULE_1__/* .NavbarMobileSidebarProvider */ .e,{children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_contexts_navbarSecondaryMenu_display__WEBPACK_IMPORTED_MODULE_3__/* .NavbarSecondaryMenuDisplayProvider */ .N,{children:children})})});} - -/***/ }, - -/***/ 6342 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ p: () => (/* binding */ useThemeConfig) -/* harmony export */ }); -/* harmony import */ var _docusaurus_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4586); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - *//** - * A convenient/more semantic way to get theme config from context. - */function useThemeConfig(){return (0,_docusaurus_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)().siteConfig.themeConfig;} - -/***/ }, - -/***/ 6347 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ B6: () => (/* binding */ matchPath), -/* harmony export */ Ix: () => (/* binding */ Router), -/* harmony export */ W6: () => (/* binding */ useHistory), -/* harmony export */ XZ: () => (/* binding */ context), -/* harmony export */ dO: () => (/* binding */ Switch), -/* harmony export */ kO: () => (/* binding */ StaticRouter), -/* harmony export */ qh: () => (/* binding */ Route), -/* harmony export */ zy: () => (/* binding */ useLocation) -/* harmony export */ }); -/* unused harmony exports MemoryRouter, Prompt, Redirect, __HistoryContext, generatePath, useParams, useRouteMatch, withRouter */ -/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7387); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6540); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5556); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var history__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4499); -/* harmony import */ var tiny_invariant__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1561); -/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(8168); -/* harmony import */ var path_to_regexp__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(5302); -/* harmony import */ var path_to_regexp__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(path_to_regexp__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(4363); -/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(8587); -/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(4146); -/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_9__); - - - - - - - - - - - - -var MAX_SIGNED_31_BIT_INT = 1073741823; -var commonjsGlobal = typeof globalThis !== "undefined" // 'global proper' -? // eslint-disable-next-line no-undef -globalThis : typeof window !== "undefined" ? window // Browser -: typeof global !== "undefined" ? global // node.js -: {}; - -function getUniqueId() { - var key = "__global_unique_id__"; - return commonjsGlobal[key] = (commonjsGlobal[key] || 0) + 1; -} // Inlined Object.is polyfill. -// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is - - -function objectIs(x, y) { - if (x === y) { - return x !== 0 || 1 / x === 1 / y; - } else { - // eslint-disable-next-line no-self-compare - return x !== x && y !== y; - } -} - -function createEventEmitter(value) { - var handlers = []; - return { - on: function on(handler) { - handlers.push(handler); - }, - off: function off(handler) { - handlers = handlers.filter(function (h) { - return h !== handler; - }); - }, - get: function get() { - return value; - }, - set: function set(newValue, changedBits) { - value = newValue; - handlers.forEach(function (handler) { - return handler(value, changedBits); - }); - } - }; -} - -function onlyChild(children) { - return Array.isArray(children) ? children[0] : children; -} - -function createReactContext(defaultValue, calculateChangedBits) { - var _Provider$childContex, _Consumer$contextType; - - var contextProp = "__create-react-context-" + getUniqueId() + "__"; - - var Provider = /*#__PURE__*/function (_React$Component) { - (0,_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(Provider, _React$Component); - - function Provider() { - var _this; - - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this; - _this.emitter = createEventEmitter(_this.props.value); - return _this; - } - - var _proto = Provider.prototype; - - _proto.getChildContext = function getChildContext() { - var _ref; - - return _ref = {}, _ref[contextProp] = this.emitter, _ref; - }; - - _proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) { - if (this.props.value !== nextProps.value) { - var oldValue = this.props.value; - var newValue = nextProps.value; - var changedBits; - - if (objectIs(oldValue, newValue)) { - changedBits = 0; // No change - } else { - changedBits = typeof calculateChangedBits === "function" ? calculateChangedBits(oldValue, newValue) : MAX_SIGNED_31_BIT_INT; - - if (false) // removed by dead control flow -{} - - changedBits |= 0; - - if (changedBits !== 0) { - this.emitter.set(nextProps.value, changedBits); - } - } - } - }; - - _proto.render = function render() { - return this.props.children; - }; - - return Provider; - }(react__WEBPACK_IMPORTED_MODULE_1__.Component); - - Provider.childContextTypes = (_Provider$childContex = {}, _Provider$childContex[contextProp] = (prop_types__WEBPACK_IMPORTED_MODULE_2___default().object).isRequired, _Provider$childContex); - - var Consumer = /*#__PURE__*/function (_React$Component2) { - (0,_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(Consumer, _React$Component2); - - function Consumer() { - var _this2; - - for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; - } - - _this2 = _React$Component2.call.apply(_React$Component2, [this].concat(args)) || this; - _this2.observedBits = void 0; - _this2.state = { - value: _this2.getValue() - }; - - _this2.onUpdate = function (newValue, changedBits) { - var observedBits = _this2.observedBits | 0; - - if ((observedBits & changedBits) !== 0) { - _this2.setState({ - value: _this2.getValue() - }); - } - }; - - return _this2; - } - - var _proto2 = Consumer.prototype; - - _proto2.componentWillReceiveProps = function componentWillReceiveProps(nextProps) { - var observedBits = nextProps.observedBits; - this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT // Subscribe to all changes by default - : observedBits; - }; - - _proto2.componentDidMount = function componentDidMount() { - if (this.context[contextProp]) { - this.context[contextProp].on(this.onUpdate); - } - - var observedBits = this.props.observedBits; - this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT // Subscribe to all changes by default - : observedBits; - }; - - _proto2.componentWillUnmount = function componentWillUnmount() { - if (this.context[contextProp]) { - this.context[contextProp].off(this.onUpdate); - } - }; - - _proto2.getValue = function getValue() { - if (this.context[contextProp]) { - return this.context[contextProp].get(); - } else { - return defaultValue; - } - }; - - _proto2.render = function render() { - return onlyChild(this.props.children)(this.state.value); - }; - - return Consumer; - }(react__WEBPACK_IMPORTED_MODULE_1__.Component); - - Consumer.contextTypes = (_Consumer$contextType = {}, _Consumer$contextType[contextProp] = (prop_types__WEBPACK_IMPORTED_MODULE_2___default().object), _Consumer$contextType); - return { - Provider: Provider, - Consumer: Consumer - }; -} - -// MIT License -var createContext = react__WEBPACK_IMPORTED_MODULE_1__.createContext || createReactContext; - -// TODO: Replace with React.createContext once we can assume React 16+ - -var createNamedContext = function createNamedContext(name) { - var context = createContext(); - context.displayName = name; - return context; -}; - -var historyContext = /*#__PURE__*/createNamedContext("Router-History"); - -var context = /*#__PURE__*/createNamedContext("Router"); - -/** - * The public API for putting history on context. - */ - -var Router = /*#__PURE__*/function (_React$Component) { - (0,_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(Router, _React$Component); - - Router.computeRootMatch = function computeRootMatch(pathname) { - return { - path: "/", - url: "/", - params: {}, - isExact: pathname === "/" - }; - }; - - function Router(props) { - var _this; - - _this = _React$Component.call(this, props) || this; - _this.state = { - location: props.history.location - }; // This is a bit of a hack. We have to start listening for location - // changes here in the constructor in case there are any <Redirect>s - // on the initial render. If there are, they will replace/push when - // they mount and since cDM fires in children before parents, we may - // get a new location before the <Router> is mounted. - - _this._isMounted = false; - _this._pendingLocation = null; - - if (!props.staticContext) { - _this.unlisten = props.history.listen(function (location) { - _this._pendingLocation = location; - }); - } - - return _this; - } - - var _proto = Router.prototype; - - _proto.componentDidMount = function componentDidMount() { - var _this2 = this; - - this._isMounted = true; - - if (this.unlisten) { - // Any pre-mount location changes have been captured at - // this point, so unregister the listener. - this.unlisten(); - } - - if (!this.props.staticContext) { - this.unlisten = this.props.history.listen(function (location) { - if (_this2._isMounted) { - _this2.setState({ - location: location - }); - } - }); - } - - if (this._pendingLocation) { - this.setState({ - location: this._pendingLocation - }); - } - }; - - _proto.componentWillUnmount = function componentWillUnmount() { - if (this.unlisten) { - this.unlisten(); - this._isMounted = false; - this._pendingLocation = null; - } - }; - - _proto.render = function render() { - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(context.Provider, { - value: { - history: this.props.history, - location: this.state.location, - match: Router.computeRootMatch(this.state.location.pathname), - staticContext: this.props.staticContext - } - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(historyContext.Provider, { - children: this.props.children || null, - value: this.props.history - })); - }; - - return Router; -}(react__WEBPACK_IMPORTED_MODULE_1__.Component); - -if (false) // removed by dead control flow -{} - -/** - * The public API for a <Router> that stores location in memory. - */ - -var MemoryRouter = /*#__PURE__*/function (_React$Component) { - (0,_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(MemoryRouter, _React$Component); - - function MemoryRouter() { - var _this; - - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this; - _this.history = (0,history__WEBPACK_IMPORTED_MODULE_3__/* .createMemoryHistory */ .sC)(_this.props); - return _this; - } - - var _proto = MemoryRouter.prototype; - - _proto.render = function render() { - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(Router, { - history: this.history, - children: this.props.children - }); - }; - - return MemoryRouter; -}(react__WEBPACK_IMPORTED_MODULE_1__.Component); - -if (false) // removed by dead control flow -{} - -var Lifecycle = /*#__PURE__*/function (_React$Component) { - (0,_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(Lifecycle, _React$Component); - - function Lifecycle() { - return _React$Component.apply(this, arguments) || this; - } - - var _proto = Lifecycle.prototype; - - _proto.componentDidMount = function componentDidMount() { - if (this.props.onMount) this.props.onMount.call(this, this); - }; - - _proto.componentDidUpdate = function componentDidUpdate(prevProps) { - if (this.props.onUpdate) this.props.onUpdate.call(this, this, prevProps); - }; - - _proto.componentWillUnmount = function componentWillUnmount() { - if (this.props.onUnmount) this.props.onUnmount.call(this, this); - }; - - _proto.render = function render() { - return null; - }; - - return Lifecycle; -}(react__WEBPACK_IMPORTED_MODULE_1__.Component); - -/** - * The public API for prompting the user before navigating away from a screen. - */ - -function Prompt(_ref) { - var message = _ref.message, - _ref$when = _ref.when, - when = _ref$when === void 0 ? true : _ref$when; - return /*#__PURE__*/React.createElement(context.Consumer, null, function (context) { - !context ? false ? 0 : invariant(false) : void 0; - if (!when || context.staticContext) return null; - var method = context.history.block; - return /*#__PURE__*/React.createElement(Lifecycle, { - onMount: function onMount(self) { - self.release = method(message); - }, - onUpdate: function onUpdate(self, prevProps) { - if (prevProps.message !== message) { - self.release(); - self.release = method(message); - } - }, - onUnmount: function onUnmount(self) { - self.release(); - }, - message: message - }); - }); -} - -if (false) // removed by dead control flow -{ var messageType; } - -var cache = {}; -var cacheLimit = 10000; -var cacheCount = 0; - -function compilePath(path) { - if (cache[path]) return cache[path]; - var generator = pathToRegexp.compile(path); - - if (cacheCount < cacheLimit) { - cache[path] = generator; - cacheCount++; - } - - return generator; -} -/** - * Public API for generating a URL pathname from a path and parameters. - */ - - -function generatePath(path, params) { - if (path === void 0) { - path = "/"; - } - - if (params === void 0) { - params = {}; - } - - return path === "/" ? path : compilePath(path)(params, { - pretty: true - }); -} - -/** - * The public API for navigating programmatically with a component. - */ - -function Redirect(_ref) { - var computedMatch = _ref.computedMatch, - to = _ref.to, - _ref$push = _ref.push, - push = _ref$push === void 0 ? false : _ref$push; - return /*#__PURE__*/React.createElement(context.Consumer, null, function (context) { - !context ? false ? 0 : invariant(false) : void 0; - var history = context.history, - staticContext = context.staticContext; - var method = push ? history.push : history.replace; - var location = createLocation(computedMatch ? typeof to === "string" ? generatePath(to, computedMatch.params) : _extends({}, to, { - pathname: generatePath(to.pathname, computedMatch.params) - }) : to); // When rendering in a static context, - // set the new location immediately. - - if (staticContext) { - method(location); - return null; - } - - return /*#__PURE__*/React.createElement(Lifecycle, { - onMount: function onMount() { - method(location); - }, - onUpdate: function onUpdate(self, prevProps) { - var prevLocation = createLocation(prevProps.to); - - if (!locationsAreEqual(prevLocation, _extends({}, location, { - key: prevLocation.key - }))) { - method(location); - } - }, - to: to - }); - }); -} - -if (false) // removed by dead control flow -{} - -var cache$1 = {}; -var cacheLimit$1 = 10000; -var cacheCount$1 = 0; - -function compilePath$1(path, options) { - var cacheKey = "" + options.end + options.strict + options.sensitive; - var pathCache = cache$1[cacheKey] || (cache$1[cacheKey] = {}); - if (pathCache[path]) return pathCache[path]; - var keys = []; - var regexp = path_to_regexp__WEBPACK_IMPORTED_MODULE_6___default()(path, keys, options); - var result = { - regexp: regexp, - keys: keys - }; - - if (cacheCount$1 < cacheLimit$1) { - pathCache[path] = result; - cacheCount$1++; - } - - return result; -} -/** - * Public API for matching a URL pathname to a path. - */ - - -function matchPath(pathname, options) { - if (options === void 0) { - options = {}; - } - - if (typeof options === "string" || Array.isArray(options)) { - options = { - path: options - }; - } - - var _options = options, - path = _options.path, - _options$exact = _options.exact, - exact = _options$exact === void 0 ? false : _options$exact, - _options$strict = _options.strict, - strict = _options$strict === void 0 ? false : _options$strict, - _options$sensitive = _options.sensitive, - sensitive = _options$sensitive === void 0 ? false : _options$sensitive; - var paths = [].concat(path); - return paths.reduce(function (matched, path) { - if (!path && path !== "") return null; - if (matched) return matched; - - var _compilePath = compilePath$1(path, { - end: exact, - strict: strict, - sensitive: sensitive - }), - regexp = _compilePath.regexp, - keys = _compilePath.keys; - - var match = regexp.exec(pathname); - if (!match) return null; - var url = match[0], - values = match.slice(1); - var isExact = pathname === url; - if (exact && !isExact) return null; - return { - path: path, - // the path used to match - url: path === "/" && url === "" ? "/" : url, - // the matched portion of the URL - isExact: isExact, - // whether or not we matched exactly - params: keys.reduce(function (memo, key, index) { - memo[key.name] = values[index]; - return memo; - }, {}) - }; - }, null); -} - -function isEmptyChildren(children) { - return react__WEBPACK_IMPORTED_MODULE_1__.Children.count(children) === 0; -} - -function evalChildrenDev(children, props, path) { - var value = children(props); - false ? 0 : void 0; - return value || null; -} -/** - * The public API for matching a single path and rendering. - */ - - -var Route = /*#__PURE__*/function (_React$Component) { - (0,_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(Route, _React$Component); - - function Route() { - return _React$Component.apply(this, arguments) || this; - } - - var _proto = Route.prototype; - - _proto.render = function render() { - var _this = this; - - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(context.Consumer, null, function (context$1) { - !context$1 ? false ? 0 : (0,tiny_invariant__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A)(false) : void 0; - var location = _this.props.location || context$1.location; - var match = _this.props.computedMatch ? _this.props.computedMatch // <Switch> already computed the match for us - : _this.props.path ? matchPath(location.pathname, _this.props) : context$1.match; - - var props = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A)({}, context$1, { - location: location, - match: match - }); - - var _this$props = _this.props, - children = _this$props.children, - component = _this$props.component, - render = _this$props.render; // Preact uses an empty array as children by - // default, so use null if that's the case. - - if (Array.isArray(children) && isEmptyChildren(children)) { - children = null; - } - - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(context.Provider, { - value: props - }, props.match ? children ? typeof children === "function" ? false ? 0 : children(props) : children : component ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(component, props) : render ? render(props) : null : typeof children === "function" ? false ? 0 : children(props) : null); - }); - }; - - return Route; -}(react__WEBPACK_IMPORTED_MODULE_1__.Component); - -if (false) // removed by dead control flow -{} - -function addLeadingSlash(path) { - return path.charAt(0) === "/" ? path : "/" + path; -} - -function addBasename(basename, location) { - if (!basename) return location; - return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A)({}, location, { - pathname: addLeadingSlash(basename) + location.pathname - }); -} - -function stripBasename(basename, location) { - if (!basename) return location; - var base = addLeadingSlash(basename); - if (location.pathname.indexOf(base) !== 0) return location; - return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A)({}, location, { - pathname: location.pathname.substr(base.length) - }); -} - -function createURL(location) { - return typeof location === "string" ? location : (0,history__WEBPACK_IMPORTED_MODULE_3__/* .createPath */ .AO)(location); -} - -function staticHandler(methodName) { - return function () { - false ? 0 : (0,tiny_invariant__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A)(false) ; - }; -} - -function noop() {} -/** - * The public top-level API for a "static" <Router>, so-called because it - * can't actually change the current location. Instead, it just records - * location changes in a context object. Useful mainly in testing and - * server-rendering scenarios. - */ - - -var StaticRouter = /*#__PURE__*/function (_React$Component) { - (0,_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(StaticRouter, _React$Component); - - function StaticRouter() { - var _this; - - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this; - - _this.handlePush = function (location) { - return _this.navigateTo(location, "PUSH"); - }; - - _this.handleReplace = function (location) { - return _this.navigateTo(location, "REPLACE"); - }; - - _this.handleListen = function () { - return noop; - }; - - _this.handleBlock = function () { - return noop; - }; - - return _this; - } - - var _proto = StaticRouter.prototype; - - _proto.navigateTo = function navigateTo(location, action) { - var _this$props = this.props, - _this$props$basename = _this$props.basename, - basename = _this$props$basename === void 0 ? "" : _this$props$basename, - _this$props$context = _this$props.context, - context = _this$props$context === void 0 ? {} : _this$props$context; - context.action = action; - context.location = addBasename(basename, (0,history__WEBPACK_IMPORTED_MODULE_3__/* .createLocation */ .yJ)(location)); - context.url = createURL(context.location); - }; - - _proto.render = function render() { - var _this$props2 = this.props, - _this$props2$basename = _this$props2.basename, - basename = _this$props2$basename === void 0 ? "" : _this$props2$basename, - _this$props2$context = _this$props2.context, - context = _this$props2$context === void 0 ? {} : _this$props2$context, - _this$props2$location = _this$props2.location, - location = _this$props2$location === void 0 ? "/" : _this$props2$location, - rest = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .A)(_this$props2, ["basename", "context", "location"]); - - var history = { - createHref: function createHref(path) { - return addLeadingSlash(basename + createURL(path)); - }, - action: "POP", - location: stripBasename(basename, (0,history__WEBPACK_IMPORTED_MODULE_3__/* .createLocation */ .yJ)(location)), - push: this.handlePush, - replace: this.handleReplace, - go: staticHandler("go"), - goBack: staticHandler("goBack"), - goForward: staticHandler("goForward"), - listen: this.handleListen, - block: this.handleBlock - }; - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(Router, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A)({}, rest, { - history: history, - staticContext: context - })); - }; - - return StaticRouter; -}(react__WEBPACK_IMPORTED_MODULE_1__.Component); - -if (false) // removed by dead control flow -{} - -/** - * The public API for rendering the first <Route> that matches. - */ - -var Switch = /*#__PURE__*/function (_React$Component) { - (0,_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(Switch, _React$Component); - - function Switch() { - return _React$Component.apply(this, arguments) || this; - } - - var _proto = Switch.prototype; - - _proto.render = function render() { - var _this = this; - - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(context.Consumer, null, function (context) { - !context ? false ? 0 : (0,tiny_invariant__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A)(false) : void 0; - var location = _this.props.location || context.location; - var element, match; // We use React.Children.forEach instead of React.Children.toArray().find() - // here because toArray adds keys to all child elements and we do not want - // to trigger an unmount/remount for two <Route>s that render the same - // component at different URLs. - - react__WEBPACK_IMPORTED_MODULE_1__.Children.forEach(_this.props.children, function (child) { - if (match == null && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.isValidElement(child)) { - element = child; - var path = child.props.path || child.props.from; - match = path ? matchPath(location.pathname, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A)({}, child.props, { - path: path - })) : context.match; - } - }); - return match ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.cloneElement(element, { - location: location, - computedMatch: match - }) : null; - }); - }; - - return Switch; -}(react__WEBPACK_IMPORTED_MODULE_1__.Component); - -if (false) // removed by dead control flow -{} - -/** - * A public higher-order component to access the imperative API - */ - -function withRouter(Component) { - var displayName = "withRouter(" + (Component.displayName || Component.name) + ")"; - - var C = function C(props) { - var wrappedComponentRef = props.wrappedComponentRef, - remainingProps = _objectWithoutPropertiesLoose(props, ["wrappedComponentRef"]); - - return /*#__PURE__*/React.createElement(context.Consumer, null, function (context) { - !context ? false ? 0 : invariant(false) : void 0; - return /*#__PURE__*/React.createElement(Component, _extends({}, remainingProps, context, { - ref: wrappedComponentRef - })); - }); - }; - - C.displayName = displayName; - C.WrappedComponent = Component; - - if (false) // removed by dead control flow -{} - - return hoistStatics(C, Component); -} - -var useContext = react__WEBPACK_IMPORTED_MODULE_1__.useContext; -function useHistory() { - if (false) // removed by dead control flow -{} - - return useContext(historyContext); -} -function useLocation() { - if (false) // removed by dead control flow -{} - - return useContext(context).location; -} -function useParams() { - if (false) // removed by dead control flow -{} - - var match = useContext(context).match; - return match ? match.params : {}; -} -function useRouteMatch(path) { - if (false) // removed by dead control flow -{} - - var location = useLocation(); - var match = useContext(context).match; - return path ? matchPath(location.pathname, path) : match; -} - -if (false) // removed by dead control flow -{ var secondaryBuildName, initialBuildName, buildNames, key, global$1; } - - -//# sourceMappingURL=react-router.js.map - - -/***/ }, - -/***/ 6376 -(module) { - -"use strict"; -module.exports = /*#__PURE__*/JSON.parse('{"id":"reference/providers","title":"Provider Setup Guide","description":"CmdForge works with any AI CLI tool that accepts input via stdin or arguments. This guide covers setup for the most popular providers.","source":"@site/docs/reference/providers.md","sourceDirName":"reference","slug":"/reference/providers","permalink":"/rob/CmdForge/reference/providers","draft":false,"unlisted":false,"tags":[],"version":"current","sidebarPosition":1,"frontMatter":{"sidebar_label":"Provider Setup","sidebar_position":1,"format":"md"},"sidebar":"docs","previous":{"title":"Reference","permalink":"/rob/CmdForge/category/reference"},"next":{"title":"Registry API","permalink":"/rob/CmdForge/reference/registry-spec"}}'); - -/***/ }, - -/***/ 6474 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ Error) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_Head__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5260); -/* harmony import */ var _docusaurus_ErrorBoundary__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7788); -/* harmony import */ var _docusaurus_utils_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(440); -/* harmony import */ var _theme_Layout__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(8768); -/* harmony import */ var _routeContext__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(3102); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// Should we translate theme-fallback? -/* eslint-disable @docusaurus/no-untranslated-text */function ErrorDisplay({error,tryAgain}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)("div",{style:{display:'flex',flexDirection:'column',justifyContent:'center',alignItems:'flex-start',minHeight:'100vh',width:'100%',maxWidth:'80ch',fontSize:'20px',margin:'0 auto',padding:'1rem'},children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("h1",{style:{fontSize:'3rem'},children:"This page crashed"}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("button",{type:"button",onClick:tryAgain,style:{margin:'1rem 0',fontSize:'2rem',cursor:'pointer',borderRadius:20,padding:'1rem'},children:"Try again"}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(ErrorBoundaryError,{error:error})]});}function ErrorBoundaryError({error}){const causalChain=(0,_docusaurus_utils_common__WEBPACK_IMPORTED_MODULE_3__/* .getErrorCausalChain */ .rA)(error);const fullMessage=causalChain.map(e=>e.message).join('\n\nCause:\n');return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("p",{style:{whiteSpace:'pre-wrap'},children:fullMessage});}// A bit hacky: we need to add an artificial RouteContextProvider here -// The goal is to be able to render the error inside the theme layout -// Without this, our theme classic would crash due to lack of route context -// See also https://github.com/facebook/docusaurus/pull/9852 -function ErrorRouteContextProvider({children}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_routeContext__WEBPACK_IMPORTED_MODULE_5__/* .RouteContextProvider */ .W,{value:{plugin:{name:'docusaurus-core-error-boundary',id:'default'}},children:children});}function Error({error,tryAgain}){// We wrap the error in its own error boundary because the layout can actually -// throw too... Only the ErrorDisplay component is simple enough to be -// considered safe to never throw -return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(ErrorRouteContextProvider,{children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_docusaurus_ErrorBoundary__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A// Note: we display the original error here, not the error that we -// captured in this extra error boundary -,{fallback:()=>/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(ErrorDisplay,{error:error,tryAgain:tryAgain}),children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_docusaurus_Head__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A,{children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("title",{children:"Page Error"})}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_theme_Layout__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A,{children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(ErrorDisplay,{error:error,tryAgain:tryAgain})})]})});} - -/***/ }, - -/***/ 6509 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ CodeBlockTitle) -/* harmony export */ }); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// Just a pass-through component that users can swizzle and customize -function CodeBlockTitle({children}){return children;} - -/***/ }, - -/***/ 6540 -(module, __unused_webpack_exports, __webpack_require__) { - -"use strict"; - - -if (true) { - module.exports = __webpack_require__(9869); -} else // removed by dead control flow -{} - - -/***/ }, - -/***/ 6578 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ ThemeProvider) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _theme_ThemeProvider_TitleFormatter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1011); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function ThemeProvider({children}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(_theme_ThemeProvider_TitleFormatter__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A,{children:children});} - -/***/ }, - -/***/ 6588 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ P_: () => (/* binding */ usePluginData), -/* harmony export */ kh: () => (/* binding */ useAllPluginInstancesData) -/* harmony export */ }); -/* unused harmony export default */ -/* harmony import */ var _useDocusaurusContext__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4586); -/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7065); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function useGlobalData(){const{globalData}=(0,_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)();return globalData;}function useAllPluginInstancesData(pluginName,options={}){const globalData=useGlobalData();const pluginGlobalData=globalData[pluginName];if(!pluginGlobalData&&options.failfast){throw new Error(`Docusaurus plugin global data not found for "${pluginName}" plugin.`);}return pluginGlobalData;}function usePluginData(pluginName,pluginId=_constants__WEBPACK_IMPORTED_MODULE_1__/* .DEFAULT_PLUGIN_ID */ .W,options={}){const pluginGlobalData=useAllPluginInstancesData(pluginName);const pluginInstanceGlobalData=pluginGlobalData?.[pluginId];if(!pluginInstanceGlobalData&&options.failfast){throw new Error(`Docusaurus plugin global data not found for "${pluginName}" plugin with id "${pluginId}".`);}return pluginInstanceGlobalData;} - -/***/ }, - -/***/ 6654 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ isInternalUrl), -/* harmony export */ z: () => (/* binding */ hasProtocol) -/* harmony export */ }); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function hasProtocol(url){return /^(?:\w*:|\/\/)/.test(url);}function isInternalUrl(url){return typeof url!=='undefined'&&!hasProtocol(url);} - -/***/ }, - -/***/ 6672 -(module) { - -"use strict"; -module.exports = /*#__PURE__*/JSON.parse('{"id":"ideas-and-exploration","title":"Ideas & Exploration","description":"Completed","source":"@site/docs/ideas-and-exploration.md","sourceDirName":".","slug":"/ideas-and-exploration","permalink":"/rob/CmdForge/ideas-and-exploration","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"type":"ideas","project":"cmdforge","updated":"2026-01-17T00:00:00.000Z"},"sidebar":"docs","previous":{"title":"Goals","permalink":"/rob/CmdForge/goals"},"next":{"title":"Milestones","permalink":"/rob/CmdForge/milestones"}}'); - -/***/ }, - -/***/ 6725 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var prism_react_renderer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1765); -/* harmony import */ var _theme_prism_include_languages__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5859); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */(0,_theme_prism_include_languages__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(prism_react_renderer__WEBPACK_IMPORTED_MODULE_0__/* .Prism */ .My); - -/***/ }, - -/***/ 6803 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ useRouteContext) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _routeContext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3102); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function useRouteContext(){const context=react__WEBPACK_IMPORTED_MODULE_0__.useContext(_routeContext__WEBPACK_IMPORTED_MODULE_1__/* .Context */ .o);if(!context){throw new Error('Unexpected: no Docusaurus route context found');}return context;} - -/***/ }, - -/***/ 6845 -(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; -/** - * @license React - * react-dom-server-legacy.node.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -/* - - - JS Implementation of MurmurHash3 (r136) (as of May 20, 2011) - - Copyright (c) 2011 Gary Court - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. -*/ - -var React = __webpack_require__(6540), - ReactDOM = __webpack_require__(961), - REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), - REACT_PORTAL_TYPE = Symbol.for("react.portal"), - REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), - REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), - REACT_PROFILER_TYPE = Symbol.for("react.profiler"), - REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), - REACT_CONTEXT_TYPE = Symbol.for("react.context"), - REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), - REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), - REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), - REACT_MEMO_TYPE = Symbol.for("react.memo"), - REACT_LAZY_TYPE = Symbol.for("react.lazy"), - REACT_SCOPE_TYPE = Symbol.for("react.scope"), - REACT_ACTIVITY_TYPE = Symbol.for("react.activity"), - REACT_LEGACY_HIDDEN_TYPE = Symbol.for("react.legacy_hidden"), - REACT_MEMO_CACHE_SENTINEL = Symbol.for("react.memo_cache_sentinel"), - REACT_VIEW_TRANSITION_TYPE = Symbol.for("react.view_transition"), - MAYBE_ITERATOR_SYMBOL = Symbol.iterator; -function getIteratorFn(maybeIterable) { - if (null === maybeIterable || "object" !== typeof maybeIterable) return null; - maybeIterable = - (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) || - maybeIterable["@@iterator"]; - return "function" === typeof maybeIterable ? maybeIterable : null; -} -var isArrayImpl = Array.isArray; -function murmurhash3_32_gc(key, seed) { - var remainder = key.length & 3; - var bytes = key.length - remainder; - var h1 = seed; - for (seed = 0; seed < bytes; ) { - var k1 = - (key.charCodeAt(seed) & 255) | - ((key.charCodeAt(++seed) & 255) << 8) | - ((key.charCodeAt(++seed) & 255) << 16) | - ((key.charCodeAt(++seed) & 255) << 24); - ++seed; - k1 = - (3432918353 * (k1 & 65535) + - (((3432918353 * (k1 >>> 16)) & 65535) << 16)) & - 4294967295; - k1 = (k1 << 15) | (k1 >>> 17); - k1 = - (461845907 * (k1 & 65535) + (((461845907 * (k1 >>> 16)) & 65535) << 16)) & - 4294967295; - h1 ^= k1; - h1 = (h1 << 13) | (h1 >>> 19); - h1 = (5 * (h1 & 65535) + (((5 * (h1 >>> 16)) & 65535) << 16)) & 4294967295; - h1 = (h1 & 65535) + 27492 + ((((h1 >>> 16) + 58964) & 65535) << 16); - } - k1 = 0; - switch (remainder) { - case 3: - k1 ^= (key.charCodeAt(seed + 2) & 255) << 16; - case 2: - k1 ^= (key.charCodeAt(seed + 1) & 255) << 8; - case 1: - (k1 ^= key.charCodeAt(seed) & 255), - (k1 = - (3432918353 * (k1 & 65535) + - (((3432918353 * (k1 >>> 16)) & 65535) << 16)) & - 4294967295), - (k1 = (k1 << 15) | (k1 >>> 17)), - (h1 ^= - (461845907 * (k1 & 65535) + - (((461845907 * (k1 >>> 16)) & 65535) << 16)) & - 4294967295); - } - h1 ^= key.length; - h1 ^= h1 >>> 16; - h1 = - (2246822507 * (h1 & 65535) + (((2246822507 * (h1 >>> 16)) & 65535) << 16)) & - 4294967295; - h1 ^= h1 >>> 13; - h1 = - (3266489909 * (h1 & 65535) + (((3266489909 * (h1 >>> 16)) & 65535) << 16)) & - 4294967295; - return (h1 ^ (h1 >>> 16)) >>> 0; -} -var assign = Object.assign, - hasOwnProperty = Object.prototype.hasOwnProperty, - VALID_ATTRIBUTE_NAME_REGEX = RegExp( - "^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$" - ), - illegalAttributeNameCache = {}, - validatedAttributeNameCache = {}; -function isAttributeNameSafe(attributeName) { - if (hasOwnProperty.call(validatedAttributeNameCache, attributeName)) - return !0; - if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) return !1; - if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) - return (validatedAttributeNameCache[attributeName] = !0); - illegalAttributeNameCache[attributeName] = !0; - return !1; -} -var unitlessNumbers = new Set( - "animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split( - " " - ) - ), - aliases = new Map([ - ["acceptCharset", "accept-charset"], - ["htmlFor", "for"], - ["httpEquiv", "http-equiv"], - ["crossOrigin", "crossorigin"], - ["accentHeight", "accent-height"], - ["alignmentBaseline", "alignment-baseline"], - ["arabicForm", "arabic-form"], - ["baselineShift", "baseline-shift"], - ["capHeight", "cap-height"], - ["clipPath", "clip-path"], - ["clipRule", "clip-rule"], - ["colorInterpolation", "color-interpolation"], - ["colorInterpolationFilters", "color-interpolation-filters"], - ["colorProfile", "color-profile"], - ["colorRendering", "color-rendering"], - ["dominantBaseline", "dominant-baseline"], - ["enableBackground", "enable-background"], - ["fillOpacity", "fill-opacity"], - ["fillRule", "fill-rule"], - ["floodColor", "flood-color"], - ["floodOpacity", "flood-opacity"], - ["fontFamily", "font-family"], - ["fontSize", "font-size"], - ["fontSizeAdjust", "font-size-adjust"], - ["fontStretch", "font-stretch"], - ["fontStyle", "font-style"], - ["fontVariant", "font-variant"], - ["fontWeight", "font-weight"], - ["glyphName", "glyph-name"], - ["glyphOrientationHorizontal", "glyph-orientation-horizontal"], - ["glyphOrientationVertical", "glyph-orientation-vertical"], - ["horizAdvX", "horiz-adv-x"], - ["horizOriginX", "horiz-origin-x"], - ["imageRendering", "image-rendering"], - ["letterSpacing", "letter-spacing"], - ["lightingColor", "lighting-color"], - ["markerEnd", "marker-end"], - ["markerMid", "marker-mid"], - ["markerStart", "marker-start"], - ["overlinePosition", "overline-position"], - ["overlineThickness", "overline-thickness"], - ["paintOrder", "paint-order"], - ["panose-1", "panose-1"], - ["pointerEvents", "pointer-events"], - ["renderingIntent", "rendering-intent"], - ["shapeRendering", "shape-rendering"], - ["stopColor", "stop-color"], - ["stopOpacity", "stop-opacity"], - ["strikethroughPosition", "strikethrough-position"], - ["strikethroughThickness", "strikethrough-thickness"], - ["strokeDasharray", "stroke-dasharray"], - ["strokeDashoffset", "stroke-dashoffset"], - ["strokeLinecap", "stroke-linecap"], - ["strokeLinejoin", "stroke-linejoin"], - ["strokeMiterlimit", "stroke-miterlimit"], - ["strokeOpacity", "stroke-opacity"], - ["strokeWidth", "stroke-width"], - ["textAnchor", "text-anchor"], - ["textDecoration", "text-decoration"], - ["textRendering", "text-rendering"], - ["transformOrigin", "transform-origin"], - ["underlinePosition", "underline-position"], - ["underlineThickness", "underline-thickness"], - ["unicodeBidi", "unicode-bidi"], - ["unicodeRange", "unicode-range"], - ["unitsPerEm", "units-per-em"], - ["vAlphabetic", "v-alphabetic"], - ["vHanging", "v-hanging"], - ["vIdeographic", "v-ideographic"], - ["vMathematical", "v-mathematical"], - ["vectorEffect", "vector-effect"], - ["vertAdvY", "vert-adv-y"], - ["vertOriginX", "vert-origin-x"], - ["vertOriginY", "vert-origin-y"], - ["wordSpacing", "word-spacing"], - ["writingMode", "writing-mode"], - ["xmlnsXlink", "xmlns:xlink"], - ["xHeight", "x-height"] - ]), - matchHtmlRegExp = /["'&<>]/; -function escapeTextForBrowser(text) { - if ( - "boolean" === typeof text || - "number" === typeof text || - "bigint" === typeof text - ) - return "" + text; - text = "" + text; - var match = matchHtmlRegExp.exec(text); - if (match) { - var html = "", - index, - lastIndex = 0; - for (index = match.index; index < text.length; index++) { - switch (text.charCodeAt(index)) { - case 34: - match = """; - break; - case 38: - match = "&"; - break; - case 39: - match = "'"; - break; - case 60: - match = "<"; - break; - case 62: - match = ">"; - break; - default: - continue; - } - lastIndex !== index && (html += text.slice(lastIndex, index)); - lastIndex = index + 1; - html += match; - } - text = lastIndex !== index ? html + text.slice(lastIndex, index) : html; - } - return text; -} -var uppercasePattern = /([A-Z])/g, - msPattern = /^ms-/, - isJavaScriptProtocol = - /^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i; -function sanitizeURL(url) { - return isJavaScriptProtocol.test("" + url) - ? "javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')" - : url; -} -var ReactSharedInternals = - React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, - ReactDOMSharedInternals = - ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, - sharedNotPendingObject = { - pending: !1, - data: null, - method: null, - action: null - }, - previousDispatcher = ReactDOMSharedInternals.d; -ReactDOMSharedInternals.d = { - f: previousDispatcher.f, - r: previousDispatcher.r, - D: prefetchDNS, - C: preconnect, - L: preload, - m: preloadModule, - X: preinitScript, - S: preinitStyle, - M: preinitModuleScript -}; -var PRELOAD_NO_CREDS = [], - currentlyFlushingRenderState = null, - scriptRegex = /(<\/|<)(s)(cript)/gi; -function scriptReplacer(match, prefix, s, suffix) { - return "" + prefix + ("s" === s ? "\\u0073" : "\\u0053") + suffix; -} -function createResumableState( - identifierPrefix, - externalRuntimeConfig, - bootstrapScriptContent, - bootstrapScripts, - bootstrapModules -) { - return { - idPrefix: void 0 === identifierPrefix ? "" : identifierPrefix, - nextFormID: 0, - streamingFormat: 0, - bootstrapScriptContent: bootstrapScriptContent, - bootstrapScripts: bootstrapScripts, - bootstrapModules: bootstrapModules, - instructions: 0, - hasBody: !1, - hasHtml: !1, - unknownResources: {}, - dnsResources: {}, - connectResources: { default: {}, anonymous: {}, credentials: {} }, - imageResources: {}, - styleResources: {}, - scriptResources: {}, - moduleUnknownResources: {}, - moduleScriptResources: {} - }; -} -function createFormatContext( - insertionMode, - selectedValue, - tagScope, - viewTransition -) { - return { - insertionMode: insertionMode, - selectedValue: selectedValue, - tagScope: tagScope, - viewTransition: viewTransition - }; -} -function getChildFormatContext(parentContext, type, props) { - var subtreeScope = parentContext.tagScope & -25; - switch (type) { - case "noscript": - return createFormatContext(2, null, subtreeScope | 1, null); - case "select": - return createFormatContext( - 2, - null != props.value ? props.value : props.defaultValue, - subtreeScope, - null - ); - case "svg": - return createFormatContext(4, null, subtreeScope, null); - case "picture": - return createFormatContext(2, null, subtreeScope | 2, null); - case "math": - return createFormatContext(5, null, subtreeScope, null); - case "foreignObject": - return createFormatContext(2, null, subtreeScope, null); - case "table": - return createFormatContext(6, null, subtreeScope, null); - case "thead": - case "tbody": - case "tfoot": - return createFormatContext(7, null, subtreeScope, null); - case "colgroup": - return createFormatContext(9, null, subtreeScope, null); - case "tr": - return createFormatContext(8, null, subtreeScope, null); - case "head": - if (2 > parentContext.insertionMode) - return createFormatContext(3, null, subtreeScope, null); - break; - case "html": - if (0 === parentContext.insertionMode) - return createFormatContext(1, null, subtreeScope, null); - } - return 6 <= parentContext.insertionMode || 2 > parentContext.insertionMode - ? createFormatContext(2, null, subtreeScope, null) - : parentContext.tagScope !== subtreeScope - ? createFormatContext( - parentContext.insertionMode, - parentContext.selectedValue, - subtreeScope, - null - ) - : parentContext; -} -function getSuspenseViewTransition(parentViewTransition) { - return null === parentViewTransition - ? null - : { - update: parentViewTransition.update, - enter: "none", - exit: "none", - share: parentViewTransition.update, - name: parentViewTransition.autoName, - autoName: parentViewTransition.autoName, - nameIdx: 0 - }; -} -function getSuspenseFallbackFormatContext(resumableState, parentContext) { - parentContext.tagScope & 32 && (resumableState.instructions |= 128); - return createFormatContext( - parentContext.insertionMode, - parentContext.selectedValue, - parentContext.tagScope | 12, - getSuspenseViewTransition(parentContext.viewTransition) - ); -} -function getSuspenseContentFormatContext(resumableState, parentContext) { - resumableState = getSuspenseViewTransition(parentContext.viewTransition); - var subtreeScope = parentContext.tagScope | 16; - null !== resumableState && - "none" !== resumableState.share && - (subtreeScope |= 64); - return createFormatContext( - parentContext.insertionMode, - parentContext.selectedValue, - subtreeScope, - resumableState - ); -} -var styleNameCache = new Map(); -function pushStyleAttribute(target, style) { - if ("object" !== typeof style) - throw Error( - "The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX." - ); - var isFirst = !0, - styleName; - for (styleName in style) - if (hasOwnProperty.call(style, styleName)) { - var styleValue = style[styleName]; - if ( - null != styleValue && - "boolean" !== typeof styleValue && - "" !== styleValue - ) { - if (0 === styleName.indexOf("--")) { - var nameChunk = escapeTextForBrowser(styleName); - styleValue = escapeTextForBrowser(("" + styleValue).trim()); - } else - (nameChunk = styleNameCache.get(styleName)), - void 0 === nameChunk && - ((nameChunk = escapeTextForBrowser( - styleName - .replace(uppercasePattern, "-$1") - .toLowerCase() - .replace(msPattern, "-ms-") - )), - styleNameCache.set(styleName, nameChunk)), - (styleValue = - "number" === typeof styleValue - ? 0 === styleValue || unitlessNumbers.has(styleName) - ? "" + styleValue - : styleValue + "px" - : escapeTextForBrowser(("" + styleValue).trim())); - isFirst - ? ((isFirst = !1), - target.push(' style="', nameChunk, ":", styleValue)) - : target.push(";", nameChunk, ":", styleValue); - } - } - isFirst || target.push('"'); -} -function pushBooleanAttribute(target, name, value) { - value && - "function" !== typeof value && - "symbol" !== typeof value && - target.push(" ", name, '=""'); -} -function pushStringAttribute(target, name, value) { - "function" !== typeof value && - "symbol" !== typeof value && - "boolean" !== typeof value && - target.push(" ", name, '="', escapeTextForBrowser(value), '"'); -} -var actionJavaScriptURL = escapeTextForBrowser( - "javascript:throw new Error('React form unexpectedly submitted.')" -); -function pushAdditionalFormField(value, key) { - this.push('<input type="hidden"'); - validateAdditionalFormField(value); - pushStringAttribute(this, "name", key); - pushStringAttribute(this, "value", value); - this.push("/>"); -} -function validateAdditionalFormField(value) { - if ("string" !== typeof value) - throw Error( - "File/Blob fields are not yet supported in progressive forms. Will fallback to client hydration." - ); -} -function getCustomFormFields(resumableState, formAction) { - if ("function" === typeof formAction.$$FORM_ACTION) { - var id = resumableState.nextFormID++; - resumableState = resumableState.idPrefix + id; - try { - var customFields = formAction.$$FORM_ACTION(resumableState); - if (customFields) { - var formData = customFields.data; - null != formData && formData.forEach(validateAdditionalFormField); - } - return customFields; - } catch (x) { - if ("object" === typeof x && null !== x && "function" === typeof x.then) - throw x; - } - } - return null; -} -function pushFormActionAttribute( - target, - resumableState, - renderState, - formAction, - formEncType, - formMethod, - formTarget, - name -) { - var formData = null; - if ("function" === typeof formAction) { - var customFields = getCustomFormFields(resumableState, formAction); - null !== customFields - ? ((name = customFields.name), - (formAction = customFields.action || ""), - (formEncType = customFields.encType), - (formMethod = customFields.method), - (formTarget = customFields.target), - (formData = customFields.data)) - : (target.push(" ", "formAction", '="', actionJavaScriptURL, '"'), - (formTarget = formMethod = formEncType = formAction = name = null), - injectFormReplayingRuntime(resumableState, renderState)); - } - null != name && pushAttribute(target, "name", name); - null != formAction && pushAttribute(target, "formAction", formAction); - null != formEncType && pushAttribute(target, "formEncType", formEncType); - null != formMethod && pushAttribute(target, "formMethod", formMethod); - null != formTarget && pushAttribute(target, "formTarget", formTarget); - return formData; -} -function pushAttribute(target, name, value) { - switch (name) { - case "className": - pushStringAttribute(target, "class", value); - break; - case "tabIndex": - pushStringAttribute(target, "tabindex", value); - break; - case "dir": - case "role": - case "viewBox": - case "width": - case "height": - pushStringAttribute(target, name, value); - break; - case "style": - pushStyleAttribute(target, value); - break; - case "src": - case "href": - if ("" === value) break; - case "action": - case "formAction": - if ( - null == value || - "function" === typeof value || - "symbol" === typeof value || - "boolean" === typeof value - ) - break; - value = sanitizeURL("" + value); - target.push(" ", name, '="', escapeTextForBrowser(value), '"'); - break; - case "defaultValue": - case "defaultChecked": - case "innerHTML": - case "suppressContentEditableWarning": - case "suppressHydrationWarning": - case "ref": - break; - case "autoFocus": - case "multiple": - case "muted": - pushBooleanAttribute(target, name.toLowerCase(), value); - break; - case "xlinkHref": - if ( - "function" === typeof value || - "symbol" === typeof value || - "boolean" === typeof value - ) - break; - value = sanitizeURL("" + value); - target.push(" ", "xlink:href", '="', escapeTextForBrowser(value), '"'); - break; - case "contentEditable": - case "spellCheck": - case "draggable": - case "value": - case "autoReverse": - case "externalResourcesRequired": - case "focusable": - case "preserveAlpha": - "function" !== typeof value && - "symbol" !== typeof value && - target.push(" ", name, '="', escapeTextForBrowser(value), '"'); - break; - case "inert": - case "allowFullScreen": - case "async": - case "autoPlay": - case "controls": - case "default": - case "defer": - case "disabled": - case "disablePictureInPicture": - case "disableRemotePlayback": - case "formNoValidate": - case "hidden": - case "loop": - case "noModule": - case "noValidate": - case "open": - case "playsInline": - case "readOnly": - case "required": - case "reversed": - case "scoped": - case "seamless": - case "itemScope": - value && - "function" !== typeof value && - "symbol" !== typeof value && - target.push(" ", name, '=""'); - break; - case "capture": - case "download": - !0 === value - ? target.push(" ", name, '=""') - : !1 !== value && - "function" !== typeof value && - "symbol" !== typeof value && - target.push(" ", name, '="', escapeTextForBrowser(value), '"'); - break; - case "cols": - case "rows": - case "size": - case "span": - "function" !== typeof value && - "symbol" !== typeof value && - !isNaN(value) && - 1 <= value && - target.push(" ", name, '="', escapeTextForBrowser(value), '"'); - break; - case "rowSpan": - case "start": - "function" === typeof value || - "symbol" === typeof value || - isNaN(value) || - target.push(" ", name, '="', escapeTextForBrowser(value), '"'); - break; - case "xlinkActuate": - pushStringAttribute(target, "xlink:actuate", value); - break; - case "xlinkArcrole": - pushStringAttribute(target, "xlink:arcrole", value); - break; - case "xlinkRole": - pushStringAttribute(target, "xlink:role", value); - break; - case "xlinkShow": - pushStringAttribute(target, "xlink:show", value); - break; - case "xlinkTitle": - pushStringAttribute(target, "xlink:title", value); - break; - case "xlinkType": - pushStringAttribute(target, "xlink:type", value); - break; - case "xmlBase": - pushStringAttribute(target, "xml:base", value); - break; - case "xmlLang": - pushStringAttribute(target, "xml:lang", value); - break; - case "xmlSpace": - pushStringAttribute(target, "xml:space", value); - break; - default: - if ( - !(2 < name.length) || - ("o" !== name[0] && "O" !== name[0]) || - ("n" !== name[1] && "N" !== name[1]) - ) - if (((name = aliases.get(name) || name), isAttributeNameSafe(name))) { - switch (typeof value) { - case "function": - case "symbol": - return; - case "boolean": - var prefix$8 = name.toLowerCase().slice(0, 5); - if ("data-" !== prefix$8 && "aria-" !== prefix$8) return; - } - target.push(" ", name, '="', escapeTextForBrowser(value), '"'); - } - } -} -function pushInnerHTML(target, innerHTML, children) { - if (null != innerHTML) { - if (null != children) - throw Error( - "Can only set one of `children` or `props.dangerouslySetInnerHTML`." - ); - if ("object" !== typeof innerHTML || !("__html" in innerHTML)) - throw Error( - "`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information." - ); - innerHTML = innerHTML.__html; - null !== innerHTML && void 0 !== innerHTML && target.push("" + innerHTML); - } -} -function flattenOptionChildren(children) { - var content = ""; - React.Children.forEach(children, function (child) { - null != child && (content += child); - }); - return content; -} -function injectFormReplayingRuntime(resumableState, renderState) { - if (0 === (resumableState.instructions & 16)) { - resumableState.instructions |= 16; - var preamble = renderState.preamble, - bootstrapChunks = renderState.bootstrapChunks; - (preamble.htmlChunks || preamble.headChunks) && 0 === bootstrapChunks.length - ? (bootstrapChunks.push(renderState.startInlineScript), - pushCompletedShellIdAttribute(bootstrapChunks, resumableState), - bootstrapChunks.push( - ">", - 'addEventListener("submit",function(a){if(!a.defaultPrevented){var c=a.target,d=a.submitter,e=c.action,b=d;if(d){var f=d.getAttribute("formAction");null!=f&&(e=f,b=null)}"javascript:throw new Error(\'React form unexpectedly submitted.\')"===e&&(a.preventDefault(),b?(a=document.createElement("input"),a.name=b.name,a.value=b.value,b.parentNode.insertBefore(a,b),b=new FormData(c),a.parentNode.removeChild(a)):b=new FormData(c),a=c.ownerDocument||c,(a.$$reactFormReplay=a.$$reactFormReplay||[]).push(c,d,b))}});', - "\x3c/script>" - )) - : bootstrapChunks.unshift( - renderState.startInlineScript, - ">", - 'addEventListener("submit",function(a){if(!a.defaultPrevented){var c=a.target,d=a.submitter,e=c.action,b=d;if(d){var f=d.getAttribute("formAction");null!=f&&(e=f,b=null)}"javascript:throw new Error(\'React form unexpectedly submitted.\')"===e&&(a.preventDefault(),b?(a=document.createElement("input"),a.name=b.name,a.value=b.value,b.parentNode.insertBefore(a,b),b=new FormData(c),a.parentNode.removeChild(a)):b=new FormData(c),a=c.ownerDocument||c,(a.$$reactFormReplay=a.$$reactFormReplay||[]).push(c,d,b))}});', - "\x3c/script>" - ); - } -} -function pushLinkImpl(target, props) { - target.push(startChunkForTag("link")); - for (var propKey in props) - if (hasOwnProperty.call(props, propKey)) { - var propValue = props[propKey]; - if (null != propValue) - switch (propKey) { - case "children": - case "dangerouslySetInnerHTML": - throw Error( - "link is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`." - ); - default: - pushAttribute(target, propKey, propValue); - } - } - target.push("/>"); - return null; -} -var styleRegex = /(<\/|<)(s)(tyle)/gi; -function styleReplacer(match, prefix, s, suffix) { - return "" + prefix + ("s" === s ? "\\73 " : "\\53 ") + suffix; -} -function pushSelfClosing(target, props, tag) { - target.push(startChunkForTag(tag)); - for (var propKey in props) - if (hasOwnProperty.call(props, propKey)) { - var propValue = props[propKey]; - if (null != propValue) - switch (propKey) { - case "children": - case "dangerouslySetInnerHTML": - throw Error( - tag + - " is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`." - ); - default: - pushAttribute(target, propKey, propValue); - } - } - target.push("/>"); - return null; -} -function pushTitleImpl(target, props) { - target.push(startChunkForTag("title")); - var children = null, - innerHTML = null, - propKey; - for (propKey in props) - if (hasOwnProperty.call(props, propKey)) { - var propValue = props[propKey]; - if (null != propValue) - switch (propKey) { - case "children": - children = propValue; - break; - case "dangerouslySetInnerHTML": - innerHTML = propValue; - break; - default: - pushAttribute(target, propKey, propValue); - } - } - target.push(">"); - props = Array.isArray(children) - ? 2 > children.length - ? children[0] - : null - : children; - "function" !== typeof props && - "symbol" !== typeof props && - null !== props && - void 0 !== props && - target.push(escapeTextForBrowser("" + props)); - pushInnerHTML(target, innerHTML, children); - target.push(endChunkForTag("title")); - return null; -} -function pushScriptImpl(target, props) { - target.push(startChunkForTag("script")); - var children = null, - innerHTML = null, - propKey; - for (propKey in props) - if (hasOwnProperty.call(props, propKey)) { - var propValue = props[propKey]; - if (null != propValue) - switch (propKey) { - case "children": - children = propValue; - break; - case "dangerouslySetInnerHTML": - innerHTML = propValue; - break; - default: - pushAttribute(target, propKey, propValue); - } - } - target.push(">"); - pushInnerHTML(target, innerHTML, children); - "string" === typeof children && - target.push(("" + children).replace(scriptRegex, scriptReplacer)); - target.push(endChunkForTag("script")); - return null; -} -function pushStartSingletonElement(target, props, tag) { - target.push(startChunkForTag(tag)); - var innerHTML = (tag = null), - propKey; - for (propKey in props) - if (hasOwnProperty.call(props, propKey)) { - var propValue = props[propKey]; - if (null != propValue) - switch (propKey) { - case "children": - tag = propValue; - break; - case "dangerouslySetInnerHTML": - innerHTML = propValue; - break; - default: - pushAttribute(target, propKey, propValue); - } - } - target.push(">"); - pushInnerHTML(target, innerHTML, tag); - return tag; -} -function pushStartGenericElement(target, props, tag) { - target.push(startChunkForTag(tag)); - var innerHTML = (tag = null), - propKey; - for (propKey in props) - if (hasOwnProperty.call(props, propKey)) { - var propValue = props[propKey]; - if (null != propValue) - switch (propKey) { - case "children": - tag = propValue; - break; - case "dangerouslySetInnerHTML": - innerHTML = propValue; - break; - default: - pushAttribute(target, propKey, propValue); - } - } - target.push(">"); - pushInnerHTML(target, innerHTML, tag); - return "string" === typeof tag - ? (target.push(escapeTextForBrowser(tag)), null) - : tag; -} -var VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\.\-\d]*$/, - validatedTagCache = new Map(); -function startChunkForTag(tag) { - var tagStartChunk = validatedTagCache.get(tag); - if (void 0 === tagStartChunk) { - if (!VALID_TAG_REGEX.test(tag)) throw Error("Invalid tag: " + tag); - tagStartChunk = "<" + tag; - validatedTagCache.set(tag, tagStartChunk); - } - return tagStartChunk; -} -function pushStartInstance( - target$jscomp$0, - type, - props, - resumableState, - renderState, - preambleState, - hoistableState, - formatContext, - textEmbedded -) { - switch (type) { - case "div": - case "span": - case "svg": - case "path": - break; - case "a": - target$jscomp$0.push(startChunkForTag("a")); - var children = null, - innerHTML = null, - propKey; - for (propKey in props) - if (hasOwnProperty.call(props, propKey)) { - var propValue = props[propKey]; - if (null != propValue) - switch (propKey) { - case "children": - children = propValue; - break; - case "dangerouslySetInnerHTML": - innerHTML = propValue; - break; - case "href": - "" === propValue - ? pushStringAttribute(target$jscomp$0, "href", "") - : pushAttribute(target$jscomp$0, propKey, propValue); - break; - default: - pushAttribute(target$jscomp$0, propKey, propValue); - } - } - target$jscomp$0.push(">"); - pushInnerHTML(target$jscomp$0, innerHTML, children); - if ("string" === typeof children) { - target$jscomp$0.push(escapeTextForBrowser(children)); - var JSCompiler_inline_result = null; - } else JSCompiler_inline_result = children; - return JSCompiler_inline_result; - case "g": - case "p": - case "li": - break; - case "select": - target$jscomp$0.push(startChunkForTag("select")); - var children$jscomp$0 = null, - innerHTML$jscomp$0 = null, - propKey$jscomp$0; - for (propKey$jscomp$0 in props) - if (hasOwnProperty.call(props, propKey$jscomp$0)) { - var propValue$jscomp$0 = props[propKey$jscomp$0]; - if (null != propValue$jscomp$0) - switch (propKey$jscomp$0) { - case "children": - children$jscomp$0 = propValue$jscomp$0; - break; - case "dangerouslySetInnerHTML": - innerHTML$jscomp$0 = propValue$jscomp$0; - break; - case "defaultValue": - case "value": - break; - default: - pushAttribute( - target$jscomp$0, - propKey$jscomp$0, - propValue$jscomp$0 - ); - } - } - target$jscomp$0.push(">"); - pushInnerHTML(target$jscomp$0, innerHTML$jscomp$0, children$jscomp$0); - return children$jscomp$0; - case "option": - var selectedValue = formatContext.selectedValue; - target$jscomp$0.push(startChunkForTag("option")); - var children$jscomp$1 = null, - value = null, - selected = null, - innerHTML$jscomp$1 = null, - propKey$jscomp$1; - for (propKey$jscomp$1 in props) - if (hasOwnProperty.call(props, propKey$jscomp$1)) { - var propValue$jscomp$1 = props[propKey$jscomp$1]; - if (null != propValue$jscomp$1) - switch (propKey$jscomp$1) { - case "children": - children$jscomp$1 = propValue$jscomp$1; - break; - case "selected": - selected = propValue$jscomp$1; - break; - case "dangerouslySetInnerHTML": - innerHTML$jscomp$1 = propValue$jscomp$1; - break; - case "value": - value = propValue$jscomp$1; - default: - pushAttribute( - target$jscomp$0, - propKey$jscomp$1, - propValue$jscomp$1 - ); - } - } - if (null != selectedValue) { - var stringValue = - null !== value - ? "" + value - : flattenOptionChildren(children$jscomp$1); - if (isArrayImpl(selectedValue)) - for (var i = 0; i < selectedValue.length; i++) { - if ("" + selectedValue[i] === stringValue) { - target$jscomp$0.push(' selected=""'); - break; - } - } - else - "" + selectedValue === stringValue && - target$jscomp$0.push(' selected=""'); - } else selected && target$jscomp$0.push(' selected=""'); - target$jscomp$0.push(">"); - pushInnerHTML(target$jscomp$0, innerHTML$jscomp$1, children$jscomp$1); - return children$jscomp$1; - case "textarea": - target$jscomp$0.push(startChunkForTag("textarea")); - var value$jscomp$0 = null, - defaultValue = null, - children$jscomp$2 = null, - propKey$jscomp$2; - for (propKey$jscomp$2 in props) - if (hasOwnProperty.call(props, propKey$jscomp$2)) { - var propValue$jscomp$2 = props[propKey$jscomp$2]; - if (null != propValue$jscomp$2) - switch (propKey$jscomp$2) { - case "children": - children$jscomp$2 = propValue$jscomp$2; - break; - case "value": - value$jscomp$0 = propValue$jscomp$2; - break; - case "defaultValue": - defaultValue = propValue$jscomp$2; - break; - case "dangerouslySetInnerHTML": - throw Error( - "`dangerouslySetInnerHTML` does not make sense on <textarea>." - ); - default: - pushAttribute( - target$jscomp$0, - propKey$jscomp$2, - propValue$jscomp$2 - ); - } - } - null === value$jscomp$0 && - null !== defaultValue && - (value$jscomp$0 = defaultValue); - target$jscomp$0.push(">"); - if (null != children$jscomp$2) { - if (null != value$jscomp$0) - throw Error( - "If you supply `defaultValue` on a <textarea>, do not pass children." - ); - if (isArrayImpl(children$jscomp$2)) { - if (1 < children$jscomp$2.length) - throw Error("<textarea> can only have at most one child."); - value$jscomp$0 = "" + children$jscomp$2[0]; - } - value$jscomp$0 = "" + children$jscomp$2; - } - "string" === typeof value$jscomp$0 && - "\n" === value$jscomp$0[0] && - target$jscomp$0.push("\n"); - null !== value$jscomp$0 && - target$jscomp$0.push(escapeTextForBrowser("" + value$jscomp$0)); - return null; - case "input": - target$jscomp$0.push(startChunkForTag("input")); - var name = null, - formAction = null, - formEncType = null, - formMethod = null, - formTarget = null, - value$jscomp$1 = null, - defaultValue$jscomp$0 = null, - checked = null, - defaultChecked = null, - propKey$jscomp$3; - for (propKey$jscomp$3 in props) - if (hasOwnProperty.call(props, propKey$jscomp$3)) { - var propValue$jscomp$3 = props[propKey$jscomp$3]; - if (null != propValue$jscomp$3) - switch (propKey$jscomp$3) { - case "children": - case "dangerouslySetInnerHTML": - throw Error( - "input is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`." - ); - case "name": - name = propValue$jscomp$3; - break; - case "formAction": - formAction = propValue$jscomp$3; - break; - case "formEncType": - formEncType = propValue$jscomp$3; - break; - case "formMethod": - formMethod = propValue$jscomp$3; - break; - case "formTarget": - formTarget = propValue$jscomp$3; - break; - case "defaultChecked": - defaultChecked = propValue$jscomp$3; - break; - case "defaultValue": - defaultValue$jscomp$0 = propValue$jscomp$3; - break; - case "checked": - checked = propValue$jscomp$3; - break; - case "value": - value$jscomp$1 = propValue$jscomp$3; - break; - default: - pushAttribute( - target$jscomp$0, - propKey$jscomp$3, - propValue$jscomp$3 - ); - } - } - var formData = pushFormActionAttribute( - target$jscomp$0, - resumableState, - renderState, - formAction, - formEncType, - formMethod, - formTarget, - name - ); - null !== checked - ? pushBooleanAttribute(target$jscomp$0, "checked", checked) - : null !== defaultChecked && - pushBooleanAttribute(target$jscomp$0, "checked", defaultChecked); - null !== value$jscomp$1 - ? pushAttribute(target$jscomp$0, "value", value$jscomp$1) - : null !== defaultValue$jscomp$0 && - pushAttribute(target$jscomp$0, "value", defaultValue$jscomp$0); - target$jscomp$0.push("/>"); - null != formData && - formData.forEach(pushAdditionalFormField, target$jscomp$0); - return null; - case "button": - target$jscomp$0.push(startChunkForTag("button")); - var children$jscomp$3 = null, - innerHTML$jscomp$2 = null, - name$jscomp$0 = null, - formAction$jscomp$0 = null, - formEncType$jscomp$0 = null, - formMethod$jscomp$0 = null, - formTarget$jscomp$0 = null, - propKey$jscomp$4; - for (propKey$jscomp$4 in props) - if (hasOwnProperty.call(props, propKey$jscomp$4)) { - var propValue$jscomp$4 = props[propKey$jscomp$4]; - if (null != propValue$jscomp$4) - switch (propKey$jscomp$4) { - case "children": - children$jscomp$3 = propValue$jscomp$4; - break; - case "dangerouslySetInnerHTML": - innerHTML$jscomp$2 = propValue$jscomp$4; - break; - case "name": - name$jscomp$0 = propValue$jscomp$4; - break; - case "formAction": - formAction$jscomp$0 = propValue$jscomp$4; - break; - case "formEncType": - formEncType$jscomp$0 = propValue$jscomp$4; - break; - case "formMethod": - formMethod$jscomp$0 = propValue$jscomp$4; - break; - case "formTarget": - formTarget$jscomp$0 = propValue$jscomp$4; - break; - default: - pushAttribute( - target$jscomp$0, - propKey$jscomp$4, - propValue$jscomp$4 - ); - } - } - var formData$jscomp$0 = pushFormActionAttribute( - target$jscomp$0, - resumableState, - renderState, - formAction$jscomp$0, - formEncType$jscomp$0, - formMethod$jscomp$0, - formTarget$jscomp$0, - name$jscomp$0 - ); - target$jscomp$0.push(">"); - null != formData$jscomp$0 && - formData$jscomp$0.forEach(pushAdditionalFormField, target$jscomp$0); - pushInnerHTML(target$jscomp$0, innerHTML$jscomp$2, children$jscomp$3); - if ("string" === typeof children$jscomp$3) { - target$jscomp$0.push(escapeTextForBrowser(children$jscomp$3)); - var JSCompiler_inline_result$jscomp$0 = null; - } else JSCompiler_inline_result$jscomp$0 = children$jscomp$3; - return JSCompiler_inline_result$jscomp$0; - case "form": - target$jscomp$0.push(startChunkForTag("form")); - var children$jscomp$4 = null, - innerHTML$jscomp$3 = null, - formAction$jscomp$1 = null, - formEncType$jscomp$1 = null, - formMethod$jscomp$1 = null, - formTarget$jscomp$1 = null, - propKey$jscomp$5; - for (propKey$jscomp$5 in props) - if (hasOwnProperty.call(props, propKey$jscomp$5)) { - var propValue$jscomp$5 = props[propKey$jscomp$5]; - if (null != propValue$jscomp$5) - switch (propKey$jscomp$5) { - case "children": - children$jscomp$4 = propValue$jscomp$5; - break; - case "dangerouslySetInnerHTML": - innerHTML$jscomp$3 = propValue$jscomp$5; - break; - case "action": - formAction$jscomp$1 = propValue$jscomp$5; - break; - case "encType": - formEncType$jscomp$1 = propValue$jscomp$5; - break; - case "method": - formMethod$jscomp$1 = propValue$jscomp$5; - break; - case "target": - formTarget$jscomp$1 = propValue$jscomp$5; - break; - default: - pushAttribute( - target$jscomp$0, - propKey$jscomp$5, - propValue$jscomp$5 - ); - } - } - var formData$jscomp$1 = null, - formActionName = null; - if ("function" === typeof formAction$jscomp$1) { - var customFields = getCustomFormFields( - resumableState, - formAction$jscomp$1 - ); - null !== customFields - ? ((formAction$jscomp$1 = customFields.action || ""), - (formEncType$jscomp$1 = customFields.encType), - (formMethod$jscomp$1 = customFields.method), - (formTarget$jscomp$1 = customFields.target), - (formData$jscomp$1 = customFields.data), - (formActionName = customFields.name)) - : (target$jscomp$0.push( - " ", - "action", - '="', - actionJavaScriptURL, - '"' - ), - (formTarget$jscomp$1 = - formMethod$jscomp$1 = - formEncType$jscomp$1 = - formAction$jscomp$1 = - null), - injectFormReplayingRuntime(resumableState, renderState)); - } - null != formAction$jscomp$1 && - pushAttribute(target$jscomp$0, "action", formAction$jscomp$1); - null != formEncType$jscomp$1 && - pushAttribute(target$jscomp$0, "encType", formEncType$jscomp$1); - null != formMethod$jscomp$1 && - pushAttribute(target$jscomp$0, "method", formMethod$jscomp$1); - null != formTarget$jscomp$1 && - pushAttribute(target$jscomp$0, "target", formTarget$jscomp$1); - target$jscomp$0.push(">"); - null !== formActionName && - (target$jscomp$0.push('<input type="hidden"'), - pushStringAttribute(target$jscomp$0, "name", formActionName), - target$jscomp$0.push("/>"), - null != formData$jscomp$1 && - formData$jscomp$1.forEach(pushAdditionalFormField, target$jscomp$0)); - pushInnerHTML(target$jscomp$0, innerHTML$jscomp$3, children$jscomp$4); - if ("string" === typeof children$jscomp$4) { - target$jscomp$0.push(escapeTextForBrowser(children$jscomp$4)); - var JSCompiler_inline_result$jscomp$1 = null; - } else JSCompiler_inline_result$jscomp$1 = children$jscomp$4; - return JSCompiler_inline_result$jscomp$1; - case "menuitem": - target$jscomp$0.push(startChunkForTag("menuitem")); - for (var propKey$jscomp$6 in props) - if (hasOwnProperty.call(props, propKey$jscomp$6)) { - var propValue$jscomp$6 = props[propKey$jscomp$6]; - if (null != propValue$jscomp$6) - switch (propKey$jscomp$6) { - case "children": - case "dangerouslySetInnerHTML": - throw Error( - "menuitems cannot have `children` nor `dangerouslySetInnerHTML`." - ); - default: - pushAttribute( - target$jscomp$0, - propKey$jscomp$6, - propValue$jscomp$6 - ); - } - } - target$jscomp$0.push(">"); - return null; - case "object": - target$jscomp$0.push(startChunkForTag("object")); - var children$jscomp$5 = null, - innerHTML$jscomp$4 = null, - propKey$jscomp$7; - for (propKey$jscomp$7 in props) - if (hasOwnProperty.call(props, propKey$jscomp$7)) { - var propValue$jscomp$7 = props[propKey$jscomp$7]; - if (null != propValue$jscomp$7) - switch (propKey$jscomp$7) { - case "children": - children$jscomp$5 = propValue$jscomp$7; - break; - case "dangerouslySetInnerHTML": - innerHTML$jscomp$4 = propValue$jscomp$7; - break; - case "data": - var sanitizedValue = sanitizeURL("" + propValue$jscomp$7); - if ("" === sanitizedValue) break; - target$jscomp$0.push( - " ", - "data", - '="', - escapeTextForBrowser(sanitizedValue), - '"' - ); - break; - default: - pushAttribute( - target$jscomp$0, - propKey$jscomp$7, - propValue$jscomp$7 - ); - } - } - target$jscomp$0.push(">"); - pushInnerHTML(target$jscomp$0, innerHTML$jscomp$4, children$jscomp$5); - if ("string" === typeof children$jscomp$5) { - target$jscomp$0.push(escapeTextForBrowser(children$jscomp$5)); - var JSCompiler_inline_result$jscomp$2 = null; - } else JSCompiler_inline_result$jscomp$2 = children$jscomp$5; - return JSCompiler_inline_result$jscomp$2; - case "title": - var noscriptTagInScope = formatContext.tagScope & 1, - isFallback = formatContext.tagScope & 4; - if ( - 4 === formatContext.insertionMode || - noscriptTagInScope || - null != props.itemProp - ) - var JSCompiler_inline_result$jscomp$3 = pushTitleImpl( - target$jscomp$0, - props - ); - else - isFallback - ? (JSCompiler_inline_result$jscomp$3 = null) - : (pushTitleImpl(renderState.hoistableChunks, props), - (JSCompiler_inline_result$jscomp$3 = void 0)); - return JSCompiler_inline_result$jscomp$3; - case "link": - var noscriptTagInScope$jscomp$0 = formatContext.tagScope & 1, - isFallback$jscomp$0 = formatContext.tagScope & 4, - rel = props.rel, - href = props.href, - precedence = props.precedence; - if ( - 4 === formatContext.insertionMode || - noscriptTagInScope$jscomp$0 || - null != props.itemProp || - "string" !== typeof rel || - "string" !== typeof href || - "" === href - ) { - pushLinkImpl(target$jscomp$0, props); - var JSCompiler_inline_result$jscomp$4 = null; - } else if ("stylesheet" === props.rel) - if ( - "string" !== typeof precedence || - null != props.disabled || - props.onLoad || - props.onError - ) - JSCompiler_inline_result$jscomp$4 = pushLinkImpl( - target$jscomp$0, - props - ); - else { - var styleQueue = renderState.styles.get(precedence), - resourceState = resumableState.styleResources.hasOwnProperty(href) - ? resumableState.styleResources[href] - : void 0; - if (null !== resourceState) { - resumableState.styleResources[href] = null; - styleQueue || - ((styleQueue = { - precedence: escapeTextForBrowser(precedence), - rules: [], - hrefs: [], - sheets: new Map() - }), - renderState.styles.set(precedence, styleQueue)); - var resource = { - state: 0, - props: assign({}, props, { - "data-precedence": props.precedence, - precedence: null - }) - }; - if (resourceState) { - 2 === resourceState.length && - adoptPreloadCredentials(resource.props, resourceState); - var preloadResource = renderState.preloads.stylesheets.get(href); - preloadResource && 0 < preloadResource.length - ? (preloadResource.length = 0) - : (resource.state = 1); - } - styleQueue.sheets.set(href, resource); - hoistableState && hoistableState.stylesheets.add(resource); - } else if (styleQueue) { - var resource$9 = styleQueue.sheets.get(href); - resource$9 && - hoistableState && - hoistableState.stylesheets.add(resource$9); - } - textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e"); - JSCompiler_inline_result$jscomp$4 = null; - } - else - props.onLoad || props.onError - ? (JSCompiler_inline_result$jscomp$4 = pushLinkImpl( - target$jscomp$0, - props - )) - : (textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e"), - (JSCompiler_inline_result$jscomp$4 = isFallback$jscomp$0 - ? null - : pushLinkImpl(renderState.hoistableChunks, props))); - return JSCompiler_inline_result$jscomp$4; - case "script": - var noscriptTagInScope$jscomp$1 = formatContext.tagScope & 1, - asyncProp = props.async; - if ( - "string" !== typeof props.src || - !props.src || - !asyncProp || - "function" === typeof asyncProp || - "symbol" === typeof asyncProp || - props.onLoad || - props.onError || - 4 === formatContext.insertionMode || - noscriptTagInScope$jscomp$1 || - null != props.itemProp - ) - var JSCompiler_inline_result$jscomp$5 = pushScriptImpl( - target$jscomp$0, - props - ); - else { - var key = props.src; - if ("module" === props.type) { - var resources = resumableState.moduleScriptResources; - var preloads = renderState.preloads.moduleScripts; - } else - (resources = resumableState.scriptResources), - (preloads = renderState.preloads.scripts); - var resourceState$jscomp$0 = resources.hasOwnProperty(key) - ? resources[key] - : void 0; - if (null !== resourceState$jscomp$0) { - resources[key] = null; - var scriptProps = props; - if (resourceState$jscomp$0) { - 2 === resourceState$jscomp$0.length && - ((scriptProps = assign({}, props)), - adoptPreloadCredentials(scriptProps, resourceState$jscomp$0)); - var preloadResource$jscomp$0 = preloads.get(key); - preloadResource$jscomp$0 && (preloadResource$jscomp$0.length = 0); - } - var resource$jscomp$0 = []; - renderState.scripts.add(resource$jscomp$0); - pushScriptImpl(resource$jscomp$0, scriptProps); - } - textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e"); - JSCompiler_inline_result$jscomp$5 = null; - } - return JSCompiler_inline_result$jscomp$5; - case "style": - var noscriptTagInScope$jscomp$2 = formatContext.tagScope & 1, - precedence$jscomp$0 = props.precedence, - href$jscomp$0 = props.href, - nonce = props.nonce; - if ( - 4 === formatContext.insertionMode || - noscriptTagInScope$jscomp$2 || - null != props.itemProp || - "string" !== typeof precedence$jscomp$0 || - "string" !== typeof href$jscomp$0 || - "" === href$jscomp$0 - ) { - target$jscomp$0.push(startChunkForTag("style")); - var children$jscomp$6 = null, - innerHTML$jscomp$5 = null, - propKey$jscomp$8; - for (propKey$jscomp$8 in props) - if (hasOwnProperty.call(props, propKey$jscomp$8)) { - var propValue$jscomp$8 = props[propKey$jscomp$8]; - if (null != propValue$jscomp$8) - switch (propKey$jscomp$8) { - case "children": - children$jscomp$6 = propValue$jscomp$8; - break; - case "dangerouslySetInnerHTML": - innerHTML$jscomp$5 = propValue$jscomp$8; - break; - default: - pushAttribute( - target$jscomp$0, - propKey$jscomp$8, - propValue$jscomp$8 - ); - } - } - target$jscomp$0.push(">"); - var child = Array.isArray(children$jscomp$6) - ? 2 > children$jscomp$6.length - ? children$jscomp$6[0] - : null - : children$jscomp$6; - "function" !== typeof child && - "symbol" !== typeof child && - null !== child && - void 0 !== child && - target$jscomp$0.push(("" + child).replace(styleRegex, styleReplacer)); - pushInnerHTML(target$jscomp$0, innerHTML$jscomp$5, children$jscomp$6); - target$jscomp$0.push(endChunkForTag("style")); - var JSCompiler_inline_result$jscomp$6 = null; - } else { - var styleQueue$jscomp$0 = renderState.styles.get(precedence$jscomp$0); - if ( - null !== - (resumableState.styleResources.hasOwnProperty(href$jscomp$0) - ? resumableState.styleResources[href$jscomp$0] - : void 0) - ) { - resumableState.styleResources[href$jscomp$0] = null; - styleQueue$jscomp$0 || - ((styleQueue$jscomp$0 = { - precedence: escapeTextForBrowser(precedence$jscomp$0), - rules: [], - hrefs: [], - sheets: new Map() - }), - renderState.styles.set(precedence$jscomp$0, styleQueue$jscomp$0)); - var nonceStyle = renderState.nonce.style; - if (!nonceStyle || nonceStyle === nonce) { - styleQueue$jscomp$0.hrefs.push(escapeTextForBrowser(href$jscomp$0)); - var target = styleQueue$jscomp$0.rules, - children$jscomp$7 = null, - innerHTML$jscomp$6 = null, - propKey$jscomp$9; - for (propKey$jscomp$9 in props) - if (hasOwnProperty.call(props, propKey$jscomp$9)) { - var propValue$jscomp$9 = props[propKey$jscomp$9]; - if (null != propValue$jscomp$9) - switch (propKey$jscomp$9) { - case "children": - children$jscomp$7 = propValue$jscomp$9; - break; - case "dangerouslySetInnerHTML": - innerHTML$jscomp$6 = propValue$jscomp$9; - } - } - var child$jscomp$0 = Array.isArray(children$jscomp$7) - ? 2 > children$jscomp$7.length - ? children$jscomp$7[0] - : null - : children$jscomp$7; - "function" !== typeof child$jscomp$0 && - "symbol" !== typeof child$jscomp$0 && - null !== child$jscomp$0 && - void 0 !== child$jscomp$0 && - target.push( - ("" + child$jscomp$0).replace(styleRegex, styleReplacer) - ); - pushInnerHTML(target, innerHTML$jscomp$6, children$jscomp$7); - } - } - styleQueue$jscomp$0 && - hoistableState && - hoistableState.styles.add(styleQueue$jscomp$0); - textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e"); - JSCompiler_inline_result$jscomp$6 = void 0; - } - return JSCompiler_inline_result$jscomp$6; - case "meta": - var noscriptTagInScope$jscomp$3 = formatContext.tagScope & 1, - isFallback$jscomp$1 = formatContext.tagScope & 4; - if ( - 4 === formatContext.insertionMode || - noscriptTagInScope$jscomp$3 || - null != props.itemProp - ) - var JSCompiler_inline_result$jscomp$7 = pushSelfClosing( - target$jscomp$0, - props, - "meta" - ); - else - textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e"), - (JSCompiler_inline_result$jscomp$7 = isFallback$jscomp$1 - ? null - : "string" === typeof props.charSet - ? pushSelfClosing(renderState.charsetChunks, props, "meta") - : "viewport" === props.name - ? pushSelfClosing(renderState.viewportChunks, props, "meta") - : pushSelfClosing(renderState.hoistableChunks, props, "meta")); - return JSCompiler_inline_result$jscomp$7; - case "listing": - case "pre": - target$jscomp$0.push(startChunkForTag(type)); - var children$jscomp$8 = null, - innerHTML$jscomp$7 = null, - propKey$jscomp$10; - for (propKey$jscomp$10 in props) - if (hasOwnProperty.call(props, propKey$jscomp$10)) { - var propValue$jscomp$10 = props[propKey$jscomp$10]; - if (null != propValue$jscomp$10) - switch (propKey$jscomp$10) { - case "children": - children$jscomp$8 = propValue$jscomp$10; - break; - case "dangerouslySetInnerHTML": - innerHTML$jscomp$7 = propValue$jscomp$10; - break; - default: - pushAttribute( - target$jscomp$0, - propKey$jscomp$10, - propValue$jscomp$10 - ); - } - } - target$jscomp$0.push(">"); - if (null != innerHTML$jscomp$7) { - if (null != children$jscomp$8) - throw Error( - "Can only set one of `children` or `props.dangerouslySetInnerHTML`." - ); - if ( - "object" !== typeof innerHTML$jscomp$7 || - !("__html" in innerHTML$jscomp$7) - ) - throw Error( - "`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information." - ); - var html = innerHTML$jscomp$7.__html; - null !== html && - void 0 !== html && - ("string" === typeof html && 0 < html.length && "\n" === html[0] - ? target$jscomp$0.push("\n", html) - : target$jscomp$0.push("" + html)); - } - "string" === typeof children$jscomp$8 && - "\n" === children$jscomp$8[0] && - target$jscomp$0.push("\n"); - return children$jscomp$8; - case "img": - var pictureOrNoScriptTagInScope = formatContext.tagScope & 3, - src = props.src, - srcSet = props.srcSet; - if ( - !( - "lazy" === props.loading || - (!src && !srcSet) || - ("string" !== typeof src && null != src) || - ("string" !== typeof srcSet && null != srcSet) || - "low" === props.fetchPriority || - pictureOrNoScriptTagInScope - ) && - ("string" !== typeof src || - ":" !== src[4] || - ("d" !== src[0] && "D" !== src[0]) || - ("a" !== src[1] && "A" !== src[1]) || - ("t" !== src[2] && "T" !== src[2]) || - ("a" !== src[3] && "A" !== src[3])) && - ("string" !== typeof srcSet || - ":" !== srcSet[4] || - ("d" !== srcSet[0] && "D" !== srcSet[0]) || - ("a" !== srcSet[1] && "A" !== srcSet[1]) || - ("t" !== srcSet[2] && "T" !== srcSet[2]) || - ("a" !== srcSet[3] && "A" !== srcSet[3])) - ) { - null !== hoistableState && - formatContext.tagScope & 64 && - (hoistableState.suspenseyImages = !0); - var sizes = "string" === typeof props.sizes ? props.sizes : void 0, - key$jscomp$0 = srcSet ? srcSet + "\n" + (sizes || "") : src, - promotablePreloads = renderState.preloads.images, - resource$jscomp$1 = promotablePreloads.get(key$jscomp$0); - if (resource$jscomp$1) { - if ( - "high" === props.fetchPriority || - 10 > renderState.highImagePreloads.size - ) - promotablePreloads.delete(key$jscomp$0), - renderState.highImagePreloads.add(resource$jscomp$1); - } else if ( - !resumableState.imageResources.hasOwnProperty(key$jscomp$0) - ) { - resumableState.imageResources[key$jscomp$0] = PRELOAD_NO_CREDS; - var input = props.crossOrigin; - var JSCompiler_inline_result$jscomp$8 = - "string" === typeof input - ? "use-credentials" === input - ? input - : "" - : void 0; - var headers = renderState.headers, - header; - headers && - 0 < headers.remainingCapacity && - "string" !== typeof props.srcSet && - ("high" === props.fetchPriority || - 500 > headers.highImagePreloads.length) && - ((header = getPreloadAsHeader(src, "image", { - imageSrcSet: props.srcSet, - imageSizes: props.sizes, - crossOrigin: JSCompiler_inline_result$jscomp$8, - integrity: props.integrity, - nonce: props.nonce, - type: props.type, - fetchPriority: props.fetchPriority, - referrerPolicy: props.refererPolicy - })), - 0 <= (headers.remainingCapacity -= header.length + 2)) - ? ((renderState.resets.image[key$jscomp$0] = PRELOAD_NO_CREDS), - headers.highImagePreloads && (headers.highImagePreloads += ", "), - (headers.highImagePreloads += header)) - : ((resource$jscomp$1 = []), - pushLinkImpl(resource$jscomp$1, { - rel: "preload", - as: "image", - href: srcSet ? void 0 : src, - imageSrcSet: srcSet, - imageSizes: sizes, - crossOrigin: JSCompiler_inline_result$jscomp$8, - integrity: props.integrity, - type: props.type, - fetchPriority: props.fetchPriority, - referrerPolicy: props.referrerPolicy - }), - "high" === props.fetchPriority || - 10 > renderState.highImagePreloads.size - ? renderState.highImagePreloads.add(resource$jscomp$1) - : (renderState.bulkPreloads.add(resource$jscomp$1), - promotablePreloads.set(key$jscomp$0, resource$jscomp$1))); - } - } - return pushSelfClosing(target$jscomp$0, props, "img"); - case "base": - case "area": - case "br": - case "col": - case "embed": - case "hr": - case "keygen": - case "param": - case "source": - case "track": - case "wbr": - return pushSelfClosing(target$jscomp$0, props, type); - case "annotation-xml": - case "color-profile": - case "font-face": - case "font-face-src": - case "font-face-uri": - case "font-face-format": - case "font-face-name": - case "missing-glyph": - break; - case "head": - if (2 > formatContext.insertionMode) { - var preamble = preambleState || renderState.preamble; - if (preamble.headChunks) - throw Error("The `<head>` tag may only be rendered once."); - null !== preambleState && target$jscomp$0.push("\x3c!--head--\x3e"); - preamble.headChunks = []; - var JSCompiler_inline_result$jscomp$9 = pushStartSingletonElement( - preamble.headChunks, - props, - "head" - ); - } else - JSCompiler_inline_result$jscomp$9 = pushStartGenericElement( - target$jscomp$0, - props, - "head" - ); - return JSCompiler_inline_result$jscomp$9; - case "body": - if (2 > formatContext.insertionMode) { - var preamble$jscomp$0 = preambleState || renderState.preamble; - if (preamble$jscomp$0.bodyChunks) - throw Error("The `<body>` tag may only be rendered once."); - null !== preambleState && target$jscomp$0.push("\x3c!--body--\x3e"); - preamble$jscomp$0.bodyChunks = []; - var JSCompiler_inline_result$jscomp$10 = pushStartSingletonElement( - preamble$jscomp$0.bodyChunks, - props, - "body" - ); - } else - JSCompiler_inline_result$jscomp$10 = pushStartGenericElement( - target$jscomp$0, - props, - "body" - ); - return JSCompiler_inline_result$jscomp$10; - case "html": - if (0 === formatContext.insertionMode) { - var preamble$jscomp$1 = preambleState || renderState.preamble; - if (preamble$jscomp$1.htmlChunks) - throw Error("The `<html>` tag may only be rendered once."); - null !== preambleState && target$jscomp$0.push("\x3c!--html--\x3e"); - preamble$jscomp$1.htmlChunks = [""]; - var JSCompiler_inline_result$jscomp$11 = pushStartSingletonElement( - preamble$jscomp$1.htmlChunks, - props, - "html" - ); - } else - JSCompiler_inline_result$jscomp$11 = pushStartGenericElement( - target$jscomp$0, - props, - "html" - ); - return JSCompiler_inline_result$jscomp$11; - default: - if (-1 !== type.indexOf("-")) { - target$jscomp$0.push(startChunkForTag(type)); - var children$jscomp$9 = null, - innerHTML$jscomp$8 = null, - propKey$jscomp$11; - for (propKey$jscomp$11 in props) - if (hasOwnProperty.call(props, propKey$jscomp$11)) { - var propValue$jscomp$11 = props[propKey$jscomp$11]; - if (null != propValue$jscomp$11) { - var attributeName = propKey$jscomp$11; - switch (propKey$jscomp$11) { - case "children": - children$jscomp$9 = propValue$jscomp$11; - break; - case "dangerouslySetInnerHTML": - innerHTML$jscomp$8 = propValue$jscomp$11; - break; - case "style": - pushStyleAttribute(target$jscomp$0, propValue$jscomp$11); - break; - case "suppressContentEditableWarning": - case "suppressHydrationWarning": - case "ref": - break; - case "className": - attributeName = "class"; - default: - if ( - isAttributeNameSafe(propKey$jscomp$11) && - "function" !== typeof propValue$jscomp$11 && - "symbol" !== typeof propValue$jscomp$11 && - !1 !== propValue$jscomp$11 - ) { - if (!0 === propValue$jscomp$11) propValue$jscomp$11 = ""; - else if ("object" === typeof propValue$jscomp$11) continue; - target$jscomp$0.push( - " ", - attributeName, - '="', - escapeTextForBrowser(propValue$jscomp$11), - '"' - ); - } - } - } - } - target$jscomp$0.push(">"); - pushInnerHTML(target$jscomp$0, innerHTML$jscomp$8, children$jscomp$9); - return children$jscomp$9; - } - } - return pushStartGenericElement(target$jscomp$0, props, type); -} -var endTagCache = new Map(); -function endChunkForTag(tag) { - var chunk = endTagCache.get(tag); - void 0 === chunk && ((chunk = "</" + tag + ">"), endTagCache.set(tag, chunk)); - return chunk; -} -function hoistPreambleState(renderState, preambleState) { - renderState = renderState.preamble; - null === renderState.htmlChunks && - preambleState.htmlChunks && - (renderState.htmlChunks = preambleState.htmlChunks); - null === renderState.headChunks && - preambleState.headChunks && - (renderState.headChunks = preambleState.headChunks); - null === renderState.bodyChunks && - preambleState.bodyChunks && - (renderState.bodyChunks = preambleState.bodyChunks); -} -function writeBootstrap(destination, renderState) { - renderState = renderState.bootstrapChunks; - for (var i = 0; i < renderState.length - 1; i++) - destination.push(renderState[i]); - return i < renderState.length - ? ((i = renderState[i]), (renderState.length = 0), destination.push(i)) - : !0; -} -function writeStartPendingSuspenseBoundary(destination, renderState, id) { - destination.push('\x3c!--$?--\x3e<template id="'); - if (null === id) - throw Error( - "An ID must have been assigned before we can complete the boundary." - ); - destination.push(renderState.boundaryPrefix); - renderState = id.toString(16); - destination.push(renderState); - return destination.push('"></template>'); -} -function writeStartSegment(destination, renderState, formatContext, id) { - switch (formatContext.insertionMode) { - case 0: - case 1: - case 3: - case 2: - return ( - destination.push('<div hidden id="'), - destination.push(renderState.segmentPrefix), - (renderState = id.toString(16)), - destination.push(renderState), - destination.push('">') - ); - case 4: - return ( - destination.push('<svg aria-hidden="true" style="display:none" id="'), - destination.push(renderState.segmentPrefix), - (renderState = id.toString(16)), - destination.push(renderState), - destination.push('">') - ); - case 5: - return ( - destination.push('<math aria-hidden="true" style="display:none" id="'), - destination.push(renderState.segmentPrefix), - (renderState = id.toString(16)), - destination.push(renderState), - destination.push('">') - ); - case 6: - return ( - destination.push('<table hidden id="'), - destination.push(renderState.segmentPrefix), - (renderState = id.toString(16)), - destination.push(renderState), - destination.push('">') - ); - case 7: - return ( - destination.push('<table hidden><tbody id="'), - destination.push(renderState.segmentPrefix), - (renderState = id.toString(16)), - destination.push(renderState), - destination.push('">') - ); - case 8: - return ( - destination.push('<table hidden><tr id="'), - destination.push(renderState.segmentPrefix), - (renderState = id.toString(16)), - destination.push(renderState), - destination.push('">') - ); - case 9: - return ( - destination.push('<table hidden><colgroup id="'), - destination.push(renderState.segmentPrefix), - (renderState = id.toString(16)), - destination.push(renderState), - destination.push('">') - ); - default: - throw Error("Unknown insertion mode. This is a bug in React."); - } -} -function writeEndSegment(destination, formatContext) { - switch (formatContext.insertionMode) { - case 0: - case 1: - case 3: - case 2: - return destination.push("</div>"); - case 4: - return destination.push("</svg>"); - case 5: - return destination.push("</math>"); - case 6: - return destination.push("</table>"); - case 7: - return destination.push("</tbody></table>"); - case 8: - return destination.push("</tr></table>"); - case 9: - return destination.push("</colgroup></table>"); - default: - throw Error("Unknown insertion mode. This is a bug in React."); - } -} -var regexForJSStringsInInstructionScripts = /[<\u2028\u2029]/g; -function escapeJSStringsForInstructionScripts(input) { - return JSON.stringify(input).replace( - regexForJSStringsInInstructionScripts, - function (match) { - switch (match) { - case "<": - return "\\u003c"; - case "\u2028": - return "\\u2028"; - case "\u2029": - return "\\u2029"; - default: - throw Error( - "escapeJSStringsForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React" - ); - } - } - ); -} -var regexForJSStringsInScripts = /[&><\u2028\u2029]/g; -function escapeJSObjectForInstructionScripts(input) { - return JSON.stringify(input).replace( - regexForJSStringsInScripts, - function (match) { - switch (match) { - case "&": - return "\\u0026"; - case ">": - return "\\u003e"; - case "<": - return "\\u003c"; - case "\u2028": - return "\\u2028"; - case "\u2029": - return "\\u2029"; - default: - throw Error( - "escapeJSObjectForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React" - ); - } - } - ); -} -var currentlyRenderingBoundaryHasStylesToHoist = !1, - destinationHasCapacity = !0; -function flushStyleTagsLateForBoundary(styleQueue) { - var rules = styleQueue.rules, - hrefs = styleQueue.hrefs, - i = 0; - if (hrefs.length) { - this.push(currentlyFlushingRenderState.startInlineStyle); - this.push(' media="not all" data-precedence="'); - this.push(styleQueue.precedence); - for (this.push('" data-href="'); i < hrefs.length - 1; i++) - this.push(hrefs[i]), this.push(" "); - this.push(hrefs[i]); - this.push('">'); - for (i = 0; i < rules.length; i++) this.push(rules[i]); - destinationHasCapacity = this.push("</style>"); - currentlyRenderingBoundaryHasStylesToHoist = !0; - rules.length = 0; - hrefs.length = 0; - } -} -function hasStylesToHoist(stylesheet) { - return 2 !== stylesheet.state - ? (currentlyRenderingBoundaryHasStylesToHoist = !0) - : !1; -} -function writeHoistablesForBoundary(destination, hoistableState, renderState) { - currentlyRenderingBoundaryHasStylesToHoist = !1; - destinationHasCapacity = !0; - currentlyFlushingRenderState = renderState; - hoistableState.styles.forEach(flushStyleTagsLateForBoundary, destination); - currentlyFlushingRenderState = null; - hoistableState.stylesheets.forEach(hasStylesToHoist); - currentlyRenderingBoundaryHasStylesToHoist && - (renderState.stylesToHoist = !0); - return destinationHasCapacity; -} -function flushResource(resource) { - for (var i = 0; i < resource.length; i++) this.push(resource[i]); - resource.length = 0; -} -var stylesheetFlushingQueue = []; -function flushStyleInPreamble(stylesheet) { - pushLinkImpl(stylesheetFlushingQueue, stylesheet.props); - for (var i = 0; i < stylesheetFlushingQueue.length; i++) - this.push(stylesheetFlushingQueue[i]); - stylesheetFlushingQueue.length = 0; - stylesheet.state = 2; -} -function flushStylesInPreamble(styleQueue) { - var hasStylesheets = 0 < styleQueue.sheets.size; - styleQueue.sheets.forEach(flushStyleInPreamble, this); - styleQueue.sheets.clear(); - var rules = styleQueue.rules, - hrefs = styleQueue.hrefs; - if (!hasStylesheets || hrefs.length) { - this.push(currentlyFlushingRenderState.startInlineStyle); - this.push(' data-precedence="'); - this.push(styleQueue.precedence); - styleQueue = 0; - if (hrefs.length) { - for ( - this.push('" data-href="'); - styleQueue < hrefs.length - 1; - styleQueue++ - ) - this.push(hrefs[styleQueue]), this.push(" "); - this.push(hrefs[styleQueue]); - } - this.push('">'); - for (styleQueue = 0; styleQueue < rules.length; styleQueue++) - this.push(rules[styleQueue]); - this.push("</style>"); - rules.length = 0; - hrefs.length = 0; - } -} -function preloadLateStyle(stylesheet) { - if (0 === stylesheet.state) { - stylesheet.state = 1; - var props = stylesheet.props; - pushLinkImpl(stylesheetFlushingQueue, { - rel: "preload", - as: "style", - href: stylesheet.props.href, - crossOrigin: props.crossOrigin, - fetchPriority: props.fetchPriority, - integrity: props.integrity, - media: props.media, - hrefLang: props.hrefLang, - referrerPolicy: props.referrerPolicy - }); - for ( - stylesheet = 0; - stylesheet < stylesheetFlushingQueue.length; - stylesheet++ - ) - this.push(stylesheetFlushingQueue[stylesheet]); - stylesheetFlushingQueue.length = 0; - } -} -function preloadLateStyles(styleQueue) { - styleQueue.sheets.forEach(preloadLateStyle, this); - styleQueue.sheets.clear(); -} -function pushCompletedShellIdAttribute(target, resumableState) { - 0 === (resumableState.instructions & 32) && - ((resumableState.instructions |= 32), - target.push( - ' id="', - escapeTextForBrowser("_" + resumableState.idPrefix + "R_"), - '"' - )); -} -function writeStyleResourceDependenciesInJS(destination, hoistableState) { - destination.push("["); - var nextArrayOpenBrackChunk = "["; - hoistableState.stylesheets.forEach(function (resource) { - if (2 !== resource.state) - if (3 === resource.state) - destination.push(nextArrayOpenBrackChunk), - (resource = escapeJSObjectForInstructionScripts( - "" + resource.props.href - )), - destination.push(resource), - destination.push("]"), - (nextArrayOpenBrackChunk = ",["); - else { - destination.push(nextArrayOpenBrackChunk); - var precedence = resource.props["data-precedence"], - props = resource.props, - coercedHref = sanitizeURL("" + resource.props.href); - coercedHref = escapeJSObjectForInstructionScripts(coercedHref); - destination.push(coercedHref); - precedence = "" + precedence; - destination.push(","); - precedence = escapeJSObjectForInstructionScripts(precedence); - destination.push(precedence); - for (var propKey in props) - if ( - hasOwnProperty.call(props, propKey) && - ((precedence = props[propKey]), null != precedence) - ) - switch (propKey) { - case "href": - case "rel": - case "precedence": - case "data-precedence": - break; - case "children": - case "dangerouslySetInnerHTML": - throw Error( - "link is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`." - ); - default: - writeStyleResourceAttributeInJS( - destination, - propKey, - precedence - ); - } - destination.push("]"); - nextArrayOpenBrackChunk = ",["; - resource.state = 3; - } - }); - destination.push("]"); -} -function writeStyleResourceAttributeInJS(destination, name, value) { - var attributeName = name.toLowerCase(); - switch (typeof value) { - case "function": - case "symbol": - return; - } - switch (name) { - case "innerHTML": - case "dangerouslySetInnerHTML": - case "suppressContentEditableWarning": - case "suppressHydrationWarning": - case "style": - case "ref": - return; - case "className": - attributeName = "class"; - name = "" + value; - break; - case "hidden": - if (!1 === value) return; - name = ""; - break; - case "src": - case "href": - value = sanitizeURL(value); - name = "" + value; - break; - default: - if ( - (2 < name.length && - ("o" === name[0] || "O" === name[0]) && - ("n" === name[1] || "N" === name[1])) || - !isAttributeNameSafe(name) - ) - return; - name = "" + value; - } - destination.push(","); - attributeName = escapeJSObjectForInstructionScripts(attributeName); - destination.push(attributeName); - destination.push(","); - attributeName = escapeJSObjectForInstructionScripts(name); - destination.push(attributeName); -} -function createHoistableState() { - return { styles: new Set(), stylesheets: new Set(), suspenseyImages: !1 }; -} -function prefetchDNS(href) { - var request = currentRequest ? currentRequest : null; - if (request) { - var resumableState = request.resumableState, - renderState = request.renderState; - if ("string" === typeof href && href) { - if (!resumableState.dnsResources.hasOwnProperty(href)) { - resumableState.dnsResources[href] = null; - resumableState = renderState.headers; - var header, JSCompiler_temp; - if ( - (JSCompiler_temp = - resumableState && 0 < resumableState.remainingCapacity) - ) - JSCompiler_temp = - ((header = - "<" + - ("" + href).replace( - regexForHrefInLinkHeaderURLContext, - escapeHrefForLinkHeaderURLContextReplacer - ) + - ">; rel=dns-prefetch"), - 0 <= (resumableState.remainingCapacity -= header.length + 2)); - JSCompiler_temp - ? ((renderState.resets.dns[href] = null), - resumableState.preconnects && (resumableState.preconnects += ", "), - (resumableState.preconnects += header)) - : ((header = []), - pushLinkImpl(header, { href: href, rel: "dns-prefetch" }), - renderState.preconnects.add(header)); - } - enqueueFlush(request); - } - } else previousDispatcher.D(href); -} -function preconnect(href, crossOrigin) { - var request = currentRequest ? currentRequest : null; - if (request) { - var resumableState = request.resumableState, - renderState = request.renderState; - if ("string" === typeof href && href) { - var bucket = - "use-credentials" === crossOrigin - ? "credentials" - : "string" === typeof crossOrigin - ? "anonymous" - : "default"; - if (!resumableState.connectResources[bucket].hasOwnProperty(href)) { - resumableState.connectResources[bucket][href] = null; - resumableState = renderState.headers; - var header, JSCompiler_temp; - if ( - (JSCompiler_temp = - resumableState && 0 < resumableState.remainingCapacity) - ) { - JSCompiler_temp = - "<" + - ("" + href).replace( - regexForHrefInLinkHeaderURLContext, - escapeHrefForLinkHeaderURLContextReplacer - ) + - ">; rel=preconnect"; - if ("string" === typeof crossOrigin) { - var escapedCrossOrigin = ("" + crossOrigin).replace( - regexForLinkHeaderQuotedParamValueContext, - escapeStringForLinkHeaderQuotedParamValueContextReplacer - ); - JSCompiler_temp += '; crossorigin="' + escapedCrossOrigin + '"'; - } - JSCompiler_temp = - ((header = JSCompiler_temp), - 0 <= (resumableState.remainingCapacity -= header.length + 2)); - } - JSCompiler_temp - ? ((renderState.resets.connect[bucket][href] = null), - resumableState.preconnects && (resumableState.preconnects += ", "), - (resumableState.preconnects += header)) - : ((bucket = []), - pushLinkImpl(bucket, { - rel: "preconnect", - href: href, - crossOrigin: crossOrigin - }), - renderState.preconnects.add(bucket)); - } - enqueueFlush(request); - } - } else previousDispatcher.C(href, crossOrigin); -} -function preload(href, as, options) { - var request = currentRequest ? currentRequest : null; - if (request) { - var resumableState = request.resumableState, - renderState = request.renderState; - if (as && href) { - switch (as) { - case "image": - if (options) { - var imageSrcSet = options.imageSrcSet; - var imageSizes = options.imageSizes; - var fetchPriority = options.fetchPriority; - } - var key = imageSrcSet - ? imageSrcSet + "\n" + (imageSizes || "") - : href; - if (resumableState.imageResources.hasOwnProperty(key)) return; - resumableState.imageResources[key] = PRELOAD_NO_CREDS; - resumableState = renderState.headers; - var header; - resumableState && - 0 < resumableState.remainingCapacity && - "string" !== typeof imageSrcSet && - "high" === fetchPriority && - ((header = getPreloadAsHeader(href, as, options)), - 0 <= (resumableState.remainingCapacity -= header.length + 2)) - ? ((renderState.resets.image[key] = PRELOAD_NO_CREDS), - resumableState.highImagePreloads && - (resumableState.highImagePreloads += ", "), - (resumableState.highImagePreloads += header)) - : ((resumableState = []), - pushLinkImpl( - resumableState, - assign( - { rel: "preload", href: imageSrcSet ? void 0 : href, as: as }, - options - ) - ), - "high" === fetchPriority - ? renderState.highImagePreloads.add(resumableState) - : (renderState.bulkPreloads.add(resumableState), - renderState.preloads.images.set(key, resumableState))); - break; - case "style": - if (resumableState.styleResources.hasOwnProperty(href)) return; - imageSrcSet = []; - pushLinkImpl( - imageSrcSet, - assign({ rel: "preload", href: href, as: as }, options) - ); - resumableState.styleResources[href] = - !options || - ("string" !== typeof options.crossOrigin && - "string" !== typeof options.integrity) - ? PRELOAD_NO_CREDS - : [options.crossOrigin, options.integrity]; - renderState.preloads.stylesheets.set(href, imageSrcSet); - renderState.bulkPreloads.add(imageSrcSet); - break; - case "script": - if (resumableState.scriptResources.hasOwnProperty(href)) return; - imageSrcSet = []; - renderState.preloads.scripts.set(href, imageSrcSet); - renderState.bulkPreloads.add(imageSrcSet); - pushLinkImpl( - imageSrcSet, - assign({ rel: "preload", href: href, as: as }, options) - ); - resumableState.scriptResources[href] = - !options || - ("string" !== typeof options.crossOrigin && - "string" !== typeof options.integrity) - ? PRELOAD_NO_CREDS - : [options.crossOrigin, options.integrity]; - break; - default: - if (resumableState.unknownResources.hasOwnProperty(as)) { - if ( - ((imageSrcSet = resumableState.unknownResources[as]), - imageSrcSet.hasOwnProperty(href)) - ) - return; - } else - (imageSrcSet = {}), - (resumableState.unknownResources[as] = imageSrcSet); - imageSrcSet[href] = PRELOAD_NO_CREDS; - if ( - (resumableState = renderState.headers) && - 0 < resumableState.remainingCapacity && - "font" === as && - ((key = getPreloadAsHeader(href, as, options)), - 0 <= (resumableState.remainingCapacity -= key.length + 2)) - ) - (renderState.resets.font[href] = PRELOAD_NO_CREDS), - resumableState.fontPreloads && - (resumableState.fontPreloads += ", "), - (resumableState.fontPreloads += key); - else - switch ( - ((resumableState = []), - (href = assign({ rel: "preload", href: href, as: as }, options)), - pushLinkImpl(resumableState, href), - as) - ) { - case "font": - renderState.fontPreloads.add(resumableState); - break; - default: - renderState.bulkPreloads.add(resumableState); - } - } - enqueueFlush(request); - } - } else previousDispatcher.L(href, as, options); -} -function preloadModule(href, options) { - var request = currentRequest ? currentRequest : null; - if (request) { - var resumableState = request.resumableState, - renderState = request.renderState; - if (href) { - var as = - options && "string" === typeof options.as ? options.as : "script"; - switch (as) { - case "script": - if (resumableState.moduleScriptResources.hasOwnProperty(href)) return; - as = []; - resumableState.moduleScriptResources[href] = - !options || - ("string" !== typeof options.crossOrigin && - "string" !== typeof options.integrity) - ? PRELOAD_NO_CREDS - : [options.crossOrigin, options.integrity]; - renderState.preloads.moduleScripts.set(href, as); - break; - default: - if (resumableState.moduleUnknownResources.hasOwnProperty(as)) { - var resources = resumableState.unknownResources[as]; - if (resources.hasOwnProperty(href)) return; - } else - (resources = {}), - (resumableState.moduleUnknownResources[as] = resources); - as = []; - resources[href] = PRELOAD_NO_CREDS; - } - pushLinkImpl(as, assign({ rel: "modulepreload", href: href }, options)); - renderState.bulkPreloads.add(as); - enqueueFlush(request); - } - } else previousDispatcher.m(href, options); -} -function preinitStyle(href, precedence, options) { - var request = currentRequest ? currentRequest : null; - if (request) { - var resumableState = request.resumableState, - renderState = request.renderState; - if (href) { - precedence = precedence || "default"; - var styleQueue = renderState.styles.get(precedence), - resourceState = resumableState.styleResources.hasOwnProperty(href) - ? resumableState.styleResources[href] - : void 0; - null !== resourceState && - ((resumableState.styleResources[href] = null), - styleQueue || - ((styleQueue = { - precedence: escapeTextForBrowser(precedence), - rules: [], - hrefs: [], - sheets: new Map() - }), - renderState.styles.set(precedence, styleQueue)), - (precedence = { - state: 0, - props: assign( - { rel: "stylesheet", href: href, "data-precedence": precedence }, - options - ) - }), - resourceState && - (2 === resourceState.length && - adoptPreloadCredentials(precedence.props, resourceState), - (renderState = renderState.preloads.stylesheets.get(href)) && - 0 < renderState.length - ? (renderState.length = 0) - : (precedence.state = 1)), - styleQueue.sheets.set(href, precedence), - enqueueFlush(request)); - } - } else previousDispatcher.S(href, precedence, options); -} -function preinitScript(src, options) { - var request = currentRequest ? currentRequest : null; - if (request) { - var resumableState = request.resumableState, - renderState = request.renderState; - if (src) { - var resourceState = resumableState.scriptResources.hasOwnProperty(src) - ? resumableState.scriptResources[src] - : void 0; - null !== resourceState && - ((resumableState.scriptResources[src] = null), - (options = assign({ src: src, async: !0 }, options)), - resourceState && - (2 === resourceState.length && - adoptPreloadCredentials(options, resourceState), - (src = renderState.preloads.scripts.get(src))) && - (src.length = 0), - (src = []), - renderState.scripts.add(src), - pushScriptImpl(src, options), - enqueueFlush(request)); - } - } else previousDispatcher.X(src, options); -} -function preinitModuleScript(src, options) { - var request = currentRequest ? currentRequest : null; - if (request) { - var resumableState = request.resumableState, - renderState = request.renderState; - if (src) { - var resourceState = resumableState.moduleScriptResources.hasOwnProperty( - src - ) - ? resumableState.moduleScriptResources[src] - : void 0; - null !== resourceState && - ((resumableState.moduleScriptResources[src] = null), - (options = assign({ src: src, type: "module", async: !0 }, options)), - resourceState && - (2 === resourceState.length && - adoptPreloadCredentials(options, resourceState), - (src = renderState.preloads.moduleScripts.get(src))) && - (src.length = 0), - (src = []), - renderState.scripts.add(src), - pushScriptImpl(src, options), - enqueueFlush(request)); - } - } else previousDispatcher.M(src, options); -} -function adoptPreloadCredentials(target, preloadState) { - null == target.crossOrigin && (target.crossOrigin = preloadState[0]); - null == target.integrity && (target.integrity = preloadState[1]); -} -function getPreloadAsHeader(href, as, params) { - href = ("" + href).replace( - regexForHrefInLinkHeaderURLContext, - escapeHrefForLinkHeaderURLContextReplacer - ); - as = ("" + as).replace( - regexForLinkHeaderQuotedParamValueContext, - escapeStringForLinkHeaderQuotedParamValueContextReplacer - ); - as = "<" + href + '>; rel=preload; as="' + as + '"'; - for (var paramName in params) - hasOwnProperty.call(params, paramName) && - ((href = params[paramName]), - "string" === typeof href && - (as += - "; " + - paramName.toLowerCase() + - '="' + - ("" + href).replace( - regexForLinkHeaderQuotedParamValueContext, - escapeStringForLinkHeaderQuotedParamValueContextReplacer - ) + - '"')); - return as; -} -var regexForHrefInLinkHeaderURLContext = /[<>\r\n]/g; -function escapeHrefForLinkHeaderURLContextReplacer(match) { - switch (match) { - case "<": - return "%3C"; - case ">": - return "%3E"; - case "\n": - return "%0A"; - case "\r": - return "%0D"; - default: - throw Error( - "escapeLinkHrefForHeaderContextReplacer encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React" - ); - } -} -var regexForLinkHeaderQuotedParamValueContext = /["';,\r\n]/g; -function escapeStringForLinkHeaderQuotedParamValueContextReplacer(match) { - switch (match) { - case '"': - return "%22"; - case "'": - return "%27"; - case ";": - return "%3B"; - case ",": - return "%2C"; - case "\n": - return "%0A"; - case "\r": - return "%0D"; - default: - throw Error( - "escapeStringForLinkHeaderQuotedParamValueContextReplacer encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React" - ); - } -} -function hoistStyleQueueDependency(styleQueue) { - this.styles.add(styleQueue); -} -function hoistStylesheetDependency(stylesheet) { - this.stylesheets.add(stylesheet); -} -function hoistHoistables(parentState, childState) { - childState.styles.forEach(hoistStyleQueueDependency, parentState); - childState.stylesheets.forEach(hoistStylesheetDependency, parentState); - childState.suspenseyImages && (parentState.suspenseyImages = !0); -} -function createRenderState(resumableState, generateStaticMarkup) { - var idPrefix = resumableState.idPrefix, - bootstrapChunks = [], - bootstrapScriptContent = resumableState.bootstrapScriptContent, - bootstrapScripts = resumableState.bootstrapScripts, - bootstrapModules = resumableState.bootstrapModules; - void 0 !== bootstrapScriptContent && - (bootstrapChunks.push("<script"), - pushCompletedShellIdAttribute(bootstrapChunks, resumableState), - bootstrapChunks.push( - ">", - ("" + bootstrapScriptContent).replace(scriptRegex, scriptReplacer), - "\x3c/script>" - )); - bootstrapScriptContent = idPrefix + "P:"; - var JSCompiler_object_inline_segmentPrefix_1673 = idPrefix + "S:"; - idPrefix += "B:"; - var JSCompiler_object_inline_preconnects_1687 = new Set(), - JSCompiler_object_inline_fontPreloads_1688 = new Set(), - JSCompiler_object_inline_highImagePreloads_1689 = new Set(), - JSCompiler_object_inline_styles_1690 = new Map(), - JSCompiler_object_inline_bootstrapScripts_1691 = new Set(), - JSCompiler_object_inline_scripts_1692 = new Set(), - JSCompiler_object_inline_bulkPreloads_1693 = new Set(), - JSCompiler_object_inline_preloads_1694 = { - images: new Map(), - stylesheets: new Map(), - scripts: new Map(), - moduleScripts: new Map() - }; - if (void 0 !== bootstrapScripts) - for (var i = 0; i < bootstrapScripts.length; i++) { - var scriptConfig = bootstrapScripts[i], - src, - crossOrigin = void 0, - integrity = void 0, - props = { - rel: "preload", - as: "script", - fetchPriority: "low", - nonce: void 0 - }; - "string" === typeof scriptConfig - ? (props.href = src = scriptConfig) - : ((props.href = src = scriptConfig.src), - (props.integrity = integrity = - "string" === typeof scriptConfig.integrity - ? scriptConfig.integrity - : void 0), - (props.crossOrigin = crossOrigin = - "string" === typeof scriptConfig || null == scriptConfig.crossOrigin - ? void 0 - : "use-credentials" === scriptConfig.crossOrigin - ? "use-credentials" - : "")); - scriptConfig = resumableState; - var href = src; - scriptConfig.scriptResources[href] = null; - scriptConfig.moduleScriptResources[href] = null; - scriptConfig = []; - pushLinkImpl(scriptConfig, props); - JSCompiler_object_inline_bootstrapScripts_1691.add(scriptConfig); - bootstrapChunks.push('<script src="', escapeTextForBrowser(src), '"'); - "string" === typeof integrity && - bootstrapChunks.push( - ' integrity="', - escapeTextForBrowser(integrity), - '"' - ); - "string" === typeof crossOrigin && - bootstrapChunks.push( - ' crossorigin="', - escapeTextForBrowser(crossOrigin), - '"' - ); - pushCompletedShellIdAttribute(bootstrapChunks, resumableState); - bootstrapChunks.push(' async="">\x3c/script>'); - } - if (void 0 !== bootstrapModules) - for ( - bootstrapScripts = 0; - bootstrapScripts < bootstrapModules.length; - bootstrapScripts++ - ) - (props = bootstrapModules[bootstrapScripts]), - (crossOrigin = src = void 0), - (integrity = { - rel: "modulepreload", - fetchPriority: "low", - nonce: void 0 - }), - "string" === typeof props - ? (integrity.href = i = props) - : ((integrity.href = i = props.src), - (integrity.integrity = crossOrigin = - "string" === typeof props.integrity ? props.integrity : void 0), - (integrity.crossOrigin = src = - "string" === typeof props || null == props.crossOrigin - ? void 0 - : "use-credentials" === props.crossOrigin - ? "use-credentials" - : "")), - (props = resumableState), - (scriptConfig = i), - (props.scriptResources[scriptConfig] = null), - (props.moduleScriptResources[scriptConfig] = null), - (props = []), - pushLinkImpl(props, integrity), - JSCompiler_object_inline_bootstrapScripts_1691.add(props), - bootstrapChunks.push( - '<script type="module" src="', - escapeTextForBrowser(i), - '"' - ), - "string" === typeof crossOrigin && - bootstrapChunks.push( - ' integrity="', - escapeTextForBrowser(crossOrigin), - '"' - ), - "string" === typeof src && - bootstrapChunks.push( - ' crossorigin="', - escapeTextForBrowser(src), - '"' - ), - pushCompletedShellIdAttribute(bootstrapChunks, resumableState), - bootstrapChunks.push(' async="">\x3c/script>'); - return { - placeholderPrefix: bootstrapScriptContent, - segmentPrefix: JSCompiler_object_inline_segmentPrefix_1673, - boundaryPrefix: idPrefix, - startInlineScript: "<script", - startInlineStyle: "<style", - preamble: { htmlChunks: null, headChunks: null, bodyChunks: null }, - externalRuntimeScript: null, - bootstrapChunks: bootstrapChunks, - importMapChunks: [], - onHeaders: void 0, - headers: null, - resets: { - font: {}, - dns: {}, - connect: { default: {}, anonymous: {}, credentials: {} }, - image: {}, - style: {} - }, - charsetChunks: [], - viewportChunks: [], - hoistableChunks: [], - preconnects: JSCompiler_object_inline_preconnects_1687, - fontPreloads: JSCompiler_object_inline_fontPreloads_1688, - highImagePreloads: JSCompiler_object_inline_highImagePreloads_1689, - styles: JSCompiler_object_inline_styles_1690, - bootstrapScripts: JSCompiler_object_inline_bootstrapScripts_1691, - scripts: JSCompiler_object_inline_scripts_1692, - bulkPreloads: JSCompiler_object_inline_bulkPreloads_1693, - preloads: JSCompiler_object_inline_preloads_1694, - nonce: { script: void 0, style: void 0 }, - stylesToHoist: !1, - generateStaticMarkup: generateStaticMarkup - }; -} -function pushTextInstance(target, text, renderState, textEmbedded) { - if (renderState.generateStaticMarkup) - return target.push(escapeTextForBrowser(text)), !1; - "" === text - ? (target = textEmbedded) - : (textEmbedded && target.push("\x3c!-- --\x3e"), - target.push(escapeTextForBrowser(text)), - (target = !0)); - return target; -} -function pushSegmentFinale(target, renderState, lastPushedText, textEmbedded) { - renderState.generateStaticMarkup || - (lastPushedText && textEmbedded && target.push("\x3c!-- --\x3e")); -} -var bind = Function.prototype.bind, - REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"); -function getComponentNameFromType(type) { - if (null == type) return null; - if ("function" === typeof type) - return type.$$typeof === REACT_CLIENT_REFERENCE - ? null - : type.displayName || type.name || null; - if ("string" === typeof type) return type; - switch (type) { - case REACT_FRAGMENT_TYPE: - return "Fragment"; - case REACT_PROFILER_TYPE: - return "Profiler"; - case REACT_STRICT_MODE_TYPE: - return "StrictMode"; - case REACT_SUSPENSE_TYPE: - return "Suspense"; - case REACT_SUSPENSE_LIST_TYPE: - return "SuspenseList"; - case REACT_ACTIVITY_TYPE: - return "Activity"; - } - if ("object" === typeof type) - switch (type.$$typeof) { - case REACT_PORTAL_TYPE: - return "Portal"; - case REACT_CONTEXT_TYPE: - return type.displayName || "Context"; - case REACT_CONSUMER_TYPE: - return (type._context.displayName || "Context") + ".Consumer"; - case REACT_FORWARD_REF_TYPE: - var innerType = type.render; - type = type.displayName; - type || - ((type = innerType.displayName || innerType.name || ""), - (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef")); - return type; - case REACT_MEMO_TYPE: - return ( - (innerType = type.displayName || null), - null !== innerType - ? innerType - : getComponentNameFromType(type.type) || "Memo" - ); - case REACT_LAZY_TYPE: - innerType = type._payload; - type = type._init; - try { - return getComponentNameFromType(type(innerType)); - } catch (x) {} - } - return null; -} -var emptyContextObject = {}, - currentActiveSnapshot = null; -function popToNearestCommonAncestor(prev, next) { - if (prev !== next) { - prev.context._currentValue2 = prev.parentValue; - prev = prev.parent; - var parentNext = next.parent; - if (null === prev) { - if (null !== parentNext) - throw Error( - "The stacks must reach the root at the same time. This is a bug in React." - ); - } else { - if (null === parentNext) - throw Error( - "The stacks must reach the root at the same time. This is a bug in React." - ); - popToNearestCommonAncestor(prev, parentNext); - } - next.context._currentValue2 = next.value; - } -} -function popAllPrevious(prev) { - prev.context._currentValue2 = prev.parentValue; - prev = prev.parent; - null !== prev && popAllPrevious(prev); -} -function pushAllNext(next) { - var parentNext = next.parent; - null !== parentNext && pushAllNext(parentNext); - next.context._currentValue2 = next.value; -} -function popPreviousToCommonLevel(prev, next) { - prev.context._currentValue2 = prev.parentValue; - prev = prev.parent; - if (null === prev) - throw Error( - "The depth must equal at least at zero before reaching the root. This is a bug in React." - ); - prev.depth === next.depth - ? popToNearestCommonAncestor(prev, next) - : popPreviousToCommonLevel(prev, next); -} -function popNextToCommonLevel(prev, next) { - var parentNext = next.parent; - if (null === parentNext) - throw Error( - "The depth must equal at least at zero before reaching the root. This is a bug in React." - ); - prev.depth === parentNext.depth - ? popToNearestCommonAncestor(prev, parentNext) - : popNextToCommonLevel(prev, parentNext); - next.context._currentValue2 = next.value; -} -function switchContext(newSnapshot) { - var prev = currentActiveSnapshot; - prev !== newSnapshot && - (null === prev - ? pushAllNext(newSnapshot) - : null === newSnapshot - ? popAllPrevious(prev) - : prev.depth === newSnapshot.depth - ? popToNearestCommonAncestor(prev, newSnapshot) - : prev.depth > newSnapshot.depth - ? popPreviousToCommonLevel(prev, newSnapshot) - : popNextToCommonLevel(prev, newSnapshot), - (currentActiveSnapshot = newSnapshot)); -} -var classComponentUpdater = { - enqueueSetState: function (inst, payload) { - inst = inst._reactInternals; - null !== inst.queue && inst.queue.push(payload); - }, - enqueueReplaceState: function (inst, payload) { - inst = inst._reactInternals; - inst.replace = !0; - inst.queue = [payload]; - }, - enqueueForceUpdate: function () {} - }, - emptyTreeContext = { id: 1, overflow: "" }; -function pushTreeContext(baseContext, totalChildren, index) { - var baseIdWithLeadingBit = baseContext.id; - baseContext = baseContext.overflow; - var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1; - baseIdWithLeadingBit &= ~(1 << baseLength); - index += 1; - var length = 32 - clz32(totalChildren) + baseLength; - if (30 < length) { - var numberOfOverflowBits = baseLength - (baseLength % 5); - length = ( - baseIdWithLeadingBit & - ((1 << numberOfOverflowBits) - 1) - ).toString(32); - baseIdWithLeadingBit >>= numberOfOverflowBits; - baseLength -= numberOfOverflowBits; - return { - id: - (1 << (32 - clz32(totalChildren) + baseLength)) | - (index << baseLength) | - baseIdWithLeadingBit, - overflow: length + baseContext - }; - } - return { - id: (1 << length) | (index << baseLength) | baseIdWithLeadingBit, - overflow: baseContext - }; -} -var clz32 = Math.clz32 ? Math.clz32 : clz32Fallback, - log = Math.log, - LN2 = Math.LN2; -function clz32Fallback(x) { - x >>>= 0; - return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0; -} -function noop() {} -var SuspenseException = Error( - "Suspense Exception: This is not a real error! It's an implementation detail of `use` to interrupt the current render. You must either rethrow it immediately, or move the `use` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\n\nTo handle async errors, wrap your component in an error boundary, or call the promise's `.catch` method and pass the result to `use`." -); -function trackUsedThenable(thenableState, thenable, index) { - index = thenableState[index]; - void 0 === index - ? thenableState.push(thenable) - : index !== thenable && (thenable.then(noop, noop), (thenable = index)); - switch (thenable.status) { - case "fulfilled": - return thenable.value; - case "rejected": - throw thenable.reason; - default: - "string" === typeof thenable.status - ? thenable.then(noop, noop) - : ((thenableState = thenable), - (thenableState.status = "pending"), - thenableState.then( - function (fulfilledValue) { - if ("pending" === thenable.status) { - var fulfilledThenable = thenable; - fulfilledThenable.status = "fulfilled"; - fulfilledThenable.value = fulfilledValue; - } - }, - function (error) { - if ("pending" === thenable.status) { - var rejectedThenable = thenable; - rejectedThenable.status = "rejected"; - rejectedThenable.reason = error; - } - } - )); - switch (thenable.status) { - case "fulfilled": - return thenable.value; - case "rejected": - throw thenable.reason; - } - suspendedThenable = thenable; - throw SuspenseException; - } -} -var suspendedThenable = null; -function getSuspendedThenable() { - if (null === suspendedThenable) - throw Error( - "Expected a suspended thenable. This is a bug in React. Please file an issue." - ); - var thenable = suspendedThenable; - suspendedThenable = null; - return thenable; -} -function is(x, y) { - return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y); -} -var objectIs = "function" === typeof Object.is ? Object.is : is, - currentlyRenderingComponent = null, - currentlyRenderingTask = null, - currentlyRenderingRequest = null, - currentlyRenderingKeyPath = null, - firstWorkInProgressHook = null, - workInProgressHook = null, - isReRender = !1, - didScheduleRenderPhaseUpdate = !1, - localIdCounter = 0, - actionStateCounter = 0, - actionStateMatchingIndex = -1, - thenableIndexCounter = 0, - thenableState = null, - renderPhaseUpdates = null, - numberOfReRenders = 0; -function resolveCurrentlyRenderingComponent() { - if (null === currentlyRenderingComponent) - throw Error( - "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." - ); - return currentlyRenderingComponent; -} -function createHook() { - if (0 < numberOfReRenders) - throw Error("Rendered more hooks than during the previous render"); - return { memoizedState: null, queue: null, next: null }; -} -function createWorkInProgressHook() { - null === workInProgressHook - ? null === firstWorkInProgressHook - ? ((isReRender = !1), - (firstWorkInProgressHook = workInProgressHook = createHook())) - : ((isReRender = !0), (workInProgressHook = firstWorkInProgressHook)) - : null === workInProgressHook.next - ? ((isReRender = !1), - (workInProgressHook = workInProgressHook.next = createHook())) - : ((isReRender = !0), (workInProgressHook = workInProgressHook.next)); - return workInProgressHook; -} -function getThenableStateAfterSuspending() { - var state = thenableState; - thenableState = null; - return state; -} -function resetHooksState() { - currentlyRenderingKeyPath = - currentlyRenderingRequest = - currentlyRenderingTask = - currentlyRenderingComponent = - null; - didScheduleRenderPhaseUpdate = !1; - firstWorkInProgressHook = null; - numberOfReRenders = 0; - workInProgressHook = renderPhaseUpdates = null; -} -function basicStateReducer(state, action) { - return "function" === typeof action ? action(state) : action; -} -function useReducer(reducer, initialArg, init) { - currentlyRenderingComponent = resolveCurrentlyRenderingComponent(); - workInProgressHook = createWorkInProgressHook(); - if (isReRender) { - var queue = workInProgressHook.queue; - initialArg = queue.dispatch; - if ( - null !== renderPhaseUpdates && - ((init = renderPhaseUpdates.get(queue)), void 0 !== init) - ) { - renderPhaseUpdates.delete(queue); - queue = workInProgressHook.memoizedState; - do (queue = reducer(queue, init.action)), (init = init.next); - while (null !== init); - workInProgressHook.memoizedState = queue; - return [queue, initialArg]; - } - return [workInProgressHook.memoizedState, initialArg]; - } - reducer = - reducer === basicStateReducer - ? "function" === typeof initialArg - ? initialArg() - : initialArg - : void 0 !== init - ? init(initialArg) - : initialArg; - workInProgressHook.memoizedState = reducer; - reducer = workInProgressHook.queue = { last: null, dispatch: null }; - reducer = reducer.dispatch = dispatchAction.bind( - null, - currentlyRenderingComponent, - reducer - ); - return [workInProgressHook.memoizedState, reducer]; -} -function useMemo(nextCreate, deps) { - currentlyRenderingComponent = resolveCurrentlyRenderingComponent(); - workInProgressHook = createWorkInProgressHook(); - deps = void 0 === deps ? null : deps; - if (null !== workInProgressHook) { - var prevState = workInProgressHook.memoizedState; - if (null !== prevState && null !== deps) { - var prevDeps = prevState[1]; - a: if (null === prevDeps) prevDeps = !1; - else { - for (var i = 0; i < prevDeps.length && i < deps.length; i++) - if (!objectIs(deps[i], prevDeps[i])) { - prevDeps = !1; - break a; - } - prevDeps = !0; - } - if (prevDeps) return prevState[0]; - } - } - nextCreate = nextCreate(); - workInProgressHook.memoizedState = [nextCreate, deps]; - return nextCreate; -} -function dispatchAction(componentIdentity, queue, action) { - if (25 <= numberOfReRenders) - throw Error( - "Too many re-renders. React limits the number of renders to prevent an infinite loop." - ); - if (componentIdentity === currentlyRenderingComponent) - if ( - ((didScheduleRenderPhaseUpdate = !0), - (componentIdentity = { action: action, next: null }), - null === renderPhaseUpdates && (renderPhaseUpdates = new Map()), - (action = renderPhaseUpdates.get(queue)), - void 0 === action) - ) - renderPhaseUpdates.set(queue, componentIdentity); - else { - for (queue = action; null !== queue.next; ) queue = queue.next; - queue.next = componentIdentity; - } -} -function throwOnUseEffectEventCall() { - throw Error( - "A function wrapped in useEffectEvent can't be called during rendering." - ); -} -function unsupportedStartTransition() { - throw Error("startTransition cannot be called during server rendering."); -} -function unsupportedSetOptimisticState() { - throw Error("Cannot update optimistic state while rendering."); -} -function useActionState(action, initialState, permalink) { - resolveCurrentlyRenderingComponent(); - var actionStateHookIndex = actionStateCounter++, - request = currentlyRenderingRequest; - if ("function" === typeof action.$$FORM_ACTION) { - var nextPostbackStateKey = null, - componentKeyPath = currentlyRenderingKeyPath; - request = request.formState; - var isSignatureEqual = action.$$IS_SIGNATURE_EQUAL; - if (null !== request && "function" === typeof isSignatureEqual) { - var postbackKey = request[1]; - isSignatureEqual.call(action, request[2], request[3]) && - ((nextPostbackStateKey = - void 0 !== permalink - ? "p" + permalink - : "k" + - murmurhash3_32_gc( - JSON.stringify([componentKeyPath, null, actionStateHookIndex]), - 0 - )), - postbackKey === nextPostbackStateKey && - ((actionStateMatchingIndex = actionStateHookIndex), - (initialState = request[0]))); - } - var boundAction = action.bind(null, initialState); - action = function (payload) { - boundAction(payload); - }; - "function" === typeof boundAction.$$FORM_ACTION && - (action.$$FORM_ACTION = function (prefix) { - prefix = boundAction.$$FORM_ACTION(prefix); - void 0 !== permalink && - ((permalink += ""), (prefix.action = permalink)); - var formData = prefix.data; - formData && - (null === nextPostbackStateKey && - (nextPostbackStateKey = - void 0 !== permalink - ? "p" + permalink - : "k" + - murmurhash3_32_gc( - JSON.stringify([ - componentKeyPath, - null, - actionStateHookIndex - ]), - 0 - )), - formData.append("$ACTION_KEY", nextPostbackStateKey)); - return prefix; - }); - return [initialState, action, !1]; - } - var boundAction$22 = action.bind(null, initialState); - return [ - initialState, - function (payload) { - boundAction$22(payload); - }, - !1 - ]; -} -function unwrapThenable(thenable) { - var index = thenableIndexCounter; - thenableIndexCounter += 1; - null === thenableState && (thenableState = []); - return trackUsedThenable(thenableState, thenable, index); -} -function unsupportedRefresh() { - throw Error("Cache cannot be refreshed during server rendering."); -} -var HooksDispatcher = { - readContext: function (context) { - return context._currentValue2; - }, - use: function (usable) { - if (null !== usable && "object" === typeof usable) { - if ("function" === typeof usable.then) return unwrapThenable(usable); - if (usable.$$typeof === REACT_CONTEXT_TYPE) - return usable._currentValue2; - } - throw Error("An unsupported type was passed to use(): " + String(usable)); - }, - useContext: function (context) { - resolveCurrentlyRenderingComponent(); - return context._currentValue2; - }, - useMemo: useMemo, - useReducer: useReducer, - useRef: function (initialValue) { - currentlyRenderingComponent = resolveCurrentlyRenderingComponent(); - workInProgressHook = createWorkInProgressHook(); - var previousRef = workInProgressHook.memoizedState; - return null === previousRef - ? ((initialValue = { current: initialValue }), - (workInProgressHook.memoizedState = initialValue)) - : previousRef; - }, - useState: function (initialState) { - return useReducer(basicStateReducer, initialState); - }, - useInsertionEffect: noop, - useLayoutEffect: noop, - useCallback: function (callback, deps) { - return useMemo(function () { - return callback; - }, deps); - }, - useImperativeHandle: noop, - useEffect: noop, - useDebugValue: noop, - useDeferredValue: function (value, initialValue) { - resolveCurrentlyRenderingComponent(); - return void 0 !== initialValue ? initialValue : value; - }, - useTransition: function () { - resolveCurrentlyRenderingComponent(); - return [!1, unsupportedStartTransition]; - }, - useId: function () { - var JSCompiler_inline_result = currentlyRenderingTask.treeContext; - var overflow = JSCompiler_inline_result.overflow; - JSCompiler_inline_result = JSCompiler_inline_result.id; - JSCompiler_inline_result = - ( - JSCompiler_inline_result & - ~(1 << (32 - clz32(JSCompiler_inline_result) - 1)) - ).toString(32) + overflow; - var resumableState = currentResumableState; - if (null === resumableState) - throw Error( - "Invalid hook call. Hooks can only be called inside of the body of a function component." - ); - overflow = localIdCounter++; - JSCompiler_inline_result = - "_" + resumableState.idPrefix + "R_" + JSCompiler_inline_result; - 0 < overflow && (JSCompiler_inline_result += "H" + overflow.toString(32)); - return JSCompiler_inline_result + "_"; - }, - useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) { - if (void 0 === getServerSnapshot) - throw Error( - "Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering." - ); - return getServerSnapshot(); - }, - useOptimistic: function (passthrough) { - resolveCurrentlyRenderingComponent(); - return [passthrough, unsupportedSetOptimisticState]; - }, - useActionState: useActionState, - useFormState: useActionState, - useHostTransitionStatus: function () { - resolveCurrentlyRenderingComponent(); - return sharedNotPendingObject; - }, - useMemoCache: function (size) { - for (var data = Array(size), i = 0; i < size; i++) - data[i] = REACT_MEMO_CACHE_SENTINEL; - return data; - }, - useCacheRefresh: function () { - return unsupportedRefresh; - }, - useEffectEvent: function () { - return throwOnUseEffectEventCall; - } - }, - currentResumableState = null, - DefaultAsyncDispatcher = { - getCacheForType: function () { - throw Error("Not implemented."); - }, - cacheSignal: function () { - throw Error("Not implemented."); - } - }, - prefix, - suffix; -function describeBuiltInComponentFrame(name) { - if (void 0 === prefix) - try { - throw Error(); - } catch (x) { - var match = x.stack.trim().match(/\n( *(at )?)/); - prefix = (match && match[1]) || ""; - suffix = - -1 < x.stack.indexOf("\n at") - ? " (<anonymous>)" - : -1 < x.stack.indexOf("@") - ? "@unknown:0:0" - : ""; - } - return "\n" + prefix + name + suffix; -} -var reentry = !1; -function describeNativeComponentFrame(fn, construct) { - if (!fn || reentry) return ""; - reentry = !0; - var previousPrepareStackTrace = Error.prepareStackTrace; - Error.prepareStackTrace = void 0; - try { - var RunInRootFrame = { - DetermineComponentFrameRoot: function () { - try { - if (construct) { - var Fake = function () { - throw Error(); - }; - Object.defineProperty(Fake.prototype, "props", { - set: function () { - throw Error(); - } - }); - if ("object" === typeof Reflect && Reflect.construct) { - try { - Reflect.construct(Fake, []); - } catch (x) { - var control = x; - } - Reflect.construct(fn, [], Fake); - } else { - try { - Fake.call(); - } catch (x$24) { - control = x$24; - } - fn.call(Fake.prototype); - } - } else { - try { - throw Error(); - } catch (x$25) { - control = x$25; - } - (Fake = fn()) && - "function" === typeof Fake.catch && - Fake.catch(function () {}); - } - } catch (sample) { - if (sample && control && "string" === typeof sample.stack) - return [sample.stack, control.stack]; - } - return [null, null]; - } - }; - RunInRootFrame.DetermineComponentFrameRoot.displayName = - "DetermineComponentFrameRoot"; - var namePropDescriptor = Object.getOwnPropertyDescriptor( - RunInRootFrame.DetermineComponentFrameRoot, - "name" - ); - namePropDescriptor && - namePropDescriptor.configurable && - Object.defineProperty( - RunInRootFrame.DetermineComponentFrameRoot, - "name", - { value: "DetermineComponentFrameRoot" } - ); - var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(), - sampleStack = _RunInRootFrame$Deter[0], - controlStack = _RunInRootFrame$Deter[1]; - if (sampleStack && controlStack) { - var sampleLines = sampleStack.split("\n"), - controlLines = controlStack.split("\n"); - for ( - namePropDescriptor = RunInRootFrame = 0; - RunInRootFrame < sampleLines.length && - !sampleLines[RunInRootFrame].includes("DetermineComponentFrameRoot"); - - ) - RunInRootFrame++; - for ( - ; - namePropDescriptor < controlLines.length && - !controlLines[namePropDescriptor].includes( - "DetermineComponentFrameRoot" - ); - - ) - namePropDescriptor++; - if ( - RunInRootFrame === sampleLines.length || - namePropDescriptor === controlLines.length - ) - for ( - RunInRootFrame = sampleLines.length - 1, - namePropDescriptor = controlLines.length - 1; - 1 <= RunInRootFrame && - 0 <= namePropDescriptor && - sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]; - - ) - namePropDescriptor--; - for ( - ; - 1 <= RunInRootFrame && 0 <= namePropDescriptor; - RunInRootFrame--, namePropDescriptor-- - ) - if (sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]) { - if (1 !== RunInRootFrame || 1 !== namePropDescriptor) { - do - if ( - (RunInRootFrame--, - namePropDescriptor--, - 0 > namePropDescriptor || - sampleLines[RunInRootFrame] !== - controlLines[namePropDescriptor]) - ) { - var frame = - "\n" + - sampleLines[RunInRootFrame].replace(" at new ", " at "); - fn.displayName && - frame.includes("<anonymous>") && - (frame = frame.replace("<anonymous>", fn.displayName)); - return frame; - } - while (1 <= RunInRootFrame && 0 <= namePropDescriptor); - } - break; - } - } - } finally { - (reentry = !1), (Error.prepareStackTrace = previousPrepareStackTrace); - } - return (previousPrepareStackTrace = fn ? fn.displayName || fn.name : "") - ? describeBuiltInComponentFrame(previousPrepareStackTrace) - : ""; -} -function describeComponentStackByType(type) { - if ("string" === typeof type) return describeBuiltInComponentFrame(type); - if ("function" === typeof type) - return type.prototype && type.prototype.isReactComponent - ? describeNativeComponentFrame(type, !0) - : describeNativeComponentFrame(type, !1); - if ("object" === typeof type && null !== type) { - switch (type.$$typeof) { - case REACT_FORWARD_REF_TYPE: - return describeNativeComponentFrame(type.render, !1); - case REACT_MEMO_TYPE: - return describeNativeComponentFrame(type.type, !1); - case REACT_LAZY_TYPE: - var lazyComponent = type, - payload = lazyComponent._payload; - lazyComponent = lazyComponent._init; - try { - type = lazyComponent(payload); - } catch (x) { - return describeBuiltInComponentFrame("Lazy"); - } - return describeComponentStackByType(type); - } - if ("string" === typeof type.name) { - a: { - payload = type.name; - lazyComponent = type.env; - var location = type.debugLocation; - if ( - null != location && - ((type = Error.prepareStackTrace), - (Error.prepareStackTrace = void 0), - (location = location.stack), - (Error.prepareStackTrace = type), - location.startsWith("Error: react-stack-top-frame\n") && - (location = location.slice(29)), - (type = location.indexOf("\n")), - -1 !== type && (location = location.slice(type + 1)), - (type = location.indexOf("react_stack_bottom_frame")), - -1 !== type && (type = location.lastIndexOf("\n", type)), - (type = -1 !== type ? (location = location.slice(0, type)) : ""), - (location = type.lastIndexOf("\n")), - (type = -1 === location ? type : type.slice(location + 1)), - -1 !== type.indexOf(payload)) - ) { - payload = "\n" + type; - break a; - } - payload = describeBuiltInComponentFrame( - payload + (lazyComponent ? " [" + lazyComponent + "]" : "") - ); - } - return payload; - } - } - switch (type) { - case REACT_SUSPENSE_LIST_TYPE: - return describeBuiltInComponentFrame("SuspenseList"); - case REACT_SUSPENSE_TYPE: - return describeBuiltInComponentFrame("Suspense"); - } - return ""; -} -function isEligibleForOutlining(request, boundary) { - return (500 < boundary.byteSize || !1) && null === boundary.contentPreamble; -} -function defaultErrorHandler(error) { - if ( - "object" === typeof error && - null !== error && - "string" === typeof error.environmentName - ) { - var JSCompiler_inline_result = error.environmentName; - error = [error].slice(0); - "string" === typeof error[0] - ? error.splice( - 0, - 1, - "[%s] " + error[0], - " " + JSCompiler_inline_result + " " - ) - : error.splice(0, 0, "[%s]", " " + JSCompiler_inline_result + " "); - error.unshift(console); - JSCompiler_inline_result = bind.apply(console.error, error); - JSCompiler_inline_result(); - } else console.error(error); - return null; -} -function RequestInstance( - resumableState, - renderState, - rootFormatContext, - progressiveChunkSize, - onError, - onAllReady, - onShellReady, - onShellError, - onFatalError, - onPostpone, - formState -) { - var abortSet = new Set(); - this.destination = null; - this.flushScheduled = !1; - this.resumableState = resumableState; - this.renderState = renderState; - this.rootFormatContext = rootFormatContext; - this.progressiveChunkSize = - void 0 === progressiveChunkSize ? 12800 : progressiveChunkSize; - this.status = 10; - this.fatalError = null; - this.pendingRootTasks = this.allPendingTasks = this.nextSegmentId = 0; - this.completedPreambleSegments = this.completedRootSegment = null; - this.byteSize = 0; - this.abortableTasks = abortSet; - this.pingedTasks = []; - this.clientRenderedBoundaries = []; - this.completedBoundaries = []; - this.partialBoundaries = []; - this.trackedPostpones = null; - this.onError = void 0 === onError ? defaultErrorHandler : onError; - this.onPostpone = void 0 === onPostpone ? noop : onPostpone; - this.onAllReady = void 0 === onAllReady ? noop : onAllReady; - this.onShellReady = void 0 === onShellReady ? noop : onShellReady; - this.onShellError = void 0 === onShellError ? noop : onShellError; - this.onFatalError = void 0 === onFatalError ? noop : onFatalError; - this.formState = void 0 === formState ? null : formState; -} -function createRequest( - children, - resumableState, - renderState, - rootFormatContext, - progressiveChunkSize, - onError, - onAllReady, - onShellReady, - onShellError, - onFatalError, - onPostpone, - formState -) { - resumableState = new RequestInstance( - resumableState, - renderState, - rootFormatContext, - progressiveChunkSize, - onError, - onAllReady, - onShellReady, - onShellError, - onFatalError, - onPostpone, - formState - ); - renderState = createPendingSegment( - resumableState, - 0, - null, - rootFormatContext, - !1, - !1 - ); - renderState.parentFlushed = !0; - children = createRenderTask( - resumableState, - null, - children, - -1, - null, - renderState, - null, - null, - resumableState.abortableTasks, - null, - rootFormatContext, - null, - emptyTreeContext, - null, - null - ); - pushComponentStack(children); - resumableState.pingedTasks.push(children); - return resumableState; -} -var currentRequest = null; -function pingTask(request, task) { - request.pingedTasks.push(task); - 1 === request.pingedTasks.length && - ((request.flushScheduled = null !== request.destination), - performWork(request)); -} -function createSuspenseBoundary( - request, - row, - fallbackAbortableTasks, - contentPreamble, - fallbackPreamble -) { - fallbackAbortableTasks = { - status: 0, - rootSegmentID: -1, - parentFlushed: !1, - pendingTasks: 0, - row: row, - completedSegments: [], - byteSize: 0, - fallbackAbortableTasks: fallbackAbortableTasks, - errorDigest: null, - contentState: createHoistableState(), - fallbackState: createHoistableState(), - contentPreamble: contentPreamble, - fallbackPreamble: fallbackPreamble, - trackedContentKeyPath: null, - trackedFallbackNode: null - }; - null !== row && - (row.pendingTasks++, - (contentPreamble = row.boundaries), - null !== contentPreamble && - (request.allPendingTasks++, - fallbackAbortableTasks.pendingTasks++, - contentPreamble.push(fallbackAbortableTasks)), - (request = row.inheritedHoistables), - null !== request && - hoistHoistables(fallbackAbortableTasks.contentState, request)); - return fallbackAbortableTasks; -} -function createRenderTask( - request, - thenableState, - node, - childIndex, - blockedBoundary, - blockedSegment, - blockedPreamble, - hoistableState, - abortSet, - keyPath, - formatContext, - context, - treeContext, - row, - componentStack -) { - request.allPendingTasks++; - null === blockedBoundary - ? request.pendingRootTasks++ - : blockedBoundary.pendingTasks++; - null !== row && row.pendingTasks++; - var task = { - replay: null, - node: node, - childIndex: childIndex, - ping: function () { - return pingTask(request, task); - }, - blockedBoundary: blockedBoundary, - blockedSegment: blockedSegment, - blockedPreamble: blockedPreamble, - hoistableState: hoistableState, - abortSet: abortSet, - keyPath: keyPath, - formatContext: formatContext, - context: context, - treeContext: treeContext, - row: row, - componentStack: componentStack, - thenableState: thenableState - }; - abortSet.add(task); - return task; -} -function createReplayTask( - request, - thenableState, - replay, - node, - childIndex, - blockedBoundary, - hoistableState, - abortSet, - keyPath, - formatContext, - context, - treeContext, - row, - componentStack -) { - request.allPendingTasks++; - null === blockedBoundary - ? request.pendingRootTasks++ - : blockedBoundary.pendingTasks++; - null !== row && row.pendingTasks++; - replay.pendingTasks++; - var task = { - replay: replay, - node: node, - childIndex: childIndex, - ping: function () { - return pingTask(request, task); - }, - blockedBoundary: blockedBoundary, - blockedSegment: null, - blockedPreamble: null, - hoistableState: hoistableState, - abortSet: abortSet, - keyPath: keyPath, - formatContext: formatContext, - context: context, - treeContext: treeContext, - row: row, - componentStack: componentStack, - thenableState: thenableState - }; - abortSet.add(task); - return task; -} -function createPendingSegment( - request, - index, - boundary, - parentFormatContext, - lastPushedText, - textEmbedded -) { - return { - status: 0, - parentFlushed: !1, - id: -1, - index: index, - chunks: [], - children: [], - preambleChildren: [], - parentFormatContext: parentFormatContext, - boundary: boundary, - lastPushedText: lastPushedText, - textEmbedded: textEmbedded - }; -} -function pushComponentStack(task) { - var node = task.node; - if ("object" === typeof node && null !== node) - switch (node.$$typeof) { - case REACT_ELEMENT_TYPE: - task.componentStack = { parent: task.componentStack, type: node.type }; - } -} -function replaceSuspenseComponentStackWithSuspenseFallbackStack( - componentStack -) { - return null === componentStack - ? null - : { parent: componentStack.parent, type: "Suspense Fallback" }; -} -function getThrownInfo(node$jscomp$0) { - var errorInfo = {}; - node$jscomp$0 && - Object.defineProperty(errorInfo, "componentStack", { - configurable: !0, - enumerable: !0, - get: function () { - try { - var info = "", - node = node$jscomp$0; - do - (info += describeComponentStackByType(node.type)), - (node = node.parent); - while (node); - var JSCompiler_inline_result = info; - } catch (x) { - JSCompiler_inline_result = - "\nError generating stack: " + x.message + "\n" + x.stack; - } - Object.defineProperty(errorInfo, "componentStack", { - value: JSCompiler_inline_result - }); - return JSCompiler_inline_result; - } - }); - return errorInfo; -} -function logRecoverableError(request, error, errorInfo) { - request = request.onError; - error = request(error, errorInfo); - if (null == error || "string" === typeof error) return error; -} -function fatalError(request, error) { - var onShellError = request.onShellError, - onFatalError = request.onFatalError; - onShellError(error); - onFatalError(error); - null !== request.destination - ? ((request.status = 14), request.destination.destroy(error)) - : ((request.status = 13), (request.fatalError = error)); -} -function finishSuspenseListRow(request, row) { - unblockSuspenseListRow(request, row.next, row.hoistables); -} -function unblockSuspenseListRow(request, unblockedRow, inheritedHoistables) { - for (; null !== unblockedRow; ) { - null !== inheritedHoistables && - (hoistHoistables(unblockedRow.hoistables, inheritedHoistables), - (unblockedRow.inheritedHoistables = inheritedHoistables)); - var unblockedBoundaries = unblockedRow.boundaries; - if (null !== unblockedBoundaries) { - unblockedRow.boundaries = null; - for (var i = 0; i < unblockedBoundaries.length; i++) { - var unblockedBoundary = unblockedBoundaries[i]; - null !== inheritedHoistables && - hoistHoistables(unblockedBoundary.contentState, inheritedHoistables); - finishedTask(request, unblockedBoundary, null, null); - } - } - unblockedRow.pendingTasks--; - if (0 < unblockedRow.pendingTasks) break; - inheritedHoistables = unblockedRow.hoistables; - unblockedRow = unblockedRow.next; - } -} -function tryToResolveTogetherRow(request, togetherRow) { - var boundaries = togetherRow.boundaries; - if (null !== boundaries && togetherRow.pendingTasks === boundaries.length) { - for (var allCompleteAndInlinable = !0, i = 0; i < boundaries.length; i++) { - var rowBoundary = boundaries[i]; - if ( - 1 !== rowBoundary.pendingTasks || - rowBoundary.parentFlushed || - isEligibleForOutlining(request, rowBoundary) - ) { - allCompleteAndInlinable = !1; - break; - } - } - allCompleteAndInlinable && - unblockSuspenseListRow(request, togetherRow, togetherRow.hoistables); - } -} -function createSuspenseListRow(previousRow) { - var newRow = { - pendingTasks: 1, - boundaries: null, - hoistables: createHoistableState(), - inheritedHoistables: null, - together: !1, - next: null - }; - null !== previousRow && - 0 < previousRow.pendingTasks && - (newRow.pendingTasks++, - (newRow.boundaries = []), - (previousRow.next = newRow)); - return newRow; -} -function renderSuspenseListRows(request, task, keyPath, rows, revealOrder) { - var prevKeyPath = task.keyPath, - prevTreeContext = task.treeContext, - prevRow = task.row; - task.keyPath = keyPath; - keyPath = rows.length; - var previousSuspenseListRow = null; - if (null !== task.replay) { - var resumeSlots = task.replay.slots; - if (null !== resumeSlots && "object" === typeof resumeSlots) - for (var n = 0; n < keyPath; n++) { - var i = - "backwards" !== revealOrder && - "unstable_legacy-backwards" !== revealOrder - ? n - : keyPath - 1 - n, - node = rows[i]; - task.row = previousSuspenseListRow = createSuspenseListRow( - previousSuspenseListRow - ); - task.treeContext = pushTreeContext(prevTreeContext, keyPath, i); - var resumeSegmentID = resumeSlots[i]; - "number" === typeof resumeSegmentID - ? (resumeNode(request, task, resumeSegmentID, node, i), - delete resumeSlots[i]) - : renderNode(request, task, node, i); - 0 === --previousSuspenseListRow.pendingTasks && - finishSuspenseListRow(request, previousSuspenseListRow); - } - else - for (resumeSlots = 0; resumeSlots < keyPath; resumeSlots++) - (n = - "backwards" !== revealOrder && - "unstable_legacy-backwards" !== revealOrder - ? resumeSlots - : keyPath - 1 - resumeSlots), - (i = rows[n]), - (task.row = previousSuspenseListRow = - createSuspenseListRow(previousSuspenseListRow)), - (task.treeContext = pushTreeContext(prevTreeContext, keyPath, n)), - renderNode(request, task, i, n), - 0 === --previousSuspenseListRow.pendingTasks && - finishSuspenseListRow(request, previousSuspenseListRow); - } else if ( - "backwards" !== revealOrder && - "unstable_legacy-backwards" !== revealOrder - ) - for (revealOrder = 0; revealOrder < keyPath; revealOrder++) - (resumeSlots = rows[revealOrder]), - (task.row = previousSuspenseListRow = - createSuspenseListRow(previousSuspenseListRow)), - (task.treeContext = pushTreeContext( - prevTreeContext, - keyPath, - revealOrder - )), - renderNode(request, task, resumeSlots, revealOrder), - 0 === --previousSuspenseListRow.pendingTasks && - finishSuspenseListRow(request, previousSuspenseListRow); - else { - revealOrder = task.blockedSegment; - resumeSlots = revealOrder.children.length; - n = revealOrder.chunks.length; - for (i = keyPath - 1; 0 <= i; i--) { - node = rows[i]; - task.row = previousSuspenseListRow = createSuspenseListRow( - previousSuspenseListRow - ); - task.treeContext = pushTreeContext(prevTreeContext, keyPath, i); - resumeSegmentID = createPendingSegment( - request, - n, - null, - task.formatContext, - 0 === i ? revealOrder.lastPushedText : !0, - !0 - ); - revealOrder.children.splice(resumeSlots, 0, resumeSegmentID); - task.blockedSegment = resumeSegmentID; - try { - renderNode(request, task, node, i), - pushSegmentFinale( - resumeSegmentID.chunks, - request.renderState, - resumeSegmentID.lastPushedText, - resumeSegmentID.textEmbedded - ), - (resumeSegmentID.status = 1), - 0 === --previousSuspenseListRow.pendingTasks && - finishSuspenseListRow(request, previousSuspenseListRow); - } catch (thrownValue) { - throw ( - ((resumeSegmentID.status = 12 === request.status ? 3 : 4), - thrownValue) - ); - } - } - task.blockedSegment = revealOrder; - revealOrder.lastPushedText = !1; - } - null !== prevRow && - null !== previousSuspenseListRow && - 0 < previousSuspenseListRow.pendingTasks && - (prevRow.pendingTasks++, (previousSuspenseListRow.next = prevRow)); - task.treeContext = prevTreeContext; - task.row = prevRow; - task.keyPath = prevKeyPath; -} -function renderWithHooks(request, task, keyPath, Component, props, secondArg) { - var prevThenableState = task.thenableState; - task.thenableState = null; - currentlyRenderingComponent = {}; - currentlyRenderingTask = task; - currentlyRenderingRequest = request; - currentlyRenderingKeyPath = keyPath; - actionStateCounter = localIdCounter = 0; - actionStateMatchingIndex = -1; - thenableIndexCounter = 0; - thenableState = prevThenableState; - for (request = Component(props, secondArg); didScheduleRenderPhaseUpdate; ) - (didScheduleRenderPhaseUpdate = !1), - (actionStateCounter = localIdCounter = 0), - (actionStateMatchingIndex = -1), - (thenableIndexCounter = 0), - (numberOfReRenders += 1), - (workInProgressHook = null), - (request = Component(props, secondArg)); - resetHooksState(); - return request; -} -function finishFunctionComponent( - request, - task, - keyPath, - children, - hasId, - actionStateCount, - actionStateMatchingIndex -) { - var didEmitActionStateMarkers = !1; - if (0 !== actionStateCount && null !== request.formState) { - var segment = task.blockedSegment; - if (null !== segment) { - didEmitActionStateMarkers = !0; - segment = segment.chunks; - for (var i = 0; i < actionStateCount; i++) - i === actionStateMatchingIndex - ? segment.push("\x3c!--F!--\x3e") - : segment.push("\x3c!--F--\x3e"); - } - } - actionStateCount = task.keyPath; - task.keyPath = keyPath; - hasId - ? ((keyPath = task.treeContext), - (task.treeContext = pushTreeContext(keyPath, 1, 0)), - renderNode(request, task, children, -1), - (task.treeContext = keyPath)) - : didEmitActionStateMarkers - ? renderNode(request, task, children, -1) - : renderNodeDestructive(request, task, children, -1); - task.keyPath = actionStateCount; -} -function renderElement(request, task, keyPath, type, props, ref) { - if ("function" === typeof type) - if (type.prototype && type.prototype.isReactComponent) { - var newProps = props; - if ("ref" in props) { - newProps = {}; - for (var propName in props) - "ref" !== propName && (newProps[propName] = props[propName]); - } - var defaultProps = type.defaultProps; - if (defaultProps) { - newProps === props && (newProps = assign({}, newProps, props)); - for (var propName$43 in defaultProps) - void 0 === newProps[propName$43] && - (newProps[propName$43] = defaultProps[propName$43]); - } - props = newProps; - newProps = emptyContextObject; - defaultProps = type.contextType; - "object" === typeof defaultProps && - null !== defaultProps && - (newProps = defaultProps._currentValue2); - newProps = new type(props, newProps); - var initialState = void 0 !== newProps.state ? newProps.state : null; - newProps.updater = classComponentUpdater; - newProps.props = props; - newProps.state = initialState; - defaultProps = { queue: [], replace: !1 }; - newProps._reactInternals = defaultProps; - ref = type.contextType; - newProps.context = - "object" === typeof ref && null !== ref - ? ref._currentValue2 - : emptyContextObject; - ref = type.getDerivedStateFromProps; - "function" === typeof ref && - ((ref = ref(props, initialState)), - (initialState = - null === ref || void 0 === ref - ? initialState - : assign({}, initialState, ref)), - (newProps.state = initialState)); - if ( - "function" !== typeof type.getDerivedStateFromProps && - "function" !== typeof newProps.getSnapshotBeforeUpdate && - ("function" === typeof newProps.UNSAFE_componentWillMount || - "function" === typeof newProps.componentWillMount) - ) - if ( - ((type = newProps.state), - "function" === typeof newProps.componentWillMount && - newProps.componentWillMount(), - "function" === typeof newProps.UNSAFE_componentWillMount && - newProps.UNSAFE_componentWillMount(), - type !== newProps.state && - classComponentUpdater.enqueueReplaceState( - newProps, - newProps.state, - null - ), - null !== defaultProps.queue && 0 < defaultProps.queue.length) - ) - if ( - ((type = defaultProps.queue), - (ref = defaultProps.replace), - (defaultProps.queue = null), - (defaultProps.replace = !1), - ref && 1 === type.length) - ) - newProps.state = type[0]; - else { - defaultProps = ref ? type[0] : newProps.state; - initialState = !0; - for (ref = ref ? 1 : 0; ref < type.length; ref++) - (propName$43 = type[ref]), - (propName$43 = - "function" === typeof propName$43 - ? propName$43.call(newProps, defaultProps, props, void 0) - : propName$43), - null != propName$43 && - (initialState - ? ((initialState = !1), - (defaultProps = assign({}, defaultProps, propName$43))) - : assign(defaultProps, propName$43)); - newProps.state = defaultProps; - } - else defaultProps.queue = null; - type = newProps.render(); - if (12 === request.status) throw null; - props = task.keyPath; - task.keyPath = keyPath; - renderNodeDestructive(request, task, type, -1); - task.keyPath = props; - } else { - type = renderWithHooks(request, task, keyPath, type, props, void 0); - if (12 === request.status) throw null; - finishFunctionComponent( - request, - task, - keyPath, - type, - 0 !== localIdCounter, - actionStateCounter, - actionStateMatchingIndex - ); - } - else if ("string" === typeof type) - if (((newProps = task.blockedSegment), null === newProps)) - (newProps = props.children), - (defaultProps = task.formatContext), - (initialState = task.keyPath), - (task.formatContext = getChildFormatContext(defaultProps, type, props)), - (task.keyPath = keyPath), - renderNode(request, task, newProps, -1), - (task.formatContext = defaultProps), - (task.keyPath = initialState); - else { - initialState = pushStartInstance( - newProps.chunks, - type, - props, - request.resumableState, - request.renderState, - task.blockedPreamble, - task.hoistableState, - task.formatContext, - newProps.lastPushedText - ); - newProps.lastPushedText = !1; - defaultProps = task.formatContext; - ref = task.keyPath; - task.keyPath = keyPath; - if ( - 3 === - (task.formatContext = getChildFormatContext(defaultProps, type, props)) - .insertionMode - ) { - keyPath = createPendingSegment( - request, - 0, - null, - task.formatContext, - !1, - !1 - ); - newProps.preambleChildren.push(keyPath); - task.blockedSegment = keyPath; - try { - (keyPath.status = 6), - renderNode(request, task, initialState, -1), - pushSegmentFinale( - keyPath.chunks, - request.renderState, - keyPath.lastPushedText, - keyPath.textEmbedded - ), - (keyPath.status = 1); - } finally { - task.blockedSegment = newProps; - } - } else renderNode(request, task, initialState, -1); - task.formatContext = defaultProps; - task.keyPath = ref; - a: { - task = newProps.chunks; - request = request.resumableState; - switch (type) { - case "title": - case "style": - case "script": - case "area": - case "base": - case "br": - case "col": - case "embed": - case "hr": - case "img": - case "input": - case "keygen": - case "link": - case "meta": - case "param": - case "source": - case "track": - case "wbr": - break a; - case "body": - if (1 >= defaultProps.insertionMode) { - request.hasBody = !0; - break a; - } - break; - case "html": - if (0 === defaultProps.insertionMode) { - request.hasHtml = !0; - break a; - } - break; - case "head": - if (1 >= defaultProps.insertionMode) break a; - } - task.push(endChunkForTag(type)); - } - newProps.lastPushedText = !1; - } - else { - switch (type) { - case REACT_LEGACY_HIDDEN_TYPE: - case REACT_STRICT_MODE_TYPE: - case REACT_PROFILER_TYPE: - case REACT_FRAGMENT_TYPE: - type = task.keyPath; - task.keyPath = keyPath; - renderNodeDestructive(request, task, props.children, -1); - task.keyPath = type; - return; - case REACT_ACTIVITY_TYPE: - type = task.blockedSegment; - null === type - ? "hidden" !== props.mode && - ((type = task.keyPath), - (task.keyPath = keyPath), - renderNode(request, task, props.children, -1), - (task.keyPath = type)) - : "hidden" !== props.mode && - (request.renderState.generateStaticMarkup || - type.chunks.push("\x3c!--&--\x3e"), - (type.lastPushedText = !1), - (newProps = task.keyPath), - (task.keyPath = keyPath), - renderNode(request, task, props.children, -1), - (task.keyPath = newProps), - request.renderState.generateStaticMarkup || - type.chunks.push("\x3c!--/&--\x3e"), - (type.lastPushedText = !1)); - return; - case REACT_SUSPENSE_LIST_TYPE: - a: { - type = props.children; - props = props.revealOrder; - if ( - "forwards" === props || - "backwards" === props || - "unstable_legacy-backwards" === props - ) { - if (isArrayImpl(type)) { - renderSuspenseListRows(request, task, keyPath, type, props); - break a; - } - if ((newProps = getIteratorFn(type))) - if ((newProps = newProps.call(type))) { - defaultProps = newProps.next(); - if (!defaultProps.done) { - do defaultProps = newProps.next(); - while (!defaultProps.done); - renderSuspenseListRows(request, task, keyPath, type, props); - } - break a; - } - } - "together" === props - ? ((props = task.keyPath), - (newProps = task.row), - (defaultProps = task.row = createSuspenseListRow(null)), - (defaultProps.boundaries = []), - (defaultProps.together = !0), - (task.keyPath = keyPath), - renderNodeDestructive(request, task, type, -1), - 0 === --defaultProps.pendingTasks && - finishSuspenseListRow(request, defaultProps), - (task.keyPath = props), - (task.row = newProps), - null !== newProps && - 0 < defaultProps.pendingTasks && - (newProps.pendingTasks++, (defaultProps.next = newProps))) - : ((props = task.keyPath), - (task.keyPath = keyPath), - renderNodeDestructive(request, task, type, -1), - (task.keyPath = props)); - } - return; - case REACT_VIEW_TRANSITION_TYPE: - case REACT_SCOPE_TYPE: - throw Error("ReactDOMServer does not yet support scope components."); - case REACT_SUSPENSE_TYPE: - a: if (null !== task.replay) { - type = task.keyPath; - newProps = task.formatContext; - defaultProps = task.row; - task.keyPath = keyPath; - task.formatContext = getSuspenseContentFormatContext( - request.resumableState, - newProps - ); - task.row = null; - keyPath = props.children; - try { - renderNode(request, task, keyPath, -1); - } finally { - (task.keyPath = type), - (task.formatContext = newProps), - (task.row = defaultProps); - } - } else { - type = task.keyPath; - ref = task.formatContext; - var prevRow = task.row, - parentBoundary = task.blockedBoundary; - propName$43 = task.blockedPreamble; - var parentHoistableState = task.hoistableState; - propName = task.blockedSegment; - var fallback = props.fallback; - props = props.children; - var fallbackAbortSet = new Set(); - var newBoundary = createSuspenseBoundary( - request, - task.row, - fallbackAbortSet, - null, - null - ); - null !== request.trackedPostpones && - (newBoundary.trackedContentKeyPath = keyPath); - var boundarySegment = createPendingSegment( - request, - propName.chunks.length, - newBoundary, - task.formatContext, - !1, - !1 - ); - propName.children.push(boundarySegment); - propName.lastPushedText = !1; - var contentRootSegment = createPendingSegment( - request, - 0, - null, - task.formatContext, - !1, - !1 - ); - contentRootSegment.parentFlushed = !0; - if (null !== request.trackedPostpones) { - newProps = task.componentStack; - defaultProps = [keyPath[0], "Suspense Fallback", keyPath[2]]; - initialState = [defaultProps[1], defaultProps[2], [], null]; - request.trackedPostpones.workingMap.set(defaultProps, initialState); - newBoundary.trackedFallbackNode = initialState; - task.blockedSegment = boundarySegment; - task.blockedPreamble = newBoundary.fallbackPreamble; - task.keyPath = defaultProps; - task.formatContext = getSuspenseFallbackFormatContext( - request.resumableState, - ref - ); - task.componentStack = - replaceSuspenseComponentStackWithSuspenseFallbackStack(newProps); - boundarySegment.status = 6; - try { - renderNode(request, task, fallback, -1), - pushSegmentFinale( - boundarySegment.chunks, - request.renderState, - boundarySegment.lastPushedText, - boundarySegment.textEmbedded - ), - (boundarySegment.status = 1); - } catch (thrownValue) { - throw ( - ((boundarySegment.status = 12 === request.status ? 3 : 4), - thrownValue) - ); - } finally { - (task.blockedSegment = propName), - (task.blockedPreamble = propName$43), - (task.keyPath = type), - (task.formatContext = ref); - } - task = createRenderTask( - request, - null, - props, - -1, - newBoundary, - contentRootSegment, - newBoundary.contentPreamble, - newBoundary.contentState, - task.abortSet, - keyPath, - getSuspenseContentFormatContext( - request.resumableState, - task.formatContext - ), - task.context, - task.treeContext, - null, - newProps - ); - pushComponentStack(task); - request.pingedTasks.push(task); - } else { - task.blockedBoundary = newBoundary; - task.blockedPreamble = newBoundary.contentPreamble; - task.hoistableState = newBoundary.contentState; - task.blockedSegment = contentRootSegment; - task.keyPath = keyPath; - task.formatContext = getSuspenseContentFormatContext( - request.resumableState, - ref - ); - task.row = null; - contentRootSegment.status = 6; - try { - if ( - (renderNode(request, task, props, -1), - pushSegmentFinale( - contentRootSegment.chunks, - request.renderState, - contentRootSegment.lastPushedText, - contentRootSegment.textEmbedded - ), - (contentRootSegment.status = 1), - queueCompletedSegment(newBoundary, contentRootSegment), - 0 === newBoundary.pendingTasks && 0 === newBoundary.status) - ) { - if ( - ((newBoundary.status = 1), - !isEligibleForOutlining(request, newBoundary)) - ) { - null !== prevRow && - 0 === --prevRow.pendingTasks && - finishSuspenseListRow(request, prevRow); - 0 === request.pendingRootTasks && - task.blockedPreamble && - preparePreamble(request); - break a; - } - } else - null !== prevRow && - prevRow.together && - tryToResolveTogetherRow(request, prevRow); - } catch (thrownValue$30) { - (newBoundary.status = 4), - 12 === request.status - ? ((contentRootSegment.status = 3), - (newProps = request.fatalError)) - : ((contentRootSegment.status = 4), - (newProps = thrownValue$30)), - (defaultProps = getThrownInfo(task.componentStack)), - (initialState = logRecoverableError( - request, - newProps, - defaultProps - )), - (newBoundary.errorDigest = initialState), - untrackBoundary(request, newBoundary); - } finally { - (task.blockedBoundary = parentBoundary), - (task.blockedPreamble = propName$43), - (task.hoistableState = parentHoistableState), - (task.blockedSegment = propName), - (task.keyPath = type), - (task.formatContext = ref), - (task.row = prevRow); - } - task = createRenderTask( - request, - null, - fallback, - -1, - parentBoundary, - boundarySegment, - newBoundary.fallbackPreamble, - newBoundary.fallbackState, - fallbackAbortSet, - [keyPath[0], "Suspense Fallback", keyPath[2]], - getSuspenseFallbackFormatContext( - request.resumableState, - task.formatContext - ), - task.context, - task.treeContext, - task.row, - replaceSuspenseComponentStackWithSuspenseFallbackStack( - task.componentStack - ) - ); - pushComponentStack(task); - request.pingedTasks.push(task); - } - } - return; - } - if ("object" === typeof type && null !== type) - switch (type.$$typeof) { - case REACT_FORWARD_REF_TYPE: - if ("ref" in props) - for (fallback in ((newProps = {}), props)) - "ref" !== fallback && (newProps[fallback] = props[fallback]); - else newProps = props; - type = renderWithHooks( - request, - task, - keyPath, - type.render, - newProps, - ref - ); - finishFunctionComponent( - request, - task, - keyPath, - type, - 0 !== localIdCounter, - actionStateCounter, - actionStateMatchingIndex - ); - return; - case REACT_MEMO_TYPE: - renderElement(request, task, keyPath, type.type, props, ref); - return; - case REACT_CONTEXT_TYPE: - defaultProps = props.children; - newProps = task.keyPath; - props = props.value; - initialState = type._currentValue2; - type._currentValue2 = props; - ref = currentActiveSnapshot; - currentActiveSnapshot = type = { - parent: ref, - depth: null === ref ? 0 : ref.depth + 1, - context: type, - parentValue: initialState, - value: props - }; - task.context = type; - task.keyPath = keyPath; - renderNodeDestructive(request, task, defaultProps, -1); - request = currentActiveSnapshot; - if (null === request) - throw Error( - "Tried to pop a Context at the root of the app. This is a bug in React." - ); - request.context._currentValue2 = request.parentValue; - request = currentActiveSnapshot = request.parent; - task.context = request; - task.keyPath = newProps; - return; - case REACT_CONSUMER_TYPE: - props = props.children; - type = props(type._context._currentValue2); - props = task.keyPath; - task.keyPath = keyPath; - renderNodeDestructive(request, task, type, -1); - task.keyPath = props; - return; - case REACT_LAZY_TYPE: - newProps = type._init; - type = newProps(type._payload); - if (12 === request.status) throw null; - renderElement(request, task, keyPath, type, props, ref); - return; - } - throw Error( - "Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: " + - ((null == type ? type : typeof type) + ".") - ); - } -} -function resumeNode(request, task, segmentId, node, childIndex) { - var prevReplay = task.replay, - blockedBoundary = task.blockedBoundary, - resumedSegment = createPendingSegment( - request, - 0, - null, - task.formatContext, - !1, - !1 - ); - resumedSegment.id = segmentId; - resumedSegment.parentFlushed = !0; - try { - (task.replay = null), - (task.blockedSegment = resumedSegment), - renderNode(request, task, node, childIndex), - (resumedSegment.status = 1), - null === blockedBoundary - ? (request.completedRootSegment = resumedSegment) - : (queueCompletedSegment(blockedBoundary, resumedSegment), - blockedBoundary.parentFlushed && - request.partialBoundaries.push(blockedBoundary)); - } finally { - (task.replay = prevReplay), (task.blockedSegment = null); - } -} -function renderNodeDestructive(request, task, node, childIndex) { - null !== task.replay && "number" === typeof task.replay.slots - ? resumeNode(request, task, task.replay.slots, node, childIndex) - : ((task.node = node), - (task.childIndex = childIndex), - (node = task.componentStack), - pushComponentStack(task), - retryNode(request, task), - (task.componentStack = node)); -} -function retryNode(request, task) { - var node = task.node, - childIndex = task.childIndex; - if (null !== node) { - if ("object" === typeof node) { - switch (node.$$typeof) { - case REACT_ELEMENT_TYPE: - var type = node.type, - key = node.key, - props = node.props; - node = props.ref; - var ref = void 0 !== node ? node : null, - name = getComponentNameFromType(type), - keyOrIndex = - null == key ? (-1 === childIndex ? 0 : childIndex) : key; - key = [task.keyPath, name, keyOrIndex]; - if (null !== task.replay) - a: { - var replay = task.replay; - childIndex = replay.nodes; - for (node = 0; node < childIndex.length; node++) { - var node$jscomp$0 = childIndex[node]; - if (keyOrIndex === node$jscomp$0[1]) { - if (4 === node$jscomp$0.length) { - if (null !== name && name !== node$jscomp$0[0]) - throw Error( - "Expected the resume to render <" + - node$jscomp$0[0] + - "> in this slot but instead it rendered <" + - name + - ">. The tree doesn't match so React will fallback to client rendering." - ); - var childNodes = node$jscomp$0[2]; - name = node$jscomp$0[3]; - keyOrIndex = task.node; - task.replay = { - nodes: childNodes, - slots: name, - pendingTasks: 1 - }; - try { - renderElement(request, task, key, type, props, ref); - if ( - 1 === task.replay.pendingTasks && - 0 < task.replay.nodes.length - ) - throw Error( - "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering." - ); - task.replay.pendingTasks--; - } catch (x) { - if ( - "object" === typeof x && - null !== x && - (x === SuspenseException || - "function" === typeof x.then) - ) - throw ( - (task.node === keyOrIndex - ? (task.replay = replay) - : childIndex.splice(node, 1), - x) - ); - task.replay.pendingTasks--; - props = getThrownInfo(task.componentStack); - key = request; - request = task.blockedBoundary; - type = x; - props = logRecoverableError(key, type, props); - abortRemainingReplayNodes( - key, - request, - childNodes, - name, - type, - props - ); - } - task.replay = replay; - } else { - if (type !== REACT_SUSPENSE_TYPE) - throw Error( - "Expected the resume to render <Suspense> in this slot but instead it rendered <" + - (getComponentNameFromType(type) || "Unknown") + - ">. The tree doesn't match so React will fallback to client rendering." - ); - b: { - replay = void 0; - type = node$jscomp$0[5]; - ref = node$jscomp$0[2]; - name = node$jscomp$0[3]; - keyOrIndex = - null === node$jscomp$0[4] ? [] : node$jscomp$0[4][2]; - node$jscomp$0 = - null === node$jscomp$0[4] ? null : node$jscomp$0[4][3]; - var prevKeyPath = task.keyPath, - prevContext = task.formatContext, - prevRow = task.row, - previousReplaySet = task.replay, - parentBoundary = task.blockedBoundary, - parentHoistableState = task.hoistableState, - content = props.children, - fallback = props.fallback, - fallbackAbortSet = new Set(); - props = createSuspenseBoundary( - request, - task.row, - fallbackAbortSet, - null, - null - ); - props.parentFlushed = !0; - props.rootSegmentID = type; - task.blockedBoundary = props; - task.hoistableState = props.contentState; - task.keyPath = key; - task.formatContext = getSuspenseContentFormatContext( - request.resumableState, - prevContext - ); - task.row = null; - task.replay = { - nodes: ref, - slots: name, - pendingTasks: 1 - }; - try { - renderNode(request, task, content, -1); - if ( - 1 === task.replay.pendingTasks && - 0 < task.replay.nodes.length - ) - throw Error( - "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering." - ); - task.replay.pendingTasks--; - if (0 === props.pendingTasks && 0 === props.status) { - props.status = 1; - request.completedBoundaries.push(props); - break b; - } - } catch (error) { - (props.status = 4), - (childNodes = getThrownInfo(task.componentStack)), - (replay = logRecoverableError( - request, - error, - childNodes - )), - (props.errorDigest = replay), - task.replay.pendingTasks--, - request.clientRenderedBoundaries.push(props); - } finally { - (task.blockedBoundary = parentBoundary), - (task.hoistableState = parentHoistableState), - (task.replay = previousReplaySet), - (task.keyPath = prevKeyPath), - (task.formatContext = prevContext), - (task.row = prevRow); - } - childNodes = createReplayTask( - request, - null, - { - nodes: keyOrIndex, - slots: node$jscomp$0, - pendingTasks: 0 - }, - fallback, - -1, - parentBoundary, - props.fallbackState, - fallbackAbortSet, - [key[0], "Suspense Fallback", key[2]], - getSuspenseFallbackFormatContext( - request.resumableState, - task.formatContext - ), - task.context, - task.treeContext, - task.row, - replaceSuspenseComponentStackWithSuspenseFallbackStack( - task.componentStack - ) - ); - pushComponentStack(childNodes); - request.pingedTasks.push(childNodes); - } - } - childIndex.splice(node, 1); - break a; - } - } - } - else renderElement(request, task, key, type, props, ref); - return; - case REACT_PORTAL_TYPE: - throw Error( - "Portals are not currently supported by the server renderer. Render them conditionally so that they only appear on the client render." - ); - case REACT_LAZY_TYPE: - childNodes = node._init; - node = childNodes(node._payload); - if (12 === request.status) throw null; - renderNodeDestructive(request, task, node, childIndex); - return; - } - if (isArrayImpl(node)) { - renderChildrenArray(request, task, node, childIndex); - return; - } - if ((childNodes = getIteratorFn(node))) - if ((childNodes = childNodes.call(node))) { - node = childNodes.next(); - if (!node.done) { - props = []; - do props.push(node.value), (node = childNodes.next()); - while (!node.done); - renderChildrenArray(request, task, props, childIndex); - } - return; - } - if ("function" === typeof node.then) - return ( - (task.thenableState = null), - renderNodeDestructive(request, task, unwrapThenable(node), childIndex) - ); - if (node.$$typeof === REACT_CONTEXT_TYPE) - return renderNodeDestructive( - request, - task, - node._currentValue2, - childIndex - ); - childIndex = Object.prototype.toString.call(node); - throw Error( - "Objects are not valid as a React child (found: " + - ("[object Object]" === childIndex - ? "object with keys {" + Object.keys(node).join(", ") + "}" - : childIndex) + - "). If you meant to render a collection of children, use an array instead." - ); - } - if ("string" === typeof node) - (childIndex = task.blockedSegment), - null !== childIndex && - (childIndex.lastPushedText = pushTextInstance( - childIndex.chunks, - node, - request.renderState, - childIndex.lastPushedText - )); - else if ("number" === typeof node || "bigint" === typeof node) - (childIndex = task.blockedSegment), - null !== childIndex && - (childIndex.lastPushedText = pushTextInstance( - childIndex.chunks, - "" + node, - request.renderState, - childIndex.lastPushedText - )); - } -} -function renderChildrenArray(request, task, children, childIndex) { - var prevKeyPath = task.keyPath; - if ( - -1 !== childIndex && - ((task.keyPath = [task.keyPath, "Fragment", childIndex]), - null !== task.replay) - ) { - for ( - var replay = task.replay, replayNodes = replay.nodes, j = 0; - j < replayNodes.length; - j++ - ) { - var node = replayNodes[j]; - if (node[1] === childIndex) { - childIndex = node[2]; - node = node[3]; - task.replay = { nodes: childIndex, slots: node, pendingTasks: 1 }; - try { - renderChildrenArray(request, task, children, -1); - if (1 === task.replay.pendingTasks && 0 < task.replay.nodes.length) - throw Error( - "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering." - ); - task.replay.pendingTasks--; - } catch (x) { - if ( - "object" === typeof x && - null !== x && - (x === SuspenseException || "function" === typeof x.then) - ) - throw x; - task.replay.pendingTasks--; - children = getThrownInfo(task.componentStack); - var boundary = task.blockedBoundary, - error = x; - children = logRecoverableError(request, error, children); - abortRemainingReplayNodes( - request, - boundary, - childIndex, - node, - error, - children - ); - } - task.replay = replay; - replayNodes.splice(j, 1); - break; - } - } - task.keyPath = prevKeyPath; - return; - } - replay = task.treeContext; - replayNodes = children.length; - if ( - null !== task.replay && - ((j = task.replay.slots), null !== j && "object" === typeof j) - ) { - for (childIndex = 0; childIndex < replayNodes; childIndex++) - (node = children[childIndex]), - (task.treeContext = pushTreeContext(replay, replayNodes, childIndex)), - (boundary = j[childIndex]), - "number" === typeof boundary - ? (resumeNode(request, task, boundary, node, childIndex), - delete j[childIndex]) - : renderNode(request, task, node, childIndex); - task.treeContext = replay; - task.keyPath = prevKeyPath; - return; - } - for (j = 0; j < replayNodes; j++) - (childIndex = children[j]), - (task.treeContext = pushTreeContext(replay, replayNodes, j)), - renderNode(request, task, childIndex, j); - task.treeContext = replay; - task.keyPath = prevKeyPath; -} -function trackPostponedBoundary(request, trackedPostpones, boundary) { - boundary.status = 5; - boundary.rootSegmentID = request.nextSegmentId++; - request = boundary.trackedContentKeyPath; - if (null === request) - throw Error( - "It should not be possible to postpone at the root. This is a bug in React." - ); - var fallbackReplayNode = boundary.trackedFallbackNode, - children = [], - boundaryNode = trackedPostpones.workingMap.get(request); - if (void 0 === boundaryNode) - return ( - (boundary = [ - request[1], - request[2], - children, - null, - fallbackReplayNode, - boundary.rootSegmentID - ]), - trackedPostpones.workingMap.set(request, boundary), - addToReplayParent(boundary, request[0], trackedPostpones), - boundary - ); - boundaryNode[4] = fallbackReplayNode; - boundaryNode[5] = boundary.rootSegmentID; - return boundaryNode; -} -function trackPostpone(request, trackedPostpones, task, segment) { - segment.status = 5; - var keyPath = task.keyPath, - boundary = task.blockedBoundary; - if (null === boundary) - (segment.id = request.nextSegmentId++), - (trackedPostpones.rootSlots = segment.id), - null !== request.completedRootSegment && - (request.completedRootSegment.status = 5); - else { - if (null !== boundary && 0 === boundary.status) { - var boundaryNode = trackPostponedBoundary( - request, - trackedPostpones, - boundary - ); - if ( - boundary.trackedContentKeyPath === keyPath && - -1 === task.childIndex - ) { - -1 === segment.id && - (segment.id = segment.parentFlushed - ? boundary.rootSegmentID - : request.nextSegmentId++); - boundaryNode[3] = segment.id; - return; - } - } - -1 === segment.id && - (segment.id = - segment.parentFlushed && null !== boundary - ? boundary.rootSegmentID - : request.nextSegmentId++); - if (-1 === task.childIndex) - null === keyPath - ? (trackedPostpones.rootSlots = segment.id) - : ((task = trackedPostpones.workingMap.get(keyPath)), - void 0 === task - ? ((task = [keyPath[1], keyPath[2], [], segment.id]), - addToReplayParent(task, keyPath[0], trackedPostpones)) - : (task[3] = segment.id)); - else { - if (null === keyPath) - if (((request = trackedPostpones.rootSlots), null === request)) - request = trackedPostpones.rootSlots = {}; - else { - if ("number" === typeof request) - throw Error( - "It should not be possible to postpone both at the root of an element as well as a slot below. This is a bug in React." - ); - } - else if ( - ((boundary = trackedPostpones.workingMap), - (boundaryNode = boundary.get(keyPath)), - void 0 === boundaryNode) - ) - (request = {}), - (boundaryNode = [keyPath[1], keyPath[2], [], request]), - boundary.set(keyPath, boundaryNode), - addToReplayParent(boundaryNode, keyPath[0], trackedPostpones); - else if (((request = boundaryNode[3]), null === request)) - request = boundaryNode[3] = {}; - else if ("number" === typeof request) - throw Error( - "It should not be possible to postpone both at the root of an element as well as a slot below. This is a bug in React." - ); - request[task.childIndex] = segment.id; - } - } -} -function untrackBoundary(request, boundary) { - request = request.trackedPostpones; - null !== request && - ((boundary = boundary.trackedContentKeyPath), - null !== boundary && - ((boundary = request.workingMap.get(boundary)), - void 0 !== boundary && - ((boundary.length = 4), (boundary[2] = []), (boundary[3] = null)))); -} -function spawnNewSuspendedReplayTask(request, task, thenableState) { - return createReplayTask( - request, - thenableState, - task.replay, - task.node, - task.childIndex, - task.blockedBoundary, - task.hoistableState, - task.abortSet, - task.keyPath, - task.formatContext, - task.context, - task.treeContext, - task.row, - task.componentStack - ); -} -function spawnNewSuspendedRenderTask(request, task, thenableState) { - var segment = task.blockedSegment, - newSegment = createPendingSegment( - request, - segment.chunks.length, - null, - task.formatContext, - segment.lastPushedText, - !0 - ); - segment.children.push(newSegment); - segment.lastPushedText = !1; - return createRenderTask( - request, - thenableState, - task.node, - task.childIndex, - task.blockedBoundary, - newSegment, - task.blockedPreamble, - task.hoistableState, - task.abortSet, - task.keyPath, - task.formatContext, - task.context, - task.treeContext, - task.row, - task.componentStack - ); -} -function renderNode(request, task, node, childIndex) { - var previousFormatContext = task.formatContext, - previousContext = task.context, - previousKeyPath = task.keyPath, - previousTreeContext = task.treeContext, - previousComponentStack = task.componentStack, - segment = task.blockedSegment; - if (null === segment) { - segment = task.replay; - try { - return renderNodeDestructive(request, task, node, childIndex); - } catch (thrownValue) { - if ( - (resetHooksState(), - (node = - thrownValue === SuspenseException - ? getSuspendedThenable() - : thrownValue), - 12 !== request.status && "object" === typeof node && null !== node) - ) { - if ("function" === typeof node.then) { - childIndex = - thrownValue === SuspenseException - ? getThenableStateAfterSuspending() - : null; - request = spawnNewSuspendedReplayTask(request, task, childIndex).ping; - node.then(request, request); - task.formatContext = previousFormatContext; - task.context = previousContext; - task.keyPath = previousKeyPath; - task.treeContext = previousTreeContext; - task.componentStack = previousComponentStack; - task.replay = segment; - switchContext(previousContext); - return; - } - if ("Maximum call stack size exceeded" === node.message) { - node = - thrownValue === SuspenseException - ? getThenableStateAfterSuspending() - : null; - node = spawnNewSuspendedReplayTask(request, task, node); - request.pingedTasks.push(node); - task.formatContext = previousFormatContext; - task.context = previousContext; - task.keyPath = previousKeyPath; - task.treeContext = previousTreeContext; - task.componentStack = previousComponentStack; - task.replay = segment; - switchContext(previousContext); - return; - } - } - } - } else { - var childrenLength = segment.children.length, - chunkLength = segment.chunks.length; - try { - return renderNodeDestructive(request, task, node, childIndex); - } catch (thrownValue$62) { - if ( - (resetHooksState(), - (segment.children.length = childrenLength), - (segment.chunks.length = chunkLength), - (node = - thrownValue$62 === SuspenseException - ? getSuspendedThenable() - : thrownValue$62), - 12 !== request.status && "object" === typeof node && null !== node) - ) { - if ("function" === typeof node.then) { - segment = node; - node = - thrownValue$62 === SuspenseException - ? getThenableStateAfterSuspending() - : null; - request = spawnNewSuspendedRenderTask(request, task, node).ping; - segment.then(request, request); - task.formatContext = previousFormatContext; - task.context = previousContext; - task.keyPath = previousKeyPath; - task.treeContext = previousTreeContext; - task.componentStack = previousComponentStack; - switchContext(previousContext); - return; - } - if ("Maximum call stack size exceeded" === node.message) { - segment = - thrownValue$62 === SuspenseException - ? getThenableStateAfterSuspending() - : null; - segment = spawnNewSuspendedRenderTask(request, task, segment); - request.pingedTasks.push(segment); - task.formatContext = previousFormatContext; - task.context = previousContext; - task.keyPath = previousKeyPath; - task.treeContext = previousTreeContext; - task.componentStack = previousComponentStack; - switchContext(previousContext); - return; - } - } - } - } - task.formatContext = previousFormatContext; - task.context = previousContext; - task.keyPath = previousKeyPath; - task.treeContext = previousTreeContext; - switchContext(previousContext); - throw node; -} -function abortTaskSoft(task) { - var boundary = task.blockedBoundary, - segment = task.blockedSegment; - null !== segment && - ((segment.status = 3), finishedTask(this, boundary, task.row, segment)); -} -function abortRemainingReplayNodes( - request$jscomp$0, - boundary, - nodes, - slots, - error, - errorDigest$jscomp$0 -) { - for (var i = 0; i < nodes.length; i++) { - var node = nodes[i]; - if (4 === node.length) - abortRemainingReplayNodes( - request$jscomp$0, - boundary, - node[2], - node[3], - error, - errorDigest$jscomp$0 - ); - else { - node = node[5]; - var request = request$jscomp$0, - errorDigest = errorDigest$jscomp$0, - resumedBoundary = createSuspenseBoundary( - request, - null, - new Set(), - null, - null - ); - resumedBoundary.parentFlushed = !0; - resumedBoundary.rootSegmentID = node; - resumedBoundary.status = 4; - resumedBoundary.errorDigest = errorDigest; - resumedBoundary.parentFlushed && - request.clientRenderedBoundaries.push(resumedBoundary); - } - } - nodes.length = 0; - if (null !== slots) { - if (null === boundary) - throw Error( - "We should not have any resumable nodes in the shell. This is a bug in React." - ); - 4 !== boundary.status && - ((boundary.status = 4), - (boundary.errorDigest = errorDigest$jscomp$0), - boundary.parentFlushed && - request$jscomp$0.clientRenderedBoundaries.push(boundary)); - if ("object" === typeof slots) for (var index in slots) delete slots[index]; - } -} -function abortTask(task, request, error) { - var boundary = task.blockedBoundary, - segment = task.blockedSegment; - if (null !== segment) { - if (6 === segment.status) return; - segment.status = 3; - } - var errorInfo = getThrownInfo(task.componentStack); - if (null === boundary) { - if (13 !== request.status && 14 !== request.status) { - boundary = task.replay; - if (null === boundary) { - null !== request.trackedPostpones && null !== segment - ? ((boundary = request.trackedPostpones), - logRecoverableError(request, error, errorInfo), - trackPostpone(request, boundary, task, segment), - finishedTask(request, null, task.row, segment)) - : (logRecoverableError(request, error, errorInfo), - fatalError(request, error)); - return; - } - boundary.pendingTasks--; - 0 === boundary.pendingTasks && - 0 < boundary.nodes.length && - ((segment = logRecoverableError(request, error, errorInfo)), - abortRemainingReplayNodes( - request, - null, - boundary.nodes, - boundary.slots, - error, - segment - )); - request.pendingRootTasks--; - 0 === request.pendingRootTasks && completeShell(request); - } - } else { - var trackedPostpones$63 = request.trackedPostpones; - if (4 !== boundary.status) { - if (null !== trackedPostpones$63 && null !== segment) - return ( - logRecoverableError(request, error, errorInfo), - trackPostpone(request, trackedPostpones$63, task, segment), - boundary.fallbackAbortableTasks.forEach(function (fallbackTask) { - return abortTask(fallbackTask, request, error); - }), - boundary.fallbackAbortableTasks.clear(), - finishedTask(request, boundary, task.row, segment) - ); - boundary.status = 4; - segment = logRecoverableError(request, error, errorInfo); - boundary.status = 4; - boundary.errorDigest = segment; - untrackBoundary(request, boundary); - boundary.parentFlushed && request.clientRenderedBoundaries.push(boundary); - } - boundary.pendingTasks--; - segment = boundary.row; - null !== segment && - 0 === --segment.pendingTasks && - finishSuspenseListRow(request, segment); - boundary.fallbackAbortableTasks.forEach(function (fallbackTask) { - return abortTask(fallbackTask, request, error); - }); - boundary.fallbackAbortableTasks.clear(); - } - task = task.row; - null !== task && - 0 === --task.pendingTasks && - finishSuspenseListRow(request, task); - request.allPendingTasks--; - 0 === request.allPendingTasks && completeAll(request); -} -function safelyEmitEarlyPreloads(request, shellComplete) { - try { - var renderState = request.renderState, - onHeaders = renderState.onHeaders; - if (onHeaders) { - var headers = renderState.headers; - if (headers) { - renderState.headers = null; - var linkHeader = headers.preconnects; - headers.fontPreloads && - (linkHeader && (linkHeader += ", "), - (linkHeader += headers.fontPreloads)); - headers.highImagePreloads && - (linkHeader && (linkHeader += ", "), - (linkHeader += headers.highImagePreloads)); - if (!shellComplete) { - var queueIter = renderState.styles.values(), - queueStep = queueIter.next(); - b: for ( - ; - 0 < headers.remainingCapacity && !queueStep.done; - queueStep = queueIter.next() - ) - for ( - var sheetIter = queueStep.value.sheets.values(), - sheetStep = sheetIter.next(); - 0 < headers.remainingCapacity && !sheetStep.done; - sheetStep = sheetIter.next() - ) { - var sheet = sheetStep.value, - props = sheet.props, - key = props.href, - props$jscomp$0 = sheet.props, - header = getPreloadAsHeader(props$jscomp$0.href, "style", { - crossOrigin: props$jscomp$0.crossOrigin, - integrity: props$jscomp$0.integrity, - nonce: props$jscomp$0.nonce, - type: props$jscomp$0.type, - fetchPriority: props$jscomp$0.fetchPriority, - referrerPolicy: props$jscomp$0.referrerPolicy, - media: props$jscomp$0.media - }); - if (0 <= (headers.remainingCapacity -= header.length + 2)) - (renderState.resets.style[key] = PRELOAD_NO_CREDS), - linkHeader && (linkHeader += ", "), - (linkHeader += header), - (renderState.resets.style[key] = - "string" === typeof props.crossOrigin || - "string" === typeof props.integrity - ? [props.crossOrigin, props.integrity] - : PRELOAD_NO_CREDS); - else break b; - } - } - linkHeader ? onHeaders({ Link: linkHeader }) : onHeaders({}); - } - } - } catch (error) { - logRecoverableError(request, error, {}); - } -} -function completeShell(request) { - null === request.trackedPostpones && safelyEmitEarlyPreloads(request, !0); - null === request.trackedPostpones && preparePreamble(request); - request.onShellError = noop; - request = request.onShellReady; - request(); -} -function completeAll(request) { - safelyEmitEarlyPreloads( - request, - null === request.trackedPostpones - ? !0 - : null === request.completedRootSegment || - 5 !== request.completedRootSegment.status - ); - preparePreamble(request); - request = request.onAllReady; - request(); -} -function queueCompletedSegment(boundary, segment) { - if ( - 0 === segment.chunks.length && - 1 === segment.children.length && - null === segment.children[0].boundary && - -1 === segment.children[0].id - ) { - var childSegment = segment.children[0]; - childSegment.id = segment.id; - childSegment.parentFlushed = !0; - (1 !== childSegment.status && - 3 !== childSegment.status && - 4 !== childSegment.status) || - queueCompletedSegment(boundary, childSegment); - } else boundary.completedSegments.push(segment); -} -function finishedTask(request, boundary, row, segment) { - null !== row && - (0 === --row.pendingTasks - ? finishSuspenseListRow(request, row) - : row.together && tryToResolveTogetherRow(request, row)); - request.allPendingTasks--; - if (null === boundary) { - if (null !== segment && segment.parentFlushed) { - if (null !== request.completedRootSegment) - throw Error( - "There can only be one root segment. This is a bug in React." - ); - request.completedRootSegment = segment; - } - request.pendingRootTasks--; - 0 === request.pendingRootTasks && completeShell(request); - } else if ((boundary.pendingTasks--, 4 !== boundary.status)) - if (0 === boundary.pendingTasks) - if ( - (0 === boundary.status && (boundary.status = 1), - null !== segment && - segment.parentFlushed && - (1 === segment.status || 3 === segment.status) && - queueCompletedSegment(boundary, segment), - boundary.parentFlushed && request.completedBoundaries.push(boundary), - 1 === boundary.status) - ) - (row = boundary.row), - null !== row && - hoistHoistables(row.hoistables, boundary.contentState), - isEligibleForOutlining(request, boundary) || - (boundary.fallbackAbortableTasks.forEach(abortTaskSoft, request), - boundary.fallbackAbortableTasks.clear(), - null !== row && - 0 === --row.pendingTasks && - finishSuspenseListRow(request, row)), - 0 === request.pendingRootTasks && - null === request.trackedPostpones && - null !== boundary.contentPreamble && - preparePreamble(request); - else { - if ( - 5 === boundary.status && - ((boundary = boundary.row), null !== boundary) - ) { - if (null !== request.trackedPostpones) { - row = request.trackedPostpones; - var postponedRow = boundary.next; - if ( - null !== postponedRow && - ((segment = postponedRow.boundaries), null !== segment) - ) - for ( - postponedRow.boundaries = null, postponedRow = 0; - postponedRow < segment.length; - postponedRow++ - ) { - var postponedBoundary = segment[postponedRow]; - trackPostponedBoundary(request, row, postponedBoundary); - finishedTask(request, postponedBoundary, null, null); - } - } - 0 === --boundary.pendingTasks && - finishSuspenseListRow(request, boundary); - } - } - else - null === segment || - !segment.parentFlushed || - (1 !== segment.status && 3 !== segment.status) || - (queueCompletedSegment(boundary, segment), - 1 === boundary.completedSegments.length && - boundary.parentFlushed && - request.partialBoundaries.push(boundary)), - (boundary = boundary.row), - null !== boundary && - boundary.together && - tryToResolveTogetherRow(request, boundary); - 0 === request.allPendingTasks && completeAll(request); -} -function performWork(request$jscomp$2) { - if (14 !== request$jscomp$2.status && 13 !== request$jscomp$2.status) { - var prevContext = currentActiveSnapshot, - prevDispatcher = ReactSharedInternals.H; - ReactSharedInternals.H = HooksDispatcher; - var prevAsyncDispatcher = ReactSharedInternals.A; - ReactSharedInternals.A = DefaultAsyncDispatcher; - var prevRequest = currentRequest; - currentRequest = request$jscomp$2; - var prevResumableState = currentResumableState; - currentResumableState = request$jscomp$2.resumableState; - try { - var pingedTasks = request$jscomp$2.pingedTasks, - i; - for (i = 0; i < pingedTasks.length; i++) { - var task = pingedTasks[i], - request = request$jscomp$2, - segment = task.blockedSegment; - if (null === segment) { - var request$jscomp$0 = request; - if (0 !== task.replay.pendingTasks) { - switchContext(task.context); - try { - "number" === typeof task.replay.slots - ? resumeNode( - request$jscomp$0, - task, - task.replay.slots, - task.node, - task.childIndex - ) - : retryNode(request$jscomp$0, task); - if ( - 1 === task.replay.pendingTasks && - 0 < task.replay.nodes.length - ) - throw Error( - "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering." - ); - task.replay.pendingTasks--; - task.abortSet.delete(task); - finishedTask( - request$jscomp$0, - task.blockedBoundary, - task.row, - null - ); - } catch (thrownValue) { - resetHooksState(); - var x = - thrownValue === SuspenseException - ? getSuspendedThenable() - : thrownValue; - if ( - "object" === typeof x && - null !== x && - "function" === typeof x.then - ) { - var ping = task.ping; - x.then(ping, ping); - task.thenableState = - thrownValue === SuspenseException - ? getThenableStateAfterSuspending() - : null; - } else { - task.replay.pendingTasks--; - task.abortSet.delete(task); - var errorInfo = getThrownInfo(task.componentStack); - request = void 0; - var request$jscomp$1 = request$jscomp$0, - boundary = task.blockedBoundary, - error$jscomp$0 = - 12 === request$jscomp$0.status - ? request$jscomp$0.fatalError - : x, - replayNodes = task.replay.nodes, - resumeSlots = task.replay.slots; - request = logRecoverableError( - request$jscomp$1, - error$jscomp$0, - errorInfo - ); - abortRemainingReplayNodes( - request$jscomp$1, - boundary, - replayNodes, - resumeSlots, - error$jscomp$0, - request - ); - request$jscomp$0.pendingRootTasks--; - 0 === request$jscomp$0.pendingRootTasks && - completeShell(request$jscomp$0); - request$jscomp$0.allPendingTasks--; - 0 === request$jscomp$0.allPendingTasks && - completeAll(request$jscomp$0); - } - } finally { - } - } - } else if ( - ((request$jscomp$0 = void 0), - (request$jscomp$1 = segment), - 0 === request$jscomp$1.status) - ) { - request$jscomp$1.status = 6; - switchContext(task.context); - var childrenLength = request$jscomp$1.children.length, - chunkLength = request$jscomp$1.chunks.length; - try { - retryNode(request, task), - pushSegmentFinale( - request$jscomp$1.chunks, - request.renderState, - request$jscomp$1.lastPushedText, - request$jscomp$1.textEmbedded - ), - task.abortSet.delete(task), - (request$jscomp$1.status = 1), - finishedTask( - request, - task.blockedBoundary, - task.row, - request$jscomp$1 - ); - } catch (thrownValue) { - resetHooksState(); - request$jscomp$1.children.length = childrenLength; - request$jscomp$1.chunks.length = chunkLength; - var x$jscomp$0 = - thrownValue === SuspenseException - ? getSuspendedThenable() - : 12 === request.status - ? request.fatalError - : thrownValue; - if (12 === request.status && null !== request.trackedPostpones) { - var trackedPostpones = request.trackedPostpones, - thrownInfo = getThrownInfo(task.componentStack); - task.abortSet.delete(task); - logRecoverableError(request, x$jscomp$0, thrownInfo); - trackPostpone(request, trackedPostpones, task, request$jscomp$1); - finishedTask( - request, - task.blockedBoundary, - task.row, - request$jscomp$1 - ); - } else if ( - "object" === typeof x$jscomp$0 && - null !== x$jscomp$0 && - "function" === typeof x$jscomp$0.then - ) { - request$jscomp$1.status = 0; - task.thenableState = - thrownValue === SuspenseException - ? getThenableStateAfterSuspending() - : null; - var ping$jscomp$0 = task.ping; - x$jscomp$0.then(ping$jscomp$0, ping$jscomp$0); - } else { - var errorInfo$jscomp$0 = getThrownInfo(task.componentStack); - task.abortSet.delete(task); - request$jscomp$1.status = 4; - var boundary$jscomp$0 = task.blockedBoundary, - row = task.row; - null !== row && - 0 === --row.pendingTasks && - finishSuspenseListRow(request, row); - request.allPendingTasks--; - request$jscomp$0 = logRecoverableError( - request, - x$jscomp$0, - errorInfo$jscomp$0 - ); - if (null === boundary$jscomp$0) fatalError(request, x$jscomp$0); - else if ( - (boundary$jscomp$0.pendingTasks--, - 4 !== boundary$jscomp$0.status) - ) { - boundary$jscomp$0.status = 4; - boundary$jscomp$0.errorDigest = request$jscomp$0; - untrackBoundary(request, boundary$jscomp$0); - var boundaryRow = boundary$jscomp$0.row; - null !== boundaryRow && - 0 === --boundaryRow.pendingTasks && - finishSuspenseListRow(request, boundaryRow); - boundary$jscomp$0.parentFlushed && - request.clientRenderedBoundaries.push(boundary$jscomp$0); - 0 === request.pendingRootTasks && - null === request.trackedPostpones && - null !== boundary$jscomp$0.contentPreamble && - preparePreamble(request); - } - 0 === request.allPendingTasks && completeAll(request); - } - } finally { - } - } - } - pingedTasks.splice(0, i); - null !== request$jscomp$2.destination && - flushCompletedQueues(request$jscomp$2, request$jscomp$2.destination); - } catch (error) { - logRecoverableError(request$jscomp$2, error, {}), - fatalError(request$jscomp$2, error); - } finally { - (currentResumableState = prevResumableState), - (ReactSharedInternals.H = prevDispatcher), - (ReactSharedInternals.A = prevAsyncDispatcher), - prevDispatcher === HooksDispatcher && switchContext(prevContext), - (currentRequest = prevRequest); - } - } -} -function preparePreambleFromSubtree( - request, - segment, - collectedPreambleSegments -) { - segment.preambleChildren.length && - collectedPreambleSegments.push(segment.preambleChildren); - for (var pendingPreambles = !1, i = 0; i < segment.children.length; i++) - pendingPreambles = - preparePreambleFromSegment( - request, - segment.children[i], - collectedPreambleSegments - ) || pendingPreambles; - return pendingPreambles; -} -function preparePreambleFromSegment( - request, - segment, - collectedPreambleSegments -) { - var boundary = segment.boundary; - if (null === boundary) - return preparePreambleFromSubtree( - request, - segment, - collectedPreambleSegments - ); - var preamble = boundary.contentPreamble, - fallbackPreamble = boundary.fallbackPreamble; - if (null === preamble || null === fallbackPreamble) return !1; - switch (boundary.status) { - case 1: - hoistPreambleState(request.renderState, preamble); - request.byteSize += boundary.byteSize; - segment = boundary.completedSegments[0]; - if (!segment) - throw Error( - "A previously unvisited boundary must have exactly one root segment. This is a bug in React." - ); - return preparePreambleFromSubtree( - request, - segment, - collectedPreambleSegments - ); - case 5: - if (null !== request.trackedPostpones) return !0; - case 4: - if (1 === segment.status) - return ( - hoistPreambleState(request.renderState, fallbackPreamble), - preparePreambleFromSubtree( - request, - segment, - collectedPreambleSegments - ) - ); - default: - return !0; - } -} -function preparePreamble(request) { - if ( - request.completedRootSegment && - null === request.completedPreambleSegments - ) { - var collectedPreambleSegments = [], - originalRequestByteSize = request.byteSize, - hasPendingPreambles = preparePreambleFromSegment( - request, - request.completedRootSegment, - collectedPreambleSegments - ), - preamble = request.renderState.preamble; - !1 === hasPendingPreambles || (preamble.headChunks && preamble.bodyChunks) - ? (request.completedPreambleSegments = collectedPreambleSegments) - : (request.byteSize = originalRequestByteSize); - } -} -function flushSubtree(request, destination, segment, hoistableState) { - segment.parentFlushed = !0; - switch (segment.status) { - case 0: - segment.id = request.nextSegmentId++; - case 5: - return ( - (hoistableState = segment.id), - (segment.lastPushedText = !1), - (segment.textEmbedded = !1), - (request = request.renderState), - destination.push('<template id="'), - destination.push(request.placeholderPrefix), - (request = hoistableState.toString(16)), - destination.push(request), - destination.push('"></template>') - ); - case 1: - segment.status = 2; - var r = !0, - chunks = segment.chunks, - chunkIdx = 0; - segment = segment.children; - for (var childIdx = 0; childIdx < segment.length; childIdx++) { - for (r = segment[childIdx]; chunkIdx < r.index; chunkIdx++) - destination.push(chunks[chunkIdx]); - r = flushSegment(request, destination, r, hoistableState); - } - for (; chunkIdx < chunks.length - 1; chunkIdx++) - destination.push(chunks[chunkIdx]); - chunkIdx < chunks.length && (r = destination.push(chunks[chunkIdx])); - return r; - case 3: - return !0; - default: - throw Error( - "Aborted, errored or already flushed boundaries should not be flushed again. This is a bug in React." - ); - } -} -var flushedByteSize = 0; -function flushSegment(request, destination, segment, hoistableState) { - var boundary = segment.boundary; - if (null === boundary) - return flushSubtree(request, destination, segment, hoistableState); - boundary.parentFlushed = !0; - if (4 === boundary.status) { - var row = boundary.row; - null !== row && - 0 === --row.pendingTasks && - finishSuspenseListRow(request, row); - request.renderState.generateStaticMarkup || - ((boundary = boundary.errorDigest), - destination.push("\x3c!--$!--\x3e"), - destination.push("<template"), - boundary && - (destination.push(' data-dgst="'), - (boundary = escapeTextForBrowser(boundary)), - destination.push(boundary), - destination.push('"')), - destination.push("></template>")); - flushSubtree(request, destination, segment, hoistableState); - request = request.renderState.generateStaticMarkup - ? !0 - : destination.push("\x3c!--/$--\x3e"); - return request; - } - if (1 !== boundary.status) - return ( - 0 === boundary.status && - (boundary.rootSegmentID = request.nextSegmentId++), - 0 < boundary.completedSegments.length && - request.partialBoundaries.push(boundary), - writeStartPendingSuspenseBoundary( - destination, - request.renderState, - boundary.rootSegmentID - ), - hoistableState && hoistHoistables(hoistableState, boundary.fallbackState), - flushSubtree(request, destination, segment, hoistableState), - destination.push("\x3c!--/$--\x3e") - ); - if ( - !flushingPartialBoundaries && - isEligibleForOutlining(request, boundary) && - flushedByteSize + boundary.byteSize > request.progressiveChunkSize - ) - return ( - (boundary.rootSegmentID = request.nextSegmentId++), - request.completedBoundaries.push(boundary), - writeStartPendingSuspenseBoundary( - destination, - request.renderState, - boundary.rootSegmentID - ), - flushSubtree(request, destination, segment, hoistableState), - destination.push("\x3c!--/$--\x3e") - ); - flushedByteSize += boundary.byteSize; - hoistableState && hoistHoistables(hoistableState, boundary.contentState); - segment = boundary.row; - null !== segment && - isEligibleForOutlining(request, boundary) && - 0 === --segment.pendingTasks && - finishSuspenseListRow(request, segment); - request.renderState.generateStaticMarkup || - destination.push("\x3c!--$--\x3e"); - segment = boundary.completedSegments; - if (1 !== segment.length) - throw Error( - "A previously unvisited boundary must have exactly one root segment. This is a bug in React." - ); - flushSegment(request, destination, segment[0], hoistableState); - request = request.renderState.generateStaticMarkup - ? !0 - : destination.push("\x3c!--/$--\x3e"); - return request; -} -function flushSegmentContainer(request, destination, segment, hoistableState) { - writeStartSegment( - destination, - request.renderState, - segment.parentFormatContext, - segment.id - ); - flushSegment(request, destination, segment, hoistableState); - return writeEndSegment(destination, segment.parentFormatContext); -} -function flushCompletedBoundary(request, destination, boundary) { - flushedByteSize = boundary.byteSize; - for ( - var completedSegments = boundary.completedSegments, i = 0; - i < completedSegments.length; - i++ - ) - flushPartiallyCompletedSegment( - request, - destination, - boundary, - completedSegments[i] - ); - completedSegments.length = 0; - completedSegments = boundary.row; - null !== completedSegments && - isEligibleForOutlining(request, boundary) && - 0 === --completedSegments.pendingTasks && - finishSuspenseListRow(request, completedSegments); - writeHoistablesForBoundary( - destination, - boundary.contentState, - request.renderState - ); - completedSegments = request.resumableState; - request = request.renderState; - i = boundary.rootSegmentID; - boundary = boundary.contentState; - var requiresStyleInsertion = request.stylesToHoist; - request.stylesToHoist = !1; - destination.push(request.startInlineScript); - destination.push(">"); - requiresStyleInsertion - ? (0 === (completedSegments.instructions & 4) && - ((completedSegments.instructions |= 4), - destination.push( - '$RX=function(b,c,d,e,f){var a=document.getElementById(b);a&&(b=a.previousSibling,b.data="$!",a=a.dataset,c&&(a.dgst=c),d&&(a.msg=d),e&&(a.stck=e),f&&(a.cstck=f),b._reactRetry&&b._reactRetry())};' - )), - 0 === (completedSegments.instructions & 2) && - ((completedSegments.instructions |= 2), - destination.push( - '$RB=[];$RV=function(a){$RT=performance.now();for(var b=0;b<a.length;b+=2){var c=a[b],e=a[b+1];null!==e.parentNode&&e.parentNode.removeChild(e);var f=c.parentNode;if(f){var g=c.previousSibling,h=0;do{if(c&&8===c.nodeType){var d=c.data;if("/$"===d||"/&"===d)if(0===h)break;else h--;else"$"!==d&&"$?"!==d&&"$~"!==d&&"$!"!==d&&"&"!==d||h++}d=c.nextSibling;f.removeChild(c);c=d}while(c);for(;e.firstChild;)f.insertBefore(e.firstChild,c);g.data="$";g._reactRetry&&requestAnimationFrame(g._reactRetry)}}a.length=0};\n$RC=function(a,b){if(b=document.getElementById(b))(a=document.getElementById(a))?(a.previousSibling.data="$~",$RB.push(a,b),2===$RB.length&&("number"!==typeof $RT?requestAnimationFrame($RV.bind(null,$RB)):(a=performance.now(),setTimeout($RV.bind(null,$RB),2300>a&&2E3<a?2300-a:$RT+300-a)))):b.parentNode.removeChild(b)};' - )), - 0 === (completedSegments.instructions & 8) - ? ((completedSegments.instructions |= 8), - destination.push( - '$RM=new Map;$RR=function(n,w,p){function u(q){this._p=null;q()}for(var r=new Map,t=document,h,b,e=t.querySelectorAll("link[data-precedence],style[data-precedence]"),v=[],k=0;b=e[k++];)"not all"===b.getAttribute("media")?v.push(b):("LINK"===b.tagName&&$RM.set(b.getAttribute("href"),b),r.set(b.dataset.precedence,h=b));e=0;b=[];var l,a;for(k=!0;;){if(k){var f=p[e++];if(!f){k=!1;e=0;continue}var c=!1,m=0;var d=f[m++];if(a=$RM.get(d)){var g=a._p;c=!0}else{a=t.createElement("link");a.href=d;a.rel=\n"stylesheet";for(a.dataset.precedence=l=f[m++];g=f[m++];)a.setAttribute(g,f[m++]);g=a._p=new Promise(function(q,x){a.onload=u.bind(a,q);a.onerror=u.bind(a,x)});$RM.set(d,a)}d=a.getAttribute("media");!g||d&&!matchMedia(d).matches||b.push(g);if(c)continue}else{a=v[e++];if(!a)break;l=a.getAttribute("data-precedence");a.removeAttribute("media")}c=r.get(l)||h;c===h&&(h=a);r.set(l,a);c?c.parentNode.insertBefore(a,c.nextSibling):(c=t.head,c.insertBefore(a,c.firstChild))}if(p=document.getElementById(n))p.previousSibling.data=\n"$~";Promise.all(b).then($RC.bind(null,n,w),$RX.bind(null,n,"CSS failed to load"))};$RR("' - )) - : destination.push('$RR("')) - : (0 === (completedSegments.instructions & 2) && - ((completedSegments.instructions |= 2), - destination.push( - '$RB=[];$RV=function(a){$RT=performance.now();for(var b=0;b<a.length;b+=2){var c=a[b],e=a[b+1];null!==e.parentNode&&e.parentNode.removeChild(e);var f=c.parentNode;if(f){var g=c.previousSibling,h=0;do{if(c&&8===c.nodeType){var d=c.data;if("/$"===d||"/&"===d)if(0===h)break;else h--;else"$"!==d&&"$?"!==d&&"$~"!==d&&"$!"!==d&&"&"!==d||h++}d=c.nextSibling;f.removeChild(c);c=d}while(c);for(;e.firstChild;)f.insertBefore(e.firstChild,c);g.data="$";g._reactRetry&&requestAnimationFrame(g._reactRetry)}}a.length=0};\n$RC=function(a,b){if(b=document.getElementById(b))(a=document.getElementById(a))?(a.previousSibling.data="$~",$RB.push(a,b),2===$RB.length&&("number"!==typeof $RT?requestAnimationFrame($RV.bind(null,$RB)):(a=performance.now(),setTimeout($RV.bind(null,$RB),2300>a&&2E3<a?2300-a:$RT+300-a)))):b.parentNode.removeChild(b)};' - )), - destination.push('$RC("')); - completedSegments = i.toString(16); - destination.push(request.boundaryPrefix); - destination.push(completedSegments); - destination.push('","'); - destination.push(request.segmentPrefix); - destination.push(completedSegments); - requiresStyleInsertion - ? (destination.push('",'), - writeStyleResourceDependenciesInJS(destination, boundary)) - : destination.push('"'); - boundary = destination.push(")\x3c/script>"); - return writeBootstrap(destination, request) && boundary; -} -function flushPartiallyCompletedSegment( - request, - destination, - boundary, - segment -) { - if (2 === segment.status) return !0; - var hoistableState = boundary.contentState, - segmentID = segment.id; - if (-1 === segmentID) { - if (-1 === (segment.id = boundary.rootSegmentID)) - throw Error( - "A root segment ID must have been assigned by now. This is a bug in React." - ); - return flushSegmentContainer(request, destination, segment, hoistableState); - } - if (segmentID === boundary.rootSegmentID) - return flushSegmentContainer(request, destination, segment, hoistableState); - flushSegmentContainer(request, destination, segment, hoistableState); - boundary = request.resumableState; - request = request.renderState; - destination.push(request.startInlineScript); - destination.push(">"); - 0 === (boundary.instructions & 1) - ? ((boundary.instructions |= 1), - destination.push( - '$RS=function(a,b){a=document.getElementById(a);b=document.getElementById(b);for(a.parentNode.removeChild(a);a.firstChild;)b.parentNode.insertBefore(a.firstChild,b);b.parentNode.removeChild(b)};$RS("' - )) - : destination.push('$RS("'); - destination.push(request.segmentPrefix); - segmentID = segmentID.toString(16); - destination.push(segmentID); - destination.push('","'); - destination.push(request.placeholderPrefix); - destination.push(segmentID); - destination = destination.push('")\x3c/script>'); - return destination; -} -var flushingPartialBoundaries = !1; -function flushCompletedQueues(request, destination) { - try { - if (!(0 < request.pendingRootTasks)) { - var i, - completedRootSegment = request.completedRootSegment; - if (null !== completedRootSegment) { - if (5 === completedRootSegment.status) return; - var completedPreambleSegments = request.completedPreambleSegments; - if (null === completedPreambleSegments) return; - flushedByteSize = request.byteSize; - var resumableState = request.resumableState, - renderState = request.renderState, - preamble = renderState.preamble, - htmlChunks = preamble.htmlChunks, - headChunks = preamble.headChunks, - i$jscomp$0; - if (htmlChunks) { - for (i$jscomp$0 = 0; i$jscomp$0 < htmlChunks.length; i$jscomp$0++) - destination.push(htmlChunks[i$jscomp$0]); - if (headChunks) - for (i$jscomp$0 = 0; i$jscomp$0 < headChunks.length; i$jscomp$0++) - destination.push(headChunks[i$jscomp$0]); - else { - var chunk = startChunkForTag("head"); - destination.push(chunk); - destination.push(">"); - } - } else if (headChunks) - for (i$jscomp$0 = 0; i$jscomp$0 < headChunks.length; i$jscomp$0++) - destination.push(headChunks[i$jscomp$0]); - var charsetChunks = renderState.charsetChunks; - for (i$jscomp$0 = 0; i$jscomp$0 < charsetChunks.length; i$jscomp$0++) - destination.push(charsetChunks[i$jscomp$0]); - charsetChunks.length = 0; - renderState.preconnects.forEach(flushResource, destination); - renderState.preconnects.clear(); - var viewportChunks = renderState.viewportChunks; - for (i$jscomp$0 = 0; i$jscomp$0 < viewportChunks.length; i$jscomp$0++) - destination.push(viewportChunks[i$jscomp$0]); - viewportChunks.length = 0; - renderState.fontPreloads.forEach(flushResource, destination); - renderState.fontPreloads.clear(); - renderState.highImagePreloads.forEach(flushResource, destination); - renderState.highImagePreloads.clear(); - currentlyFlushingRenderState = renderState; - renderState.styles.forEach(flushStylesInPreamble, destination); - currentlyFlushingRenderState = null; - var importMapChunks = renderState.importMapChunks; - for (i$jscomp$0 = 0; i$jscomp$0 < importMapChunks.length; i$jscomp$0++) - destination.push(importMapChunks[i$jscomp$0]); - importMapChunks.length = 0; - renderState.bootstrapScripts.forEach(flushResource, destination); - renderState.scripts.forEach(flushResource, destination); - renderState.scripts.clear(); - renderState.bulkPreloads.forEach(flushResource, destination); - renderState.bulkPreloads.clear(); - resumableState.instructions |= 32; - var hoistableChunks = renderState.hoistableChunks; - for (i$jscomp$0 = 0; i$jscomp$0 < hoistableChunks.length; i$jscomp$0++) - destination.push(hoistableChunks[i$jscomp$0]); - for ( - resumableState = hoistableChunks.length = 0; - resumableState < completedPreambleSegments.length; - resumableState++ - ) { - var segments = completedPreambleSegments[resumableState]; - for (renderState = 0; renderState < segments.length; renderState++) - flushSegment(request, destination, segments[renderState], null); - } - var preamble$jscomp$0 = request.renderState.preamble, - headChunks$jscomp$0 = preamble$jscomp$0.headChunks; - if (preamble$jscomp$0.htmlChunks || headChunks$jscomp$0) { - var chunk$jscomp$0 = endChunkForTag("head"); - destination.push(chunk$jscomp$0); - } - var bodyChunks = preamble$jscomp$0.bodyChunks; - if (bodyChunks) - for ( - completedPreambleSegments = 0; - completedPreambleSegments < bodyChunks.length; - completedPreambleSegments++ - ) - destination.push(bodyChunks[completedPreambleSegments]); - flushSegment(request, destination, completedRootSegment, null); - request.completedRootSegment = null; - var renderState$jscomp$0 = request.renderState; - if ( - 0 !== request.allPendingTasks || - 0 !== request.clientRenderedBoundaries.length || - 0 !== request.completedBoundaries.length || - (null !== request.trackedPostpones && - (0 !== request.trackedPostpones.rootNodes.length || - null !== request.trackedPostpones.rootSlots)) - ) { - var resumableState$jscomp$0 = request.resumableState; - if (0 === (resumableState$jscomp$0.instructions & 64)) { - resumableState$jscomp$0.instructions |= 64; - destination.push(renderState$jscomp$0.startInlineScript); - if (0 === (resumableState$jscomp$0.instructions & 32)) { - resumableState$jscomp$0.instructions |= 32; - var shellId = "_" + resumableState$jscomp$0.idPrefix + "R_"; - destination.push(' id="'); - var chunk$jscomp$1 = escapeTextForBrowser(shellId); - destination.push(chunk$jscomp$1); - destination.push('"'); - } - destination.push(">"); - destination.push( - "requestAnimationFrame(function(){$RT=performance.now()});" - ); - destination.push("\x3c/script>"); - } - } - writeBootstrap(destination, renderState$jscomp$0); - } - var renderState$jscomp$1 = request.renderState; - completedRootSegment = 0; - var viewportChunks$jscomp$0 = renderState$jscomp$1.viewportChunks; - for ( - completedRootSegment = 0; - completedRootSegment < viewportChunks$jscomp$0.length; - completedRootSegment++ - ) - destination.push(viewportChunks$jscomp$0[completedRootSegment]); - viewportChunks$jscomp$0.length = 0; - renderState$jscomp$1.preconnects.forEach(flushResource, destination); - renderState$jscomp$1.preconnects.clear(); - renderState$jscomp$1.fontPreloads.forEach(flushResource, destination); - renderState$jscomp$1.fontPreloads.clear(); - renderState$jscomp$1.highImagePreloads.forEach( - flushResource, - destination - ); - renderState$jscomp$1.highImagePreloads.clear(); - renderState$jscomp$1.styles.forEach(preloadLateStyles, destination); - renderState$jscomp$1.scripts.forEach(flushResource, destination); - renderState$jscomp$1.scripts.clear(); - renderState$jscomp$1.bulkPreloads.forEach(flushResource, destination); - renderState$jscomp$1.bulkPreloads.clear(); - var hoistableChunks$jscomp$0 = renderState$jscomp$1.hoistableChunks; - for ( - completedRootSegment = 0; - completedRootSegment < hoistableChunks$jscomp$0.length; - completedRootSegment++ - ) - destination.push(hoistableChunks$jscomp$0[completedRootSegment]); - hoistableChunks$jscomp$0.length = 0; - var clientRenderedBoundaries = request.clientRenderedBoundaries; - for (i = 0; i < clientRenderedBoundaries.length; i++) { - var boundary = clientRenderedBoundaries[i]; - renderState$jscomp$1 = destination; - var resumableState$jscomp$1 = request.resumableState, - renderState$jscomp$2 = request.renderState, - id = boundary.rootSegmentID, - errorDigest = boundary.errorDigest; - renderState$jscomp$1.push(renderState$jscomp$2.startInlineScript); - renderState$jscomp$1.push(">"); - 0 === (resumableState$jscomp$1.instructions & 4) - ? ((resumableState$jscomp$1.instructions |= 4), - renderState$jscomp$1.push( - '$RX=function(b,c,d,e,f){var a=document.getElementById(b);a&&(b=a.previousSibling,b.data="$!",a=a.dataset,c&&(a.dgst=c),d&&(a.msg=d),e&&(a.stck=e),f&&(a.cstck=f),b._reactRetry&&b._reactRetry())};;$RX("' - )) - : renderState$jscomp$1.push('$RX("'); - renderState$jscomp$1.push(renderState$jscomp$2.boundaryPrefix); - var chunk$jscomp$2 = id.toString(16); - renderState$jscomp$1.push(chunk$jscomp$2); - renderState$jscomp$1.push('"'); - if (errorDigest) { - renderState$jscomp$1.push(","); - var chunk$jscomp$3 = escapeJSStringsForInstructionScripts( - errorDigest || "" - ); - renderState$jscomp$1.push(chunk$jscomp$3); - } - var JSCompiler_inline_result = - renderState$jscomp$1.push(")\x3c/script>"); - if (!JSCompiler_inline_result) { - request.destination = null; - i++; - clientRenderedBoundaries.splice(0, i); - return; - } - } - clientRenderedBoundaries.splice(0, i); - var completedBoundaries = request.completedBoundaries; - for (i = 0; i < completedBoundaries.length; i++) - if ( - !flushCompletedBoundary(request, destination, completedBoundaries[i]) - ) { - request.destination = null; - i++; - completedBoundaries.splice(0, i); - return; - } - completedBoundaries.splice(0, i); - flushingPartialBoundaries = !0; - var partialBoundaries = request.partialBoundaries; - for (i = 0; i < partialBoundaries.length; i++) { - var boundary$69 = partialBoundaries[i]; - a: { - clientRenderedBoundaries = request; - boundary = destination; - flushedByteSize = boundary$69.byteSize; - var completedSegments = boundary$69.completedSegments; - for ( - JSCompiler_inline_result = 0; - JSCompiler_inline_result < completedSegments.length; - JSCompiler_inline_result++ - ) - if ( - !flushPartiallyCompletedSegment( - clientRenderedBoundaries, - boundary, - boundary$69, - completedSegments[JSCompiler_inline_result] - ) - ) { - JSCompiler_inline_result++; - completedSegments.splice(0, JSCompiler_inline_result); - var JSCompiler_inline_result$jscomp$0 = !1; - break a; - } - completedSegments.splice(0, JSCompiler_inline_result); - var row = boundary$69.row; - null !== row && - row.together && - 1 === boundary$69.pendingTasks && - (1 === row.pendingTasks - ? unblockSuspenseListRow( - clientRenderedBoundaries, - row, - row.hoistables - ) - : row.pendingTasks--); - JSCompiler_inline_result$jscomp$0 = writeHoistablesForBoundary( - boundary, - boundary$69.contentState, - clientRenderedBoundaries.renderState - ); - } - if (!JSCompiler_inline_result$jscomp$0) { - request.destination = null; - i++; - partialBoundaries.splice(0, i); - return; - } - } - partialBoundaries.splice(0, i); - flushingPartialBoundaries = !1; - var largeBoundaries = request.completedBoundaries; - for (i = 0; i < largeBoundaries.length; i++) - if (!flushCompletedBoundary(request, destination, largeBoundaries[i])) { - request.destination = null; - i++; - largeBoundaries.splice(0, i); - return; - } - largeBoundaries.splice(0, i); - } - } finally { - (flushingPartialBoundaries = !1), - 0 === request.allPendingTasks && - 0 === request.clientRenderedBoundaries.length && - 0 === request.completedBoundaries.length && - ((request.flushScheduled = !1), - (i = request.resumableState), - i.hasBody && - ((partialBoundaries = endChunkForTag("body")), - destination.push(partialBoundaries)), - i.hasHtml && ((i = endChunkForTag("html")), destination.push(i)), - (request.status = 14), - destination.push(null), - (request.destination = null)); - } -} -function enqueueFlush(request) { - if ( - !1 === request.flushScheduled && - 0 === request.pingedTasks.length && - null !== request.destination - ) { - request.flushScheduled = !0; - var destination = request.destination; - destination - ? flushCompletedQueues(request, destination) - : (request.flushScheduled = !1); - } -} -function startFlowing(request, destination) { - if (13 === request.status) - (request.status = 14), destination.destroy(request.fatalError); - else if (14 !== request.status && null === request.destination) { - request.destination = destination; - try { - flushCompletedQueues(request, destination); - } catch (error) { - logRecoverableError(request, error, {}), fatalError(request, error); - } - } -} -function abort(request, reason) { - if (11 === request.status || 10 === request.status) request.status = 12; - try { - var abortableTasks = request.abortableTasks; - if (0 < abortableTasks.size) { - var error = - void 0 === reason - ? Error("The render was aborted by the server without a reason.") - : "object" === typeof reason && - null !== reason && - "function" === typeof reason.then - ? Error("The render was aborted by the server with a promise.") - : reason; - request.fatalError = error; - abortableTasks.forEach(function (task) { - return abortTask(task, request, error); - }); - abortableTasks.clear(); - } - null !== request.destination && - flushCompletedQueues(request, request.destination); - } catch (error$71) { - logRecoverableError(request, error$71, {}), fatalError(request, error$71); - } -} -function addToReplayParent(node, parentKeyPath, trackedPostpones) { - if (null === parentKeyPath) trackedPostpones.rootNodes.push(node); - else { - var workingMap = trackedPostpones.workingMap, - parentNode = workingMap.get(parentKeyPath); - void 0 === parentNode && - ((parentNode = [parentKeyPath[1], parentKeyPath[2], [], null]), - workingMap.set(parentKeyPath, parentNode), - addToReplayParent(parentNode, parentKeyPath[0], trackedPostpones)); - parentNode[2].push(node); - } -} -function onError() {} -function renderToStringImpl( - children, - options, - generateStaticMarkup, - abortReason -) { - var didFatal = !1, - fatalError = null, - result = "", - readyToStream = !1; - options = createResumableState(options ? options.identifierPrefix : void 0); - children = createRequest( - children, - options, - createRenderState(options, generateStaticMarkup), - createFormatContext(0, null, 0, null), - Infinity, - onError, - void 0, - function () { - readyToStream = !0; - }, - void 0, - void 0, - void 0 - ); - children.flushScheduled = null !== children.destination; - performWork(children); - 10 === children.status && (children.status = 11); - null === children.trackedPostpones && - safelyEmitEarlyPreloads(children, 0 === children.pendingRootTasks); - abort(children, abortReason); - startFlowing(children, { - push: function (chunk) { - null !== chunk && (result += chunk); - return !0; - }, - destroy: function (error) { - didFatal = !0; - fatalError = error; - } - }); - if (didFatal && fatalError !== abortReason) throw fatalError; - if (!readyToStream) - throw Error( - "A component suspended while responding to synchronous input. This will cause the UI to be replaced with a loading indicator. To fix, updates that suspend should be wrapped with startTransition." - ); - return result; -} -exports.renderToStaticMarkup = function (children, options) { - return renderToStringImpl( - children, - options, - !0, - 'The server used "renderToStaticMarkup" which does not support Suspense. If you intended to have the server wait for the suspended component please switch to "renderToPipeableStream" which supports Suspense on the server' - ); -}; -exports.renderToString = function (children, options) { - return renderToStringImpl( - children, - options, - !1, - 'The server used "renderToString" which does not support Suspense. If you intended for this Suspense boundary to render the fallback content on the server consider throwing an Error somewhere within the Suspense boundary. If you intended to have the server wait for the suspended component please switch to "renderToPipeableStream" which supports Suspense on the server' - ); -}; -exports.version = "19.2.3"; - - -/***/ }, - -/***/ 6846 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ CodeBlockJSX) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _theme_CodeBlock_Container__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(236); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6128); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// TODO Docusaurus v4: move this component at the root? -// This component only handles a rare edge-case: <pre><MyComp/></pre> in MDX -// <pre> tags in markdown map to CodeBlocks. They may contain JSX children. -// When children is not a simple string, we just return a styled block without -// actually highlighting. -function CodeBlockJSX({children,className}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_theme_CodeBlock_Container__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{as:"pre",tabIndex:0,className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)((_styles_module_css__WEBPACK_IMPORTED_MODULE_3___default().codeBlockStandalone),'thin-scrollbar',className),children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("code",{className:(_styles_module_css__WEBPACK_IMPORTED_MODULE_3___default().codeBlockLines),children:children})});} - -/***/ }, - -/***/ 6877 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ preload) -/* harmony export */ }); -/* harmony import */ var _generated_routes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(467); -/* harmony import */ var react_router_config__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2831); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - *//** - * Helper function to make sure all async components for that particular route - * is preloaded before rendering. This is especially useful to avoid loading - * screens. - * - * @param pathname the route pathname, example: /docs/installation - * @returns Promise object represents whether pathname has been preloaded - */function preload(pathname){const matches=Array.from(new Set([pathname,decodeURI(pathname)])).map(p=>(0,react_router_config__WEBPACK_IMPORTED_MODULE_1__/* .matchRoutes */ .u)(_generated_routes__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A,p)).flat();return Promise.all(matches.map(match=>match.route.component.preload?.()));} - -/***/ }, - -/***/ 6878 -(module) { - -// Exports -module.exports = { - "themedComponent": `themedComponent_mlkZ`, - "themedComponent--light": `themedComponent--light_NVdE`, - "themedComponent--dark": `themedComponent--dark_xIcU` -}; - - -/***/ }, - -/***/ 6907 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ CodeBlockButton) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function CodeBlockButton({className,...props}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("button",{type:"button",...props,className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('clean-btn',className)});} - -/***/ }, - -/***/ 6915 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ DocItem) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5500); -/* harmony import */ var _docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(542); -/* harmony import */ var _theme_DocItem_Metadata__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4157); -/* harmony import */ var _theme_DocItem_Layout__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(5146); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function DocItem(props){const docHtmlClassName=`docs-doc-id-${props.content.metadata.id}`;const MDXComponent=props.content;return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_2__/* .DocProvider */ ._,{content:props.content,children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_1__/* .HtmlClassNameProvider */ .e3,{className:docHtmlClassName,children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_theme_DocItem_Metadata__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A,{}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_theme_DocItem_Layout__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A,{children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(MDXComponent,{})})]})});} - -/***/ }, - -/***/ 6921 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ flat) -/* harmony export */ }); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */const isTree=x=>typeof x==='object'&&!!x&&Object.keys(x).length>0;/** - * Takes a tree, and flattens it into a map of keyPath -> value. - * - * ```js - * flat({ a: { b: 1 } }) === { "a.b": 1 }; - * flat({ a: [1, 2] }) === { "a.0": 1, "a.1": 2 }; - * ``` - */function flat(target){const delimiter='.';const output={};function dfs(object,prefix){Object.entries(object).forEach(([key,value])=>{const newKey=prefix?`${prefix}${delimiter}${key}`:key;if(isTree(value)){dfs(value,newKey);}else{output[newKey]=value;}});}dfs(target);return output;} - -/***/ }, - -/***/ 6925 -(module) { - -"use strict"; -/** - * Copyright (c) 2013-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - - - -var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'; - -module.exports = ReactPropTypesSecret; - - -/***/ }, - -/***/ 6931 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _theme_NavbarItem_DefaultNavbarItem__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3828); -/* harmony import */ var _theme_NavbarItem_DropdownNavbarItem__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9788); -/* harmony import */ var _theme_NavbarItem_LocaleDropdownNavbarItem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4614); -/* harmony import */ var _theme_NavbarItem_SearchNavbarItem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1310); -/* harmony import */ var _theme_NavbarItem_HtmlNavbarItem__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(131); -/* harmony import */ var _theme_NavbarItem_DocNavbarItem__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(4820); -/* harmony import */ var _theme_NavbarItem_DocSidebarNavbarItem__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(3888); -/* harmony import */ var _theme_NavbarItem_DocsVersionNavbarItem__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(9223); -/* harmony import */ var _theme_NavbarItem_DocsVersionDropdownNavbarItem__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(7262); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */const ComponentTypes={default:_theme_NavbarItem_DefaultNavbarItem__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A,localeDropdown:_theme_NavbarItem_LocaleDropdownNavbarItem__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,search:_theme_NavbarItem_SearchNavbarItem__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A,dropdown:_theme_NavbarItem_DropdownNavbarItem__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A,html:_theme_NavbarItem_HtmlNavbarItem__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A,doc:_theme_NavbarItem_DocNavbarItem__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A,docSidebar:_theme_NavbarItem_DocSidebarNavbarItem__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A,docsVersion:_theme_NavbarItem_DocsVersionNavbarItem__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A,docsVersionDropdown:_theme_NavbarItem_DocsVersionDropdownNavbarItem__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .A};/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ComponentTypes); - -/***/ }, - -/***/ 6956 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ normalizeLocation) -/* harmony export */ }); -/* harmony import */ var react_router_config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2831); -/* harmony import */ var _generated_routes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(467); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// Memoize previously normalized pathnames. -const pathnames=new Map();function normalizeLocation(location){if(pathnames.has(location.pathname)){return{...location,pathname:pathnames.get(location.pathname)};}// If the location was registered with an `.html` extension, we don't strip it -// away, or it will render to a 404 page. -const matchedRoutes=(0,react_router_config__WEBPACK_IMPORTED_MODULE_0__/* .matchRoutes */ .u)(_generated_routes__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A,location.pathname);if(matchedRoutes.some(({route})=>route.exact===true)){pathnames.set(location.pathname,location.pathname);return location;}const pathname=location.pathname.trim().replace(/(?:\/index)?\.html$/,'')||'/';pathnames.set(location.pathname,pathname);return{...location,pathname};} - -/***/ }, - -/***/ 6969 -(module) { - -var components = {"core":{"meta":{"path":"components/prism-core.js","option":"mandatory"},"core":"Core"},"themes":{"meta":{"path":"themes/{id}.css","link":"index.html?theme={id}","exclusive":true},"prism":{"title":"Default","option":"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{"title":"Okaidia","owner":"ocodia"},"prism-twilight":{"title":"Twilight","owner":"remybach"},"prism-coy":{"title":"Coy","owner":"tshedor"},"prism-solarizedlight":{"title":"Solarized Light","owner":"hectormatos2011 "},"prism-tomorrow":{"title":"Tomorrow Night","owner":"Rosey"}},"languages":{"meta":{"path":"components/prism-{id}","noCSS":true,"examplesPath":"examples/prism-{id}","addCheckAll":true},"markup":{"title":"Markup","alias":["html","xml","svg","mathml","ssml","atom","rss"],"aliasTitles":{"html":"HTML","xml":"XML","svg":"SVG","mathml":"MathML","ssml":"SSML","atom":"Atom","rss":"RSS"},"option":"default"},"css":{"title":"CSS","option":"default","modify":"markup"},"clike":{"title":"C-like","option":"default"},"javascript":{"title":"JavaScript","require":"clike","modify":"markup","optional":"regex","alias":"js","option":"default"},"abap":{"title":"ABAP","owner":"dellagustin"},"abnf":{"title":"ABNF","owner":"RunDevelopment"},"actionscript":{"title":"ActionScript","require":"javascript","modify":"markup","owner":"Golmote"},"ada":{"title":"Ada","owner":"Lucretia"},"agda":{"title":"Agda","owner":"xy-ren"},"al":{"title":"AL","owner":"RunDevelopment"},"antlr4":{"title":"ANTLR4","alias":"g4","owner":"RunDevelopment"},"apacheconf":{"title":"Apache Configuration","owner":"GuiTeK"},"apex":{"title":"Apex","require":["clike","sql"],"owner":"RunDevelopment"},"apl":{"title":"APL","owner":"ngn"},"applescript":{"title":"AppleScript","owner":"Golmote"},"aql":{"title":"AQL","owner":"RunDevelopment"},"arduino":{"title":"Arduino","require":"cpp","alias":"ino","owner":"dkern"},"arff":{"title":"ARFF","owner":"Golmote"},"armasm":{"title":"ARM Assembly","alias":"arm-asm","owner":"RunDevelopment"},"arturo":{"title":"Arturo","alias":"art","optional":["bash","css","javascript","markup","markdown","sql"],"owner":"drkameleon"},"asciidoc":{"alias":"adoc","title":"AsciiDoc","owner":"Golmote"},"aspnet":{"title":"ASP.NET (C#)","require":["markup","csharp"],"owner":"nauzilus"},"asm6502":{"title":"6502 Assembly","owner":"kzurawel"},"asmatmel":{"title":"Atmel AVR Assembly","owner":"cerkit"},"autohotkey":{"title":"AutoHotkey","owner":"aviaryan"},"autoit":{"title":"AutoIt","owner":"Golmote"},"avisynth":{"title":"AviSynth","alias":"avs","owner":"Zinfidel"},"avro-idl":{"title":"Avro IDL","alias":"avdl","owner":"RunDevelopment"},"awk":{"title":"AWK","alias":"gawk","aliasTitles":{"gawk":"GAWK"},"owner":"RunDevelopment"},"bash":{"title":"Bash","alias":["sh","shell"],"aliasTitles":{"sh":"Shell","shell":"Shell"},"owner":"zeitgeist87"},"basic":{"title":"BASIC","owner":"Golmote"},"batch":{"title":"Batch","owner":"Golmote"},"bbcode":{"title":"BBcode","alias":"shortcode","aliasTitles":{"shortcode":"Shortcode"},"owner":"RunDevelopment"},"bbj":{"title":"BBj","owner":"hyyan"},"bicep":{"title":"Bicep","owner":"johnnyreilly"},"birb":{"title":"Birb","require":"clike","owner":"Calamity210"},"bison":{"title":"Bison","require":"c","owner":"Golmote"},"bnf":{"title":"BNF","alias":"rbnf","aliasTitles":{"rbnf":"RBNF"},"owner":"RunDevelopment"},"bqn":{"title":"BQN","owner":"yewscion"},"brainfuck":{"title":"Brainfuck","owner":"Golmote"},"brightscript":{"title":"BrightScript","owner":"RunDevelopment"},"bro":{"title":"Bro","owner":"wayward710"},"bsl":{"title":"BSL (1C:Enterprise)","alias":"oscript","aliasTitles":{"oscript":"OneScript"},"owner":"Diversus23"},"c":{"title":"C","require":"clike","owner":"zeitgeist87"},"csharp":{"title":"C#","require":"clike","alias":["cs","dotnet"],"owner":"mvalipour"},"cpp":{"title":"C++","require":"c","owner":"zeitgeist87"},"cfscript":{"title":"CFScript","require":"clike","alias":"cfc","owner":"mjclemente"},"chaiscript":{"title":"ChaiScript","require":["clike","cpp"],"owner":"RunDevelopment"},"cil":{"title":"CIL","owner":"sbrl"},"cilkc":{"title":"Cilk/C","require":"c","alias":"cilk-c","owner":"OpenCilk"},"cilkcpp":{"title":"Cilk/C++","require":"cpp","alias":["cilk-cpp","cilk"],"owner":"OpenCilk"},"clojure":{"title":"Clojure","owner":"troglotit"},"cmake":{"title":"CMake","owner":"mjrogozinski"},"cobol":{"title":"COBOL","owner":"RunDevelopment"},"coffeescript":{"title":"CoffeeScript","require":"javascript","alias":"coffee","owner":"R-osey"},"concurnas":{"title":"Concurnas","alias":"conc","owner":"jasontatton"},"csp":{"title":"Content-Security-Policy","owner":"ScottHelme"},"cooklang":{"title":"Cooklang","owner":"ahue"},"coq":{"title":"Coq","owner":"RunDevelopment"},"crystal":{"title":"Crystal","require":"ruby","owner":"MakeNowJust"},"css-extras":{"title":"CSS Extras","require":"css","modify":"css","owner":"milesj"},"csv":{"title":"CSV","owner":"RunDevelopment"},"cue":{"title":"CUE","owner":"RunDevelopment"},"cypher":{"title":"Cypher","owner":"RunDevelopment"},"d":{"title":"D","require":"clike","owner":"Golmote"},"dart":{"title":"Dart","require":"clike","owner":"Golmote"},"dataweave":{"title":"DataWeave","owner":"machaval"},"dax":{"title":"DAX","owner":"peterbud"},"dhall":{"title":"Dhall","owner":"RunDevelopment"},"diff":{"title":"Diff","owner":"uranusjr"},"django":{"title":"Django/Jinja2","require":"markup-templating","alias":"jinja2","owner":"romanvm"},"dns-zone-file":{"title":"DNS zone file","owner":"RunDevelopment","alias":"dns-zone"},"docker":{"title":"Docker","alias":"dockerfile","owner":"JustinBeckwith"},"dot":{"title":"DOT (Graphviz)","alias":"gv","optional":"markup","owner":"RunDevelopment"},"ebnf":{"title":"EBNF","owner":"RunDevelopment"},"editorconfig":{"title":"EditorConfig","owner":"osipxd"},"eiffel":{"title":"Eiffel","owner":"Conaclos"},"ejs":{"title":"EJS","require":["javascript","markup-templating"],"owner":"RunDevelopment","alias":"eta","aliasTitles":{"eta":"Eta"}},"elixir":{"title":"Elixir","owner":"Golmote"},"elm":{"title":"Elm","owner":"zwilias"},"etlua":{"title":"Embedded Lua templating","require":["lua","markup-templating"],"owner":"RunDevelopment"},"erb":{"title":"ERB","require":["ruby","markup-templating"],"owner":"Golmote"},"erlang":{"title":"Erlang","owner":"Golmote"},"excel-formula":{"title":"Excel Formula","alias":["xlsx","xls"],"owner":"RunDevelopment"},"fsharp":{"title":"F#","require":"clike","owner":"simonreynolds7"},"factor":{"title":"Factor","owner":"catb0t"},"false":{"title":"False","owner":"edukisto"},"firestore-security-rules":{"title":"Firestore security rules","require":"clike","owner":"RunDevelopment"},"flow":{"title":"Flow","require":"javascript","owner":"Golmote"},"fortran":{"title":"Fortran","owner":"Golmote"},"ftl":{"title":"FreeMarker Template Language","require":"markup-templating","owner":"RunDevelopment"},"gml":{"title":"GameMaker Language","alias":"gamemakerlanguage","require":"clike","owner":"LiarOnce"},"gap":{"title":"GAP (CAS)","owner":"RunDevelopment"},"gcode":{"title":"G-code","owner":"RunDevelopment"},"gdscript":{"title":"GDScript","owner":"RunDevelopment"},"gedcom":{"title":"GEDCOM","owner":"Golmote"},"gettext":{"title":"gettext","alias":"po","owner":"RunDevelopment"},"gherkin":{"title":"Gherkin","owner":"hason"},"git":{"title":"Git","owner":"lgiraudel"},"glsl":{"title":"GLSL","require":"c","owner":"Golmote"},"gn":{"title":"GN","alias":"gni","owner":"RunDevelopment"},"linker-script":{"title":"GNU Linker Script","alias":"ld","owner":"RunDevelopment"},"go":{"title":"Go","require":"clike","owner":"arnehormann"},"go-module":{"title":"Go module","alias":"go-mod","owner":"RunDevelopment"},"gradle":{"title":"Gradle","require":"clike","owner":"zeabdelkhalek-badido18"},"graphql":{"title":"GraphQL","optional":"markdown","owner":"Golmote"},"groovy":{"title":"Groovy","require":"clike","owner":"robfletcher"},"haml":{"title":"Haml","require":"ruby","optional":["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],"owner":"Golmote"},"handlebars":{"title":"Handlebars","require":"markup-templating","alias":["hbs","mustache"],"aliasTitles":{"mustache":"Mustache"},"owner":"Golmote"},"haskell":{"title":"Haskell","alias":"hs","owner":"bholst"},"haxe":{"title":"Haxe","require":"clike","optional":"regex","owner":"Golmote"},"hcl":{"title":"HCL","owner":"outsideris"},"hlsl":{"title":"HLSL","require":"c","owner":"RunDevelopment"},"hoon":{"title":"Hoon","owner":"matildepark"},"http":{"title":"HTTP","optional":["csp","css","hpkp","hsts","javascript","json","markup","uri"],"owner":"danielgtaylor"},"hpkp":{"title":"HTTP Public-Key-Pins","owner":"ScottHelme"},"hsts":{"title":"HTTP Strict-Transport-Security","owner":"ScottHelme"},"ichigojam":{"title":"IchigoJam","owner":"BlueCocoa"},"icon":{"title":"Icon","owner":"Golmote"},"icu-message-format":{"title":"ICU Message Format","owner":"RunDevelopment"},"idris":{"title":"Idris","alias":"idr","owner":"KeenS","require":"haskell"},"ignore":{"title":".ignore","owner":"osipxd","alias":["gitignore","hgignore","npmignore"],"aliasTitles":{"gitignore":".gitignore","hgignore":".hgignore","npmignore":".npmignore"}},"inform7":{"title":"Inform 7","owner":"Golmote"},"ini":{"title":"Ini","owner":"aviaryan"},"io":{"title":"Io","owner":"AlesTsurko"},"j":{"title":"J","owner":"Golmote"},"java":{"title":"Java","require":"clike","owner":"sherblot"},"javadoc":{"title":"JavaDoc","require":["markup","java","javadoclike"],"modify":"java","optional":"scala","owner":"RunDevelopment"},"javadoclike":{"title":"JavaDoc-like","modify":["java","javascript","php"],"owner":"RunDevelopment"},"javastacktrace":{"title":"Java stack trace","owner":"RunDevelopment"},"jexl":{"title":"Jexl","owner":"czosel"},"jolie":{"title":"Jolie","require":"clike","owner":"thesave"},"jq":{"title":"JQ","owner":"RunDevelopment"},"jsdoc":{"title":"JSDoc","require":["javascript","javadoclike","typescript"],"modify":"javascript","optional":["actionscript","coffeescript"],"owner":"RunDevelopment"},"js-extras":{"title":"JS Extras","require":"javascript","modify":"javascript","optional":["actionscript","coffeescript","flow","n4js","typescript"],"owner":"RunDevelopment"},"json":{"title":"JSON","alias":"webmanifest","aliasTitles":{"webmanifest":"Web App Manifest"},"owner":"CupOfTea696"},"json5":{"title":"JSON5","require":"json","owner":"RunDevelopment"},"jsonp":{"title":"JSONP","require":"json","owner":"RunDevelopment"},"jsstacktrace":{"title":"JS stack trace","owner":"sbrl"},"js-templates":{"title":"JS Templates","require":"javascript","modify":"javascript","optional":["css","css-extras","graphql","markdown","markup","sql"],"owner":"RunDevelopment"},"julia":{"title":"Julia","owner":"cdagnino"},"keepalived":{"title":"Keepalived Configure","owner":"dev-itsheng"},"keyman":{"title":"Keyman","owner":"mcdurdin"},"kotlin":{"title":"Kotlin","alias":["kt","kts"],"aliasTitles":{"kts":"Kotlin Script"},"require":"clike","owner":"Golmote"},"kumir":{"title":"KuMir (КуМир)","alias":"kum","owner":"edukisto"},"kusto":{"title":"Kusto","owner":"RunDevelopment"},"latex":{"title":"LaTeX","alias":["tex","context"],"aliasTitles":{"tex":"TeX","context":"ConTeXt"},"owner":"japborst"},"latte":{"title":"Latte","require":["clike","markup-templating","php"],"owner":"nette"},"less":{"title":"Less","require":"css","optional":"css-extras","owner":"Golmote"},"lilypond":{"title":"LilyPond","require":"scheme","alias":"ly","owner":"RunDevelopment"},"liquid":{"title":"Liquid","require":"markup-templating","owner":"cinhtau"},"lisp":{"title":"Lisp","alias":["emacs","elisp","emacs-lisp"],"owner":"JuanCaicedo"},"livescript":{"title":"LiveScript","owner":"Golmote"},"llvm":{"title":"LLVM IR","owner":"porglezomp"},"log":{"title":"Log file","optional":"javastacktrace","owner":"RunDevelopment"},"lolcode":{"title":"LOLCODE","owner":"Golmote"},"lua":{"title":"Lua","owner":"Golmote"},"magma":{"title":"Magma (CAS)","owner":"RunDevelopment"},"makefile":{"title":"Makefile","owner":"Golmote"},"markdown":{"title":"Markdown","require":"markup","optional":"yaml","alias":"md","owner":"Golmote"},"markup-templating":{"title":"Markup templating","require":"markup","owner":"Golmote"},"mata":{"title":"Mata","owner":"RunDevelopment"},"matlab":{"title":"MATLAB","owner":"Golmote"},"maxscript":{"title":"MAXScript","owner":"RunDevelopment"},"mel":{"title":"MEL","owner":"Golmote"},"mermaid":{"title":"Mermaid","owner":"RunDevelopment"},"metafont":{"title":"METAFONT","owner":"LaeriExNihilo"},"mizar":{"title":"Mizar","owner":"Golmote"},"mongodb":{"title":"MongoDB","owner":"airs0urce","require":"javascript"},"monkey":{"title":"Monkey","owner":"Golmote"},"moonscript":{"title":"MoonScript","alias":"moon","owner":"RunDevelopment"},"n1ql":{"title":"N1QL","owner":"TMWilds"},"n4js":{"title":"N4JS","require":"javascript","optional":"jsdoc","alias":"n4jsd","owner":"bsmith-n4"},"nand2tetris-hdl":{"title":"Nand To Tetris HDL","owner":"stephanmax"},"naniscript":{"title":"Naninovel Script","owner":"Elringus","alias":"nani"},"nasm":{"title":"NASM","owner":"rbmj"},"neon":{"title":"NEON","owner":"nette"},"nevod":{"title":"Nevod","owner":"nezaboodka"},"nginx":{"title":"nginx","owner":"volado"},"nim":{"title":"Nim","owner":"Golmote"},"nix":{"title":"Nix","owner":"Golmote"},"nsis":{"title":"NSIS","owner":"idleberg"},"objectivec":{"title":"Objective-C","require":"c","alias":"objc","owner":"uranusjr"},"ocaml":{"title":"OCaml","owner":"Golmote"},"odin":{"title":"Odin","owner":"edukisto"},"opencl":{"title":"OpenCL","require":"c","modify":["c","cpp"],"owner":"Milania1"},"openqasm":{"title":"OpenQasm","alias":"qasm","owner":"RunDevelopment"},"oz":{"title":"Oz","owner":"Golmote"},"parigp":{"title":"PARI/GP","owner":"Golmote"},"parser":{"title":"Parser","require":"markup","owner":"Golmote"},"pascal":{"title":"Pascal","alias":"objectpascal","aliasTitles":{"objectpascal":"Object Pascal"},"owner":"Golmote"},"pascaligo":{"title":"Pascaligo","owner":"DefinitelyNotAGoat"},"psl":{"title":"PATROL Scripting Language","owner":"bertysentry"},"pcaxis":{"title":"PC-Axis","alias":"px","owner":"RunDevelopment"},"peoplecode":{"title":"PeopleCode","alias":"pcode","owner":"RunDevelopment"},"perl":{"title":"Perl","owner":"Golmote"},"php":{"title":"PHP","require":"markup-templating","owner":"milesj"},"phpdoc":{"title":"PHPDoc","require":["php","javadoclike"],"modify":"php","owner":"RunDevelopment"},"php-extras":{"title":"PHP Extras","require":"php","modify":"php","owner":"milesj"},"plant-uml":{"title":"PlantUML","alias":"plantuml","owner":"RunDevelopment"},"plsql":{"title":"PL/SQL","require":"sql","owner":"Golmote"},"powerquery":{"title":"PowerQuery","alias":["pq","mscript"],"owner":"peterbud"},"powershell":{"title":"PowerShell","owner":"nauzilus"},"processing":{"title":"Processing","require":"clike","owner":"Golmote"},"prolog":{"title":"Prolog","owner":"Golmote"},"promql":{"title":"PromQL","owner":"arendjr"},"properties":{"title":".properties","owner":"Golmote"},"protobuf":{"title":"Protocol Buffers","require":"clike","owner":"just-boris"},"pug":{"title":"Pug","require":["markup","javascript"],"optional":["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],"owner":"Golmote"},"puppet":{"title":"Puppet","owner":"Golmote"},"pure":{"title":"Pure","optional":["c","cpp","fortran"],"owner":"Golmote"},"purebasic":{"title":"PureBasic","require":"clike","alias":"pbfasm","owner":"HeX0R101"},"purescript":{"title":"PureScript","require":"haskell","alias":"purs","owner":"sriharshachilakapati"},"python":{"title":"Python","alias":"py","owner":"multipetros"},"qsharp":{"title":"Q#","require":"clike","alias":"qs","owner":"fedonman"},"q":{"title":"Q (kdb+ database)","owner":"Golmote"},"qml":{"title":"QML","require":"javascript","owner":"RunDevelopment"},"qore":{"title":"Qore","require":"clike","owner":"temnroegg"},"r":{"title":"R","owner":"Golmote"},"racket":{"title":"Racket","require":"scheme","alias":"rkt","owner":"RunDevelopment"},"cshtml":{"title":"Razor C#","alias":"razor","require":["markup","csharp"],"optional":["css","css-extras","javascript","js-extras"],"owner":"RunDevelopment"},"jsx":{"title":"React JSX","require":["markup","javascript"],"optional":["jsdoc","js-extras","js-templates"],"owner":"vkbansal"},"tsx":{"title":"React TSX","require":["jsx","typescript"]},"reason":{"title":"Reason","require":"clike","owner":"Golmote"},"regex":{"title":"Regex","owner":"RunDevelopment"},"rego":{"title":"Rego","owner":"JordanSh"},"renpy":{"title":"Ren'py","alias":"rpy","owner":"HyuchiaDiego"},"rescript":{"title":"ReScript","alias":"res","owner":"vmarcosp"},"rest":{"title":"reST (reStructuredText)","owner":"Golmote"},"rip":{"title":"Rip","owner":"ravinggenius"},"roboconf":{"title":"Roboconf","owner":"Golmote"},"robotframework":{"title":"Robot Framework","alias":"robot","owner":"RunDevelopment"},"ruby":{"title":"Ruby","require":"clike","alias":"rb","owner":"samflores"},"rust":{"title":"Rust","owner":"Golmote"},"sas":{"title":"SAS","optional":["groovy","lua","sql"],"owner":"Golmote"},"sass":{"title":"Sass (Sass)","require":"css","optional":"css-extras","owner":"Golmote"},"scss":{"title":"Sass (SCSS)","require":"css","optional":"css-extras","owner":"MoOx"},"scala":{"title":"Scala","require":"java","owner":"jozic"},"scheme":{"title":"Scheme","owner":"bacchus123"},"shell-session":{"title":"Shell session","require":"bash","alias":["sh-session","shellsession"],"owner":"RunDevelopment"},"smali":{"title":"Smali","owner":"RunDevelopment"},"smalltalk":{"title":"Smalltalk","owner":"Golmote"},"smarty":{"title":"Smarty","require":"markup-templating","optional":"php","owner":"Golmote"},"sml":{"title":"SML","alias":"smlnj","aliasTitles":{"smlnj":"SML/NJ"},"owner":"RunDevelopment"},"solidity":{"title":"Solidity (Ethereum)","alias":"sol","require":"clike","owner":"glachaud"},"solution-file":{"title":"Solution file","alias":"sln","owner":"RunDevelopment"},"soy":{"title":"Soy (Closure Template)","require":"markup-templating","owner":"Golmote"},"sparql":{"title":"SPARQL","require":"turtle","owner":"Triply-Dev","alias":"rq"},"splunk-spl":{"title":"Splunk SPL","owner":"RunDevelopment"},"sqf":{"title":"SQF: Status Quo Function (Arma 3)","require":"clike","owner":"RunDevelopment"},"sql":{"title":"SQL","owner":"multipetros"},"squirrel":{"title":"Squirrel","require":"clike","owner":"RunDevelopment"},"stan":{"title":"Stan","owner":"RunDevelopment"},"stata":{"title":"Stata Ado","require":["mata","java","python"],"owner":"RunDevelopment"},"iecst":{"title":"Structured Text (IEC 61131-3)","owner":"serhioromano"},"stylus":{"title":"Stylus","owner":"vkbansal"},"supercollider":{"title":"SuperCollider","alias":"sclang","owner":"RunDevelopment"},"swift":{"title":"Swift","owner":"chrischares"},"systemd":{"title":"Systemd configuration file","owner":"RunDevelopment"},"t4-templating":{"title":"T4 templating","owner":"RunDevelopment"},"t4-cs":{"title":"T4 Text Templates (C#)","require":["t4-templating","csharp"],"alias":"t4","owner":"RunDevelopment"},"t4-vb":{"title":"T4 Text Templates (VB)","require":["t4-templating","vbnet"],"owner":"RunDevelopment"},"tap":{"title":"TAP","owner":"isaacs","require":"yaml"},"tcl":{"title":"Tcl","owner":"PeterChaplin"},"tt2":{"title":"Template Toolkit 2","require":["clike","markup-templating"],"owner":"gflohr"},"textile":{"title":"Textile","require":"markup","optional":"css","owner":"Golmote"},"toml":{"title":"TOML","owner":"RunDevelopment"},"tremor":{"title":"Tremor","alias":["trickle","troy"],"owner":"darach","aliasTitles":{"trickle":"trickle","troy":"troy"}},"turtle":{"title":"Turtle","alias":"trig","aliasTitles":{"trig":"TriG"},"owner":"jakubklimek"},"twig":{"title":"Twig","require":"markup-templating","owner":"brandonkelly"},"typescript":{"title":"TypeScript","require":"javascript","optional":"js-templates","alias":"ts","owner":"vkbansal"},"typoscript":{"title":"TypoScript","alias":"tsconfig","aliasTitles":{"tsconfig":"TSConfig"},"owner":"dkern"},"unrealscript":{"title":"UnrealScript","alias":["uscript","uc"],"owner":"RunDevelopment"},"uorazor":{"title":"UO Razor Script","owner":"jaseowns"},"uri":{"title":"URI","alias":"url","aliasTitles":{"url":"URL"},"owner":"RunDevelopment"},"v":{"title":"V","require":"clike","owner":"taggon"},"vala":{"title":"Vala","require":"clike","optional":"regex","owner":"TemplarVolk"},"vbnet":{"title":"VB.Net","require":"basic","owner":"Bigsby"},"velocity":{"title":"Velocity","require":"markup","owner":"Golmote"},"verilog":{"title":"Verilog","owner":"a-rey"},"vhdl":{"title":"VHDL","owner":"a-rey"},"vim":{"title":"vim","owner":"westonganger"},"visual-basic":{"title":"Visual Basic","alias":["vb","vba"],"aliasTitles":{"vba":"VBA"},"owner":"Golmote"},"warpscript":{"title":"WarpScript","owner":"RunDevelopment"},"wasm":{"title":"WebAssembly","owner":"Golmote"},"web-idl":{"title":"Web IDL","alias":"webidl","owner":"RunDevelopment"},"wgsl":{"title":"WGSL","owner":"Dr4gonthree"},"wiki":{"title":"Wiki markup","require":"markup","owner":"Golmote"},"wolfram":{"title":"Wolfram language","alias":["mathematica","nb","wl"],"aliasTitles":{"mathematica":"Mathematica","nb":"Mathematica Notebook"},"owner":"msollami"},"wren":{"title":"Wren","owner":"clsource"},"xeora":{"title":"Xeora","require":"markup","alias":"xeoracube","aliasTitles":{"xeoracube":"XeoraCube"},"owner":"freakmaxi"},"xml-doc":{"title":"XML doc (.net)","require":"markup","modify":["csharp","fsharp","vbnet"],"owner":"RunDevelopment"},"xojo":{"title":"Xojo (REALbasic)","owner":"Golmote"},"xquery":{"title":"XQuery","require":"markup","owner":"Golmote"},"yaml":{"title":"YAML","alias":"yml","owner":"hason"},"yang":{"title":"YANG","owner":"RunDevelopment"},"zig":{"title":"Zig","owner":"RunDevelopment"}},"plugins":{"meta":{"path":"plugins/{id}/prism-{id}","link":"plugins/{id}/"},"line-highlight":{"title":"Line Highlight","description":"Highlights specific lines and/or line ranges."},"line-numbers":{"title":"Line Numbers","description":"Line number at the beginning of code lines.","owner":"kuba-kubula"},"show-invisibles":{"title":"Show Invisibles","description":"Show hidden characters such as tabs and line breaks.","optional":["autolinker","data-uri-highlight"]},"autolinker":{"title":"Autolinker","description":"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},"wpd":{"title":"WebPlatform Docs","description":"Makes tokens link to <a href=\"https://webplatform.github.io/docs/\">WebPlatform.org documentation</a>. The links open in a new tab."},"custom-class":{"title":"Custom Class","description":"This plugin allows you to prefix Prism's default classes (<code>.comment</code> can become <code>.namespace--comment</code>) or replace them with your defined ones (like <code>.editor__comment</code>). You can even add new classes.","owner":"dvkndn","noCSS":true},"file-highlight":{"title":"File Highlight","description":"Fetch external files and highlight them with Prism. Used on the Prism website itself.","noCSS":true},"show-language":{"title":"Show Language","description":"Display the highlighted language in code blocks (inline code does not show the label).","owner":"nauzilus","noCSS":true,"require":"toolbar"},"jsonp-highlight":{"title":"JSONP Highlight","description":"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).","noCSS":true,"owner":"nauzilus"},"highlight-keywords":{"title":"Highlight Keywords","description":"Adds special CSS classes for each keyword for fine-grained highlighting.","owner":"vkbansal","noCSS":true},"remove-initial-line-feed":{"title":"Remove initial line feed","description":"Removes the initial line feed in code blocks.","owner":"Golmote","noCSS":true},"inline-color":{"title":"Inline color","description":"Adds a small inline preview for colors in style sheets.","require":"css-extras","owner":"RunDevelopment"},"previewers":{"title":"Previewers","description":"Previewers for angles, colors, gradients, easing and time.","require":"css-extras","owner":"Golmote"},"autoloader":{"title":"Autoloader","description":"Automatically loads the needed languages to highlight the code blocks.","owner":"Golmote","noCSS":true},"keep-markup":{"title":"Keep Markup","description":"Prevents custom markup from being dropped out during highlighting.","owner":"Golmote","optional":"normalize-whitespace","noCSS":true},"command-line":{"title":"Command Line","description":"Display a command line with a prompt and, optionally, the output/response from the commands.","owner":"chriswells0"},"unescaped-markup":{"title":"Unescaped Markup","description":"Write markup without having to escape anything."},"normalize-whitespace":{"title":"Normalize Whitespace","description":"Supports multiple operations to normalize whitespace in code blocks.","owner":"zeitgeist87","optional":"unescaped-markup","noCSS":true},"data-uri-highlight":{"title":"Data-URI Highlight","description":"Highlights data-URI contents.","owner":"Golmote","noCSS":true},"toolbar":{"title":"Toolbar","description":"Attach a toolbar for plugins to easily register buttons on the top of a code block.","owner":"mAAdhaTTah"},"copy-to-clipboard":{"title":"Copy to Clipboard Button","description":"Add a button that copies the code block to the clipboard when clicked.","owner":"mAAdhaTTah","require":"toolbar","noCSS":true},"download-button":{"title":"Download Button","description":"A button in the toolbar of a code block adding a convenient way to download a code file.","owner":"Golmote","require":"toolbar","noCSS":true},"match-braces":{"title":"Match braces","description":"Highlights matching braces.","owner":"RunDevelopment"},"diff-highlight":{"title":"Diff Highlight","description":"Highlights the code inside diff blocks.","owner":"RunDevelopment","require":"diff"},"filter-highlight-all":{"title":"Filter highlightAll","description":"Filters the elements the <code>highlightAll</code> and <code>highlightAllUnder</code> methods actually highlight.","owner":"RunDevelopment","noCSS":true},"treeview":{"title":"Treeview","description":"A language with special styles to highlight file system tree structures.","owner":"Golmote"}}}; -if ( true && module.exports) { module.exports = components; } - -/***/ }, - -/***/ 6972 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ $S: () => (/* binding */ useCurrentSidebarCategory), -/* harmony export */ B5: () => (/* binding */ useDocRootMetadata), -/* harmony export */ Nr: () => (/* binding */ findFirstSidebarItemLink), -/* harmony export */ OF: () => (/* binding */ useSidebarBreadcrumbs), -/* harmony export */ QB: () => (/* binding */ useLayoutDoc), -/* harmony export */ Vd: () => (/* binding */ useDocsVersionCandidates), -/* harmony export */ Y: () => (/* binding */ useVisibleSidebarItems), -/* harmony export */ a4: () => (/* binding */ useCurrentSidebarSiblings), -/* harmony export */ cC: () => (/* binding */ useDocById), -/* harmony export */ d1: () => (/* binding */ filterDocCardListItems), -/* harmony export */ fW: () => (/* binding */ useLayoutDocsSidebar), -/* harmony export */ w8: () => (/* binding */ isActiveSidebarItem) -/* harmony export */ }); -/* unused harmony exports findSidebarCategory, findFirstSidebarItemCategoryLink, isVisibleSidebarItem */ -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6347); -/* harmony import */ var _docusaurus_renderRoutes__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2831); -/* harmony import */ var _docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7712); -/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(9169); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(1682); -/* harmony import */ var _docsPreferredVersion__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(3886); -/* harmony import */ var _docsVersion__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(3025); -/* harmony import */ var _docsSidebar__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(609); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function useDocById(id){const version=(0,_docsVersion__WEBPACK_IMPORTED_MODULE_7__/* .useDocsVersion */ .r)();if(!id){return undefined;}const doc=version.docs[id];if(!doc){throw new Error(`no version doc found by id=${id}`);}return doc;}/** - * Pure function, similar to `Array#find`, but works on the sidebar tree. - */function findSidebarCategory(sidebar,predicate){for(const item of sidebar){if(item.type==='category'){if(predicate(item)){return item;}const subItem=findSidebarCategory(item.items,predicate);if(subItem){return subItem;}}}return undefined;}/** - * Best effort to assign a link to a sidebar category. If the category doesn't - * have a link itself, we link to the first sub item with a link. - */function findFirstSidebarItemCategoryLink(item){if(item.href&&!item.linkUnlisted){return item.href;}for(const subItem of item.items){const link=findFirstSidebarItemLink(subItem);if(link){return link;}}return undefined;}/** - * Best effort to assign a link to a sidebar item. - */function findFirstSidebarItemLink(item){if(item.type==='link'&&!item.unlisted){return item.href;}if(item.type==='category'){return findFirstSidebarItemCategoryLink(item);}// Other items types, like "html" -return undefined;}/** - * Gets the category associated with the current location. Should only be used - * on category index pages. - */function useCurrentSidebarCategory(){const{pathname}=(0,_docusaurus_router__WEBPACK_IMPORTED_MODULE_1__/* .useLocation */ .zy)();const sidebar=(0,_docsSidebar__WEBPACK_IMPORTED_MODULE_8__/* .useDocsSidebar */ .t)();if(!sidebar){throw new Error('Unexpected: cant find current sidebar in context');}const categoryBreadcrumbs=getSidebarBreadcrumbs({sidebarItems:sidebar.items,pathname,onlyCategories:true});const deepestCategory=categoryBreadcrumbs.slice(-1)[0];if(!deepestCategory){throw new Error(`${pathname} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);}return deepestCategory;}/** - * Gets the category associated with the current location. Should only be used - * on category index pages. - */function useCurrentSidebarSiblings(){const{pathname}=(0,_docusaurus_router__WEBPACK_IMPORTED_MODULE_1__/* .useLocation */ .zy)();const sidebar=(0,_docsSidebar__WEBPACK_IMPORTED_MODULE_8__/* .useDocsSidebar */ .t)();if(!sidebar){throw new Error('Unexpected: cant find current sidebar in context');}const categoryBreadcrumbs=getSidebarBreadcrumbs({sidebarItems:sidebar.items,pathname,onlyCategories:true});const deepestCategory=categoryBreadcrumbs.slice(-1)[0];return deepestCategory?.items??sidebar.items;}const isActive=(testedPath,activePath)=>typeof testedPath!=='undefined'&&(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_4__/* .isSamePath */ .ys)(testedPath,activePath);const containsActiveSidebarItem=(items,activePath)=>items.some(subItem=>isActiveSidebarItem(subItem,activePath));/** - * Checks if a sidebar item should be active, based on the active path. - */function isActiveSidebarItem(item,activePath){if(item.type==='link'){return isActive(item.href,activePath);}if(item.type==='category'){return isActive(item.href,activePath)||containsActiveSidebarItem(item.items,activePath);}return false;}function isVisibleSidebarItem(item,activePath){switch(item.type){case'category':return isActiveSidebarItem(item,activePath)||typeof item.href!=='undefined'&&!item.linkUnlisted||item.items.some(subItem=>isVisibleSidebarItem(subItem,activePath));case'link':// An unlisted item remains visible if it is active -return!item.unlisted||isActiveSidebarItem(item,activePath);default:return true;}}function useVisibleSidebarItems(items,activePath){return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>items.filter(item=>isVisibleSidebarItem(item,activePath)),[items,activePath]);}/** - * Get the sidebar the breadcrumbs for a given pathname - * Ordered from top to bottom - */function getSidebarBreadcrumbs({sidebarItems,pathname,onlyCategories=false}){const breadcrumbs=[];function extract(items){for(const item of items){if(item.type==='category'&&((0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_4__/* .isSamePath */ .ys)(item.href,pathname)||extract(item.items))||item.type==='link'&&(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_4__/* .isSamePath */ .ys)(item.href,pathname)){const filtered=onlyCategories&&item.type!=='category';if(!filtered){breadcrumbs.unshift(item);}return true;}}return false;}extract(sidebarItems);return breadcrumbs;}/** - * Gets the breadcrumbs of the current doc page, based on its sidebar location. - * Returns `null` if there's no sidebar or breadcrumbs are disabled. - */function useSidebarBreadcrumbs(){const sidebar=(0,_docsSidebar__WEBPACK_IMPORTED_MODULE_8__/* .useDocsSidebar */ .t)();const{pathname}=(0,_docusaurus_router__WEBPACK_IMPORTED_MODULE_1__/* .useLocation */ .zy)();const breadcrumbsOption=(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_3__/* .useActivePlugin */ .vT)()?.pluginData.breadcrumbs;if(breadcrumbsOption===false||!sidebar){return null;}return getSidebarBreadcrumbs({sidebarItems:sidebar.items,pathname});}/** - * "Version candidates" are mostly useful for the layout components, which must - * be able to work on all pages. For example, if a user has `{ type: "doc", - * docId: "intro" }` as a navbar item, which version does that refer to? We - * believe that it could refer to at most three version candidates: - * - * 1. The **active version**, the one that the user is currently browsing. See - * {@link useActiveDocContext}. - * 2. The **preferred version**, the one that the user last visited. See - * {@link useDocsPreferredVersion}. - * 3. The **latest version**, the "default". See {@link useLatestVersion}. - * - * @param docsPluginId The plugin ID to get versions from. - * @returns An array of 1~3 versions with priorities defined above, guaranteed - * to be unique and non-sparse. Will be memoized, hence stable for deps array. - */function useDocsVersionCandidates(docsPluginId){const{activeVersion}=(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_3__/* .useActiveDocContext */ .zK)(docsPluginId);const{preferredVersion}=(0,_docsPreferredVersion__WEBPACK_IMPORTED_MODULE_6__/* .useDocsPreferredVersion */ .g1)(docsPluginId);const latestVersion=(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_3__/* .useLatestVersion */ .r7)(docsPluginId);return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>(0,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_5__/* .uniq */ .sb)([activeVersion,preferredVersion,latestVersion].filter(Boolean)),[activeVersion,preferredVersion,latestVersion]);}/** - * The layout components, like navbar items, must be able to work on all pages, - * even on non-doc ones where there's no version context, so a sidebar ID could - * be ambiguous. This hook would always return a sidebar to be linked to. See - * also {@link useDocsVersionCandidates} for how this selection is done. - * - * @throws This hook throws if a sidebar with said ID is not found. - */function useLayoutDocsSidebar(sidebarId,docsPluginId){const versions=useDocsVersionCandidates(docsPluginId);return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>{const allSidebars=versions.flatMap(version=>version.sidebars?Object.entries(version.sidebars):[]);const sidebarEntry=allSidebars.find(sidebar=>sidebar[0]===sidebarId);if(!sidebarEntry){throw new Error(`Can't find any sidebar with id "${sidebarId}" in version${versions.length>1?'s':''} ${versions.map(version=>version.name).join(', ')}". -Available sidebar ids are: -- ${allSidebars.map(entry=>entry[0]).join('\n- ')}`);}return sidebarEntry[1];},[sidebarId,versions]);}/** - * The layout components, like navbar items, must be able to work on all pages, - * even on non-doc ones where there's no version context, so a doc ID could be - * ambiguous. This hook would always return a doc to be linked to. See also - * {@link useDocsVersionCandidates} for how this selection is done. - * - * @throws This hook throws if a doc with said ID is not found. - */function useLayoutDoc(docId,docsPluginId){const versions=useDocsVersionCandidates(docsPluginId);return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>{const allDocs=versions.flatMap(version=>version.docs);const doc=allDocs.find(versionDoc=>versionDoc.id===docId);if(!doc){const isDraft=versions.flatMap(version=>version.draftIds).includes(docId);// Drafts should be silently filtered instead of throwing -if(isDraft){return null;}throw new Error(`Couldn't find any doc with id "${docId}" in version${versions.length>1?'s':''} "${versions.map(version=>version.name).join(', ')}". -Available doc ids are: -- ${(0,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_5__/* .uniq */ .sb)(allDocs.map(versionDoc=>versionDoc.id)).join('\n- ')}`);}return doc;},[docId,versions]);}// TODO later read version/route directly from context -/** - * The docs plugin creates nested routes, with the top-level route providing the - * version metadata, and the subroutes creating individual doc pages. This hook - * will match the current location against all known sub-routes. - * - * @param props The props received by `@theme/DocRoot` - * @returns The data of the relevant document at the current location, or `null` - * if no document associated with the current location can be found. - */function useDocRootMetadata({route}){const location=(0,_docusaurus_router__WEBPACK_IMPORTED_MODULE_1__/* .useLocation */ .zy)();const versionMetadata=(0,_docsVersion__WEBPACK_IMPORTED_MODULE_7__/* .useDocsVersion */ .r)();const docRoutes=route.routes;const currentDocRoute=docRoutes.find(docRoute=>(0,_docusaurus_router__WEBPACK_IMPORTED_MODULE_1__/* .matchPath */ .B6)(location.pathname,docRoute));if(!currentDocRoute){return null;}// For now, the sidebarName is added as route config: not ideal! -const sidebarName=currentDocRoute.sidebar;const sidebarItems=sidebarName?versionMetadata.docsSidebars[sidebarName]:undefined;const docElement=(0,_docusaurus_renderRoutes__WEBPACK_IMPORTED_MODULE_2__/* .renderRoutes */ .v)(docRoutes);return{docElement,sidebarName,sidebarItems};}/** - * Filter items we don't want to display on the doc card list view - * @param items - */function filterDocCardListItems(items){return items.filter(item=>{const canHaveLink=item.type==='category'||item.type==='link';if(canHaveLink){return!!findFirstSidebarItemLink(item);}return true;});} - -/***/ }, - -/***/ 6982 -(module) { - -"use strict"; -module.exports = require("crypto"); - -/***/ }, - -/***/ 7022 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ AdmonitionTypeDanger) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(986); -/* harmony import */ var _theme_Admonition_Layout__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7611); -/* harmony import */ var _theme_Admonition_Icon_Danger__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(633); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */const infimaClassName='alert alert--danger';const defaultProps={icon:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_theme_Admonition_Icon_Danger__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A,{}),title:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})};function AdmonitionTypeDanger(props){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_theme_Admonition_Layout__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A,{...defaultProps,...props,className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(infimaClassName,props.className),children:props.children});} - -/***/ }, - -/***/ 7037 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ assets: () => (/* binding */ assets), -/* harmony export */ contentTitle: () => (/* binding */ contentTitle), -/* harmony export */ "default": () => (/* binding */ MDXContent), -/* harmony export */ frontMatter: () => (/* binding */ frontMatter), -/* harmony export */ metadata: () => (/* reexport default export from named module */ _site_docusaurus_docusaurus_plugin_content_docs_default_site_docs_ideas_and_exploration_md_e71_json__WEBPACK_IMPORTED_MODULE_0__), -/* harmony export */ toc: () => (/* binding */ toc) -/* harmony export */ }); -/* harmony import */ var _site_docusaurus_docusaurus_plugin_content_docs_default_site_docs_ideas_and_exploration_md_e71_json__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6672); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4848); -/* harmony import */ var _mdx_js_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(8453); - - -const frontMatter = { - type: 'ideas', - project: 'cmdforge', - updated: new Date('2026-01-17T00:00:00.000Z') -}; -const contentTitle = 'Ideas & Exploration'; - -const assets = { - -}; - - - -const toc = [{ - "value": "Completed", - "id": "completed", - "level": 2 -}, { - "value": "Ideas", - "id": "ideas", - "level": 2 -}]; -function _createMdxContent(props) { - const _components = { - h1: "h1", - h2: "h2", - header: "header", - input: "input", - li: "li", - ul: "ul", - ...(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__/* .useMDXComponents */ .R)(), - ...props.components - }; - return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.Fragment, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.header, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h1, { - id: "ideas--exploration", - children: "Ideas & Exploration" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "completed", - children: "Completed" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - className: "contains-task-list", - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Tool marketplace design #medium"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Tool search and filtering #medium"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "User tool ratings/reviews #low"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Tool composition and chaining #medium"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Tool testing framework #medium"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "ideas", - children: "Ideas" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - className: "contains-task-list", - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Tool usage analytics #low"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Plugin architecture design #medium"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Custom AI backend support #medium"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "VS Code extension #low"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Provider auto-detection #low"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Mobile companion app #low"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Tool templates/scaffolding #medium"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Natural language tool creation #medium"] - }), "\n"] - })] - }); -} -function MDXContent(props = {}) { - const {wrapper: MDXLayout} = { - ...(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__/* .useMDXComponents */ .R)(), - ...props.components - }; - return MDXLayout ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(MDXLayout, { - ...props, - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_createMdxContent, { - ...props - }) - }) : _createMdxContent(props); -} - - - -/***/ }, - -/***/ 7065 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ W: () => (/* binding */ DEFAULT_PLUGIN_ID) -/* harmony export */ }); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// Constants used on the client-side: duplicated from server-side code -const DEFAULT_PLUGIN_ID='default'; - -/***/ }, - -/***/ 7069 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ AdmonitionTypeNote) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(986); -/* harmony import */ var _theme_Admonition_Layout__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7611); -/* harmony import */ var _theme_Admonition_Icon_Note__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(3550); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */const infimaClassName='alert alert--secondary';const defaultProps={icon:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_theme_Admonition_Icon_Note__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A,{}),title:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})};function AdmonitionTypeNote(props){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_theme_Admonition_Layout__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A,{...defaultProps,...props,className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(infimaClassName,props.className),children:props.children});} - -/***/ }, - -/***/ 7075 -(module) { - -"use strict"; -module.exports = require("node:stream"); - -/***/ }, - -/***/ 7093 -(module) { - -"use strict"; -module.exports = /*#__PURE__*/JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}'); - -/***/ }, - -/***/ 7121 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ DocsRoot) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7559); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(5500); -/* harmony import */ var _docusaurus_renderRoutes__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(2831); -/* harmony import */ var _theme_Layout__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(8768); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function DocsRoot(props){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__/* .HtmlClassNameProvider */ .e3,{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__/* .ThemeClassNames */ .G.wrapper.docsPages),children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_theme_Layout__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A,{children:(0,_docusaurus_renderRoutes__WEBPACK_IMPORTED_MODULE_4__/* .renderRoutes */ .v)(props.route.routes)})});} - -/***/ }, - -/***/ 7123 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ DocRootLayout) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(609); -/* harmony import */ var _theme_BackToTopButton__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(83); -/* harmony import */ var _theme_DocRoot_Layout_Sidebar__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(2684); -/* harmony import */ var _theme_DocRoot_Layout_Main__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(3805); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(2607); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function DocRootLayout({children}){const sidebar=(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_1__/* .useDocsSidebar */ .t)();const[hiddenSidebarContainer,setHiddenSidebarContainer]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)("div",{className:(_styles_module_css__WEBPACK_IMPORTED_MODULE_5___default().docsWrapper),children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_theme_BackToTopButton__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)("div",{className:(_styles_module_css__WEBPACK_IMPORTED_MODULE_5___default().docRoot),children:[sidebar&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_theme_DocRoot_Layout_Sidebar__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A,{sidebar:sidebar.items,hiddenSidebarContainer:hiddenSidebarContainer,setHiddenSidebarContainer:setHiddenSidebarContainer}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_theme_DocRoot_Layout_Main__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A,{hiddenSidebarContainer:hiddenSidebarContainer,children:children})]})]});} - -/***/ }, - -/***/ 7126 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ FooterLinkItem) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_Link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(8774); -/* harmony import */ var _docusaurus_useBaseUrl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6025); -/* harmony import */ var _docusaurus_isInternalUrl__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(6654); -/* harmony import */ var _theme_Icon_ExternalLink__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(5835); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function FooterLinkItem({item}){const{to,href,label,prependBaseUrlToHref,className,...props}=item;const toUrl=(0,_docusaurus_useBaseUrl__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Ay)(to);const normalizedHref=(0,_docusaurus_useBaseUrl__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Ay)(href,{forcePrependBaseUrl:true});return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_docusaurus_Link__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('footer__link-item',className),...(href?{href:prependBaseUrlToHref?normalizedHref:href}:{to:toUrl}),...props,children:[label,href&&!(0,_docusaurus_isInternalUrl__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A)(href)&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_theme_Icon_ExternalLink__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A,{})]});} - -/***/ }, - -/***/ 7163 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ NavbarItem) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _theme_NavbarItem_ComponentTypes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6931); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function normalizeComponentType(type,props){// Backward compatibility: navbar item with no type set -// but containing dropdown items should use the type "dropdown" -if(!type||type==='default'){return'items'in props?'dropdown':'default';}return type;}function NavbarItem({type,...props}){const componentType=normalizeComponentType(type,props);const NavbarItemComponent=_theme_NavbarItem_ComponentTypes__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A[componentType];if(!NavbarItemComponent){throw new Error(`No NavbarItem component found for type "${type}".`);}return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(NavbarItemComponent,{...props});} - -/***/ }, - -/***/ 7182 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ NavbarContent) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6342); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7559); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(2685); -/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(2069); -/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(6305); -/* harmony import */ var _theme_NavbarItem__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(7163); -/* harmony import */ var _theme_Navbar_ColorModeToggle__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(5659); -/* harmony import */ var _theme_SearchBar__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(418); -/* harmony import */ var _theme_Navbar_MobileSidebar_Toggle__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(2230); -/* harmony import */ var _theme_Navbar_Logo__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(3502); -/* harmony import */ var _theme_Navbar_Search__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(4289); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(8484); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_13__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function useNavbarItems(){// TODO temporary casting until ThemeConfig type is improved -return (0,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__/* .useThemeConfig */ .p)().navbar.items;}function NavbarItems({items}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.Fragment,{children:items.map((item,i)=>/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_4__/* .ErrorCauseBoundary */ .k2,{onError:error=>new Error(`A theme navbar item failed to render. -Please double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config: -${JSON.stringify(item,null,2)}`,{cause:error}),children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_theme_NavbarItem__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A,{...item})},i))});}function NavbarContentLayout({left,right}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)("div",{className:"navbar__inner",children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)("div",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__/* .ThemeClassNames */ .G.layout.navbar.containerLeft,'navbar__items'),children:left}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)("div",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__/* .ThemeClassNames */ .G.layout.navbar.containerRight,'navbar__items navbar__items--right'),children:right})]});}function NavbarContent(){const mobileSidebar=(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_5__/* .useNavbarMobileSidebar */ .M)();const items=useNavbarItems();const[leftItems,rightItems]=(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_6__/* .splitNavbarItems */ .D)(items);const searchBarItem=items.find(item=>item.type==='search');return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(NavbarContentLayout,{left:/*#__PURE__*/// TODO stop hardcoding items? -(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.Fragment,{children:[!mobileSidebar.disabled&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_theme_Navbar_MobileSidebar_Toggle__WEBPACK_IMPORTED_MODULE_10__/* ["default"] */ .A,{}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_theme_Navbar_Logo__WEBPACK_IMPORTED_MODULE_11__/* ["default"] */ .A,{}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(NavbarItems,{items:leftItems})]}),right:/*#__PURE__*/// TODO stop hardcoding items? -// Ask the user to add the respective navbar items => more flexible -(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.Fragment,{children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(NavbarItems,{items:rightItems}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_theme_Navbar_ColorModeToggle__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .A,{className:(_styles_module_css__WEBPACK_IMPORTED_MODULE_13___default().colorModeToggle)}),!searchBarItem&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_theme_Navbar_Search__WEBPACK_IMPORTED_MODULE_12__/* ["default"] */ .A,{children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_theme_SearchBar__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .A,{})})]})});} - -/***/ }, - -/***/ 7243 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ h: () => (/* binding */ useFilteredAndTreeifiedTOC) -/* harmony export */ }); -/* unused harmony export useTreeifiedTOC */ -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function treeifyTOC(flatTOC){const headings=flatTOC.map(heading=>({...heading,parentIndex:-1,children:[]}));// Keep track of which previous index would be the current heading's direct -// parent. Each entry <i> is the last index of the `headings` array at heading -// level <i>. We will modify these indices as we iterate through all headings. -// e.g. if an ### H3 was last seen at index 2, then prevIndexForLevel[3] === 2 -// indices 0 and 1 will remain unused. -const prevIndexForLevel=Array(7).fill(-1);headings.forEach((curr,currIndex)=>{// Take the last seen index for each ancestor level. the highest index will -// be the direct ancestor of the current heading. -const ancestorLevelIndexes=prevIndexForLevel.slice(2,curr.level);curr.parentIndex=Math.max(...ancestorLevelIndexes);// Mark that curr.level was last seen at the current index. -prevIndexForLevel[curr.level]=currIndex;});const rootNodes=[];// For a given parentIndex, add each Node into that parent's `children` array -headings.forEach(heading=>{const{parentIndex,...rest}=heading;if(parentIndex>=0){headings[parentIndex].children.push(rest);}else{rootNodes.push(rest);}});return rootNodes;}/** - * Takes a flat TOC list (from the MDX loader) and treeifies it into what the - * TOC components expect. Memoized for performance. - */function useTreeifiedTOC(toc){return useMemo(()=>treeifyTOC(toc),[toc]);}function filterTOC({toc,minHeadingLevel,maxHeadingLevel}){function isValid(item){return item.level>=minHeadingLevel&&item.level<=maxHeadingLevel;}return toc.flatMap(item=>{const filteredChildren=filterTOC({toc:item.children,minHeadingLevel,maxHeadingLevel});if(isValid(item)){return[{...item,children:filteredChildren}];}return filteredChildren;});}/** - * Takes a flat TOC list (from the MDX loader) and treeifies it into what the - * TOC components expect, applying the `minHeadingLevel` and `maxHeadingLevel`. - * Memoized for performance. - * - * **Important**: this is not the same as `useTreeifiedTOC(toc.filter(...))`, - * because we have to filter the TOC after it has been treeified. This is mostly - * to ensure that weird TOC structures preserve their semantics. For example, an - * h3-h2-h4 sequence should not be treeified as an "h3 > h4" hierarchy with - * min=3, max=4, but should rather be "[h3, h4]" (since the h2 heading has split - * the two headings and they are not parent-children) - */function useFilteredAndTreeifiedTOC({toc,minHeadingLevel,maxHeadingLevel}){return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>filterTOC({toc:treeifyTOC(toc),minHeadingLevel,maxHeadingLevel}),[toc,minHeadingLevel,maxHeadingLevel]);} - -/***/ }, - -/***/ 7262 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ DocsVersionDropdownNavbarItem) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7712); -/* harmony import */ var _docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6972); -/* harmony import */ var _docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(3886); -/* harmony import */ var _docusaurus_Translate__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(986); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(7485); -/* harmony import */ var _theme_NavbarItem_DefaultNavbarItem__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(3828); -/* harmony import */ var _theme_NavbarItem_DropdownNavbarItem__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(9788); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function getVersionItems(versions,configs){if(configs){// Collect all the versions we have -const versionMap=new Map(versions.map(version=>[version.name,version]));const toVersionItem=(name,config)=>{const version=versionMap.get(name);if(!version){throw new Error(`No docs version exist for name '${name}', please verify your 'docsVersionDropdown' navbar item versions config. -Available version names:\n- ${versions.map(v=>`${v.name}`).join('\n- ')}`);}return{version,label:config?.label??version.label};};if(Array.isArray(configs)){return configs.map(name=>toVersionItem(name,undefined));}else{return Object.entries(configs).map(([name,config])=>toVersionItem(name,config));}}else{return versions.map(version=>({version,label:version.label}));}}function useVersionItems({docsPluginId,configs}){const versions=(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_1__/* .useVersions */ .jh)(docsPluginId);return getVersionItems(versions,configs);}function getVersionMainDoc(version){return version.docs.find(doc=>doc.id===version.mainDocId);}function getVersionTargetDoc(version,activeDocContext){// We try to link to the same doc, in another version -// When not possible, fallback to the "main doc" of the version -return activeDocContext.alternateDocVersions[version.name]??getVersionMainDoc(version);}// The version item to use for the "dropdown button" -function useDisplayedVersionItem({docsPluginId,versionItems}){// The order of the candidates matters! -const candidates=(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_2__/* .useDocsVersionCandidates */ .Vd)(docsPluginId);const candidateItems=candidates.map(candidate=>versionItems.find(vi=>vi.version===candidate)).filter(vi=>vi!==undefined);return candidateItems[0]??versionItems[0];}function DocsVersionDropdownNavbarItem({mobile,docsPluginId,dropdownActiveClassDisabled,dropdownItemsBefore,dropdownItemsAfter,versions:configs,...props}){const search=(0,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_5__/* .useHistorySelector */ .Hl)(history=>history.location.search);const hash=(0,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_5__/* .useHistorySelector */ .Hl)(history=>history.location.hash);const activeDocContext=(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_1__/* .useActiveDocContext */ .zK)(docsPluginId);const{savePreferredVersionName}=(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_3__/* .useDocsPreferredVersion */ .g1)(docsPluginId);const versionItems=useVersionItems({docsPluginId,configs});const displayedVersionItem=useDisplayedVersionItem({docsPluginId,versionItems});function versionItemToLink({version,label}){const targetDoc=getVersionTargetDoc(version,activeDocContext);return{label,// preserve ?search#hash suffix on version switches -to:`${targetDoc.path}${search}${hash}`,isActive:()=>version===activeDocContext.activeVersion,onClick:()=>savePreferredVersionName(version.name)};}const items=[...dropdownItemsBefore,...versionItems.map(versionItemToLink),...dropdownItemsAfter];// Mobile dropdown is handled a bit differently -const dropdownLabel=mobile&&items.length>1?(0,_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_4__/* .translate */ .T)({id:'theme.navbar.mobileVersionsDropdown.label',message:'Versions',description:'The label for the navbar versions dropdown on mobile view'}):displayedVersionItem.label;const dropdownTo=mobile&&items.length>1?undefined:getVersionTargetDoc(displayedVersionItem.version,activeDocContext).path;// We don't want to render a version dropdown with 0 or 1 item. If we build -// the site with a single docs version (onlyIncludeVersions: ['1.0.0']), -// We'd rather render a button instead of a dropdown -if(items.length<=1){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(_theme_NavbarItem_DefaultNavbarItem__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A,{...props,mobile:mobile,label:dropdownLabel,to:dropdownTo,isActive:dropdownActiveClassDisabled?()=>false:undefined});}return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(_theme_NavbarItem_DropdownNavbarItem__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A,{...props,mobile:mobile,label:dropdownLabel,to:dropdownTo,items:items,isActive:dropdownActiveClassDisabled?()=>false:undefined});} - -/***/ }, - -/***/ 7263 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ DocSidebarItem) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _theme_DocSidebarItem_Category__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5708); -/* harmony import */ var _theme_DocSidebarItem_Link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(8084); -/* harmony import */ var _theme_DocSidebarItem_Html__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(2065); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function DocSidebarItem({item,...props}){switch(item.type){case'category':return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_theme_DocSidebarItem_Category__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A,{item:item,...props});case'html':return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_theme_DocSidebarItem_Html__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A,{item:item,...props});case'link':default:return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_theme_DocSidebarItem_Link__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{item:item,...props});}} - -/***/ }, - -/***/ 7289 -(module) { - -"use strict"; -module.exports = /*#__PURE__*/JSON.parse('{"id":"todos","title":"CmdForge TODOs","description":"Active Tasks","source":"@site/docs/todos.md","sourceDirName":".","slug":"/todos","permalink":"/rob/CmdForge/todos","draft":false,"unlisted":false,"tags":[],"version":"current","sidebarPosition":6,"frontMatter":{"type":"todos","project":"cmdforge","updated":"2026-01-17T00:00:00.000Z","sidebar_position":6},"sidebar":"docs","previous":{"title":"Web UI Design","permalink":"/rob/CmdForge/reference/web-ui-spec"},"next":{"title":"Goals","permalink":"/rob/CmdForge/goals"}}'); - -/***/ }, - -/***/ 7325 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ DocItemContent) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7559); -/* harmony import */ var _docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(542); -/* harmony import */ var _theme_Heading__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4608); -/* harmony import */ var _theme_MDXContent__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(7910); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - *//** - Title can be declared inside md content or declared through - front matter and added manually. To make both cases consistent, - the added title is added under the same div.markdown block - See https://github.com/facebook/docusaurus/pull/4882#issuecomment-853021120 - - We render a "synthetic title" if: - - user doesn't ask to hide it with front matter - - the markdown content does not already contain a top-level h1 heading -*/function useSyntheticTitle(){const{metadata,frontMatter,contentTitle}=(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_3__/* .useDoc */ .u)();const shouldRender=!frontMatter.hide_title&&typeof contentTitle==='undefined';if(!shouldRender){return null;}return metadata.title;}function DocItemContent({children}){const syntheticTitle=useSyntheticTitle();return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)("div",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__/* .ThemeClassNames */ .G.docs.docMarkdown,'markdown'),children:[syntheticTitle&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("header",{children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_theme_Heading__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A,{as:"h1",children:syntheticTitle})}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_theme_MDXContent__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A,{children:children})]});} - -/***/ }, - -/***/ 7368 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ SiteMetadata) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_Head__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5260); -/* harmony import */ var _docusaurus_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4586); -/* harmony import */ var _docusaurus_useBaseUrl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6025); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(6342); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(5500); -/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(2131); -/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(2967); -/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(3535); -/* harmony import */ var _docusaurus_router__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(6347); -/* harmony import */ var _docusaurus_utils_common__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(440); -/* harmony import */ var _theme_SearchMetadata__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(1463); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// TODO move to SiteMetadataDefaults or theme-common ? -// Useful for i18n/SEO -// See https://developers.google.com/search/docs/advanced/crawling/localized-versions -// See https://github.com/facebook/docusaurus/issues/3317 -function AlternateLangHeaders(){const{i18n:{currentLocale,defaultLocale,localeConfigs}}=(0,_docusaurus_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)();const alternatePageUtils=(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_6__/* .useAlternatePageUtils */ .o)();const currentHtmlLang=localeConfigs[currentLocale].htmlLang;// HTML lang is a BCP 47 tag, but the Open Graph protocol requires -// using underscores instead of dashes. -// See https://ogp.me/#optional -// See https://en.wikipedia.org/wiki/IETF_language_tag) -const bcp47ToOpenGraphLocale=code=>code.replace('-','_');// Note: it is fine to use both "x-default" and "en" to target the same url -// See https://www.searchviu.com/en/multiple-hreflang-tags-one-url/ -return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsxs)(_docusaurus_Head__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A,{children:[Object.entries(localeConfigs).map(([locale,{htmlLang}])=>/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)("link",{rel:"alternate",href:alternatePageUtils.createUrl({locale,fullyQualified:true}),hrefLang:htmlLang},locale)),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)("link",{rel:"alternate",href:alternatePageUtils.createUrl({locale:defaultLocale,fullyQualified:true}),hrefLang:"x-default"}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)("meta",{property:"og:locale",content:bcp47ToOpenGraphLocale(currentHtmlLang)}),Object.values(localeConfigs).filter(config=>currentHtmlLang!==config.htmlLang).map(config=>/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)("meta",{property:"og:locale:alternate",content:bcp47ToOpenGraphLocale(config.htmlLang)},`meta-og-${config.htmlLang}`))]});}// Default canonical url inferred from current page location pathname -function useDefaultCanonicalUrl(){const{siteConfig:{url:siteUrl,baseUrl,trailingSlash}}=(0,_docusaurus_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)();// TODO using useLocation().pathname is not a super idea -// See https://github.com/facebook/docusaurus/issues/9170 -const{pathname}=(0,_docusaurus_router__WEBPACK_IMPORTED_MODULE_9__/* .useLocation */ .zy)();const canonicalPathname=(0,_docusaurus_utils_common__WEBPACK_IMPORTED_MODULE_10__/* .applyTrailingSlash */ .Ks)((0,_docusaurus_useBaseUrl__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Ay)(pathname),{trailingSlash,baseUrl});return siteUrl+canonicalPathname;}// TODO move to SiteMetadataDefaults or theme-common ? -function CanonicalUrlHeaders({permalink}){const{siteConfig:{url:siteUrl}}=(0,_docusaurus_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)();const defaultCanonicalUrl=useDefaultCanonicalUrl();const canonicalUrl=permalink?`${siteUrl}${permalink}`:defaultCanonicalUrl;return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsxs)(_docusaurus_Head__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A,{children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)("meta",{property:"og:url",content:canonicalUrl}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)("link",{rel:"canonical",href:canonicalUrl})]});}function SiteMetadata(){const{i18n:{currentLocale}}=(0,_docusaurus_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)();// TODO maybe move these 2 themeConfig to siteConfig? -// These seems useful for other themes as well -const{metadata,image:defaultImage}=(0,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_4__/* .useThemeConfig */ .p)();return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.Fragment,{children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsxs)(_docusaurus_Head__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A,{children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)("body",{className:_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_8__/* .keyboardFocusedClassName */ .w})]}),defaultImage&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_5__/* .PageMetadata */ .be,{image:defaultImage}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(CanonicalUrlHeaders,{}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(AlternateLangHeaders,{}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(_theme_SearchMetadata__WEBPACK_IMPORTED_MODULE_11__/* ["default"] */ .A,{tag:_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_7__/* .DEFAULT_SEARCH_TAG */ .C,locale:currentLocale}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(_docusaurus_Head__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A,{children:metadata.map((metadatum,i)=>/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)("meta",{...metadatum},i))})]});} - -/***/ }, - -/***/ 7387 -(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ _inheritsLoose) -/* harmony export */ }); -/* harmony import */ var _setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3662); - -function _inheritsLoose(t, o) { - t.prototype = Object.create(o.prototype), t.prototype.constructor = t, (0,_setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(t, o); -} - - -/***/ }, - -/***/ 7411 -(module) { - -"use strict"; -module.exports = /*#__PURE__*/JSON.parse('{"categoryGeneratedIndex":{"title":"Reference","description":"Technical reference documentation for CmdForge including API specs, design documents, and implementation guides.","slug":"/category/reference","permalink":"/rob/CmdForge/category/reference","sidebar":"docs","navigation":{"previous":{"title":"CmdForge Architecture","permalink":"/rob/CmdForge/architecture"},"next":{"title":"Provider Setup","permalink":"/rob/CmdForge/reference/providers"}}}}'); - -/***/ }, - -/***/ 7422 -(module, __unused_webpack_exports, __webpack_require__) { - -"use strict"; - - -module.exports = __webpack_require__(4362); - - -/***/ }, - -/***/ 7485 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ $Z: () => (/* binding */ useHistoryPopHandler), -/* harmony export */ Hl: () => (/* binding */ useHistorySelector), -/* harmony export */ jy: () => (/* binding */ mergeSearchStrings) -/* harmony export */ }); -/* unused harmony exports useQueryStringValue, useQueryString, useQueryStringList, useClearQueryString, mergeSearchParams */ -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6347); -/* harmony import */ var _reactUtils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(9532); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - *//** - * Permits to register a handler that will be called on history actions (pop, - * push, replace). If the handler returns `false`, the navigation transition - * will be blocked/cancelled. - */function useHistoryActionHandler(handler){const history=(0,_docusaurus_router__WEBPACK_IMPORTED_MODULE_1__/* .useHistory */ .W6)();const stableHandler=(0,_reactUtils__WEBPACK_IMPORTED_MODULE_2__/* .useEvent */ ._q)(handler);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(// See https://github.com/remix-run/history/blob/main/docs/blocking-transitions.md -()=>history.block((location,action)=>stableHandler(location,action)),[history,stableHandler]);}/** - * Permits to register a handler that will be called on history pop navigation - * (backward/forward). If the handler returns `false`, the backward/forward - * transition will be blocked. Unfortunately there's no good way to detect the - * "direction" (backward/forward) of the POP event. - */function useHistoryPopHandler(handler){useHistoryActionHandler((location,action)=>{if(action==='POP'){// Maybe block navigation if handler returns false -return handler(location,action);}// Don't block other navigation actions -return undefined;});}/** - * Permits to efficiently subscribe to a slice of the history - * See https://thisweekinreact.com/articles/useSyncExternalStore-the-underrated-react-api - * @param selector - */function useHistorySelector(selector){const history=(0,_docusaurus_router__WEBPACK_IMPORTED_MODULE_1__/* .useHistory */ .W6)();return (0,react__WEBPACK_IMPORTED_MODULE_0__.useSyncExternalStore)(history.listen,()=>selector(history),()=>selector({...history,location:{...history.location,// On the server/hydration, these attributes should always be empty -// Forcing empty state makes this hook safe from hydration errors -search:'',hash:'',state:undefined}}));}/** - * Permits to efficiently subscribe to a specific querystring value - * @param key - */function useQueryStringValue(key){return useHistorySelector(history=>{if(key===null){return null;}return new URLSearchParams(history.location.search).get(key);});}function useQueryStringUpdater(key){const history=useHistory();return useCallback((newValue,options)=>{const searchParams=new URLSearchParams(history.location.search);if(newValue){searchParams.set(key,newValue);}else{searchParams.delete(key);}const updateHistory=options?.push?history.push:history.replace;updateHistory({search:searchParams.toString()});},[key,history]);}function useQueryString(key){const value=useQueryStringValue(key)??'';const update=useQueryStringUpdater(key);return[value,update];}function useQueryStringListValues(key){// Unfortunately we can't just use searchParams.getAll(key) in the selector -// It would create a new array every time and lead to an infinite loop... -// The selector has to return a primitive/string value to avoid that... -const arrayJsonString=useHistorySelector(history=>{const values=new URLSearchParams(history.location.search).getAll(key);return JSON.stringify(values);});return useMemo(()=>JSON.parse(arrayJsonString),[arrayJsonString]);}function useQueryStringListUpdater(key){const history=useHistory();const setValues=useCallback((update,options)=>{const searchParams=new URLSearchParams(history.location.search);const newValues=Array.isArray(update)?update:update(searchParams.getAll(key));searchParams.delete(key);newValues.forEach(v=>searchParams.append(key,v));const updateHistory=options?.push?history.push:history.replace;updateHistory({search:searchParams.toString()});},[history,key]);return setValues;}function useQueryStringList(key){const values=useQueryStringListValues(key);const setValues=useQueryStringListUpdater(key);return[values,setValues];}function useClearQueryString(){const history=useHistory();return useCallback(()=>{history.replace({search:undefined});},[history]);}function mergeSearchParams(params,strategy){const result=new URLSearchParams();for(const item of params){for(const[key,value]of item.entries()){if(strategy==='append'){result.append(key,value);}else{result.set(key,value);}}}return result;}function mergeSearchStrings(searchStrings,strategy){const params=mergeSearchParams(searchStrings.map(s=>new URLSearchParams(s??'')),strategy);const str=params.toString();return str?`?${str}`:str;} - -/***/ }, - -/***/ 7521 -(module) { - -// Exports -module.exports = { - "closeButton": `closeButton_CVFx` -}; - - -/***/ }, - -/***/ 7559 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ G: () => (/* binding */ ThemeClassNames) -/* harmony export */ }); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// Please do not modify the classnames! This is a breaking change, and annoying -// for users! -/** - * These class names are used to style page layouts in Docusaurus, meant to be - * targeted by user-provided custom CSS selectors. - */const ThemeClassNames={page:{blogListPage:'blog-list-page',blogPostPage:'blog-post-page',blogTagsListPage:'blog-tags-list-page',blogTagPostListPage:'blog-tags-post-list-page',blogAuthorsListPage:'blog-authors-list-page',blogAuthorsPostsPage:'blog-authors-posts-page',docsDocPage:'docs-doc-page',docsTagsListPage:'docs-tags-list-page',docsTagDocListPage:'docs-tags-doc-list-page',mdxPage:'mdx-page'},// TODO Docusaurus v4: remove old classes? -wrapper:{main:'main-wrapper',// replaced by theme-layout-main -// TODO these wrapper class names are now quite useless -// TODO do breaking change later in 3.0 -// we already add plugin name/id class on <html>: that's enough -blogPages:'blog-wrapper',docsPages:'docs-wrapper',mdxPages:'mdx-wrapper'},common:{editThisPage:'theme-edit-this-page',lastUpdated:'theme-last-updated',backToTopButton:'theme-back-to-top-button',codeBlock:'theme-code-block',admonition:'theme-admonition',unlistedBanner:'theme-unlisted-banner',draftBanner:'theme-draft-banner',admonitionType:type=>`theme-admonition-${type}`},announcementBar:{container:'theme-announcement-bar'},tabs:{container:'theme-tabs-container'},layout:{navbar:{container:'theme-layout-navbar',containerLeft:'theme-layout-navbar-left',containerRight:'theme-layout-navbar-right',mobileSidebar:{container:'theme-layout-navbar-sidebar',panel:'theme-layout-navbar-sidebar-panel'}},main:{container:'theme-layout-main'},footer:{container:'theme-layout-footer',column:'theme-layout-footer-column'}},/** - * Follows the naming convention "theme-{blog,doc,version,page}?-<suffix>" - */docs:{docVersionBanner:'theme-doc-version-banner',docVersionBadge:'theme-doc-version-badge',docBreadcrumbs:'theme-doc-breadcrumbs',docMarkdown:'theme-doc-markdown',docTocMobile:'theme-doc-toc-mobile',docTocDesktop:'theme-doc-toc-desktop',docFooter:'theme-doc-footer',docFooterTagsRow:'theme-doc-footer-tags-row',docFooterEditMetaRow:'theme-doc-footer-edit-meta-row',docSidebarContainer:'theme-doc-sidebar-container',docSidebarMenu:'theme-doc-sidebar-menu',docSidebarItemCategory:'theme-doc-sidebar-item-category',docSidebarItemLink:'theme-doc-sidebar-item-link',docSidebarItemCategoryLevel:level=>`theme-doc-sidebar-item-category-level-${level}`,docSidebarItemLinkLevel:level=>`theme-doc-sidebar-item-link-level-${level}`// TODO add other stable classNames here -},blog:{// TODO add other stable classNames here -blogFooterTagsRow:'theme-blog-footer-tags-row',blogFooterEditMetaRow:'theme-blog-footer-edit-meta-row'},pages:{pageFooterEditMetaRow:'theme-pages-footer-edit-meta-row'}}; - -/***/ }, - -/***/ 7611 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ AdmonitionLayout) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7559); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6175); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function AdmonitionContainer({type,className,children}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("div",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__/* .ThemeClassNames */ .G.common.admonition,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__/* .ThemeClassNames */ .G.common.admonitionType(type),(_styles_module_css__WEBPACK_IMPORTED_MODULE_3___default().admonition),className),children:children});}function AdmonitionHeading({icon,title}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)("div",{className:(_styles_module_css__WEBPACK_IMPORTED_MODULE_3___default().admonitionHeading),children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("span",{className:(_styles_module_css__WEBPACK_IMPORTED_MODULE_3___default().admonitionIcon),children:icon}),title]});}function AdmonitionContent({children}){return children?/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("div",{className:(_styles_module_css__WEBPACK_IMPORTED_MODULE_3___default().admonitionContent),children:children}):null;}function AdmonitionLayout(props){const{type,icon,title,children,className}=props;return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(AdmonitionContainer,{type:type,className:className,children:[title||icon?/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(AdmonitionHeading,{title:title,icon:icon}):null,/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(AdmonitionContent,{children:children})]});} - -/***/ }, - -/***/ 7636 -(module) { - -"use strict"; -module.exports = /*#__PURE__*/JSON.parse('{"id":"reference/meta-tools","title":"Meta-Tools: Tools That Call Other Tools","description":"Meta-tools are CmdForge tools that can invoke other tools as steps in their workflow. This enables powerful composition and reuse of existing tools.","source":"@site/docs/reference/meta-tools.md","sourceDirName":"reference","slug":"/reference/meta-tools","permalink":"/rob/CmdForge/reference/meta-tools","draft":false,"unlisted":false,"tags":[],"version":"current","sidebarPosition":2,"frontMatter":{"sidebar_label":"Meta-Tools","sidebar_position":2,"format":"md"},"sidebar":"docs","previous":{"title":"Registry API","permalink":"/rob/CmdForge/reference/registry-spec"},"next":{"title":"Collections","permalink":"/rob/CmdForge/reference/collections"}}'); - -/***/ }, - -/***/ 7663 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ H: () => (/* binding */ useBackToTopButton) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _utils_scrollUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3104); -/* harmony import */ var _utils_useLocationChange__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5062); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - *//** Wires the logic for the back to top button. */function useBackToTopButton({threshold}){const[shown,setShown]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);const isFocusedAnchor=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(false);const{startScroll,cancelScroll}=(0,_utils_scrollUtils__WEBPACK_IMPORTED_MODULE_1__/* .useSmoothScrollTo */ .gk)();(0,_utils_scrollUtils__WEBPACK_IMPORTED_MODULE_1__/* .useScrollPosition */ .Mq)(({scrollY:scrollTop},lastPosition)=>{const lastScrollTop=lastPosition?.scrollY;// Component is just being mounted. Not really a scroll event from the user. -// Ignore it. -if(!lastScrollTop){return;}if(isFocusedAnchor.current){// This scroll position change is triggered by navigating to an anchor. -// Ignore it. -isFocusedAnchor.current=false;}else if(scrollTop>=lastScrollTop){// The user has scrolled down to "fight against" the animation. Cancel any -// animation under progress. -cancelScroll();setShown(false);}else if(scrollTop<threshold){// Scrolled to the minimum position; hide the button. -setShown(false);}else if(scrollTop+window.innerHeight<document.documentElement.scrollHeight){setShown(true);}});(0,_utils_useLocationChange__WEBPACK_IMPORTED_MODULE_2__/* .useLocationChange */ .$)(locationChangeEvent=>{if(locationChangeEvent.location.hash){isFocusedAnchor.current=true;setShown(false);}});return{shown,scrollToTop:()=>startScroll(0)};} - -/***/ }, - -/***/ 7690 -(module) { - -// Exports -module.exports = { - "footerLogoLink": `footerLogoLink_BH7S` -}; - - -/***/ }, - -/***/ 7691 -(module) { - -// Exports -module.exports = { - "containsTaskList": `containsTaskList_mC6p` -}; - - -/***/ }, - -/***/ 7712 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ Gy: () => (/* binding */ useAllDocsData), -/* harmony export */ HW: () => (/* binding */ useDocVersionSuggestions), -/* harmony export */ ht: () => (/* binding */ useDocsData), -/* harmony export */ jh: () => (/* binding */ useVersions), -/* harmony export */ r7: () => (/* binding */ useLatestVersion), -/* harmony export */ vT: () => (/* binding */ useActivePlugin), -/* harmony export */ zK: () => (/* binding */ useActiveDocContext) -/* harmony export */ }); -/* unused harmony exports useActivePluginAndVersion, useActiveVersion */ -/* harmony import */ var _docusaurus_router__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6347); -/* harmony import */ var _docusaurus_useGlobalData__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6588); -/* harmony import */ var _docsClientUtils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4733); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// Important to use a constant object to avoid React useEffect executions etc. -// see https://github.com/facebook/docusaurus/issues/5089 -const StableEmptyObject={};// In blog-only mode, docs hooks are still used by the theme. We need a fail- -// safe fallback when the docs plugin is not in use -const useAllDocsData=()=>(0,_docusaurus_useGlobalData__WEBPACK_IMPORTED_MODULE_1__/* .useAllPluginInstancesData */ .kh)('docusaurus-plugin-content-docs')??StableEmptyObject;const useDocsData=pluginId=>{try{return (0,_docusaurus_useGlobalData__WEBPACK_IMPORTED_MODULE_1__/* .usePluginData */ .P_)('docusaurus-plugin-content-docs',pluginId,{failfast:true});}catch(error){throw new Error(`You are using a feature of the Docusaurus docs plugin, but this plugin does not seem to be enabled${pluginId==='Default'?'':` (pluginId=${pluginId}`}`,{cause:error});}};// TODO this feature should be provided by docusaurus core -function useActivePlugin(options={}){const data=useAllDocsData();const{pathname}=(0,_docusaurus_router__WEBPACK_IMPORTED_MODULE_0__/* .useLocation */ .zy)();return (0,_docsClientUtils__WEBPACK_IMPORTED_MODULE_2__/* .getActivePlugin */ .uX)(data,pathname,options);}function useActivePluginAndVersion(options={}){const activePlugin=useActivePlugin(options);const{pathname}=useLocation();if(!activePlugin){return undefined;}const activeVersion=getActiveVersion(activePlugin.pluginData,pathname);return{activePlugin,activeVersion};}/** Versions are returned ordered (most recent first). */function useVersions(pluginId){const data=useDocsData(pluginId);return data.versions;}function useLatestVersion(pluginId){const data=useDocsData(pluginId);return (0,_docsClientUtils__WEBPACK_IMPORTED_MODULE_2__/* .getLatestVersion */ .CA)(data);}/** - * Returns `undefined` on doc-unrelated pages, because there's no version - * currently considered as active. - */function useActiveVersion(pluginId){const data=useDocsData(pluginId);const{pathname}=useLocation();return getActiveVersion(data,pathname);}function useActiveDocContext(pluginId){const data=useDocsData(pluginId);const{pathname}=(0,_docusaurus_router__WEBPACK_IMPORTED_MODULE_0__/* .useLocation */ .zy)();return (0,_docsClientUtils__WEBPACK_IMPORTED_MODULE_2__/* .getActiveDocContext */ .Yz)(data,pathname);}/** - * Useful to say "hey, you are not on the latest docs version, please switch" - */function useDocVersionSuggestions(pluginId){const data=useDocsData(pluginId);const{pathname}=(0,_docusaurus_router__WEBPACK_IMPORTED_MODULE_0__/* .useLocation */ .zy)();return (0,_docsClientUtils__WEBPACK_IMPORTED_MODULE_2__/* .getDocVersionSuggestions */ .QA)(data,pathname);} - -/***/ }, - -/***/ 7719 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ DocPaginator) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(986); -/* harmony import */ var _theme_PaginatorNavLink__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9022); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function DocPaginator(props){const{className,previous,next}=props;return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)("nav",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(className,'pagination-nav'),"aria-label":(0,_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__/* .translate */ .T)({id:'theme.docs.paginator.navAriaLabel',message:'Docs pages',description:'The ARIA label for the docs pagination'}),children:[previous&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_theme_PaginatorNavLink__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A,{...previous,subLabel:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})}),next&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_theme_PaginatorNavLink__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A,{...next,subLabel:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:true})]});} - -/***/ }, - -/***/ 7788 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ ErrorBoundary) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_ExecutionEnvironment__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8193); -/* harmony import */ var _theme_Error__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6474); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// eslint-disable-next-line react/function-component-definition -const DefaultFallback=params=>/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_theme_Error__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{...params});class ErrorBoundary extends react__WEBPACK_IMPORTED_MODULE_0__.Component{constructor(props){super(props);this.state={error:null};}componentDidCatch(error){// Catch errors in any components below and re-render with error message -if(_docusaurus_ExecutionEnvironment__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A.canUseDOM){this.setState({error});}}render(){const{children}=this.props;const{error}=this.state;if(error){const fallbackParams={error,tryAgain:()=>this.setState({error:null})};const fallback=this.props.fallback??DefaultFallback;return fallback(fallbackParams);}// See https://github.com/facebook/docusaurus/issues/6337#issuecomment-1012913647 -return children??null;}} - -/***/ }, - -/***/ 7808 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ Root) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// Wrapper at the very top of the app, that is applied constantly -// and does not depend on current route (unlike the layout) -// -// Gives the opportunity to add stateful providers on top of the app -// and these providers won't reset state when we navigate -// -// See https://github.com/facebook/docusaurus/issues/3919 -function Root({children}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.Fragment,{children:children});} - -/***/ }, - -/***/ 7851 -(module) { - -// Exports -module.exports = { - "codeBlockContent": `codeBlockContent_QJqH`, - "codeBlockTitle": `codeBlockTitle_OeMC`, - "codeBlock": `codeBlock_a8dz` -}; - - -/***/ }, - -/***/ 7909 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ assets: () => (/* binding */ assets), -/* harmony export */ contentTitle: () => (/* binding */ contentTitle), -/* harmony export */ "default": () => (/* binding */ MDXContent), -/* harmony export */ frontMatter: () => (/* binding */ frontMatter), -/* harmony export */ metadata: () => (/* reexport default export from named module */ _site_docusaurus_docusaurus_plugin_content_docs_default_site_docs_reference_collections_md_263_json__WEBPACK_IMPORTED_MODULE_0__), -/* harmony export */ toc: () => (/* binding */ toc) -/* harmony export */ }); -/* harmony import */ var _site_docusaurus_docusaurus_plugin_content_docs_default_site_docs_reference_collections_md_263_json__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5817); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4848); -/* harmony import */ var _mdx_js_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(8453); - - -const frontMatter = { - sidebar_label: 'Collections', - sidebar_position: 3, - format: 'md' -}; -const contentTitle = 'CmdForge Collections'; - -const assets = { - -}; - - - -const toc = [{ - "value": "Implementation Status", - "id": "implementation-status", - "level": 2 -}, { - "value": "Use Cases", - "id": "use-cases", - "level": 2 -}, { - "value": "CLI Usage", - "id": "cli-usage", - "level": 2 -}, { - "value": "List Collections", - "id": "list-collections", - "level": 3 -}, { - "value": "View Collection Details", - "id": "view-collection-details", - "level": 3 -}, { - "value": "Install Collection", - "id": "install-collection", - "level": 3 -}, { - "value": "Admin Management", - "id": "admin-management", - "level": 2 -}, { - "value": "Admin UI Features", - "id": "admin-ui-features", - "level": 3 -}, { - "value": "Admin API Endpoints", - "id": "admin-api-endpoints", - "level": 3 -}, { - "value": "Creating a Collection via API", - "id": "creating-a-collection-via-api", - "level": 3 -}, { - "value": "Public API Endpoints", - "id": "public-api-endpoints", - "level": 2 -}, { - "value": "List Response", - "id": "list-response", - "level": 3 -}, { - "value": "Detail Response", - "id": "detail-response", - "level": 3 -}, { - "value": "Database Schema", - "id": "database-schema", - "level": 2 -}, { - "value": "Collection Manifest Format", - "id": "collection-manifest-format", - "level": 2 -}, { - "value": "Web UI", - "id": "web-ui", - "level": 2 -}, { - "value": "Implementation Files", - "id": "implementation-files", - "level": 2 -}]; -function _createMdxContent(props) { - const _components = { - code: "code", - h1: "h1", - h2: "h2", - h3: "h3", - header: "header", - li: "li", - ol: "ol", - p: "p", - pre: "pre", - strong: "strong", - table: "table", - tbody: "tbody", - td: "td", - th: "th", - thead: "thead", - tr: "tr", - ul: "ul", - ...(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__/* .useMDXComponents */ .R)(), - ...props.components - }; - return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.Fragment, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.header, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h1, { - id: "cmdforge-collections", - children: "CmdForge Collections" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Collections are curated groups of tools that can be installed together with a single command." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "implementation-status", - children: "Implementation Status" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Feature" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Status" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Public API endpoints" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Admin API endpoints" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Web UI browse pages" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Admin management UI" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Database schema" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "CLI commands" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Done" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Registry repo sync" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Not implemented" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "use-cases", - children: "Use Cases" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ol, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Thematic bundles" - }), ": \"writing-toolkit\" with grammar, tone, simplify tools"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Application stacks" - }), ": \"data-science\" with json-extract, csv-insights, etc."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Source bundles" - }), ": \"fabric-text\" with all Fabric text processing patterns"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Workflow packages" - }), ": Tools that work well together for a specific task"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "cli-usage", - children: "CLI Usage" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "list-collections", - children: "List Collections" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "# List available collections\ncmdforge collections list\n\n# List in JSON format\ncmdforge collections list --json\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Example output:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "Available collections (1):\n\n development-hub\n Development-Hub\n Collection of tools for the development-hub application.\n Tools: 2\n\nInstall a collection with: cmdforge collections install <name>\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "view-collection-details", - children: "View Collection Details" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "# View collection details\ncmdforge collections info development-hub\n\n# View in JSON format\ncmdforge collections info development-hub --json\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Example output:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "Development-Hub\n==================================================\n\nCollection of tools for the development-hub application.\n\nMaintainer: official\nTags: Development, Coding, Programming\n\nTools (2):\n - rob/audit-goals\n - rob/realign-goals\n\nInstall all: cmdforge collections install development-hub\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "install-collection", - children: "Install Collection" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "# Install all tools in a collection\ncmdforge collections install development-hub\n\n# Install with pinned versions from collection\ncmdforge collections install development-hub --pinned\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Example output:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "Installing collection: Development-Hub\nTools to install: 2\n\n Installing rob/audit-goals... v1.0.0\n Installing rob/realign-goals... v1.0.0\n\nInstalled: 2/2\n\nCollection 'development-hub' installed successfully!\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "admin-management", - children: "Admin Management" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: ["Collections are managed via the admin dashboard at ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/dashboard/admin/collections" - }), "."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "admin-ui-features", - children: "Admin UI Features" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "List collections" - }), ": View all collections with tool counts and tags"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Create collection" - }), ": Add new collection with name, display name, description, tools"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Edit collection" - }), ": Update existing collection details and tool list"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Delete collection" - }), ": Remove a collection (does not uninstall tools)"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "admin-api-endpoints", - children: "Admin API Endpoints" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Method" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Endpoint" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Description" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "GET" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/api/v1/admin/collections" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "List all collections (admin)" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "POST" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/api/v1/admin/collections" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Create collection (admin)" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "PUT" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/api/v1/admin/collections/:name" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Update collection (admin)" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "DELETE" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/api/v1/admin/collections/:name" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Delete collection (admin)" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "creating-a-collection-via-api", - children: "Creating a Collection via API" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "curl -X POST https://cmdforge.brrd.tech/api/v1/admin/collections \\\n -H \"Authorization: Bearer <admin-token>\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"name\": \"writing-toolkit\",\n \"display_name\": \"Writing Toolkit\",\n \"description\": \"Essential tools for writers\",\n \"maintainer\": \"official\",\n \"tools\": [\"official/fix-grammar\", \"official/simplify\"],\n \"pinned\": {\"official/fix-grammar\": \"1.0.0\"},\n \"tags\": [\"writing\", \"editing\"]\n }'\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "public-api-endpoints", - children: "Public API Endpoints" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Method" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Endpoint" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Description" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "GET" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/api/v1/collections" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "List all collections (summary)" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "GET" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/api/v1/collections/:name" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Get collection details with tool info" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "list-response", - children: "List Response" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-json", - children: "{\n \"data\": [\n {\n \"name\": \"writing-toolkit\",\n \"display_name\": \"Writing Toolkit\",\n \"description\": \"Essential tools for writers\",\n \"maintainer\": \"official\",\n \"icon\": \"pencil\",\n \"tags\": [\"writing\", \"editing\"],\n \"tool_count\": 5\n }\n ]\n}\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "detail-response", - children: "Detail Response" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-json", - children: "{\n \"data\": {\n \"name\": \"writing-toolkit\",\n \"display_name\": \"Writing Toolkit\",\n \"description\": \"Essential tools for writers\",\n \"maintainer\": \"official\",\n \"icon\": \"pencil\",\n \"tags\": [\"writing\", \"editing\"],\n \"tools\": [\n {\n \"owner\": \"official\",\n \"name\": \"fix-grammar\",\n \"version\": \"1.0.0\",\n \"description\": \"Fix grammar issues in text\",\n \"category\": \"Writing\",\n \"downloads\": 150,\n \"pinned_version\": \"1.0.0\"\n }\n ]\n }\n}\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "database-schema", - children: "Database Schema" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-sql", - children: "CREATE TABLE collections (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT UNIQUE NOT NULL,\n display_name TEXT NOT NULL,\n description TEXT,\n icon TEXT,\n maintainer TEXT NOT NULL,\n tools TEXT NOT NULL, -- JSON array of tool refs\n pinned TEXT, -- JSON object of version constraints\n tags TEXT, -- JSON array\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n);\n\nCREATE INDEX idx_collections_name ON collections(name);\nCREATE INDEX idx_collections_maintainer ON collections(maintainer);\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "collection-manifest-format", - children: "Collection Manifest Format" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "For reference, collections can be defined in YAML format:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-yaml", - children: "# collections/writing-toolkit.yaml\nname: writing-toolkit\ndisplay_name: Writing Toolkit\ndescription: Essential tools for writers and editors\nicon: pencil # Optional icon identifier\nmaintainer: official # Publisher who maintains this collection\n\ntools:\n - official/fix-grammar\n - official/simplify\n - official/tone-shift\n - official/expand\n - official/proofread\n\n# Optional: version constraints\npinned:\n official/fix-grammar: \"1.0.0\"\n\ntags:\n - writing\n - editing\n - grammar\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "web-ui", - children: "Web UI" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/collections" - }), " - Browse all collections"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/collections/:name" - }), " - Collection detail page with tool grid"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Install button that shows CLI command" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Filter by tag, maintainer" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "implementation-files", - children: "Implementation Files" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Component" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "File" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "CLI commands" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "src/cmdforge/cli/collections_commands.py" - }) - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Registry client" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "src/cmdforge/registry_client.py" - }) - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "API endpoints" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "src/cmdforge/registry/app.py" - }) - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Admin templates" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "src/cmdforge/web/templates/admin/collections.html" - }) - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Admin form" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "src/cmdforge/web/templates/admin/collection_form.html" - }) - })] - })] - })] - })] - }); -} -function MDXContent(props = {}) { - const {wrapper: MDXLayout} = { - ...(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__/* .useMDXComponents */ .R)(), - ...props.components - }; - return MDXLayout ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(MDXLayout, { - ...props, - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_createMdxContent, { - ...props - }) - }) : _createMdxContent(props); -} - - - -/***/ }, - -/***/ 7910 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ MDXContent) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _mdx_js_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8453); -/* harmony import */ var _theme_MDXComponents__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(8009); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function MDXContent({children}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .MDXProvider */ .x,{components:_theme_MDXComponents__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,children:children});} - -/***/ }, - -/***/ 7921 -(module) { - -// Exports -module.exports = { - "navbarSearchContainer": `navbarSearchContainer_Bca1` -}; - - -/***/ }, - -/***/ 7927 -(module) { - -"use strict"; -/** - * Copyright (c) 2013-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - - - -/** - * Use invariant() to assert state which your program assumes to be true. - * - * Provide sprintf-style format (only %s is supported) and arguments - * to provide information about what broke and what you were - * expecting. - * - * The invariant message will be stripped in production, but the invariant - * will remain to ensure logic does not differ in production. - */ - -var NODE_ENV = "production"; - -var invariant = function(condition, format, a, b, c, d, e, f) { - if (NODE_ENV !== 'production') { - if (format === undefined) { - throw new Error('invariant requires an error message argument'); - } - } - - if (!condition) { - var error; - if (format === undefined) { - error = new Error( - 'Minified exception occurred; use the non-minified dev environment ' + - 'for the full error message and additional helpful warnings.' - ); - } else { - var args = [a, b, c, d, e, f]; - var argIndex = 0; - error = new Error( - format.replace(/%s/g, function() { return args[argIndex++]; }) - ); - error.name = 'Invariant Violation'; - } - - error.framesToPop = 1; // we don't care about invariant's own frame - throw error; - } -}; - -module.exports = invariant; - - -/***/ }, - -/***/ 7983 -(module) { - -// Exports -module.exports = { - "errorBoundaryError": `errorBoundaryError_a6uf`, - "errorBoundaryFallback": `errorBoundaryFallback_VBag` -}; - - -/***/ }, - -/***/ 8007 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ NavbarMobileSidebarSecondaryMenu) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6342); -/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(8695); -/* harmony import */ var _docusaurus_Translate__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(986); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function SecondaryMenuBackButton(props){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("button",{...props,type:"button",className:"clean-btn navbar-sidebar__back",children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)",children:"\u2190 Back to main menu"})});}// The secondary menu slides from the right and shows contextual information -// such as the docs sidebar -function NavbarMobileSidebarSecondaryMenu(){const isPrimaryMenuEmpty=(0,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_1__/* .useThemeConfig */ .p)().navbar.items.length===0;const secondaryMenu=(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_2__/* .useNavbarSecondaryMenu */ .T)();return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.Fragment,{children:[!isPrimaryMenuEmpty&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(SecondaryMenuBackButton,{onClick:()=>secondaryMenu.hide()}),secondaryMenu.content]});} - -/***/ }, - -/***/ 8009 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_Head__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5260); -/* harmony import */ var _theme_MDXComponents_Code__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2716); -/* harmony import */ var _theme_MDXComponents_A__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(2161); -/* harmony import */ var _theme_MDXComponents_Pre__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4168); -/* harmony import */ var _theme_MDXComponents_Details__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(3023); -/* harmony import */ var _theme_MDXComponents_Heading__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(1795); -/* harmony import */ var _theme_MDXComponents_Ul__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(3055); -/* harmony import */ var _theme_MDXComponents_Li__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(4194); -/* harmony import */ var _theme_MDXComponents_Img__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(3105); -/* harmony import */ var _theme_Admonition__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(4552); -/* harmony import */ var _theme_Mermaid__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(418); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */const MDXComponents={Head: _docusaurus_Head__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A,details:_theme_MDXComponents_Details__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A,// For MD mode support, see https://github.com/facebook/docusaurus/issues/9092#issuecomment-1602902274 -Details:_theme_MDXComponents_Details__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A,code:_theme_MDXComponents_Code__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,a:_theme_MDXComponents_A__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A,pre:_theme_MDXComponents_Pre__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A,ul:_theme_MDXComponents_Ul__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A,li:_theme_MDXComponents_Li__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .A,img:_theme_MDXComponents_Img__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .A,h1:props=>/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(_theme_MDXComponents_Heading__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A,{as:"h1",...props}),h2:props=>/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(_theme_MDXComponents_Heading__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A,{as:"h2",...props}),h3:props=>/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(_theme_MDXComponents_Heading__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A,{as:"h3",...props}),h4:props=>/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(_theme_MDXComponents_Heading__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A,{as:"h4",...props}),h5:props=>/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(_theme_MDXComponents_Heading__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A,{as:"h5",...props}),h6:props=>/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(_theme_MDXComponents_Heading__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A,{as:"h6",...props}),admonition:_theme_Admonition__WEBPACK_IMPORTED_MODULE_10__/* ["default"] */ .A,mermaid:_theme_Mermaid__WEBPACK_IMPORTED_MODULE_11__/* ["default"] */ .A};/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MDXComponents); - -/***/ }, - -/***/ 8081 -(module) { - -// Exports -module.exports = { - "img": `img_ev3q` -}; - - -/***/ }, - -/***/ 8084 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ DocSidebarItemLink) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7559); -/* harmony import */ var _docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6972); -/* harmony import */ var _docusaurus_Link__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(8774); -/* harmony import */ var _docusaurus_isInternalUrl__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(6654); -/* harmony import */ var _theme_Icon_ExternalLink__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(5835); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(1398); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function LinkLabel({label}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)("span",{title:label,className:(_styles_module_css__WEBPACK_IMPORTED_MODULE_7___default().linkLabel),children:label});}function DocSidebarItemLink({item,onItemClick,activePath,level,index,...props}){const{href,label,className,autoAddBaseUrl}=item;const isActive=(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_3__/* .isActiveSidebarItem */ .w8)(item,activePath);const isInternalLink=(0,_docusaurus_isInternalUrl__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A)(href);return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)("li",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__/* .ThemeClassNames */ .G.docs.docSidebarItemLink,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__/* .ThemeClassNames */ .G.docs.docSidebarItemLinkLevel(level),'menu__list-item',className),children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxs)(_docusaurus_Link__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A,{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('menu__link',!isInternalLink&&(_styles_module_css__WEBPACK_IMPORTED_MODULE_7___default().menuExternalLink),{'menu__link--active':isActive}),autoAddBaseUrl:autoAddBaseUrl,"aria-current":isActive?'page':undefined,to:href,...(isInternalLink&&{onClick:onItemClick?()=>onItemClick(item):undefined}),...props,children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(LinkLabel,{label:label}),!isInternalLink&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(_theme_Icon_ExternalLink__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A,{})]})},label);} - -/***/ }, - -/***/ 8168 -(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ _extends) -/* harmony export */ }); -function _extends() { - return _extends = Object.assign ? Object.assign.bind() : function (n) { - for (var e = 1; e < arguments.length; e++) { - var t = arguments[e]; - for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); - } - return n; - }, _extends.apply(null, arguments); -} - - -/***/ }, - -/***/ 8193 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */const canUseDOM=typeof window!=='undefined'&&'document'in window&&'createElement'in window.document;const ExecutionEnvironment={canUseDOM,// window.attachEvent is IE-specific; it's very likely Docusaurus won't work -// on IE anyway. -canUseEventListeners:canUseDOM&&('addEventListener'in window||'attachEvent'in window),canUseIntersectionObserver:canUseDOM&&'IntersectionObserver'in window,canUseViewport:canUseDOM&&'screen'in window};/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ExecutionEnvironment); - -/***/ }, - -/***/ 8244 -(module) { - -// Exports -module.exports = { - "iconLanguage": `iconLanguage_nlXk` -}; - - -/***/ }, - -/***/ 8282 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ Tag) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_Link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(8774); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(448); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function Tag({permalink,label,count,description}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(_docusaurus_Link__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{rel:"tag",href:permalink,title:description,className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)((_styles_module_css__WEBPACK_IMPORTED_MODULE_3___default().tag),count?(_styles_module_css__WEBPACK_IMPORTED_MODULE_3___default().tagWithCount):(_styles_module_css__WEBPACK_IMPORTED_MODULE_3___default().tagRegular)),children:[label,count&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("span",{children:count})]});} - -/***/ }, - -/***/ 8310 -(module) { - -"use strict"; -module.exports = /*#__PURE__*/JSON.parse('{"id":"goals","title":"Goals","description":"Vision","source":"@site/docs/goals.md","sourceDirName":".","slug":"/goals","permalink":"/rob/CmdForge/goals","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"type":"goals","project":"cmdforge","updated":"2026-01-13T00:00:00.000Z"},"sidebar":"docs","previous":{"title":"CmdForge TODOs","permalink":"/rob/CmdForge/todos"},"next":{"title":"Ideas & Exploration","permalink":"/rob/CmdForge/ideas-and-exploration"}}'); - -/***/ }, - -/***/ 8321 -(module) { - -"use strict"; -module.exports = require("node:stream/consumers"); - -/***/ }, - -/***/ 8380 -(module) { - -"use strict"; - - -/** - * @typedef {Object<string, ComponentCategory>} Components - * @typedef {Object<string, ComponentEntry | string>} ComponentCategory - * - * @typedef ComponentEntry - * @property {string} [title] The title of the component. - * @property {string} [owner] The GitHub user name of the owner. - * @property {boolean} [noCSS=false] Whether the component doesn't have style sheets which should also be loaded. - * @property {string | string[]} [alias] An optional list of aliases for the id of the component. - * @property {Object<string, string>} [aliasTitles] An optional map from an alias to its title. - * - * Aliases which are not in this map will the get title of the component. - * @property {string | string[]} [optional] - * @property {string | string[]} [require] - * @property {string | string[]} [modify] - */ - -var getLoader = (function () { - - /** - * A function which does absolutely nothing. - * - * @type {any} - */ - var noop = function () { }; - - /** - * Invokes the given callback for all elements of the given value. - * - * If the given value is an array, the callback will be invokes for all elements. If the given value is `null` or - * `undefined`, the callback will not be invoked. In all other cases, the callback will be invoked with the given - * value as parameter. - * - * @param {null | undefined | T | T[]} value - * @param {(value: T, index: number) => void} callbackFn - * @returns {void} - * @template T - */ - function forEach(value, callbackFn) { - if (Array.isArray(value)) { - value.forEach(callbackFn); - } else if (value != null) { - callbackFn(value, 0); - } - } - - /** - * Returns a new set for the given string array. - * - * @param {string[]} array - * @returns {StringSet} - * - * @typedef {Object<string, true>} StringSet - */ - function toSet(array) { - /** @type {StringSet} */ - var set = {}; - for (var i = 0, l = array.length; i < l; i++) { - set[array[i]] = true; - } - return set; - } - - /** - * Creates a map of every components id to its entry. - * - * @param {Components} components - * @returns {EntryMap} - * - * @typedef {{ readonly [id: string]: Readonly<ComponentEntry> | undefined }} EntryMap - */ - function createEntryMap(components) { - /** @type {Object<string, Readonly<ComponentEntry>>} */ - var map = {}; - - for (var categoryName in components) { - var category = components[categoryName]; - for (var id in category) { - if (id != 'meta') { - /** @type {ComponentEntry | string} */ - var entry = category[id]; - map[id] = typeof entry == 'string' ? { title: entry } : entry; - } - } - } - - return map; - } - - /** - * Creates a full dependencies map which includes all types of dependencies and their transitive dependencies. - * - * @param {EntryMap} entryMap - * @returns {DependencyResolver} - * - * @typedef {(id: string) => StringSet} DependencyResolver - */ - function createDependencyResolver(entryMap) { - /** @type {Object<string, StringSet>} */ - var map = {}; - var _stackArray = []; - - /** - * Adds the dependencies of the given component to the dependency map. - * - * @param {string} id - * @param {string[]} stack - */ - function addToMap(id, stack) { - if (id in map) { - return; - } - - stack.push(id); - - // check for circular dependencies - var firstIndex = stack.indexOf(id); - if (firstIndex < stack.length - 1) { - throw new Error('Circular dependency: ' + stack.slice(firstIndex).join(' -> ')); - } - - /** @type {StringSet} */ - var dependencies = {}; - - var entry = entryMap[id]; - if (entry) { - /** - * This will add the direct dependency and all of its transitive dependencies to the set of - * dependencies of `entry`. - * - * @param {string} depId - * @returns {void} - */ - function handleDirectDependency(depId) { - if (!(depId in entryMap)) { - throw new Error(id + ' depends on an unknown component ' + depId); - } - if (depId in dependencies) { - // if the given dependency is already in the set of deps, then so are its transitive deps - return; - } - - addToMap(depId, stack); - dependencies[depId] = true; - for (var transitiveDepId in map[depId]) { - dependencies[transitiveDepId] = true; - } - } - - forEach(entry.require, handleDirectDependency); - forEach(entry.optional, handleDirectDependency); - forEach(entry.modify, handleDirectDependency); - } - - map[id] = dependencies; - - stack.pop(); - } - - return function (id) { - var deps = map[id]; - if (!deps) { - addToMap(id, _stackArray); - deps = map[id]; - } - return deps; - }; - } - - /** - * Returns a function which resolves the aliases of its given id of alias. - * - * @param {EntryMap} entryMap - * @returns {(idOrAlias: string) => string} - */ - function createAliasResolver(entryMap) { - /** @type {Object<string, string> | undefined} */ - var map; - - return function (idOrAlias) { - if (idOrAlias in entryMap) { - return idOrAlias; - } else { - // only create the alias map if necessary - if (!map) { - map = {}; - - for (var id in entryMap) { - var entry = entryMap[id]; - forEach(entry && entry.alias, function (alias) { - if (alias in map) { - throw new Error(alias + ' cannot be alias for both ' + id + ' and ' + map[alias]); - } - if (alias in entryMap) { - throw new Error(alias + ' cannot be alias of ' + id + ' because it is a component.'); - } - map[alias] = id; - }); - } - } - return map[idOrAlias] || idOrAlias; - } - }; - } - - /** - * @typedef LoadChainer - * @property {(before: T, after: () => T) => T} series - * @property {(values: T[]) => T} parallel - * @template T - */ - - /** - * Creates an implicit DAG from the given components and dependencies and call the given `loadComponent` for each - * component in topological order. - * - * @param {DependencyResolver} dependencyResolver - * @param {StringSet} ids - * @param {(id: string) => T} loadComponent - * @param {LoadChainer<T>} [chainer] - * @returns {T} - * @template T - */ - function loadComponentsInOrder(dependencyResolver, ids, loadComponent, chainer) { - var series = chainer ? chainer.series : undefined; - var parallel = chainer ? chainer.parallel : noop; - - /** @type {Object<string, T>} */ - var cache = {}; - - /** - * A set of ids of nodes which are not depended upon by any other node in the graph. - * - * @type {StringSet} - */ - var ends = {}; - - /** - * Loads the given component and its dependencies or returns the cached value. - * - * @param {string} id - * @returns {T} - */ - function handleId(id) { - if (id in cache) { - return cache[id]; - } - - // assume that it's an end - // if it isn't, it will be removed later - ends[id] = true; - - // all dependencies of the component in the given ids - var dependsOn = []; - for (var depId in dependencyResolver(id)) { - if (depId in ids) { - dependsOn.push(depId); - } - } - - /** - * The value to be returned. - * - * @type {T} - */ - var value; - - if (dependsOn.length === 0) { - value = loadComponent(id); - } else { - var depsValue = parallel(dependsOn.map(function (depId) { - var value = handleId(depId); - // none of the dependencies can be ends - delete ends[depId]; - return value; - })); - if (series) { - // the chainer will be responsibly for calling the function calling loadComponent - value = series(depsValue, function () { return loadComponent(id); }); - } else { - // we don't have a chainer, so we call loadComponent ourselves - loadComponent(id); - } - } - - // cache and return - return cache[id] = value; - } - - for (var id in ids) { - handleId(id); - } - - /** @type {T[]} */ - var endValues = []; - for (var endId in ends) { - endValues.push(cache[endId]); - } - return parallel(endValues); - } - - /** - * Returns whether the given object has any keys. - * - * @param {object} obj - */ - function hasKeys(obj) { - for (var key in obj) { - return true; - } - return false; - } - - /** - * Returns an object which provides methods to get the ids of the components which have to be loaded (`getIds`) and - * a way to efficiently load them in synchronously and asynchronous contexts (`load`). - * - * The set of ids to be loaded is a superset of `load`. If some of these ids are in `loaded`, the corresponding - * components will have to reloaded. - * - * The ids in `load` and `loaded` may be in any order and can contain duplicates. - * - * @param {Components} components - * @param {string[]} load - * @param {string[]} [loaded=[]] A list of already loaded components. - * - * If a component is in this list, then all of its requirements will also be assumed to be in the list. - * @returns {Loader} - * - * @typedef Loader - * @property {() => string[]} getIds A function to get all ids of the components to load. - * - * The returned ids will be duplicate-free, alias-free and in load order. - * @property {LoadFunction} load A functional interface to load components. - * - * @typedef {<T> (loadComponent: (id: string) => T, chainer?: LoadChainer<T>) => T} LoadFunction - * A functional interface to load components. - * - * The `loadComponent` function will be called for every component in the order in which they have to be loaded. - * - * The `chainer` is useful for asynchronous loading and its `series` and `parallel` functions can be thought of as - * `Promise#then` and `Promise.all`. - * - * @example - * load(id => { loadComponent(id); }); // returns undefined - * - * await load( - * id => loadComponentAsync(id), // returns a Promise for each id - * { - * series: async (before, after) => { - * await before; - * await after(); - * }, - * parallel: async (values) => { - * await Promise.all(values); - * } - * } - * ); - */ - function getLoader(components, load, loaded) { - var entryMap = createEntryMap(components); - var resolveAlias = createAliasResolver(entryMap); - - load = load.map(resolveAlias); - loaded = (loaded || []).map(resolveAlias); - - var loadSet = toSet(load); - var loadedSet = toSet(loaded); - - // add requirements - - load.forEach(addRequirements); - function addRequirements(id) { - var entry = entryMap[id]; - forEach(entry && entry.require, function (reqId) { - if (!(reqId in loadedSet)) { - loadSet[reqId] = true; - addRequirements(reqId); - } - }); - } - - // add components to reload - - // A component x in `loaded` has to be reloaded if - // 1) a component in `load` modifies x. - // 2) x depends on a component in `load`. - // The above two condition have to be applied until nothing changes anymore. - - var dependencyResolver = createDependencyResolver(entryMap); - - /** @type {StringSet} */ - var loadAdditions = loadSet; - /** @type {StringSet} */ - var newIds; - while (hasKeys(loadAdditions)) { - newIds = {}; - - // condition 1) - for (var loadId in loadAdditions) { - var entry = entryMap[loadId]; - forEach(entry && entry.modify, function (modId) { - if (modId in loadedSet) { - newIds[modId] = true; - } - }); - } - - // condition 2) - for (var loadedId in loadedSet) { - if (!(loadedId in loadSet)) { - for (var depId in dependencyResolver(loadedId)) { - if (depId in loadSet) { - newIds[loadedId] = true; - break; - } - } - } - } - - loadAdditions = newIds; - for (var newId in loadAdditions) { - loadSet[newId] = true; - } - } - - /** @type {Loader} */ - var loader = { - getIds: function () { - var ids = []; - loader.load(function (id) { - ids.push(id); - }); - return ids; - }, - load: function (loadComponent, chainer) { - return loadComponentsInOrder(dependencyResolver, loadSet, loadComponent, chainer); - } - }; - - return loader; - } - - return getLoader; - -}()); - -if (true) { - module.exports = getLoader; -} - - -/***/ }, - -/***/ 8426 -(module, exports) { - -/** - * @param {string} string The string to parse - * @returns {Array<number>} Returns an energetic array. - */ -function parsePart(string) { - let res = []; - let m; - - for (let str of string.split(",").map((str) => str.trim())) { - // just a number - if (/^-?\d+$/.test(str)) { - res.push(parseInt(str, 10)); - } else if ( - (m = str.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)) - ) { - // 1-5 or 1..5 (equivalent) or 1...5 (doesn't include 5) - let [_, lhs, sep, rhs] = m; - - if (lhs && rhs) { - lhs = parseInt(lhs); - rhs = parseInt(rhs); - const incr = lhs < rhs ? 1 : -1; - - // Make it inclusive by moving the right 'stop-point' away by one. - if (sep === "-" || sep === ".." || sep === "\u2025") rhs += incr; - - for (let i = lhs; i !== rhs; i += incr) res.push(i); - } - } - } - - return res; -} - -exports["default"] = parsePart; -module.exports = parsePart; - - -/***/ }, - -/***/ 8437 -(module) { - -"use strict"; -module.exports = /*#__PURE__*/JSON.parse('{"id":"reference/web-ui-spec","title":"CmdForge Web UI Design","description":"Purpose","source":"@site/docs/reference/web-ui-spec.md","sourceDirName":"reference","slug":"/reference/web-ui-spec","permalink":"/rob/CmdForge/reference/web-ui-spec","draft":false,"unlisted":false,"tags":[],"version":"current","sidebarPosition":6,"frontMatter":{"sidebar_label":"Web UI Design","sidebar_position":6,"format":"md"},"sidebar":"docs","previous":{"title":"Design Philosophy","permalink":"/rob/CmdForge/reference/design"},"next":{"title":"CmdForge TODOs","permalink":"/rob/CmdForge/todos"}}'); - -/***/ }, - -/***/ 8453 -(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ R: () => (/* binding */ useMDXComponents), -/* harmony export */ x: () => (/* binding */ MDXProvider) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/** - * @import {MDXComponents} from 'mdx/types.js' - * @import {Component, ReactElement, ReactNode} from 'react' - */ - -/** - * @callback MergeComponents - * Custom merge function. - * @param {Readonly<MDXComponents>} currentComponents - * Current components from the context. - * @returns {MDXComponents} - * Additional components. - * - * @typedef Props - * Configuration for `MDXProvider`. - * @property {ReactNode | null | undefined} [children] - * Children (optional). - * @property {Readonly<MDXComponents> | MergeComponents | null | undefined} [components] - * Additional components to use or a function that creates them (optional). - * @property {boolean | null | undefined} [disableParentContext=false] - * Turn off outer component context (default: `false`). - */ - - - -/** @type {Readonly<MDXComponents>} */ -const emptyComponents = {} - -const MDXContext = react__WEBPACK_IMPORTED_MODULE_0__.createContext(emptyComponents) - -/** - * Get current components from the MDX Context. - * - * @param {Readonly<MDXComponents> | MergeComponents | null | undefined} [components] - * Additional components to use or a function that creates them (optional). - * @returns {MDXComponents} - * Current components. - */ -function useMDXComponents(components) { - const contextComponents = react__WEBPACK_IMPORTED_MODULE_0__.useContext(MDXContext) - - // Memoize to avoid unnecessary top-level context changes - return react__WEBPACK_IMPORTED_MODULE_0__.useMemo( - function () { - // Custom merge via a function prop - if (typeof components === 'function') { - return components(contextComponents) - } - - return {...contextComponents, ...components} - }, - [contextComponents, components] - ) -} - -/** - * Provider for MDX context. - * - * @param {Readonly<Props>} properties - * Properties. - * @returns {ReactElement} - * Element. - * @satisfies {Component} - */ -function MDXProvider(properties) { - /** @type {Readonly<MDXComponents>} */ - let allComponents - - if (properties.disableParentContext) { - allComponents = - typeof properties.components === 'function' - ? properties.components(emptyComponents) - : properties.components || emptyComponents - } else { - allComponents = useMDXComponents(properties.components) - } - - return react__WEBPACK_IMPORTED_MODULE_0__.createElement( - MDXContext.Provider, - {value: allComponents}, - properties.children - ) -} - - -/***/ }, - -/***/ 8473 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ c: () => (/* binding */ processAdmonitionProps) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// Workaround because it's difficult in MDX v1 to provide a MDX title as props -// See https://github.com/facebook/docusaurus/pull/7152#issuecomment-1145779682 -function extractMDXAdmonitionTitle(children){const items=react__WEBPACK_IMPORTED_MODULE_0__.Children.toArray(children);const mdxAdmonitionTitleWrapper=items.find(item=>/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.isValidElement(item)&&item.type==='mdxAdmonitionTitle');const rest=items.filter(item=>item!==mdxAdmonitionTitleWrapper);const mdxAdmonitionTitle=mdxAdmonitionTitleWrapper?.props.children;return{mdxAdmonitionTitle,rest:rest.length>0?/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.Fragment,{children:rest}):null};}function processAdmonitionProps(props){const{mdxAdmonitionTitle,rest}=extractMDXAdmonitionTitle(props.children);const title=props.title??mdxAdmonitionTitle;return{...props,// Do not return "title: undefined" prop -// this might create unwanted props overrides when merging props -// For example: {...default,...props} -...(title&&{title}),children:rest};} - -/***/ }, - -/***/ 8478 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ BrowserOnly) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_useIsBrowser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2303); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// Similar comp to the one described here: -// https://www.joshwcomeau.com/react/the-perils-of-rehydration/#abstractions -function BrowserOnly({children,fallback}){const isBrowser=(0,_docusaurus_useIsBrowser__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)();if(isBrowser){if(typeof children!=='function'&&"production"==='development')// removed by dead control flow -{}return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.Fragment,{children:children?.()});}return fallback??null;} - -/***/ }, - -/***/ 8484 -(module) { - -// Exports -module.exports = { - "colorModeToggle": `colorModeToggle_DEke` -}; - - -/***/ }, - -/***/ 8495 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ IconLightMode) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function IconLightMode(props){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...props,children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"})});} - -/***/ }, - -/***/ 8587 -(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ _objectWithoutPropertiesLoose) -/* harmony export */ }); -function _objectWithoutPropertiesLoose(r, e) { - if (null == r) return {}; - var t = {}; - for (var n in r) if ({}.hasOwnProperty.call(r, n)) { - if (-1 !== e.indexOf(n)) continue; - t[n] = r[n]; - } - return t; -} - - -/***/ }, - -/***/ 8695 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ N: () => (/* binding */ NavbarSecondaryMenuDisplayProvider), -/* harmony export */ T: () => (/* binding */ useNavbarSecondaryMenu) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _utils_reactUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9532); -/* harmony import */ var _navbarMobileSidebar__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2069); -/* harmony import */ var _content__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(5600); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */const Context=/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(null);function useContextValue(){const mobileSidebar=(0,_navbarMobileSidebar__WEBPACK_IMPORTED_MODULE_2__/* .useNavbarMobileSidebar */ .M)();const content=(0,_content__WEBPACK_IMPORTED_MODULE_3__/* .useNavbarSecondaryMenuContent */ .YL)();const[shown,setShown]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);const hasContent=content.component!==null;const previousHasContent=(0,_utils_reactUtils__WEBPACK_IMPORTED_MODULE_1__/* .usePrevious */ .ZC)(hasContent);// When content is become available for the first time (set in useEffect) -// we set this content to be shown! -(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{const contentBecameAvailable=hasContent&&!previousHasContent;if(contentBecameAvailable){setShown(true);}},[hasContent,previousHasContent]);// On sidebar close, secondary menu is set to be shown on next re-opening -// (if any secondary menu content available) -(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{if(!hasContent){setShown(false);return;}if(!mobileSidebar.shown){setShown(true);}},[mobileSidebar.shown,hasContent]);return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>[shown,setShown],[shown]);}/** @internal */function NavbarSecondaryMenuDisplayProvider({children}){const value=useContextValue();return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(Context.Provider,{value:value,children:children});}function renderElement(content){if(content.component){const Comp=content.component;return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(Comp,{...content.props});}return undefined;}/** Wires the logic for rendering the mobile navbar secondary menu. */function useNavbarSecondaryMenu(){const value=(0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(Context);if(!value){throw new _utils_reactUtils__WEBPACK_IMPORTED_MODULE_1__/* .ReactContextError */ .dV('NavbarSecondaryMenuDisplayProvider');}const[shown,setShown]=value;const hide=(0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>setShown(false),[setShown]);const content=(0,_content__WEBPACK_IMPORTED_MODULE_3__/* .useNavbarSecondaryMenuContent */ .YL)();return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>({shown,hide,content:renderElement(content)}),[hide,content,shown]);} - -/***/ }, - -/***/ 8716 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ AdmonitionTypeTip) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(986); -/* harmony import */ var _theme_Admonition_Layout__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7611); -/* harmony import */ var _theme_Admonition_Icon_Tip__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(3069); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */const infimaClassName='alert alert--success';const defaultProps={icon:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_theme_Admonition_Icon_Tip__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A,{}),title:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function AdmonitionTypeTip(props){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_theme_Admonition_Layout__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A,{...defaultProps,...props,className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(infimaClassName,props.className),children:props.children});} - -/***/ }, - -/***/ 8721 -(module) { - -// Exports -module.exports = { - "expandButton": `expandButton_TmdG`, - "expandButtonIcon": `expandButtonIcon_i1dp` -}; - - -/***/ }, - -/***/ 8722 -(module, __unused_webpack_exports, __webpack_require__) { - -const components = __webpack_require__(6969); -const getLoader = __webpack_require__(8380); - - -/** - * The set of all languages which have been loaded using the below function. - * - * @type {Set<string>} - */ -const loadedLanguages = new Set(); - -/** - * Loads the given languages and adds them to the current Prism instance. - * - * If no languages are provided, __all__ Prism languages will be loaded. - * - * @param {string|string[]} [languages] - * @returns {void} - */ -function loadLanguages(languages) { - if (languages === undefined) { - languages = Object.keys(components.languages).filter(l => l != 'meta'); - } else if (!Array.isArray(languages)) { - languages = [languages]; - } - - // the user might have loaded languages via some other way or used `prism.js` which already includes some - // we don't need to validate the ids because `getLoader` will ignore invalid ones - const loaded = [...loadedLanguages, ...Object.keys(Prism.languages)]; - - getLoader(components, languages, loaded).load(lang => { - if (!(lang in components.languages)) { - if (!loadLanguages.silent) { - console.warn('Language does not exist: ' + lang); - } - return; - } - - const pathToLanguage = './prism-' + lang; - - // remove from require cache and from Prism - delete __webpack_require__.c[/*require.resolve*/(__webpack_require__(3157).resolve(pathToLanguage))]; - delete Prism.languages[lang]; - - __webpack_require__(3157)(pathToLanguage); - - loadedLanguages.add(lang); - }); -} - -/** - * Set this to `true` to prevent all warning messages `loadLanguages` logs. - */ -loadLanguages.silent = false; - -module.exports = loadLanguages; - - -/***/ }, - -/***/ 8768 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ Layout) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_ErrorBoundary__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7788); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7559); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(5500); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(5236); -/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(3535); -/* harmony import */ var _theme_SkipToContent__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(2273); -/* harmony import */ var _theme_AnnouncementBar__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(9582); -/* harmony import */ var _theme_Navbar__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(5144); -/* harmony import */ var _theme_Footer__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(2873); -/* harmony import */ var _theme_Layout_Provider__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(3660); -/* harmony import */ var _theme_ErrorPageContent__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(1867); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(6218); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_13__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function Layout(props){const{children,noFooter,wrapperClassName,// Not really layout-related, but kept for convenience/retro-compatibility -title,description}=props;(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_6__/* .useKeyboardNavigation */ .J)();return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)(_theme_Layout_Provider__WEBPACK_IMPORTED_MODULE_11__/* ["default"] */ .A,{children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_4__/* .PageMetadata */ .be,{title:title,description:description}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_theme_SkipToContent__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A,{}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_theme_AnnouncementBar__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .A,{}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_theme_Navbar__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .A,{}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)("div",{id:_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_5__/* .SkipToContentFallbackId */ .j,className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__/* .ThemeClassNames */ .G.layout.main.container,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__/* .ThemeClassNames */ .G.wrapper.main,(_styles_module_css__WEBPACK_IMPORTED_MODULE_13___default().mainWrapper),wrapperClassName),children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_docusaurus_ErrorBoundary__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{fallback:params=>/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_theme_ErrorPageContent__WEBPACK_IMPORTED_MODULE_12__/* ["default"] */ .A,{...params}),children:children})}),!noFooter&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_theme_Footer__WEBPACK_IMPORTED_MODULE_10__/* ["default"] */ .A,{})]});} - -/***/ }, - -/***/ 8774 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4625); -/* harmony import */ var _docusaurus_utils_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(440); -/* harmony import */ var _useDocusaurusContext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4586); -/* harmony import */ var _isInternalUrl__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(6654); -/* harmony import */ var _ExecutionEnvironment__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(8193); -/* harmony import */ var _useBrokenLinks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(2521); -/* harmony import */ var _useBaseUrl__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(6025); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// TODO all this wouldn't be necessary if we used ReactRouter basename feature -// We don't automatically add base urls to all links, -// only the "safe" ones, starting with / (like /docs/introduction) -// this is because useBaseUrl() actually transforms relative links -// like "introduction" to "/baseUrl/introduction" => bad behavior to fix -const shouldAddBaseUrlAutomatically=to=>to.startsWith('/');function Link({isNavLink,to,href,activeClassName,isActive,'data-noBrokenLinkCheck':noBrokenLinkCheck,autoAddBaseUrl=true,...props},forwardedRef){const{siteConfig}=(0,_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)();const{trailingSlash,baseUrl}=siteConfig;const router=siteConfig.future.experimental_router;const{withBaseUrl}=(0,_useBaseUrl__WEBPACK_IMPORTED_MODULE_7__/* .useBaseUrlUtils */ .hH)();const brokenLinks=(0,_useBrokenLinks__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A)();const innerRef=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);(0,react__WEBPACK_IMPORTED_MODULE_0__.useImperativeHandle)(forwardedRef,()=>innerRef.current);// IMPORTANT: using to or href should not change anything -// For example, MDX links will ALWAYS give us the href props -// Using one prop or the other should not be used to distinguish -// internal links (/docs/myDoc) from external links (https://github.com) -const targetLinkUnprefixed=to||href;function maybeAddBaseUrl(str){return autoAddBaseUrl&&shouldAddBaseUrlAutomatically(str)?withBaseUrl(str):str;}const isInternal=(0,_isInternalUrl__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A)(targetLinkUnprefixed);// pathname:// is a special "protocol" we use to tell Docusaurus link -// that a link is not "internal" and that we shouldn't use history.push() -// this is not ideal but a good enough escape hatch for now -// see https://github.com/facebook/docusaurus/issues/3309 -// note: we want baseUrl to be appended (see issue for details) -// TODO read routes and automatically detect internal/external links? -const targetLinkWithoutPathnameProtocol=targetLinkUnprefixed?.replace('pathname://','');// TODO we should use ReactRouter basename feature instead! -// Automatically apply base url in links that start with / -let targetLink=typeof targetLinkWithoutPathnameProtocol!=='undefined'?maybeAddBaseUrl(targetLinkWithoutPathnameProtocol):undefined;// TODO find a way to solve this problem properly -// Fix edge case when useBaseUrl is used on a link -// "./" is useful for images and other resources -// But we don't need it for <Link> -// unfortunately we can't really make the difference :/ -if(router==='hash'&&targetLink?.startsWith('./')){targetLink=targetLink?.slice(1);}if(targetLink&&isInternal){targetLink=(0,_docusaurus_utils_common__WEBPACK_IMPORTED_MODULE_2__/* .applyTrailingSlash */ .Ks)(targetLink,{trailingSlash,baseUrl});}const preloaded=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(false);const LinkComponent=isNavLink?react_router_dom__WEBPACK_IMPORTED_MODULE_1__/* .NavLink */ .k2:react_router_dom__WEBPACK_IMPORTED_MODULE_1__/* .Link */ .N_;const IOSupported=_ExecutionEnvironment__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A.canUseIntersectionObserver;const ioRef=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();const handleRef=el=>{innerRef.current=el;if(IOSupported&&el&&isInternal){// If IO supported and element reference found, set up Observer. -ioRef.current=new window.IntersectionObserver(entries=>{entries.forEach(entry=>{if(el===entry.target){// If element is in viewport, stop observing and run callback. -// https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API -if(entry.isIntersecting||entry.intersectionRatio>0){ioRef.current.unobserve(el);ioRef.current.disconnect();if(targetLink!=null){window.docusaurus.prefetch(targetLink);}}}});});// Add element to the observer. -ioRef.current.observe(el);}};const onInteractionEnter=()=>{if(!preloaded.current&&targetLink!=null){window.docusaurus.preload(targetLink);preloaded.current=true;}};(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{// If IO is not supported. We prefetch by default (only once). -if(!IOSupported&&isInternal&&_ExecutionEnvironment__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A.canUseDOM){if(targetLink!=null){window.docusaurus.prefetch(targetLink);}}// When unmounting, stop intersection observer from watching. -return()=>{if(IOSupported&&ioRef.current){ioRef.current.disconnect();}};},[ioRef,targetLink,IOSupported,isInternal]);// It is simple local anchor link targeting current page? -const isAnchorLink=targetLink?.startsWith('#')??false;// See also RR logic: -// https://github.com/remix-run/react-router/blob/v5/packages/react-router-dom/modules/Link.js#L47 -const hasInternalTarget=!props.target||props.target==='_self';// Should we use a regular <a> tag instead of React-Router Link component? -const isRegularHtmlLink=!targetLink||!isInternal||!hasInternalTarget||// When using the hash router, we can't use the regular <a> link for anchors -// We need to use React Router to navigate to /#/pathname/#anchor -// And not /#anchor -// See also https://github.com/facebook/docusaurus/pull/10311 -isAnchorLink&&router!=='hash';if(!noBrokenLinkCheck&&(isAnchorLink||!isRegularHtmlLink)){brokenLinks.collectLink(targetLink);}if(props.id){brokenLinks.collectAnchor(props.id);}// These props are only added in unit tests to assert/capture the type of link -const testOnlyProps= false?0:{};return isRegularHtmlLink?/*#__PURE__*/// eslint-disable-next-line jsx-a11y/anchor-has-content, @docusaurus/no-html-links -(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)("a",{ref:innerRef,href:targetLink,...(targetLinkUnprefixed&&!isInternal&&{target:'_blank',rel:'noopener noreferrer'}),...props,...testOnlyProps}):/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(LinkComponent,{...props,onMouseEnter:onInteractionEnter,onTouchStart:onInteractionEnter,innerRef:handleRef,to:targetLink// Avoid "React does not recognize the `activeClassName` prop on a DOM -// element" -,...(isNavLink&&{isActive,activeClassName}),...testOnlyProps});}/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(Link)); - -/***/ }, - -/***/ 8780 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ DocCategoryGeneratedIndexPage) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5500); -/* harmony import */ var _docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6972); -/* harmony import */ var _docusaurus_useBaseUrl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6025); -/* harmony import */ var _theme_DocCardList__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(2550); -/* harmony import */ var _theme_DocPaginator__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(7719); -/* harmony import */ var _theme_DocVersionBanner__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(1878); -/* harmony import */ var _theme_DocVersionBadge__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(4267); -/* harmony import */ var _theme_DocBreadcrumbs__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(9978); -/* harmony import */ var _theme_Heading__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(4608); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(1902); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_10__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function DocCategoryGeneratedIndexPageMetadata({categoryGeneratedIndex}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)(_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_1__/* .PageMetadata */ .be,{title:categoryGeneratedIndex.title,description:categoryGeneratedIndex.description,keywords:categoryGeneratedIndex.keywords// TODO `require` this? -,image:(0,_docusaurus_useBaseUrl__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Ay)(categoryGeneratedIndex.image)});}function DocCategoryGeneratedIndexPageContent({categoryGeneratedIndex}){const category=(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_2__/* .useCurrentSidebarCategory */ .$S)();return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxs)("div",{className:(_styles_module_css__WEBPACK_IMPORTED_MODULE_10___default().generatedIndexPage),children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)(_theme_DocVersionBanner__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A,{}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)(_theme_DocBreadcrumbs__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .A,{}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)(_theme_DocVersionBadge__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A,{}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxs)("header",{children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)(_theme_Heading__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .A,{as:"h1",className:(_styles_module_css__WEBPACK_IMPORTED_MODULE_10___default().title),children:categoryGeneratedIndex.title}),categoryGeneratedIndex.description&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)("p",{children:categoryGeneratedIndex.description})]}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)("article",{className:"margin-top--lg",children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)(_theme_DocCardList__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A,{items:category.items,className:(_styles_module_css__WEBPACK_IMPORTED_MODULE_10___default().list)})}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)("footer",{className:"margin-top--md",children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)(_theme_DocPaginator__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A,{previous:categoryGeneratedIndex.navigation.previous,next:categoryGeneratedIndex.navigation.next})})]});}function DocCategoryGeneratedIndexPage(props){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.Fragment,{children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)(DocCategoryGeneratedIndexPageMetadata,{...props}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)(DocCategoryGeneratedIndexPageContent,{...props})]});} - -/***/ }, - -/***/ 8798 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ assets: () => (/* binding */ assets), -/* harmony export */ contentTitle: () => (/* binding */ contentTitle), -/* harmony export */ "default": () => (/* binding */ MDXContent), -/* harmony export */ frontMatter: () => (/* binding */ frontMatter), -/* harmony export */ metadata: () => (/* reexport default export from named module */ _site_docusaurus_docusaurus_plugin_content_docs_default_site_docs_architecture_md_528_json__WEBPACK_IMPORTED_MODULE_0__), -/* harmony export */ toc: () => (/* binding */ toc) -/* harmony export */ }); -/* harmony import */ var _site_docusaurus_docusaurus_plugin_content_docs_default_site_docs_architecture_md_528_json__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4839); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4848); -/* harmony import */ var _mdx_js_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(8453); - - -const frontMatter = { - sidebar_position: 2 -}; -const contentTitle = 'CmdForge Architecture'; - -const assets = { - -}; - - - -const toc = [{ - "value": "Module Structure", - "id": "module-structure", - "level": 2 -}, { - "value": "Data Flow", - "id": "data-flow", - "level": 2 -}, { - "value": "CLI Tool Execution", - "id": "cli-tool-execution", - "level": 3 -}, { - "value": "Web UI Request Flow", - "id": "web-ui-request-flow", - "level": 3 -}, { - "value": "Key Classes", - "id": "key-classes", - "level": 2 -}, { - "value": "Tool (tool.py)", - "id": "tool-toolpy", - "level": 3 -}, { - "value": "ToolSource (tool.py)", - "id": "toolsource-toolpy", - "level": 3 -}, { - "value": "Provider (providers.py)", - "id": "provider-providerspy", - "level": 3 -}, { - "value": "Error Handling", - "id": "error-handling", - "level": 2 -}, { - "value": "Code Step Errors", - "id": "code-step-errors", - "level": 3 -}, { - "value": "YAML Syntax Errors", - "id": "yaml-syntax-errors", - "level": 3 -}, { - "value": "Nested Tool Errors", - "id": "nested-tool-errors", - "level": 3 -}, { - "value": "Registry Database", - "id": "registry-database", - "level": 2 -}, { - "value": "Configuration Files", - "id": "configuration-files", - "level": 2 -}]; -function _createMdxContent(props) { - const _components = { - code: "code", - h1: "h1", - h2: "h2", - h3: "h3", - header: "header", - li: "li", - p: "p", - pre: "pre", - table: "table", - tbody: "tbody", - td: "td", - th: "th", - thead: "thead", - tr: "tr", - ul: "ul", - ...(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__/* .useMDXComponents */ .R)(), - ...props.components - }; - return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.Fragment, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.header, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h1, { - id: "cmdforge-architecture", - children: "CmdForge Architecture" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "module-structure", - children: "Module Structure" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "src/cmdforge/\n├── cli/ # CLI commands\n│ ├── __init__.py\n│ ├── tool_commands.py # list, create, edit, delete\n│ ├── provider_commands.py # providers management\n│ ├── registry_commands.py # publish, install\n│ └── collections_commands.py # collections list, info, install\n├── registry/ # Registry API\n│ ├── app.py # Flask API endpoints\n│ ├── db.py # SQLite schema and queries\n│ ├── sync.py # Git repo sync\n│ └── rate_limit.py\n├── web/ # Web UI (cmdforge.brrd.tech)\n│ ├── app.py # Flask app factory\n│ ├── routes.py # Page routes\n│ ├── auth.py # User authentication\n│ ├── forum/ # Forum feature\n│ ├── templates/ # Jinja2 templates\n│ └── static/ # CSS, JS\n├── gui/ # Desktop GUI (PySide6)\n│ ├── __init__.py # Entry point, run_gui()\n│ ├── main_window.py # Main window with sidebar\n│ ├── styles.py # QSS stylesheet\n│ ├── pages/ # Application pages\n│ │ ├── tools_page.py # Tool list and details\n│ │ ├── tool_builder_page.py # Create/edit tools\n│ │ ├── registry_page.py # Browse/install tools\n│ │ └── providers_page.py # Provider management\n│ └── dialogs/ # Modal dialogs\n│ ├── step_dialog.py # Prompt/code step editors\n│ ├── argument_dialog.py\n│ ├── provider_dialog.py\n│ ├── connect_dialog.py # Registry connect\n│ └── publish_dialog.py\n├── tool.py # Tool dataclass and loading\n├── runner.py # Tool execution engine\n└── providers.py # AI provider abstraction\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "data-flow", - children: "Data Flow" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "cli-tool-execution", - children: "CLI Tool Execution" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "User Input (stdin)\n │\n ▼\n┌─────────────┐\n│ runner.py │ ──── Loads tool from ~/.cmdforge/<name>/config.yaml\n└─────────────┘\n │\n ▼\n┌─────────────┐\n│ Steps │\n│ (prompt/ │ ──── For prompt steps, calls providers.py\n│ code) │ ──── For code steps, exec() Python\n└─────────────┘\n │\n ▼\n Output (stdout)\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "web-ui-request-flow", - children: "Web UI Request Flow" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "Browser Request\n │\n ▼\n┌─────────────────┐\n│ Cloudflare │ ──── HTTPS termination\n└─────────────────┘\n │\n ▼\n┌─────────────────┐\n│ Flask :5050 │ ──── web/app.py\n└─────────────────┘\n │\n ├──── /api/* → registry/app.py (API)\n └──── /* → web/routes.py (Pages)\n │\n ▼\n ┌─────────────┐\n │ SQLite DB │\n └─────────────┘\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "key-classes", - children: "Key Classes" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "tool-toolpy", - children: "Tool (tool.py)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-python", - children: "@dataclass\nclass Tool:\n name: str\n description: str\n category: str\n arguments: List[ToolArgument]\n steps: List[Step] # PromptStep | CodeStep | ToolStep\n output: str\n dependencies: List[str]\n source: Optional[ToolSource] # Attribution for imports\n version: str\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "toolsource-toolpy", - children: "ToolSource (tool.py)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-python", - children: "@dataclass\nclass ToolSource:\n type: str # \"original\", \"imported\", \"forked\"\n license: str\n url: str\n author: str\n original_tool: str # e.g., \"fabric/patterns/extract_wisdom\"\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "provider-providerspy", - children: "Provider (providers.py)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-python", - children: "@dataclass\nclass Provider:\n name: str # e.g., \"opencode-pickle\"\n command: str # e.g., \"$HOME/.opencode/bin/opencode run --model ...\"\n description: str\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "error-handling", - children: "Error Handling" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "The runner provides detailed error messages for debugging:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "code-step-errors", - children: "Code Step Errors" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "When Python code fails in a code step, shows:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Step number and error type" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Offending line with context (line before/after)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Visual pointer (", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: ">>>" - }), ") to error line"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "List of available variables" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "Error in code step (step 2):\n NameError: name 'undefined_var' is not defined\n\n 1: data = input.split('\\n')\n>>> 2: result = undefined_var + data\n 3: output = result\n\n Available variables: ['input', 'max_size', 'step1_output']\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "yaml-syntax-errors", - children: "YAML Syntax Errors" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "When a tool's config.yaml has syntax errors:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Line and column number" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Visual pointer to exact position" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Context line above" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "Error loading tool 'my-tool': YAML syntax error\n Line 15, column 8\n\n 14: steps:\n > 15: - type prompt # missing colon\n ^\n Problem: expected ',' or ']'\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "nested-tool-errors", - children: "Nested Tool Errors" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "When a tool calls another tool that fails, shows the full call stack:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "Error in tool chain:\nmy-wrapper (step 2)\n -> summarize (step 1)\n -> Tool 'missing-tool' not found\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "registry-database", - children: "Registry Database" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "SQLite schema for published tools:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-sql", - children: "CREATE TABLE tools (\n id INTEGER PRIMARY KEY,\n name TEXT UNIQUE NOT NULL,\n description TEXT,\n category TEXT DEFAULT 'Other',\n config_yaml TEXT NOT NULL, -- Full tool YAML\n source TEXT, -- Deprecated (type only)\n source_url TEXT, -- Deprecated\n source_json TEXT, -- Full ToolSource as JSON\n published_at TIMESTAMP,\n downloads INTEGER DEFAULT 0,\n owner_id INTEGER REFERENCES users(id)\n);\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: ["The ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "source_json" - }), " column stores the complete ToolSource object, preserving all attribution fields when tools are published."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "configuration-files", - children: "Configuration Files" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "File" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Location" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Purpose" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Tool config" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "~/.cmdforge/<name>/config.yaml" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Tool definition" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Providers" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "~/.cmdforge/providers.yaml" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "AI provider commands" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Main config" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "~/.cmdforge/config.yaml" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Registry URL, client ID" - })] - })] - })] - })] - }); -} -function MDXContent(props = {}) { - const {wrapper: MDXLayout} = { - ...(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__/* .useMDXComponents */ .R)(), - ...props.components - }; - return MDXLayout ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(MDXLayout, { - ...props, - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_createMdxContent, { - ...props - }) - }) : _createMdxContent(props); -} - - - -/***/ }, - -/***/ 8836 -(module) { - -"use strict"; -module.exports = /*#__PURE__*/JSON.parse('{"id":"reference/registry-spec","title":"CmdForge Registry Design","description":"Purpose","source":"@site/docs/reference/registry-spec.md","sourceDirName":"reference","slug":"/reference/registry-spec","permalink":"/rob/CmdForge/reference/registry-spec","draft":false,"unlisted":false,"tags":[],"version":"current","sidebarPosition":1,"frontMatter":{"sidebar_label":"Registry API","sidebar_position":1,"format":"md"},"sidebar":"docs","previous":{"title":"Provider Setup","permalink":"/rob/CmdForge/reference/providers"},"next":{"title":"Meta-Tools","permalink":"/rob/CmdForge/reference/meta-tools"}}'); - -/***/ }, - -/***/ 8864 -(module) { - -// Exports -module.exports = { - "copyButtonCopied": `copyButtonCopied_Vdqa`, - "copyButtonIcons": `copyButtonIcons_IEyt`, - "copyButtonIcon": `copyButtonIcon_TrPX`, - "copyButtonSuccessIcon": `copyButtonSuccessIcon_cVMy` -}; - - -/***/ }, - -/***/ 8944 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ DocRoot) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7559); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(5500); -/* harmony import */ var _docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(6972); -/* harmony import */ var _docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(609); -/* harmony import */ var _theme_DocRoot_Layout__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(7123); -/* harmony import */ var _theme_NotFound_Content__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(3363); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function DocRoot(props){const currentDocRouteMetadata=(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_4__/* .useDocRootMetadata */ .B5)(props);if(!currentDocRouteMetadata){// We only render the not found content to avoid a double layout -// see https://github.com/facebook/docusaurus/pull/7966#pullrequestreview-1077276692 -return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(_theme_NotFound_Content__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A,{});}const{docElement,sidebarName,sidebarItems}=currentDocRouteMetadata;return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__/* .HtmlClassNameProvider */ .e3,{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__/* .ThemeClassNames */ .G.page.docsDocPage),children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_5__/* .DocsSidebarProvider */ .V,{name:sidebarName,items:sidebarItems,children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(_theme_DocRoot_Layout__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A,{children:docElement})})});} - -/***/ }, - -/***/ 8986 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ TagsListInline) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(986); -/* harmony import */ var _theme_Tag__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(8282); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4088); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function TagsListInline({tags}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.Fragment,{children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("b",{children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list",children:"Tags:"})}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("ul",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)((_styles_module_css__WEBPACK_IMPORTED_MODULE_4___default().tags),'padding--none','margin-left--sm'),children:tags.map(tag=>/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("li",{className:(_styles_module_css__WEBPACK_IMPORTED_MODULE_4___default().tag),children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_theme_Tag__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A,{...tag})},tag.permalink))})]});} - -/***/ }, - -/***/ 9021 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ DocItemTOCMobile) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7559); -/* harmony import */ var _docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(542); -/* harmony import */ var _theme_TOCCollapsible__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(3176); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(4061); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function DocItemTOCMobile(){const{toc,frontMatter}=(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_3__/* .useDoc */ .u)();return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_theme_TOCCollapsible__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A,{toc:toc,minHeadingLevel:frontMatter.toc_min_heading_level,maxHeadingLevel:frontMatter.toc_max_heading_level,className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__/* .ThemeClassNames */ .G.docs.docTocMobile,(_styles_module_css__WEBPACK_IMPORTED_MODULE_5___default().tocMobile))});} - -/***/ }, - -/***/ 9022 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ PaginatorNavLink) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_Link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(8774); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function PaginatorNavLink(props){const{permalink,title,subLabel,isNext}=props;return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(_docusaurus_Link__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('pagination-nav__link',isNext?'pagination-nav__link--next':'pagination-nav__link--prev'),to:permalink,children:[subLabel&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("div",{className:"pagination-nav__sublabel",children:subLabel}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("div",{className:"pagination-nav__label",children:title})]});} - -/***/ }, - -/***/ 9023 -(module) { - -"use strict"; -module.exports = require("util"); - -/***/ }, - -/***/ 9034 -(module) { - -// Exports -module.exports = { - "content": `content_knG7` -}; - - -/***/ }, - -/***/ 9060 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ NavbarNavLink) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_Link__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8774); -/* harmony import */ var _docusaurus_useBaseUrl__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6025); -/* harmony import */ var _docusaurus_isInternalUrl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6654); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1252); -/* harmony import */ var _theme_Icon_ExternalLink__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(5835); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function NavbarNavLink({activeBasePath,activeBaseRegex,to,href,label,html,isDropdownLink,prependBaseUrlToHref,...props}){// TODO all this seems hacky -// {to: 'version'} should probably be forbidden, in favor of {to: '/version'} -const toUrl=(0,_docusaurus_useBaseUrl__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Ay)(to);const activeBaseUrl=(0,_docusaurus_useBaseUrl__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Ay)(activeBasePath);const normalizedHref=(0,_docusaurus_useBaseUrl__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Ay)(href,{forcePrependBaseUrl:true});const isExternalLink=label&&href&&!(0,_docusaurus_isInternalUrl__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(href);// Link content is set through html XOR label -const linkContentProps=html?{dangerouslySetInnerHTML:{__html:html}}:{children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment,{children:[label,isExternalLink&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_theme_Icon_ExternalLink__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A,{...(isDropdownLink&&{width:12,height:12})})]})};if(href){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_docusaurus_Link__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A,{href:prependBaseUrlToHref?normalizedHref:href,...props,...linkContentProps});}return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_docusaurus_Link__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A,{to:toUrl,isNavLink:true,...((activeBasePath||activeBaseRegex)&&{isActive:(_match,location)=>activeBaseRegex?(0,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_4__/* .isRegexpStringMatch */ .G)(activeBaseRegex,location.pathname):location.pathname.startsWith(activeBaseUrl)}),...props,...linkContentProps});} - -/***/ }, - -/***/ 9079 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ IconDarkMode) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function IconDarkMode(props){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...props,children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"})});} - -/***/ }, - -/***/ 9083 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ DropdownNavbarItemDesktop) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _theme_NavbarItem_NavbarNavLink__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(9060); -/* harmony import */ var _theme_NavbarItem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7163); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function DropdownNavbarItemDesktop({items,position,className,onClick,...props}){const dropdownRef=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);const[showDropdown,setShowDropdown]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{const handleClickOutside=event=>{if(!dropdownRef.current||dropdownRef.current.contains(event.target)){return;}setShowDropdown(false);};document.addEventListener('mousedown',handleClickOutside);document.addEventListener('touchstart',handleClickOutside);document.addEventListener('focusin',handleClickOutside);return()=>{document.removeEventListener('mousedown',handleClickOutside);document.removeEventListener('touchstart',handleClickOutside);document.removeEventListener('focusin',handleClickOutside);};},[dropdownRef]);return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)("div",{ref:dropdownRef,className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('navbar__item','dropdown','dropdown--hoverable',{'dropdown--right':position==='right','dropdown--show':showDropdown}),children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_theme_NavbarItem_NavbarNavLink__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{"aria-haspopup":"true","aria-expanded":showDropdown,role:"button"// # hash permits to make the <a> tag focusable in case no link target -// See https://github.com/facebook/docusaurus/pull/6003 -// There's probably a better solution though... -,href:props.to?undefined:'#',className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('navbar__link',className),...props,onClick:props.to?undefined:e=>e.preventDefault(),onKeyDown:e=>{if(e.key==='Enter'){e.preventDefault();setShowDropdown(!showDropdown);}},children:props.children??props.label}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("ul",{className:"dropdown__menu",children:items.map((childItemProps,i)=>/*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_theme_NavbarItem__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A,{isDropdownItem:true,activeClassName:"dropdown__link--active",...childItemProps,key:i}))})]});} - -/***/ }, - -/***/ 9130 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ SiteMetadataDefaults) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_Head__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5260); -/* harmony import */ var _docusaurus_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4586); -/* harmony import */ var _docusaurus_useBaseUrl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6025); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function SiteMetadataDefaults(){const{siteConfig:{favicon,title,noIndex},i18n:{currentLocale,localeConfigs}}=(0,_docusaurus_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)();const faviconUrl=(0,_docusaurus_useBaseUrl__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Ay)(favicon);const{htmlLang,direction:htmlDir}=localeConfigs[currentLocale];return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(_docusaurus_Head__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A,{children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("html",{lang:htmlLang,dir:htmlDir}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("title",{children:title}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("meta",{property:"og:title",content:title}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),noIndex&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("meta",{name:"robots",content:"noindex, nofollow"}),favicon&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("link",{rel:"icon",href:faviconUrl})]});} - -/***/ }, - -/***/ 9136 -(module) { - -// Exports -module.exports = { - "tocCollapsibleButton": `tocCollapsibleButton_TO0P`, - "tocCollapsibleButtonExpanded": `tocCollapsibleButtonExpanded_MG3E` -}; - - -/***/ }, - -/***/ 9169 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ Dt: () => (/* binding */ useHomePageRoute), -/* harmony export */ ys: () => (/* binding */ isSamePath) -/* harmony export */ }); -/* unused harmony export findHomePageRoute */ -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _generated_routes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(467); -/* harmony import */ var _docusaurus_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4586); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - *//** - * Compare the 2 paths, case insensitive and ignoring trailing slash - */function isSamePath(path1,path2){const normalize=pathname=>(!pathname||pathname.endsWith('/')?pathname:`${pathname}/`)?.toLowerCase();return normalize(path1)===normalize(path2);}/** - * Note that sites don't always have a homepage in practice, so we can't assume - * that linking to '/' is always safe. - * @see https://github.com/facebook/docusaurus/pull/6517#issuecomment-1048709116 - */function findHomePageRoute({baseUrl,routes:initialRoutes}){function isHomePageRoute(route){return route.path===baseUrl&&route.exact===true;}function isHomeParentRoute(route){return route.path===baseUrl&&!route.exact;}function doFindHomePageRoute(routes){if(routes.length===0){return undefined;}const homePage=routes.find(isHomePageRoute);if(homePage){return homePage;}const indexSubRoutes=routes.filter(isHomeParentRoute).flatMap(route=>route.routes??[]);return doFindHomePageRoute(indexSubRoutes);}return doFindHomePageRoute(initialRoutes);}/** - * Fetches the route that points to "/". Use this instead of the naive "/", - * because the homepage may not exist. - */function useHomePageRoute(){const{baseUrl}=(0,_docusaurus_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)().siteConfig;return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>findHomePageRoute({routes:_generated_routes__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A,baseUrl}),[baseUrl]);} - -/***/ }, - -/***/ 9180 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ TOCItems) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6342); -/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7243); -/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(366); -/* harmony import */ var _theme_TOCItems_Tree__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4338); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function TOCItems({toc,className='table-of-contents table-of-contents__left-border',linkClassName='table-of-contents__link',linkActiveClassName=undefined,minHeadingLevel:minHeadingLevelOption,maxHeadingLevel:maxHeadingLevelOption,...props}){const themeConfig=(0,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_1__/* .useThemeConfig */ .p)();const minHeadingLevel=minHeadingLevelOption??themeConfig.tableOfContents.minHeadingLevel;const maxHeadingLevel=maxHeadingLevelOption??themeConfig.tableOfContents.maxHeadingLevel;const tocTree=(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_2__/* .useFilteredAndTreeifiedTOC */ .h)({toc,minHeadingLevel,maxHeadingLevel});const tocHighlightConfig=(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>{if(linkClassName&&linkActiveClassName){return{linkClassName,linkActiveClassName,minHeadingLevel,maxHeadingLevel};}return undefined;},[linkClassName,linkActiveClassName,minHeadingLevel,maxHeadingLevel]);(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_3__/* .useTOCHighlight */ .i)(tocHighlightConfig);return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_theme_TOCItems_Tree__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A,{toc:tocTree,className:className,linkClassName:linkClassName,...props});} - -/***/ }, - -/***/ 9223 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ DocsVersionNavbarItem) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6972); -/* harmony import */ var _theme_NavbarItem_DefaultNavbarItem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(3828); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */const getVersionMainDoc=version=>version.docs.find(doc=>doc.id===version.mainDocId);function DocsVersionNavbarItem({label:staticLabel,to:staticTo,docsPluginId,...props}){const version=(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_1__/* .useDocsVersionCandidates */ .Vd)(docsPluginId)[0];const label=staticLabel??version.label;const path=staticTo??getVersionMainDoc(version).path;return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_theme_NavbarItem_DefaultNavbarItem__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{...props,label:label,to:path});} - -/***/ }, - -/***/ 9342 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ B: () => (/* binding */ useLocalPathname) -/* harmony export */ }); -/* harmony import */ var _docusaurus_router__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6347); -/* harmony import */ var _docusaurus_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4586); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - *//** - * Get the pathname of current route, without the optional site baseUrl. - * - `/docs/myDoc` => `/docs/myDoc` - * - `/baseUrl/docs/myDoc` => `/docs/myDoc` - */function useLocalPathname(){const{siteConfig:{baseUrl}}=(0,_docusaurus_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)();const{pathname}=(0,_docusaurus_router__WEBPACK_IMPORTED_MODULE_0__/* .useLocation */ .zy)();return pathname.replace(baseUrl,'/');} - -/***/ }, - -/***/ 9421 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ LastUpdated) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_Translate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(986); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7559); -/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6266); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function LastUpdatedAtDate({lastUpdatedAt}){const atDate=new Date(lastUpdatedAt);const dateTimeFormat=(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_3__/* .useDateTimeFormat */ .i)({day:'numeric',month:'short',year:'numeric',timeZone:'UTC'});const formattedLastUpdatedAt=dateTimeFormat.format(atDate);return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("b",{children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("time",{dateTime:atDate.toISOString(),itemProp:"dateModified",children:formattedLastUpdatedAt})})},children:' on {date}'});}function LastUpdatedByUser({lastUpdatedBy}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("b",{children:lastUpdatedBy})},children:' by {user}'});}function LastUpdated({lastUpdatedAt,lastUpdatedBy}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)("span",{className:_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__/* .ThemeClassNames */ .G.common.lastUpdated,children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:lastUpdatedAt?/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(LastUpdatedAtDate,{lastUpdatedAt:lastUpdatedAt}):'',byUser:lastUpdatedBy?/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(LastUpdatedByUser,{lastUpdatedBy:lastUpdatedBy}):''},children:'Last updated{atDate}{byUser}'}), false&&/*#__PURE__*/0]});} - -/***/ }, - -/***/ 9456 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6342); -/* harmony import */ var _theme_Logo__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(5846); -/* harmony import */ var _theme_DocSidebar_Desktop_CollapseButton__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(99); -/* harmony import */ var _theme_DocSidebar_Desktop_Content__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(9757); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(6263); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function DocSidebarDesktop({path,sidebar,onCollapse,isHidden}){const{navbar:{hideOnScroll},docs:{sidebar:{hideable}}}=(0,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__/* .useThemeConfig */ .p)();return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)("div",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)((_styles_module_css__WEBPACK_IMPORTED_MODULE_6___default().sidebar),hideOnScroll&&(_styles_module_css__WEBPACK_IMPORTED_MODULE_6___default().sidebarWithHideableNavbar),isHidden&&(_styles_module_css__WEBPACK_IMPORTED_MODULE_6___default().sidebarHidden)),children:[hideOnScroll&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_theme_Logo__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A,{tabIndex:-1,className:(_styles_module_css__WEBPACK_IMPORTED_MODULE_6___default().sidebarLogo)}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_theme_DocSidebar_Desktop_Content__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A,{path:path,sidebar:sidebar}),hideable&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_theme_DocSidebar_Desktop_CollapseButton__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A,{onClick:onCollapse})]});}/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.memo(DocSidebarDesktop)); - -/***/ }, - -/***/ 9466 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ Wf: () => (/* binding */ createStorageSlot) -/* harmony export */ }); -/* unused harmony exports useStorageSlot, listStorageKeys */ -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _generated_site_storage__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4180); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */const DefaultStorageType=_generated_site_storage__WEBPACK_IMPORTED_MODULE_1__/* .type */ .N;function applyNamespace(storageKey){return`${storageKey}${_generated_site_storage__WEBPACK_IMPORTED_MODULE_1__/* .namespace */ .M}`;}// window.addEventListener('storage') only works for different windows... -// so for current window we have to dispatch the event manually -// Now we can listen for both cross-window / current-window storage changes! -// see https://stackoverflow.com/a/71177640/82609 -// see https://stackoverflow.com/questions/26974084/listen-for-changes-with-localstorage-on-the-same-window -function dispatchChangeEvent({key,oldValue,newValue,storage}){// If we set multiple times the same storage value, events should not be fired -// The native events behave this way, so our manual event dispatch should -// rather behave exactly the same. Not doing so might create infinite loops. -// See https://github.com/facebook/docusaurus/issues/8594 -if(oldValue===newValue){return;}const event=document.createEvent('StorageEvent');event.initStorageEvent('storage',false,false,key,oldValue,newValue,window.location.href,storage);window.dispatchEvent(event);}/** - * Will return `null` if browser storage is unavailable (like running Docusaurus - * in an iframe). This should NOT be called in SSR. - * - * @see https://github.com/facebook/docusaurus/pull/4501 - */function getBrowserStorage(storageType=DefaultStorageType){if(typeof window==='undefined'){throw new Error('Browser storage is not available on Node.js/Docusaurus SSR process.');}if(storageType==='none'){return null;}try{return window[storageType];}catch(err){logOnceBrowserStorageNotAvailableWarning(err);return null;}}let hasLoggedBrowserStorageNotAvailableWarning=false;/** - * Poor man's memoization to avoid logging multiple times the same warning. - * Sometimes, `localStorage`/`sessionStorage` is unavailable due to browser - * policies. - */function logOnceBrowserStorageNotAvailableWarning(error){if(!hasLoggedBrowserStorageNotAvailableWarning){console.warn(`Docusaurus browser storage is not available. -Possible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.`,error);hasLoggedBrowserStorageNotAvailableWarning=true;}}const NoopStorageSlot={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};// Fail-fast, as storage APIs should not be used during the SSR process -function createServerStorageSlot(key){function throwError(){throw new Error(`Illegal storage API usage for storage key "${key}". -Docusaurus storage APIs are not supposed to be called on the server-rendering process. -Please only call storage APIs in effects and event handlers.`);}return{get:throwError,set:throwError,del:throwError,listen:throwError};}/** - * Creates an interface to work on a particular key in the storage model. - * Note that this function only initializes the interface, but doesn't allocate - * anything by itself (i.e. no side-effects). - * - * The API is fail-safe, since usage of browser storage should be considered - * unreliable. Local storage might simply be unavailable (iframe + browser - * security) or operations might fail individually. Please assume that using - * this API can be a no-op. See also https://github.com/facebook/docusaurus/issues/6036 - */function createStorageSlot(keyInput,options){const key=applyNamespace(keyInput);if(typeof window==='undefined'){return createServerStorageSlot(key);}const storage=getBrowserStorage(options?.persistence);if(storage===null){return NoopStorageSlot;}return{get:()=>{try{return storage.getItem(key);}catch(err){console.error(`Docusaurus storage error, can't get key=${key}`,err);return null;}},set:newValue=>{try{const oldValue=storage.getItem(key);storage.setItem(key,newValue);dispatchChangeEvent({key,oldValue,newValue,storage});}catch(err){console.error(`Docusaurus storage error, can't set ${key}=${newValue}`,err);}},del:()=>{try{const oldValue=storage.getItem(key);storage.removeItem(key);dispatchChangeEvent({key,oldValue,newValue:null,storage});}catch(err){console.error(`Docusaurus storage error, can't delete key=${key}`,err);}},listen:onChange=>{try{const listener=event=>{if(event.storageArea===storage&&event.key===key){onChange(event);}};window.addEventListener('storage',listener);return()=>window.removeEventListener('storage',listener);}catch(err){console.error(`Docusaurus storage error, can't listen for changes of key=${key}`,err);return()=>{};}}};}function useStorageSlot(key,options){// Not ideal but good enough: assumes storage slot config is constant -const[storageSlot]=useState(()=>{if(key===null){return NoopStorageSlot;}return createStorageSlot(key,options);});const listen=useCallback(onChange=>{// Do not try to add a listener during SSR -if(typeof window==='undefined'){return()=>{};}return storageSlot.listen(onChange);},[storageSlot]);const currentValue=useSyncExternalStore(listen,()=>{// react-test-renderer (deprecated) never call getServerSnapshot() :/ -if(false)// removed by dead control flow -{}return storageSlot.get();},()=>null);return[currentValue,storageSlot];}/** - * Returns a list of all the keys currently stored in browser storage, - * or an empty list if browser storage can't be accessed. - */function listStorageKeys(storageType=DefaultStorageType){const browserStorage=getBrowserStorage(storageType);if(!browserStorage){return[];}const keys=[];for(let i=0;i<browserStorage.length;i+=1){const key=browserStorage.key(i);if(key!==null){keys.push(key);}}return keys;} - -/***/ }, - -/***/ 9494 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ assets: () => (/* binding */ assets), -/* harmony export */ contentTitle: () => (/* binding */ contentTitle), -/* harmony export */ "default": () => (/* binding */ MDXContent), -/* harmony export */ frontMatter: () => (/* binding */ frontMatter), -/* harmony export */ metadata: () => (/* reexport default export from named module */ _site_docusaurus_docusaurus_plugin_content_docs_default_site_docs_reference_registry_spec_md_387_json__WEBPACK_IMPORTED_MODULE_0__), -/* harmony export */ toc: () => (/* binding */ toc) -/* harmony export */ }); -/* harmony import */ var _site_docusaurus_docusaurus_plugin_content_docs_default_site_docs_reference_registry_spec_md_387_json__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8836); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4848); -/* harmony import */ var _mdx_js_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(8453); - - -const frontMatter = { - sidebar_label: 'Registry API', - sidebar_position: 1, - format: 'md' -}; -const contentTitle = 'CmdForge Registry Design'; - -const assets = { - -}; - - - -const toc = [{ - "value": "Purpose", - "id": "purpose", - "level": 2 -}, { - "value": "Terminology", - "id": "terminology", - "level": 2 -}, { - "value": "Diagram References", - "id": "diagram-references", - "level": 2 -}, { - "value": "System Overview", - "id": "system-overview", - "level": 2 -}, { - "value": "Pagination", - "id": "pagination", - "level": 3 -}, { - "value": "Input Constraints", - "id": "input-constraints", - "level": 3 -}, { - "value": "Sort Fields and Indexes", - "id": "sort-fields-and-indexes", - "level": 3 -}, { - "value": "Tags Endpoint", - "id": "tags-endpoint", - "level": 3 -}, { - "value": "Advanced Search", - "id": "advanced-search", - "level": 3 -}, { - "value": "API Version Compatibility", - "id": "api-version-compatibility", - "level": 3 -}, { - "value": "Source of Truth", - "id": "source-of-truth", - "level": 2 -}, { - "value": "Namespacing and Paths", - "id": "namespacing-and-paths", - "level": 2 -}, { - "value": "Namespace Identity", - "id": "namespace-identity", - "level": 3 -}, { - "value": "Tool Format (Registry == Local)", - "id": "tool-format-registry--local", - "level": 2 -}, { - "value": "Attribution and Source Fields", - "id": "attribution-and-source-fields", - "level": 3 -}, { - "value": "Collections", - "id": "collections", - "level": 2 -}, { - "value": "Collection Structure", - "id": "collection-structure", - "level": 3 -}, { - "value": "Collections API", - "id": "collections-api", - "level": 3 -}, { - "value": "CLI Commands", - "id": "cli-commands", - "level": 3 -}, { - "value": "Admin Collections API", - "id": "admin-collections-api", - "level": 3 -}, { - "value": "Versioning and Immutability", - "id": "versioning-and-immutability", - "level": 2 -}, { - "value": "Yank Policy", - "id": "yank-policy", - "level": 3 -}, { - "value": "Version Format", - "id": "version-format", - "level": 3 -}, { - "value": "Version Constraints", - "id": "version-constraints", - "level": 3 -}, { - "value": "Version Resolution Rules", - "id": "version-resolution-rules", - "level": 3 -}, { - "value": "Prerelease Handling", - "id": "prerelease-handling", - "level": 3 -}, { - "value": "Download Endpoint Version Selection", - "id": "download-endpoint-version-selection", - "level": 3 -}, { - "value": "Tool Resolution Order", - "id": "tool-resolution-order", - "level": 2 -}, { - "value": "Official Namespace", - "id": "official-namespace", - "level": 3 -}, { - "value": "Auto-Fetch Behavior", - "id": "auto-fetch-behavior", - "level": 2 -}, { - "value": "Wrapper Script Collisions", - "id": "wrapper-script-collisions", - "level": 3 -}, { - "value": "Project Manifest (cmdforge.yaml)", - "id": "project-manifest-cmdforgeyaml", - "level": 2 -}, { - "value": "CLI Config and Tokens", - "id": "cli-config-and-tokens", - "level": 2 -}, { - "value": "Publishing and Auth", - "id": "publishing-and-auth", - "level": 2 -}, { - "value": "Publish Idempotency and Edge Cases", - "id": "publish-idempotency-and-edge-cases", - "level": 3 -}, { - "value": "Publisher Registration", - "id": "publisher-registration", - "level": 2 -}, { - "value": "Authentication Security", - "id": "authentication-security", - "level": 3 -}, { - "value": "Token Scopes and Authorization", - "id": "token-scopes-and-authorization", - "level": 3 -}, { - "value": "Web Session Security", - "id": "web-session-security", - "level": 3 -}, { - "value": "CLI Commands Reference", - "id": "cli-commands-reference", - "level": 2 -}, { - "value": "Registry Commands", - "id": "registry-commands", - "level": 3 -}, { - "value": "Project Commands", - "id": "project-commands", - "level": 3 -}, { - "value": "Config Commands", - "id": "config-commands", - "level": 3 -}, { - "value": "Flags available on most commands", - "id": "flags-available-on-most-commands", - "level": 3 -}, { - "value": "Publish State Tracking", - "id": "publish-state-tracking", - "level": 2 -}, { - "value": "Local State Storage", - "id": "local-state-storage", - "level": 3 -}, { - "value": "Visual Indicators", - "id": "visual-indicators", - "level": 3 -}, { - "value": "Automatic Status Sync", - "id": "automatic-status-sync", - "level": 3 -}, { - "value": "Manual Sync", - "id": "manual-sync", - "level": 3 -}, { - "value": "Hash Computation", - "id": "hash-computation", - "level": 3 -}, { - "value": "API Endpoint", - "id": "api-endpoint", - "level": 3 -}, { - "value": "Webhooks and Security", - "id": "webhooks-and-security", - "level": 2 -}, { - "value": "HMAC Verification", - "id": "hmac-verification", - "level": 3 -}, { - "value": "Replay Protection", - "id": "replay-protection", - "level": 3 -}, { - "value": "Sync Job Locking", - "id": "sync-job-locking", - "level": 3 -}, { - "value": "Atomic Sync Strategy", - "id": "atomic-sync-strategy", - "level": 3 -}, { - "value": "Error Handling", - "id": "error-handling", - "level": 3 -}, { - "value": "Automated CI Validation", - "id": "automated-ci-validation", - "level": 2 -}, { - "value": "Registry Repository Structure", - "id": "registry-repository-structure", - "level": 2 -}, { - "value": "Download Stats", - "id": "download-stats", - "level": 2 -}, { - "value": "Counting Methodology", - "id": "counting-methodology", - "level": 3 -}, { - "value": "Client ID Generation", - "id": "client-id-generation", - "level": 3 -}, { - "value": "Privacy Considerations", - "id": "privacy-considerations", - "level": 3 -}, { - "value": "Async Stats Strategy", - "id": "async-stats-strategy", - "level": 3 -}, { - "value": "Search", - "id": "search", - "level": 2 -}, { - "value": "API Caching Strategy", - "id": "api-caching-strategy", - "level": 2 -}, { - "value": "Cache Headers", - "id": "cache-headers", - "level": 3 -}, { - "value": "ETag Implementation", - "id": "etag-implementation", - "level": 3 -}, { - "value": "DB vs Repo Read Strategy", - "id": "db-vs-repo-read-strategy", - "level": 3 -}, { - "value": "Staleness Detection", - "id": "staleness-detection", - "level": 3 -}, { - "value": "Error Model", - "id": "error-model", - "level": 2 -}, { - "value": "Response Envelopes", - "id": "response-envelopes", - "level": 3 -}, { - "value": "Error Codes", - "id": "error-codes", - "level": 3 -}, { - "value": "Error Scenarios and Fallbacks", - "id": "error-scenarios-and-fallbacks", - "level": 2 -}, { - "value": "CLI Error Handling", - "id": "cli-error-handling", - "level": 3 -}, { - "value": "Validation Failure Details", - "id": "validation-failure-details", - "level": 3 -}, { - "value": "Dependency Resolution Failures", - "id": "dependency-resolution-failures", - "level": 3 -}, { - "value": "Graceful Degradation", - "id": "graceful-degradation", - "level": 3 -}, { - "value": "UX Requirements (CLI/TUI)", - "id": "ux-requirements-clitui", - "level": 2 -}, { - "value": "Publishing UX", - "id": "publishing-ux", - "level": 3 -}, { - "value": "Progress Indicators", - "id": "progress-indicators", - "level": 3 -}, { - "value": "TUI Browse", - "id": "tui-browse", - "level": 3 -}, { - "value": "Project Initialization", - "id": "project-initialization", - "level": 3 -}, { - "value": "Accessibility", - "id": "accessibility", - "level": 3 -}, { - "value": "Offline Cache", - "id": "offline-cache", - "level": 2 -}, { - "value": "Index Integrity", - "id": "index-integrity", - "level": 3 -}, { - "value": "Web UI Vision", - "id": "web-ui-vision", - "level": 2 -}, { - "value": "README Security", - "id": "readme-security", - "level": 3 -}, { - "value": "Registry Curation System", - "id": "registry-curation-system", - "level": 2 -}, { - "value": "Roles and Permissions", - "id": "roles-and-permissions", - "level": 3 -}, { - "value": "Tool Visibility", - "id": "tool-visibility", - "level": 3 -}, { - "value": "Moderation Workflow", - "id": "moderation-workflow", - "level": 3 -}, { - "value": "Admin API Endpoints", - "id": "admin-api-endpoints", - "level": 3 -}, { - "value": "Ban Behavior", - "id": "ban-behavior", - "level": 3 -}, { - "value": "Report Resolution Actions", - "id": "report-resolution-actions", - "level": 3 -}, { - "value": "Audit Log", - "id": "audit-log", - "level": 3 -}, { - "value": "Web UI Admin Dashboard", - "id": "web-ui-admin-dashboard", - "level": 3 -}, { - "value": "Pending Tools Review Page", - "id": "pending-tools-review-page", - "level": 4 -}, { - "value": "Creating the First Admin", - "id": "creating-the-first-admin", - "level": 3 -}, { - "value": "Implementation Phases", - "id": "implementation-phases", - "level": 2 -}, { - "value": "Phase 1: Foundation", - "id": "phase-1-foundation", - "level": 3 -}, { - "value": "Phase 2: Core Backend", - "id": "phase-2-core-backend", - "level": 3 -}, { - "value": "Phase 3: CLI Commands", - "id": "phase-3-cli-commands", - "level": 3 -}, { - "value": "Phase 4: Publishing", - "id": "phase-4-publishing", - "level": 3 -}, { - "value": "Phase 5: Project Dependencies", - "id": "phase-5-project-dependencies", - "level": 3 -}, { - "value": "Phase 6: Smart Features", - "id": "phase-6-smart-features", - "level": 3 -}, { - "value": "Phase 7: Full Web UI", - "id": "phase-7-full-web-ui", - "level": 3 -}, { - "value": "Phase 8: Polish & Scale", - "id": "phase-8-polish--scale", - "level": 3 -}]; -function _createMdxContent(props) { - const _components = { - code: "code", - h1: "h1", - h2: "h2", - h3: "h3", - h4: "h4", - header: "header", - li: "li", - ol: "ol", - p: "p", - pre: "pre", - strong: "strong", - table: "table", - tbody: "tbody", - td: "td", - th: "th", - thead: "thead", - tr: "tr", - ul: "ul", - ...(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__/* .useMDXComponents */ .R)(), - ...props.components - }; - return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.Fragment, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.header, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h1, { - id: "cmdforge-registry-design", - children: "CmdForge Registry Design" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "purpose", - children: "Purpose" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Build a centralized registry for CmdForge to enable discovery, publishing, dependency management, and future curation at scale." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "terminology", - children: "Terminology" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Term" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Definition" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Tool definition" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.td, { - children: ["The full YAML file in the registry (", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "config.yaml" - }), ") containing name, steps, arguments, etc."] - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Tool config" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "The configuration within a tool definition (arguments, steps, provider settings)" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "cmdforge.yaml" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Project manifest file declaring tool dependencies and overrides" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "config.yaml" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "The tool definition file, both in registry and when installed locally" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Owner" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.td, { - children: ["Immutable namespace slug identifying the publisher (e.g., ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "rob" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "alice" - }), ")"] - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Publisher" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "A registered user who can publish tools to the registry" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Wrapper script" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.td, { - children: ["Auto-generated bash script in ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "~/.local/bin/" - }), " that invokes a tool"] - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Canonical naming:" - }), " Use ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "CmdForge-Registry" - }), " (capitalized, hyphenated) for the repository name."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "diagram-references", - children: "Diagram References" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["System overview: ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "discussions/diagrams/cmdforge-registry_rob_1.puml" - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Data flows: ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "discussions/diagrams/cmdforge-registry_rob_5.puml" - })] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "system-overview", - children: "System Overview" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: ["Users interact via the CLI and a future Web UI. Both call a Registry API hosted at ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "https://cmdforge.brrd.tech/api/v1" - }), " (future alias: ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "cmdforge.brrd.tech/api/v1" - }), "). The API syncs from a Gitea-backed registry repo and maintains a SQLite cache/search index."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Canonical API base path:" - }), " ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "https://cmdforge.brrd.tech/api/v1" - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: ["All API endpoints are versioned under ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/api/v1" - }), ". When breaking changes are needed, a new version (", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/api/v2" - }), ") will be introduced with deprecation notices."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Core API endpoints:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /api/v1/tools" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /api/v1/tools/search?q=..." - }), " (with advanced filtering)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /api/v1/tools/{owner}/{name}" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /api/v1/tools/{owner}/{name}/versions" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /api/v1/tools/{owner}/{name}/download?version=..." - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "POST /api/v1/tools" - }), " (publish)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /api/v1/categories" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /api/v1/tags" - }), " (list all tags with counts)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /api/v1/collections" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /api/v1/collections/{name}" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /api/v1/stats/popular" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "POST /api/v1/webhook/gitea" - }) - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "pagination", - children: "Pagination" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "All list endpoints support pagination:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Parameter" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Default" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Max" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Description" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "page" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "1" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "-" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Page number (1-indexed)" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "per_page" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "20" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "100" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Items per page" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "sort" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "downloads" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "-" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Sort field" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "order" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "desc" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "-" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Sort order (asc/desc)" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Stable ordering:" - }), " To ensure deterministic results across pages, sorting includes a secondary key:"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Primary: requested field (e.g., ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "downloads" - }), ")"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Secondary: ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "published_at" - }), " (desc)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Tertiary: ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "id" - }), " (for absolute stability)"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-sql", - children: "ORDER BY downloads DESC, published_at DESC, id DESC\nLIMIT 20 OFFSET 0\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Response pagination metadata:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-json", - children: "{\n \"data\": [...],\n \"meta\": {\n \"page\": 1,\n \"per_page\": 20,\n \"total\": 142,\n \"total_pages\": 8\n }\n}\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "input-constraints", - children: "Input Constraints" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Size limits to prevent oversized uploads:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Field" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Max Size" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Notes" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "config.yaml" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "64 KB" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Tool definition" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "README.md" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "256 KB" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Documentation" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Request body" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "512 KB" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Total POST payload" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Tool name" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "64 chars" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Alphanumeric + hyphen" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Description" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "500 chars" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Short summary" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Tag" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "32 chars" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Individual tag" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Tags array" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "10 items" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Maximum tags per tool" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Validation errors:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-json", - children: "{\n \"error\": {\n \"code\": \"PAYLOAD_TOO_LARGE\",\n \"message\": \"config.yaml exceeds 64KB limit\",\n \"details\": {\n \"field\": \"config\",\n \"size\": 72000,\n \"limit\": 65536\n }\n }\n}\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "sort-fields-and-indexes", - children: "Sort Fields and Indexes" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Allowed sort fields:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Endpoint" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.th, { - children: ["Allowed ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "sort" - }), " values"] - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /tools" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.td, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "downloads" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "published_at" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "name" - })] - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /tools/search" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.td, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "relevance" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "downloads" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "published_at" - })] - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /categories" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.td, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "name" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "tool_count" - })] - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Invalid sort values return 400:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-json", - children: "{\"error\": {\"code\": \"INVALID_SORT\", \"message\": \"Unknown sort field 'foo'. Allowed: downloads, published_at, name\"}}\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "tags-endpoint", - children: "Tags Endpoint" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /api/v1/tags" - }) - }), " - List all tags with usage counts."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Parameter" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Default" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Description" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "category" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "-" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Filter tags to those used in a specific category" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "limit" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "100" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Maximum tags to return (max 500)" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Response:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-json", - children: "{\n \"data\": [\n {\"name\": \"cli\", \"count\": 45},\n {\"name\": \"ai\", \"count\": 32},\n {\"name\": \"text\", \"count\": 28}\n ],\n \"meta\": {\"total\": 87}\n}\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "advanced-search", - children: "Advanced Search" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /api/v1/tools/search" - }) - }), " supports advanced filtering beyond basic text search."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Parameter" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Type" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Default" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Description" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "q" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "string" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "required" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Search query (uses FTS5 full-text search)" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "category" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "string" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "-" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Filter by single category" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "categories" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "string" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "-" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Filter by multiple categories (comma-separated, OR logic)" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "tags" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "string" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "-" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Filter by tags (comma-separated, AND logic)" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "owner" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "string" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "-" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Filter by publisher/owner" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "min_downloads" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "int" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "-" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Minimum download count" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "max_downloads" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "int" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "-" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Maximum download count" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "published_after" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "date" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "-" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Published after date (ISO 8601: YYYY-MM-DD)" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "published_before" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "date" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "-" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Published before date (ISO 8601: YYYY-MM-DD)" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "deprecated" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "bool" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "false" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Include deprecated tools" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "include_facets" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "bool" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "false" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Include faceted counts in response" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "sort" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "string" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "relevance" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Sort by: relevance, downloads, published_at, name" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "page" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "int" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "1" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Page number" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "per_page" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "int" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "20" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Results per page (max 100)" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Tag filtering (AND logic):" - }), " When multiple tags are specified, only tools with ALL tags are returned:"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /api/v1/tools/search?q=summarize&tags=cli,ai\n# Returns tools that have BOTH \"cli\" AND \"ai\" tags\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Category filtering (OR logic):" - }), " When multiple categories are specified, tools in ANY category are returned:"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /api/v1/tools/search?q=summarize&categories=text-processing,productivity\n# Returns tools in \"text-processing\" OR \"productivity\" category\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Faceted response:" - }), " When ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "include_facets=true" - }), ", the response includes counts for filtering:"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-json", - children: "{\n \"data\": [...],\n \"meta\": {\"page\": 1, \"per_page\": 20, \"total\": 42, \"total_pages\": 3},\n \"facets\": {\n \"categories\": [\n {\"name\": \"text-processing\", \"count\": 25},\n {\"name\": \"productivity\", \"count\": 17}\n ],\n \"tags\": [\n {\"name\": \"ai\", \"count\": 30},\n {\"name\": \"cli\", \"count\": 22},\n {\"name\": \"text\", \"count\": 18}\n ],\n \"owners\": [\n {\"name\": \"official\", \"count\": 15},\n {\"name\": \"rob\", \"count\": 10}\n ]\n }\n}\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Database indexes:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-sql", - children: "-- Frequent query patterns\nCREATE INDEX idx_tools_owner_name ON tools(owner, name);\nCREATE INDEX idx_tools_owner ON tools(owner); -- For owner filtering\nCREATE INDEX idx_tools_category ON tools(category);\nCREATE INDEX idx_tools_published_at ON tools(published_at DESC);\nCREATE INDEX idx_tools_downloads ON tools(downloads DESC);\nCREATE INDEX idx_tools_owner_name_version ON tools(owner, name, version);\n\n-- For pagination stability\nCREATE INDEX idx_tools_sort_stable ON tools(downloads DESC, published_at DESC, id DESC);\n\n-- Publisher lookups\nCREATE INDEX idx_publishers_slug ON publishers(slug);\nCREATE INDEX idx_publishers_email ON publishers(email);\n\n-- Token lookups\nCREATE INDEX idx_api_tokens_hash ON api_tokens(token_hash);\nCREATE INDEX idx_api_tokens_publisher ON api_tokens(publisher_id);\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "api-version-compatibility", - children: "API Version Compatibility" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Forward compatibility:" - }), " Clients should ignore unknown fields in API responses:"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-python", - children: "# Good: ignore unknown fields\ntool = response['data']\nname = tool.get('name')\n# Don't fail if 'new_field' exists but client doesn't know about it\n\n# Bad: strict parsing that fails on unknown fields\ntool = ToolSchema.parse(response['data']) # May fail on new fields\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Backward compatibility:" - }), " The API will:"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Never remove fields in a version (only deprecate)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Never change field types" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Add new optional fields without version bump" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Use new version (", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/api/v2" - }), ") for breaking changes"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Deprecation process:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ol, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Add ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "X-Deprecated-Field: old_field" - }), " header"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Document in changelog" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Remove after 6 months minimum" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Major version bump if widely used" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Client version header:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "X-CmdForge-Client: cli/1.2.0\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Helps server track client versions for deprecation decisions." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "source-of-truth", - children: "Source of Truth" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Gitea registry repo is the source of truth." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "API syncs repo content into SQLite for fast queries, stats, and FTS5 search." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "index.json" - }), " remains useful for offline CLI search and as a fallback."] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "If the cache is stale, the API can fall back to repo reads; a warning header may be emitted." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "namespacing-and-paths", - children: "Namespacing and Paths" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Support owner/name from day one:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Registry path: ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "tools/{owner}/{name}/config.yaml" - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["API URL: ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/tools/{owner}/{name}" - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Install: ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "cmdforge registry install rob/summarize" - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Shorthand: ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "cmdforge registry install summarize" - }), " resolves to the official namespace."] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: ["PR branches: ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "submit/{owner}/{name}/{version}" - }), "."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "namespace-identity", - children: "Namespace Identity" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: ["The ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "owner" - }), " is an ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "immutable slug" - }), ", not the display name:"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-sql", - children: "-- In publishers table\nslug TEXT UNIQUE NOT NULL, -- immutable: \"rob\", \"alice-dev\"\ndisplay_name TEXT NOT NULL, -- mutable: \"Rob\", \"Alice Developer\"\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Slug rules:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Lowercase alphanumeric + hyphens only: ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "^[a-z0-9][a-z0-9-]*[a-z0-9]$" - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "2-39 characters" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Cannot start/end with hyphen" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Set once at registration, cannot be changed" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Reserved slugs: ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "official" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "admin" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "system" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "api" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "registry" - })] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Rename policy:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "display_name" - }), " can be changed anytime via dashboard"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "slug" - }), " (owner) is permanent to preserve URLs and tool references"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["If a publisher absolutely must change slug (legal reasons, etc.):", "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ol, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Create new account with new slug" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Republish tools under new namespace" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Mark old tools as deprecated with ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "replacement" - }), " pointing to new namespace"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Old namespace remains reserved (cannot be reused by others)" - }), "\n"] - }), "\n"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Why immutable:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "rob/summarize@1.0.0" - }), " must always resolve to the same tool"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Prevents namespace hijacking after rename" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Simplifies caching and CDN strategies" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "tool-format-registry--local", - children: "Tool Format (Registry == Local)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Registry tool folders mirror local tools:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "tools/\n rob/\n summarize/\n config.yaml\n README.md\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: ["Tool files match the existing CmdForge format. Registry-specific metadata is kept under ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "registry:" - }), ". Deprecation is tool-defined and top-level:"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-yaml", - children: "name: summarize\nversion: \"1.2.0\"\ndeprecated: true\ndeprecated_message: \"Security issue. Use v1.2.1\"\nreplacement: \"rob/summarize@1.2.1\"\nregistry:\n published_at: \"2025-01-15T10:30:00Z\"\n downloads: 142\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "attribution-and-source-fields", - children: "Attribution and Source Fields" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Tools can include optional source attribution for provenance and licensing:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-yaml", - children: "name: summarize\nversion: \"1.2.0\"\ndescription: \"Summarize text using AI\"\n\n# Attribution fields (optional)\nsource:\n type: original # original, adapted, or imported\n license: MIT # SPDX license identifier\n url: https://example.com/tool-repo\n author: \"Original Author\"\n\n # For adapted/imported tools\n original_tool: other/original-summarize@1.0.0\n changes: \"Added French language support\"\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Source types:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Type" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Description" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "original" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Created from scratch by the publisher" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "adapted" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Based on another tool with modifications" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "imported" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Direct import of external tool (e.g., from npm/pip)" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "License field:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Uses SPDX identifiers: ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "MIT" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "Apache-2.0" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GPL-3.0" - }), ", etc."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Required for registry publication" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Validated against SPDX license list" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "collections", - children: "Collections" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Collections are curated groups of tools that can be installed together with a single command." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "collection-structure", - children: "Collection Structure" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: ["Collections are defined in ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "collections/{name}.yaml" - }), ":"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-yaml", - children: "name: text-processing-essentials\ndisplay_name: \"Text Processing Essentials\"\ndescription: \"Essential tools for text processing and manipulation\"\nicon: \"📝\"\n\ntools:\n - official/summarize\n - official/translate\n - official/fix-grammar\n - official/simplify\n - official/tone-shift\n\n# Optional\ncurator: official\ntags: [\"text\", \"nlp\", \"writing\"]\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "collections-api", - children: "Collections API" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "List all collections:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /api/v1/collections\n\nResponse:\n{\n \"data\": [\n {\n \"name\": \"text-processing-essentials\",\n \"display_name\": \"Text Processing Essentials\",\n \"description\": \"Essential tools for text processing...\",\n \"icon\": \"📝\",\n \"tool_count\": 5,\n \"curator\": \"official\"\n }\n ],\n \"meta\": {\"page\": 1, \"per_page\": 20, \"total\": 8}\n}\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Get collection details:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /api/v1/collections/{name}\n\nResponse:\n{\n \"data\": {\n \"name\": \"text-processing-essentials\",\n \"display_name\": \"Text Processing Essentials\",\n \"description\": \"Essential tools for text processing...\",\n \"icon\": \"📝\",\n \"curator\": \"official\",\n \"tools\": [\n {\"owner\": \"official\", \"name\": \"summarize\", \"version\": \"1.2.0\", ...},\n {\"owner\": \"official\", \"name\": \"translate\", \"version\": \"2.1.0\", ...}\n ]\n }\n}\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "cli-commands", - children: "CLI Commands" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "# List available collections\ncmdforge collections list\n\n# List in JSON format\ncmdforge collections list --json\n\n# View collection details\ncmdforge collections info text-processing-essentials\n\n# View in JSON format\ncmdforge collections info text-processing-essentials --json\n\n# Install all tools in a collection\ncmdforge collections install text-processing-essentials\n\n# Install with pinned versions from collection\ncmdforge collections install text-processing-essentials --pinned\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "admin-collections-api", - children: "Admin Collections API" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: ["Collections are managed via the admin dashboard at ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/dashboard/admin/collections" - }), ":"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /api/v1/admin/collections # List all collections (admin)\nPOST /api/v1/admin/collections # Create collection (admin)\nPUT /api/v1/admin/collections/:name # Update collection (admin)\nDELETE /api/v1/admin/collections/:name # Delete collection (admin)\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Schema compatibility note:" - }), " The current CmdForge config parser may reject unknown top-level keys like ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "deprecated" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "replacement" - }), ", and ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "registry" - }), ". Before implementing registry features:"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ol, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Update the YAML parser to ignore unknown keys (permissive mode)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Or explicitly define these fields in the Tool dataclass with defaults" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Validate registry-specific fields only when publishing, not when running locally" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "This ensures local tools continue to work even if they don't have registry fields." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "versioning-and-immutability", - children: "Versioning and Immutability" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Unique key: ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "owner/name + version" - }), "."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Published versions are immutable." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Deprecation uses ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "deprecated" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "deprecated_message" - }), ", and ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "replacement" - }), "."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "CLI warns on install if a version is deprecated." - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "yank-policy", - children: "Yank Policy" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Yanking allows removing a version from resolution without deleting it (for auditability):" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-yaml", - children: "# In tool config\nyanked: true\nyanked_reason: \"Critical security vulnerability CVE-2025-1234\"\nyanked_at: \"2025-01-20T15:00:00Z\"\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Yanked version behavior:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Operation" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Behavior" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.td, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "install foo@1.0.0" - }), " (exact)"] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Warns but allows install" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.td, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "install foo@^1.0.0" - }), " (constraint)"] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Excludes yanked, resolves to next valid" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.td, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "search" - }), " / ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "browse" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.td, { - children: ["Hidden by default, shown with ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "--include-yanked" - })] - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Direct URL access" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.td, { - children: ["Returns tool with ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "yanked: true" - }), " in response"] - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Already installed" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Continues to work, no forced removal" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Database schema addition:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-sql", - children: "-- Add to tools table\nyanked BOOLEAN DEFAULT FALSE,\nyanked_reason TEXT,\nyanked_at TIMESTAMP\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Yank vs Delete:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Yank" - }), ": Version remains in DB, excluded from resolution, auditable"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Delete" - }), ": Reserved for DMCA/legal, requires admin action, leaves tombstone record"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "version-format", - children: "Version Format" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Tools use semantic versioning (semver):" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "MAJOR.MINOR.PATCH[-PRERELEASE][+BUILD]\n\nExamples:\n 1.0.0 # stable release\n 1.2.3 # stable release\n 2.0.0-alpha.1 # prerelease\n 2.0.0-beta.2 # prerelease\n 2.0.0-rc.1 # release candidate\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "version-constraints", - children: "Version Constraints" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Manifest files support these constraint formats:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Constraint" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Meaning" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Example Match" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "1.2.3" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Exact version" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.td, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "1.2.3" - }), " only"] - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: ">=1.2.0" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Minimum version" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.td, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "1.2.0" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "1.3.0" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "2.0.0" - })] - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "<2.0.0" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Below version" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.td, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "1.9.9" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "1.0.0" - })] - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: ">=1.0.0,<2.0.0" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Range" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.td, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "1.0.0" - }), " to ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "1.9.9" - })] - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "^1.2.3" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Compatible (same major)" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.td, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "1.2.3" - }), " to ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "1.9.9" - })] - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "~1.2.3" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Approximately (same minor)" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.td, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "1.2.3" - }), " to ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "1.2.9" - })] - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "*" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Any version" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "latest stable" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "version-resolution-rules", - children: "Version Resolution Rules" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "When resolving a version constraint:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ol, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Filter" - }), ": Get all versions matching the constraint"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Exclude prereleases" - }), ": Unless constraint explicitly includes them (e.g., ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: ">=2.0.0-alpha.1" - }), ")"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Sort" - }), ": By semver precedence (descending)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Select" - }), ": Highest matching version"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Tie-breakers:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Stable versions preferred over prereleases" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Later publish date wins if versions are equal (shouldn't happen with immutability)" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Unsatisfiable constraints:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-json", - children: "// API Response: 404\n{\n \"error\": {\n \"code\": \"VERSION_NOT_FOUND\",\n \"message\": \"No version of 'rob/summarize' satisfies constraint '>=5.0.0'\",\n \"details\": {\n \"tool\": \"rob/summarize\",\n \"constraint\": \">=5.0.0\",\n \"available_versions\": [\"1.0.0\", \"1.1.0\", \"1.2.0\"],\n \"latest_stable\": \"1.2.0\"\n }\n }\n}\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "prerelease-handling", - children: "Prerelease Handling" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Prereleases are ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "not" - }), " returned for ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "*" - }), " or range constraints by default"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["To install prerelease: ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "cmdforge registry install rob/summarize@2.0.0-beta.1" - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["To allow prereleases in manifest: ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "version: \">=2.0.0-0\"" - }), " (the ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "-0" - }), " suffix includes prereleases)"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "download-endpoint-version-selection", - children: "Download Endpoint Version Selection" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: ["The ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/api/v1/tools/{owner}/{name}/download" - }), " endpoint accepts version parameters:"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Parameter" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Behavior" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Example" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "(none)" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Returns latest stable version" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.td, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/download" - }), " → ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "1.2.0" - })] - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "version=1.2.0" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Exact version (must exist)" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/download?version=1.2.0" - }) - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "version=^1.0.0" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Server resolves constraint" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.td, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/download?version=^1.0.0" - }), " → ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "1.2.0" - })] - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "version=latest" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Alias for latest stable" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/download?version=latest" - }) - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Server-side resolution:" - }), " The API server resolves version constraints, not the client. This ensures consistent resolution and allows the server to apply policies (e.g., exclude yanked versions)."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /api/v1/tools/rob/summarize/download?version=^1.0.0&install=true\n\nResponse (200):\n{\n \"data\": {\n \"owner\": \"rob\",\n \"name\": \"summarize\",\n \"resolved_version\": \"1.2.0\",\n \"config\": \"... YAML content ...\"\n },\n \"meta\": {\n \"constraint\": \"^1.0.0\",\n \"available_versions\": [\"1.0.0\", \"1.1.0\", \"1.2.0\"]\n }\n}\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Invalid/unsatisfiable constraint:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /api/v1/tools/rob/summarize/download?version=^5.0.0\n\nResponse (404):\n{\n \"error\": {\n \"code\": \"CONSTRAINT_UNSATISFIABLE\",\n \"message\": \"No version matches constraint '^5.0.0'\",\n \"details\": {\n \"constraint\": \"^5.0.0\",\n \"latest_stable\": \"1.2.0\",\n \"available_versions\": [\"1.0.0\", \"1.1.0\", \"1.2.0\"]\n }\n }\n}\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "tool-resolution-order", - children: "Tool Resolution Order" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "When a tool is invoked, the CLI searches in this order:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ol, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Local project" - }), ": ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "./.cmdforge/<owner>/<name>/config.yaml" - }), " (or ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "./.cmdforge/<name>/" - }), " for unnamespaced)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Global user" - }), ": ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "~/.cmdforge/<owner>/<name>/config.yaml" - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Registry" - }), ": Fetch from API, install to global, then run"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Error" - }), ": ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "Tool '<toolname>' not found" - })] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: ["Step 3 only occurs if ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "auto_fetch_from_registry: true" - }), " in config (default: true)."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Path convention:" - }), " Use ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: ".cmdforge/" - }), " (with leading dot) for both local and global to maintain consistency."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Resolution also respects namespacing:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "summarize" - }), " → searches for any tool named ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "summarize" - }), ", prefers ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "official/summarize" - }), " if exists"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "rob/summarize" - }), " → searches for exactly ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "rob/summarize" - })] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "official-namespace", - children: "Official Namespace" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: ["The slug ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "official" - }), " is reserved for curated, high-quality tools maintained by the registry administrators."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Shorthand ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "summarize" - }), " resolves to ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "official/summarize" - }), " if it exists"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["If no ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "official/summarize" - }), ", falls back to most-downloaded tool named ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "summarize" - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["To avoid ambiguity, always use full ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "owner/name" - }), " in manifests"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: ["Reserved slugs that cannot be registered: ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "official" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "admin" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "system" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "api" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "registry" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "cmdforge" - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "auto-fetch-behavior", - children: "Auto-Fetch Behavior" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: ["When enabled (", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "auto_fetch_from_registry: true" - }), "), missing tools are automatically fetched:"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "$ summarize < file.txt\n# Tool 'summarize' not found locally.\n# Fetching from registry...\n# Installed: official/summarize@1.2.0\n# Running...\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Behavior details:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Fetches latest stable version unless pinned in ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "cmdforge.yaml" - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Installs to ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "~/.cmdforge/<owner>/<name>/" - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Generates wrapper script in ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "~/.local/bin/" - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Subsequent runs use local copy (no re-fetch)" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "To disable (require explicit install):" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-yaml", - children: "# ~/.cmdforge/config.yaml\nauto_fetch_from_registry: false\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "wrapper-script-collisions", - children: "Wrapper Script Collisions" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "When two tools from different owners have the same name:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Scenario" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Behavior" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.td, { - children: ["Install ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "official/summarize" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.td, { - children: ["Creates wrapper ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "~/.local/bin/summarize" - })] - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.td, { - children: ["Install ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "rob/summarize" - }), " (collision)"] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.td, { - children: ["Creates wrapper ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "~/.local/bin/rob-summarize" - })] - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.td, { - children: ["Uninstall ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "official/summarize" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.td, { - children: ["Removes ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "summarize" - }), " wrapper, promotes ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "rob-summarize" - }), " → ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "summarize" - }), " if desired"] - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: ["The first-installed tool with a given name gets the short wrapper. Subsequent tools use ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "owner-name" - }), " format."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "To invoke a specific owner's tool:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "# Short form (whichever was installed first)\nsummarize < file.txt\n\n# Explicit owner form (always works)\nrob-summarize < file.txt\n\n# Or via cmdforge run\ncmdforge run rob/summarize < file.txt\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "project-manifest-cmdforgeyaml", - children: "Project Manifest (cmdforge.yaml)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Defines tool dependencies with optional runtime overrides:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "name: my-ai-project\nversion: \"1.0.0\"\ndependencies:\n - name: rob/summarize\n version: \">=1.0.0\"\noverrides:\n rob/summarize:\n provider: ollama\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Overrides are applied at runtime and do not mutate installed tool configs." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "cli-config-and-tokens", - children: "CLI Config and Tokens" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: ["Global config lives in ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "~/.cmdforge/config.yaml" - }), ":"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-yaml", - children: "registry:\n url: https://cmdforge.brrd.tech/api/v1 # Must match canonical base path\n token: \"reg_xxxxxxxxxxxx\"\nclient_id: \"anon_abc123def456\"\nauto_fetch_from_registry: true\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "client_id" - }), " is generated locally and used for anonymous install dedupe."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "publishing-and-auth", - children: "Publishing and Auth" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Publishing uses registry accounts, not Gitea accounts:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Public endpoints require no auth." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "POST /tools" - }), " requires a registry token."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "The API server uses a private Gitea service account to open PRs." - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "publish-idempotency-and-edge-cases", - children: "Publish Idempotency and Edge Cases" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Idempotency key:" - }), " ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "owner/name@version" - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Scenario" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "API Response" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "HTTP Code" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "New version, no PR exists" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Create PR, return URL" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "201 Created" - }) - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "PR already exists (pending)" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Return existing PR URL" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "200 OK" - }) - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Version already published" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Error: version exists" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "409 Conflict" - }) - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "PR was closed without merge" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Allow new PR" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "201 Created" - }) - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "PR was merged, then tool deleted" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Error: version exists (tombstone)" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "409 Conflict" - }) - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Version immutability enforcement:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-json", - children: "// Attempt to publish existing version\n// Response: 409 Conflict\n{\n \"error\": {\n \"code\": \"VERSION_EXISTS\",\n \"message\": \"Version 1.2.0 of 'rob/summarize' already exists and cannot be overwritten\",\n \"details\": {\n \"published_at\": \"2025-01-15T10:30:00Z\",\n \"action\": \"Bump version number to publish changes\"\n }\n }\n}\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Closed PR handling:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Track PR state in database: ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "pending" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "merged" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "closed" - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "If PR was closed (rejected/abandoned), allow new submission for same version" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "If PR was merged, version is immutable forever" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Update flow (new version, not overwrite):" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ol, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Developer modifies tool locally" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Bumps version in ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "config.yaml" - }), " (e.g., ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "1.2.0" - }), " → ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "1.3.0" - }), ")"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Runs ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "cmdforge registry publish" - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["New PR created for ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "1.3.0" - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Old version ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "1.2.0" - }), " remains available"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "publisher-registration", - children: "Publisher Registration" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Publishers register on the registry website, not Gitea:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Registration flow:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ol, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["User visits ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "https://gitea.brrd.tech/registry/register" - }), " (or future ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "cmdforge.brrd.tech" - }), ")"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Creates account with email + password + slug" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Receives verification email (optional in v1, but track ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "verified" - }), " status)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Logs into dashboard at ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/dashboard" - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Generates API token from dashboard" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Uses token in CLI for publishing" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "authentication-security", - children: "Authentication Security" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Password hashing:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Algorithm: Argon2id (memory-hard, recommended by OWASP)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Parameters: ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "memory=65536, iterations=3, parallelism=4" - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Library: ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "argon2-cffi" - }), " for Python"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-python", - children: "from argon2 import PasswordHasher\nph = PasswordHasher(memory_cost=65536, time_cost=3, parallelism=4)\nhash = ph.hash(password)\nph.verify(hash, password) # raises on mismatch\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "API token format:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "reg_<random-32-bytes-base62>\n\nExample: reg_7kX9mPqR2sT4vW6xY8zA1bC3dE5fG7hJ\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Prefix ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "reg_" - }), " for easy identification in logs/configs"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "32 bytes of cryptographically random data" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Base62 encoded (alphanumeric, no special chars)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Total length: ~47 characters" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Stored as SHA-256 hash in database (never plain text)" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Token lifecycle:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Action" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Behavior" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Generate" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Create new token, return once, store hash" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "List" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Show token name, created date, last used (not the token itself)" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Revoke" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.td, { - children: ["Set ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "revoked_at" - }), " timestamp, reject future uses"] - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Rotate" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Generate new token, optionally revoke old" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Rate limits:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Endpoint" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Limit" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Window" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Scope" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Retry-After" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "POST /register" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "5" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "1 hour" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "IP" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "3600" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "POST /login" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "10" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "15 min" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "IP" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "900" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.td, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "POST /login" - }), " (failed)"] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "5" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "15 min" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "IP + email" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "900" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "POST /tokens" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "10" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "1 hour" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Token" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "3600" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "POST /tools" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "20" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "1 hour" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Token" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "3600" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /tools/*" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "100" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "1 min" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "IP" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "60" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /download" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "60" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "1 min" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "IP" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "60" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Rate limit response (429):" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-json", - children: "{\n \"error\": {\n \"code\": \"RATE_LIMITED\",\n \"message\": \"Too many requests. Try again in 60 seconds.\",\n \"details\": {\n \"limit\": 100,\n \"window\": \"1 minute\",\n \"retry_after\": 60\n }\n }\n}\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Headers on rate-limited response:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "HTTP/1.1 429 Too Many Requests\nRetry-After: 60\nX-RateLimit-Limit: 100\nX-RateLimit-Remaining: 0\nX-RateLimit-Reset: 1705766400\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Scope priority:" - }), " For authenticated requests, both IP and token limits apply. The more restrictive limit wins."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Account lockout:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "After 5 failed login attempts: 15-minute lockout for that email" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "After 10 failed attempts: 1-hour lockout" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Lockout clears on successful password reset" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Password reset flow (deferred to v1.1):" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ol, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "User requests reset via email" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Server generates time-limited token (1 hour expiry)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Email contains reset link with token" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "User sets new password" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "All existing sessions/tokens optionally invalidated" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Email verification flow (deferred to v1.1):" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ol, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "On registration, send verification email" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "User clicks link with verification token" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Set ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "verified = true" - }), " in database"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Unverified accounts can browse but not publish" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "token-scopes-and-authorization", - children: "Token Scopes and Authorization" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Tokens have scopes that limit their capabilities:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Scope" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Permissions" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "read" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "View own published tools, download stats" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "publish" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Submit new tools, update own tool metadata" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "admin" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Yank tools, manage categories (registry admins only)" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Default scope:" - }), " New tokens get ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "read,publish" - }), " by default."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Ownership enforcement:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-python", - children: "@app.route('/api/v1/tools', methods=['POST'])\n@require_token(scopes=['publish'])\ndef publish_tool():\n token = get_current_token()\n tool_data = request.json\n\n # Enforce owner == token holder's slug\n if tool_data['owner'] != token.publisher.slug:\n return {\n \"error\": {\n \"code\": \"FORBIDDEN\",\n \"message\": f\"Cannot publish to namespace '{tool_data['owner']}'. \"\n f\"Your namespace is '{token.publisher.slug}'.\"\n }\n }, 403\n\n # Proceed with publish...\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.strong, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /api/v1/me/tools" - }), " authorization:"] - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Requires valid token with ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "read" - }), " scope"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Returns only tools where ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "owner == token.publisher.slug" - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Includes pending PRs and all versions (including yanked)" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "web-session-security", - children: "Web Session Security" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Dashboard login uses session cookies (not tokens) for browser auth:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Cookie settings:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-python", - children: "SESSION_COOKIE_NAME = 'cmdforge_session'\nSESSION_COOKIE_HTTPONLY = True # Prevent JS access\nSESSION_COOKIE_SECURE = True # HTTPS only in production\nSESSION_COOKIE_SAMESITE = 'Lax' # CSRF protection\nSESSION_COOKIE_MAX_AGE = 86400 * 7 # 7 days\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "CSRF protection:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["All POST/PUT/DELETE forms include ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "csrf_token" - }), " hidden field"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Token validated server-side before processing" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "403 Forbidden if token missing or invalid" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Session lifecycle:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Event" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Action" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Login" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Create session, set cookie" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Logout" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Delete session, clear cookie" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Idle 24h" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Session expires, re-login required" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Password change" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Invalidate all sessions" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Token revocation" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Existing sessions continue (token != session)" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Secure session storage:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-python", - children: "# Store sessions in DB, not filesystem\nfrom flask_session import Session\napp.config['SESSION_TYPE'] = 'sqlalchemy'\napp.config['SESSION_SQLALCHEMY_TABLE'] = 'sessions'\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Database schema:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-sql", - children: "-- Publishers\nCREATE TABLE publishers (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n email TEXT UNIQUE NOT NULL,\n password_hash TEXT NOT NULL,\n slug TEXT UNIQUE NOT NULL, -- immutable namespace: \"rob\", \"alice-dev\"\n display_name TEXT NOT NULL, -- mutable: \"Rob\", \"Alice Developer\"\n bio TEXT,\n website TEXT,\n verified BOOLEAN DEFAULT FALSE,\n locked_until TIMESTAMP, -- account lockout\n failed_login_attempts INTEGER DEFAULT 0,\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n);\n\n-- API tokens (one publisher can have multiple)\nCREATE TABLE api_tokens (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n publisher_id INTEGER NOT NULL REFERENCES publishers(id),\n token_hash TEXT NOT NULL,\n name TEXT NOT NULL, -- \"CLI token\", \"CI token\"\n last_used_at TIMESTAMP,\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n revoked_at TIMESTAMP -- NULL if active\n);\n\n-- Tools (links to publisher)\nCREATE TABLE tools (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n owner TEXT NOT NULL, -- namespace slug (immutable, from publisher.slug)\n name TEXT NOT NULL,\n version TEXT NOT NULL,\n description TEXT,\n category TEXT,\n tags TEXT, -- JSON array\n config_yaml TEXT NOT NULL, -- Full tool config\n readme TEXT,\n publisher_id INTEGER NOT NULL REFERENCES publishers(id),\n deprecated BOOLEAN DEFAULT FALSE,\n deprecated_message TEXT,\n replacement TEXT,\n downloads INTEGER DEFAULT 0,\n published_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n UNIQUE(owner, name, version)\n);\n\n-- Download stats (for deduplication)\nCREATE TABLE download_stats (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n tool_id INTEGER NOT NULL REFERENCES tools(id),\n client_id TEXT NOT NULL,\n downloaded_at DATE NOT NULL,\n UNIQUE(tool_id, client_id, downloaded_at)\n);\n\n-- Search index (FTS5)\nCREATE VIRTUAL TABLE tools_fts USING fts5(\n name, description, tags, readme,\n content='tools',\n content_rowid='id'\n);\n\n-- FTS5 sync triggers (required for external content tables)\nCREATE TRIGGER tools_ai AFTER INSERT ON tools BEGIN\n INSERT INTO tools_fts(rowid, name, description, tags, readme)\n VALUES (new.id, new.name, new.description, new.tags, new.readme);\nEND;\n\nCREATE TRIGGER tools_ad AFTER DELETE ON tools BEGIN\n INSERT INTO tools_fts(tools_fts, rowid, name, description, tags, readme)\n VALUES ('delete', old.id, old.name, old.description, old.tags, old.readme);\nEND;\n\nCREATE TRIGGER tools_au AFTER UPDATE ON tools BEGIN\n INSERT INTO tools_fts(tools_fts, rowid, name, description, tags, readme)\n VALUES ('delete', old.id, old.name, old.description, old.tags, old.readme);\n INSERT INTO tools_fts(rowid, name, description, tags, readme)\n VALUES (new.id, new.name, new.description, new.tags, new.readme);\nEND;\n\n-- Pending PRs (track publish state)\nCREATE TABLE pending_prs (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n publisher_id INTEGER NOT NULL REFERENCES publishers(id),\n owner TEXT NOT NULL,\n name TEXT NOT NULL,\n version TEXT NOT NULL,\n pr_number INTEGER NOT NULL,\n pr_url TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'pending', -- pending, merged, closed\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n UNIQUE(owner, name, version)\n);\n\n-- Webhook sync log (idempotency)\nCREATE TABLE webhook_log (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n delivery_id TEXT UNIQUE NOT NULL, -- Gitea delivery ID\n event_type TEXT NOT NULL,\n processed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n);\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Note on tags indexing:" - }), " The ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "tags" - }), " column stores JSON arrays as text. For v1, FTS5 will search within the JSON string. If tag filtering becomes a bottleneck, normalize to a ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "tool_tags" - }), " junction table:"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-sql", - children: "-- Future: normalized tags (if needed)\nCREATE TABLE tags (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT UNIQUE NOT NULL\n);\n\nCREATE TABLE tool_tags (\n tool_id INTEGER REFERENCES tools(id),\n tag_id INTEGER REFERENCES tags(id),\n PRIMARY KEY (tool_id, tag_id)\n);\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Connecting to your account:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "The recommended way to authenticate is using the app pairing flow, which eliminates manual token copying:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "CLI connection flow:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "$ cmdforge config connect rob\n\nConnecting to CmdForge as @rob...\nDevice: my-laptop\n\nWaiting for approval from the web interface...\nGo to https://cmdforge.brrd.tech/dashboard/connections\nand click 'Connect New App', then 'I've Run the Command'\n\nPress Ctrl+C to cancel\n\nWaiting...\n\nConnected successfully!\nYour device 'my-laptop' is now linked to @rob\n\nYou can now publish tools with: cmdforge registry publish\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "TUI connection flow:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: ["The TUI (", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "cmdforge ui" - }), ") includes a Connect button for connecting without using the command line:"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ol, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Click \"Connect\" button in the main menu" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Enter your CmdForge username (create account at cmdforge.brrd.tech if needed)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "A countdown timer shows the pairing expiration (5 minutes)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Go to cmdforge.brrd.tech/dashboard/connections in your browser" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Click \"Connect New App\" and approve the pending connection" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "TUI automatically detects approval and saves the token" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "CLI first-time publish flow:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "$ cmdforge registry publish\n\nNo registry account configured.\n\nOptions:\n1. Connect to account (recommended): cmdforge config connect <username>\n2. Manual token entry\n\nChoose option [1]: 1\nEnter username: rob\n\nConnecting to CmdForge as @rob...\n[Follows connection flow above]\n\nValidating tool...\n✓ config.yaml is valid\n✓ README.md exists (2.3 KB)\n✓ Version 1.0.0 not yet published\n\nPublishing rob/my-tool@1.0.0...\n✓ PR created: https://gitea.brrd.tech/rob/CmdForge-Registry/pulls/42\n\nYour tool is pending review. You'll receive an email when it's approved.\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "TUI publish flow:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "When already connected, the TUI main menu shows \"Publish\" instead of \"Connect\":" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ol, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Select a tool in the list" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Click \"Publish\" button" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "If no version in config, TUI prompts for version number" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Confirm and publish" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Private sync after save:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "When connected to an account, saving a tool in the TUI offers to sync it privately to the registry:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ol, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Save a tool (new or edited)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "TUI asks: \"Sync to registry privately?\"" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "If yes, enter/confirm version number" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Tool is published with ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "visibility: private" - }), " (only you can see it)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Useful for backup or accessing your tools from multiple machines" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "cli-commands-reference", - children: "CLI Commands Reference" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Full mapping of CLI commands to API calls:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "registry-commands", - children: "Registry Commands" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "# Search for tools (basic)\n$ cmdforge registry search <query> [--category=<cat>] [--limit=20]\n → GET /api/v1/tools/search?q=<query>&category=<cat>&limit=20\n\n# Search with advanced filtering\n$ cmdforge registry search <query> [options]\n Options:\n -c, --category CAT Filter by category\n -t, --tag TAG Filter by tag (repeatable, AND logic)\n -o, --owner OWNER Filter by publisher/owner\n --min-downloads N Minimum downloads\n --popular Shortcut for --min-downloads 100\n --new Shortcut for --max-downloads 10\n --since DATE Published after (YYYY-MM-DD)\n --before DATE Published before (YYYY-MM-DD)\n -s, --sort FIELD Sort by: relevance, downloads, published_at, name\n -l, --limit N Max results (default: 20)\n --json Output as JSON\n --show-facets Show category/tag counts\n --deprecated Include deprecated tools\n\n# List available tags\n$ cmdforge registry tags [-c CATEGORY] [-l LIMIT] [--json]\n → GET /api/v1/tags?category=<cat>&limit=<limit>\n\n# Browse tools (TUI)\n$ cmdforge registry browse [--category=<cat>]\n → GET /api/v1/tools?category=<cat>&page=1\n → GET /api/v1/categories\n\n# View tool details\n$ cmdforge registry info <owner/name>\n → GET /api/v1/tools/<owner>/<name>\n\n# Install a tool\n$ cmdforge registry install <owner/name> [--version=<ver>]\n → GET /api/v1/tools/<owner>/<name>/download?version=<ver>&install=true\n → Writes to ~/.cmdforge/<owner>/<name>/config.yaml\n → Generates ~/.local/bin/<name> wrapper (or <owner>-<name> if collision)\n\n# Uninstall a tool\n$ cmdforge registry uninstall <owner/name>\n → Removes ~/.cmdforge/<owner>/<name>/\n → Removes wrapper script\n\n# Publish a tool\n$ cmdforge registry publish [path] [--dry-run]\n → POST /api/v1/tools (with registry token)\n → Returns PR URL\n\n# List my published tools\n$ cmdforge registry my-tools\n → GET /api/v1/me/tools (with registry token)\n\n# Update index cache\n$ cmdforge registry update\n → GET /api/v1/index.json\n → Writes to ~/.cmdforge/registry/index.json\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "project-commands", - children: "Project Commands" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "# Install project dependencies from cmdforge.yaml\n$ cmdforge install\n → Reads ./cmdforge.yaml\n → For each dependency:\n GET /api/v1/tools/<owner>/<name>/download?version=<constraint>&install=true\n → Installs to ~/.cmdforge/<owner>/<name>/\n\n# Add a dependency to cmdforge.yaml\n$ cmdforge add <owner/name> [--version=<constraint>]\n → Adds to ./cmdforge.yaml dependencies\n → Runs install for that tool\n\n# Show project dependencies status\n$ cmdforge deps\n → Reads ./cmdforge.yaml\n → Shows installed status for each dependency\n → Note: \"cmdforge list\" is reserved for listing installed tools\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Command naming note:" - }), " ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "cmdforge list" - }), " already exists to list locally installed tools. Use ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "cmdforge deps" - }), " to show project manifest dependencies."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "config-commands", - children: "Config Commands" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "# Show current configuration\n$ cmdforge config show\n → Displays registry URL, token status, client ID, auto-fetch setting\n\n# Connect to your CmdForge account (recommended)\n$ cmdforge config connect <username>\n → Initiates app pairing flow\n → Polls /api/v1/pairing/check/<username>?hostname=<hostname>\n → On approval, saves token to ~/.cmdforge/config.yaml\n\n# Set registry token manually (alternative to connect)\n$ cmdforge config set-token <token>\n → Saves token to ~/.cmdforge/config.yaml\n\n# Set configuration values\n$ cmdforge config set <key> <value>\n → Available keys: auto_fetch, default_provider, registry_url\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "flags-available-on-most-commands", - children: "Flags available on most commands" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Flag" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Description" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "--offline" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Use cached index only, don't fetch" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "--refresh" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Force refresh of cached data" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "--json" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Output in JSON format" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "--verbose" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Show detailed output" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "publish-state-tracking", - children: "Publish State Tracking" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "The GUI tracks the publish state of local tools to show whether they've been published, are pending review, or have been modified since publishing." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "local-state-storage", - children: "Local State Storage" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: ["When a tool is published, two fields are saved to the local ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "config.yaml" - }), ":"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-yaml", - children: "name: my-tool\ndescription: My awesome tool\n# ... tool config ...\nregistry_hash: sha256:abc123... # Hash of published config\nregistry_status: pending # Moderation status: pending, approved, rejected\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "visual-indicators", - children: "Visual Indicators" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "The Tools page shows different indicators based on publish state:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "State" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Indicator" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Meaning" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Published" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "✓ (green)" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Approved in registry, local matches published" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Pending" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "◐ (yellow)" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Submitted, awaiting moderator review" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Modified" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "● (orange)" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Published but local config has changes" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Local" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "(none)" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Never published to registry" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "automatic-status-sync", - children: "Automatic Status Sync" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "When the Tools page loads, a background sync automatically checks the registry for status updates on all published tools. This means:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "When a moderator approves your tool, the indicator updates automatically on next visit" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "No manual refresh needed - just navigate to the Tools page" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Status messages appear when tool statuses change" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "manual-sync", - children: "Manual Sync" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "A \"Sync Status\" button is available to force an immediate status check for the selected tool. This is useful if you want to check status without leaving the page." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "hash-computation", - children: "Hash Computation" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "The publish state hash is computed from the tool's core content, excluding:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "registry_hash" - }), " - The stored hash itself"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "registry_status" - }), " - The moderation status"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "version" - }), " - Publication version (added during publish)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "tags" - }), " - Publication tags (added during publish)"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "This ensures that only actual tool content changes (steps, arguments, prompts) trigger the \"modified\" indicator." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "api-endpoint", - children: "API Endpoint" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "The status sync uses:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /api/v1/me/tools/<name>/status\n\nResponse:\n{\n \"data\": {\n \"name\": \"my-tool\",\n \"version\": \"1.0.0\",\n \"status\": \"approved\",\n \"config_hash\": \"sha256:abc123...\",\n \"published_at\": \"2025-01-15T10:30:00Z\"\n }\n}\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "webhooks-and-security", - children: "Webhooks and Security" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "hmac-verification", - children: "HMAC Verification" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "All Gitea webhooks are verified using HMAC-SHA256:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-python", - children: "import hmac\nimport hashlib\n\ndef verify_webhook(request, secret):\n signature = request.headers.get('X-Gitea-Signature')\n if not signature:\n return False\n\n expected = hmac.new(\n secret.encode(),\n request.body,\n hashlib.sha256\n ).hexdigest()\n\n return hmac.compare_digest(signature, expected)\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "replay-protection", - children: "Replay Protection" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "While sync is idempotent, implement basic replay protection:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-python", - children: "def process_webhook(request):\n delivery_id = request.headers.get('X-Gitea-Delivery')\n\n # Check if already processed\n if db.webhook_log.exists(delivery_id=delivery_id):\n return {\"status\": \"already_processed\"}, 200\n\n # Verify signature\n if not verify_webhook(request, WEBHOOK_SECRET):\n return {\"error\": \"invalid_signature\"}, 401\n\n # Process with lock to prevent concurrent processing\n with db.lock(f\"webhook:{delivery_id}\"):\n # Double-check after acquiring lock\n if db.webhook_log.exists(delivery_id=delivery_id):\n return {\"status\": \"already_processed\"}, 200\n\n # Process the webhook\n result = sync_from_repo()\n\n # Log successful processing\n db.webhook_log.insert(\n delivery_id=delivery_id,\n event_type=request.json.get('action'),\n processed_at=datetime.utcnow()\n )\n\n return {\"status\": \"processed\"}, 200\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "sync-job-locking", - children: "Sync Job Locking" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Prevent concurrent sync operations:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-python", - children: "# Using file lock or database advisory lock\nSYNC_LOCK_TIMEOUT = 300 # 5 minutes max\n\ndef sync_from_repo():\n try:\n with acquire_lock(\"registry_sync\", timeout=SYNC_LOCK_TIMEOUT):\n # Pull latest from Gitea\n repo.fetch()\n repo.reset('origin/main', hard=True)\n\n # Parse and update database\n for tool_path in glob('tools/*/*/config.yaml'):\n update_tool_in_db(tool_path)\n\n # Rebuild FTS index if needed\n rebuild_fts_index()\n\n except LockTimeout:\n logger.warning(\"Sync already in progress, skipping\")\n return {\"status\": \"skipped\", \"reason\": \"sync_in_progress\"}\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "atomic-sync-strategy", - children: "Atomic Sync Strategy" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "To avoid partially updated DB during webhook sync, use transactional table swap:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-python", - children: "def sync_from_repo_atomic():\n with acquire_lock(\"registry_sync\", timeout=SYNC_LOCK_TIMEOUT):\n # 1. Pull latest from Gitea\n repo.fetch()\n repo.reset('origin/main', hard=True)\n\n # 2. Parse all tools into memory\n new_tools = []\n for tool_path in glob('tools/*/*/config.yaml'):\n tool_data = parse_tool(tool_path)\n if tool_data:\n new_tools.append(tool_data)\n\n # 3. Atomic swap using transaction\n with db.transaction():\n # Create temp table\n db.execute(\"CREATE TABLE tools_new AS SELECT * FROM tools WHERE 0\")\n\n # Bulk insert into temp table\n for tool in new_tools:\n db.execute(\"INSERT INTO tools_new ...\", tool)\n\n # Swap tables atomically\n db.execute(\"ALTER TABLE tools RENAME TO tools_old\")\n db.execute(\"ALTER TABLE tools_new RENAME TO tools\")\n db.execute(\"DROP TABLE tools_old\")\n\n # Rebuild FTS index\n db.execute(\"INSERT INTO tools_fts(tools_fts) VALUES('rebuild')\")\n\n # Update sync timestamp\n db.execute(\"UPDATE sync_status SET last_sync = ?\", [datetime.utcnow()])\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Why atomic:" - }), " Per-row updates with FTS triggers can yield inconsistent reads under load. Readers may see partial state mid-sync. Table swap ensures all-or-nothing visibility."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "error-handling", - children: "Error Handling" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Error Scenario" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Behavior" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Repo fetch fails" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Log error, retry in 5 min, alert if 3 failures" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "YAML parse error" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Skip tool, log error, continue with others" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Database write fails" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Rollback transaction, retry once, then alert" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Lock timeout" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Skip this sync, next webhook will retry" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "automated-ci-validation", - children: "Automated CI Validation" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "PRs are validated automatically using CmdForge (dogfooding):" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "PR Submitted\n │\n ▼\n┌─────────────────────────────────────┐\n│ Gitea CI runs validation tools: │\n│ • schema-validator │\n│ • security-scanner │\n│ • duplicate-detector │\n└───────────────┬─────────────────────┘\n │\n ┌───────┴───────┐\n │ │\n All pass Any fail\n │ │\n ▼ ▼\n Auto-merge or Add comment,\n flag for review request changes\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Validation checks:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ol, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Schema validation" - }), ": config.yaml matches expected format"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Security scan" - }), ": No dangerous shell commands, no secrets in prompts"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Duplicate detection" - }), ": AI-powered similarity check against existing tools"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "README check" - }), ": README.md exists and is non-empty"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: ["CI workflow (", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: ".gitea/workflows/validate.yaml" - }), "):"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-yaml", - children: "name: Validate Tool Submission\non: [pull_request]\njobs:\n validate:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v3\n - name: Validate schema\n run: python scripts/validate_tool.py ${{ github.event.pull_request.head.sha }}\n - name: Security scan\n run: cmdforge run security-scanner < changed_files.txt\n - name: Check duplicates\n run: cmdforge run duplicate-detector < changed_files.txt\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "registry-repository-structure", - children: "Registry Repository Structure" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Full structure of the CmdForge-Registry repo:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "CmdForge-Registry/\n├── README.md # Registry overview\n├── CONTRIBUTING.md # How to submit tools\n├── LICENSE\n│\n├── tools/ # All published tools\n│ ├── rob/\n│ │ ├── summarize/\n│ │ │ ├── config.yaml\n│ │ │ └── README.md\n│ │ └── translate/\n│ │ ├── config.yaml\n│ │ └── README.md\n│ └── alice/\n│ └── code-review/\n│ ├── config.yaml\n│ └── README.md\n│\n├── categories/\n│ └── categories.yaml # Category definitions\n│\n├── collections/ # Curated tool collections\n│ ├── text-processing-essentials.yaml\n│ ├── developer-toolkit.yaml\n│ └── data-pipeline-basics.yaml\n│\n├── index.json # Auto-generated search index\n│\n├── .gitea/\n│ └── workflows/\n│ ├── validate.yaml # PR validation\n│ ├── build-index.yaml # Rebuild index on merge\n│ └── notify-api.yaml # Webhook to API server\n│\n└── scripts/\n ├── validate_tool.py # Schema validation\n ├── build_index.py # Generate index.json\n ├── check_duplicates.py # Similarity detection\n └── security_scan.py # Security checks\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "categories.yaml" - }), " format:"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-yaml", - children: "categories:\n - name: text-processing\n description: Tools for manipulating and analyzing text\n icon: 📝\n - name: code\n description: Tools for code review, generation, and analysis\n icon: 💻\n - name: data\n description: Tools for data transformation and analysis\n icon: 📊\n - name: media\n description: Tools for image, audio, and video processing\n icon: 🎨\n - name: productivity\n description: General productivity and automation tools\n icon: ⚡\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "download-stats", - children: "Download Stats" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "counting-methodology", - children: "Counting Methodology" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Count installs only, not views or searches" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Increment ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "after" - }), " successful download (response sent)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Dedupe by ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "client_id + tool_id + date" - })] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-python", - children: "def download_tool(owner, name, version, install=False, client_id=None):\n tool = get_tool(owner, name, version)\n if not tool:\n return {\"error\": \"not_found\"}, 404\n\n config_yaml = tool.config_yaml\n\n # Only count if this is an install (not just viewing)\n if install:\n record_download(tool.id, client_id)\n\n return {\"config\": config_yaml}, 200\n\ndef record_download(tool_id, client_id):\n today = date.today()\n\n # Use client_id if provided, otherwise generate anonymous fallback\n effective_client_id = client_id or f\"anon_{hash(request.remote_addr)}\"\n\n # Dedupe: only count once per client per tool per day\n try:\n db.download_stats.insert(\n tool_id=tool_id,\n client_id=effective_client_id,\n downloaded_at=today\n )\n # Increment counter (can be async/batch updated)\n db.execute(\"UPDATE tools SET downloads = downloads + 1 WHERE id = ?\", [tool_id])\n except IntegrityError:\n pass # Already counted today, ignore\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "client-id-generation", - children: "Client ID Generation" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "CLI generates a persistent anonymous ID on first run:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-python", - children: "# In CLI, on first run\nimport uuid\nimport os\n\nCONFIG_PATH = os.path.expanduser(\"~/.cmdforge/config.yaml\")\n\ndef get_or_create_client_id():\n config = load_config()\n if 'client_id' not in config:\n config['client_id'] = f\"anon_{uuid.uuid4().hex[:16]}\"\n save_config(config)\n return config['client_id']\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Fallback when client_id missing:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["If header ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "X-Client-ID" - }), " not sent, use IP hash as fallback"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "This still provides some dedupe for anonymous users" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Logged users' downloads are attributed to their account instead" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "privacy-considerations", - children: "Privacy Considerations" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "No IP addresses stored in database" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "client_id" - }), " is client-controlled and can be regenerated"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Stats are aggregated (total count), not individual tracking" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "async-stats-strategy", - children: "Async Stats Strategy" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "To avoid DB contention on the hot download path:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-python", - children: "from queue import Queue\nfrom threading import Thread\n\n# In-memory queue for stats\nstats_queue = Queue()\n\ndef record_download_async(tool_id, client_id):\n \"\"\"Non-blocking: enqueue for background processing\"\"\"\n stats_queue.put({\n 'tool_id': tool_id,\n 'client_id': client_id,\n 'date': date.today()\n })\n\ndef stats_worker():\n \"\"\"Background thread: batch process stats every 5 seconds\"\"\"\n batch = []\n while True:\n try:\n item = stats_queue.get(timeout=5)\n batch.append(item)\n except Empty:\n if batch:\n flush_batch(batch)\n batch = []\n\ndef flush_batch(batch):\n \"\"\"Bulk insert with conflict ignore\"\"\"\n with db.transaction():\n for item in batch:\n try:\n db.execute(\"\"\"\n INSERT INTO download_stats (tool_id, client_id, downloaded_at)\n VALUES (?, ?, ?)\n ON CONFLICT DO NOTHING\n \"\"\", [item['tool_id'], item['client_id'], item['date']])\n except Exception as e:\n logger.warning(f\"Stats insert failed: {e}\")\n # Don't fail downloads for stats errors\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Failure behavior:" - }), " If stats DB write fails, log the error but don't fail the download. Stats are \"best effort\" - the download must succeed."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "search", - children: "Search" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Primary search: SQLite FTS5 inside the API." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "index.json" - }), " provides offline CLI search and backup."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["If FTS5 is stale, return results with ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "X-Search-Index-Stale: true" - }), "."] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "api-caching-strategy", - children: "API Caching Strategy" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "cache-headers", - children: "Cache Headers" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Endpoint" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Cache-Control" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "ETag" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Notes" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /index.json" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "max-age=300, stale-while-revalidate=60" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Yes" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "5 min cache, background refresh" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /tools/{owner}/{name}" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "max-age=60" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Yes" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "1 min cache" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /tools/{owner}/{name}/download" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "max-age=3600, immutable" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Yes" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Immutable versions, 1 hour" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /tools/search" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "no-cache" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "No" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Always fresh" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /categories" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "max-age=3600" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Yes" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Categories change rarely" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "etag-implementation", - children: "ETag Implementation" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-python", - children: "import hashlib\nfrom datetime import datetime\n\ndef get_tool_etag(tool):\n \"\"\"Generate ETag from tool identity (immutable versions don't change)\"\"\"\n # Since versions are immutable, owner/name@version is stable\n # Use published_at for extra safety (not updated_at, which doesn't exist)\n content = f\"{tool.owner}/{tool.name}@{tool.version}:{tool.published_at.isoformat()}\"\n return hashlib.md5(content.encode()).hexdigest()\n\ndef get_index_etag():\n \"\"\"Generate ETag from last sync timestamp\"\"\"\n last_sync = db.get_last_sync_time()\n return hashlib.md5(last_sync.isoformat().encode()).hexdigest()\n\n@app.route('/api/v1/tools/<owner>/<name>/download')\ndef download_tool(owner, name):\n version = request.args.get('version', 'latest')\n tool = resolve_and_get_tool(owner, name, version)\n etag = get_tool_etag(tool)\n\n # Check If-None-Match header\n if request.headers.get('If-None-Match') == etag:\n return '', 304 # Not Modified\n\n response = jsonify({\n \"data\": {\n \"owner\": tool.owner,\n \"name\": tool.name,\n \"resolved_version\": tool.version,\n \"config\": tool.config_yaml\n }\n })\n response.headers['ETag'] = etag\n response.headers['Cache-Control'] = 'max-age=3600, immutable'\n return response\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Note:" - }), " Since tool versions are immutable, the ETag based on ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "owner/name@version" - }), " is permanently stable. The ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "published_at" - }), " timestamp is included for defense-in-depth but won't change."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "db-vs-repo-read-strategy", - children: "DB vs Repo Read Strategy" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Scenario" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Read From" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Reason" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Normal operation" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "SQLite DB" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Fast, indexed, FTS" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "DB empty/corrupted" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Gitea repo" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Fallback/recovery" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Webhook sync in progress" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "DB (stale OK)" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Avoid blocking reads" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Search query" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "SQLite FTS5" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Full-text search" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Download specific version" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "DB, fallback to repo" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "DB is cache, repo is truth" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "staleness-detection", - children: "Staleness Detection" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-python", - children: "STALE_THRESHOLD = timedelta(minutes=10)\n\ndef is_db_stale():\n last_sync = db.get_last_sync_time()\n return datetime.utcnow() - last_sync > STALE_THRESHOLD\n\n@app.route('/tools/search')\ndef search_tools(q):\n results = db.search_fts(q)\n\n response = jsonify({\"results\": results})\n if is_db_stale():\n response.headers['X-Search-Index-Stale'] = 'true'\n response.headers['X-Last-Sync'] = db.get_last_sync_time().isoformat()\n\n return response\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "error-model", - children: "Error Model" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "response-envelopes", - children: "Response Envelopes" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Success response:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-json", - children: "{\n \"data\": { ... },\n \"meta\": {\n \"page\": 1,\n \"per_page\": 20,\n \"total\": 42,\n \"total_pages\": 3\n }\n}\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Error response:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-json", - children: "{\n \"error\": {\n \"code\": \"TOOL_NOT_FOUND\",\n \"message\": \"Tool 'foo/bar' does not exist\",\n \"details\": {\n \"owner\": \"foo\",\n \"name\": \"bar\",\n \"suggestion\": \"Did you mean 'rob/bar'?\"\n },\n \"docs_url\": \"https://cmdforge.brrd.tech/docs/errors#TOOL_NOT_FOUND\"\n }\n}\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "error-codes", - children: "Error Codes" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Code" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "HTTP" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Description" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "TOOL_NOT_FOUND" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "404" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Tool does not exist" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "VERSION_NOT_FOUND" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "404" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Requested version doesn't exist" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "VERSION_EXISTS" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "409" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Cannot overwrite published version" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "INVALID_VERSION" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "400" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Version string is not valid semver" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "INVALID_CONSTRAINT" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "400" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Version constraint syntax error" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "CONSTRAINT_UNSATISFIABLE" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "404" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "No version matches constraint" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "VALIDATION_ERROR" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "400" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Tool config validation failed" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "UNAUTHORIZED" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "401" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Missing or invalid auth token" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "FORBIDDEN" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "403" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Token valid but lacks permission" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "RATE_LIMITED" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "429" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Too many requests" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "SLUG_TAKEN" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "409" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Namespace slug already registered" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "ACCOUNT_LOCKED" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "403" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Too many failed login attempts" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "SERVER_ERROR" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "500" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Internal error (logged for debugging)" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "error-scenarios-and-fallbacks", - children: "Error Scenarios and Fallbacks" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "cli-error-handling", - children: "CLI Error Handling" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Scenario" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "CLI Behavior" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "User Message" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Registry offline" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Use cached tools if available" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "\"Registry unavailable. Using cached version.\"" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Tool not found" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Check cache, then fail" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "\"Tool 'foo/bar' not found in registry or cache.\"" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Version constraint unsatisfiable" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Show available versions" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "\"No version matches '>=5.0.0'. Available: 1.0.0, 1.1.0, 1.2.0\"" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Auth token expired" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Prompt for new token" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "\"Token expired. Please re-authenticate.\"" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Rate limited" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Wait and retry (backoff)" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "\"Rate limited. Retrying in 30 seconds...\"" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Network timeout" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Retry with backoff, then fail" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "\"Connection timed out. Check your network.\"" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "validation-failure-details", - children: "Validation Failure Details" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: ["When ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "VALIDATION_ERROR" - }), " occurs, provide specific field errors:"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-json", - children: "{\n \"error\": {\n \"code\": \"VALIDATION_ERROR\",\n \"message\": \"Tool configuration is invalid\",\n \"details\": {\n \"errors\": [\n {\n \"path\": \"steps[0].provider\",\n \"message\": \"Provider 'gpt5' is not recognized\",\n \"allowed\": [\"claude\", \"openai\", \"ollama\", \"mock\"]\n },\n {\n \"path\": \"version\",\n \"message\": \"Version '1.0' is not valid semver (use '1.0.0')\"\n }\n ]\n },\n \"docs_url\": \"https://cmdforge.brrd.tech/docs/tool-format\"\n }\n}\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "dependency-resolution-failures", - children: "Dependency Resolution Failures" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: ["When ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "cmdforge install" - }), " fails on a manifest:"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "$ cmdforge install\n\nError: Could not resolve all dependencies\n\n rob/summarize@^2.0.0\n ✗ No matching version (latest: 1.2.0)\n\n alice/translate@>=1.0.0\n ✓ Found 1.3.0\n\nSuggestions:\n - Update rob/summarize constraint to \"^1.0.0\"\n - Contact the tool author for a v2 release\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "graceful-degradation", - children: "Graceful Degradation" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Component Down" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Fallback Behavior" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "API server" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.td, { - children: ["CLI uses ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "~/.cmdforge/registry/index.json" - }), " for search"] - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Gitea repo" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "API serves from DB cache (may be stale)" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "FTS5 index" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Fall back to LIKE queries (slower but works)" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Network" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Use locally installed tools, skip registry features" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "ux-requirements-clitui", - children: "UX Requirements (CLI/TUI)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "publishing-ux", - children: "Publishing UX" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "cmdforge registry publish --dry-run" - }), " validates locally and shows what would be submitted:"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "$ cmdforge registry publish --dry-run\n\nValidating tool...\n✓ config.yaml is valid\n✓ README.md exists (2.3 KB)\n✓ Version 1.1.0 not yet published\n\nWould submit:\n Owner: rob\n Name: summarize\n Version: 1.1.0\n Category: text-processing\n Tags: summarization, ai, text\n\nConfig preview:\n─────────────────────────────\nname: summarize\nversion: \"1.1.0\"\ndescription: Summarize text using AI\n...\n─────────────────────────────\n\nRun without --dry-run to submit for review.\n" - }) - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Version bump reminder:" - }), " CLI warns if version hasn't changed from published:"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "⚠ Version 1.0.0 is already published. Bump version in config.yaml to publish changes.\n" - }) - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "First-time publishing flow prompts for token and saves it to config." - }), "\n"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "progress-indicators", - children: "Progress Indicators" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Long-running operations show progress:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "$ cmdforge install\n\nInstalling project dependencies...\n [1/3] rob/summarize@^1.0.0\n Resolving version... 1.2.0\n Downloading... done\n Installing... done ✓\n [2/3] alice/translate@>=2.0.0\n Resolving version... 2.1.0\n Downloading... done\n Installing... done ✓\n [3/3] official/code-review@*\n Resolving version... 1.0.0\n Downloading... done\n Installing... done ✓\n\n✓ Installed 3 tools\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "$ cmdforge registry publish\n\nSubmitting rob/summarize@1.1.0...\n Validating... done ✓\n Uploading... done ✓\n Creating PR... done ✓\n\n✓ PR created: https://gitea.brrd.tech/rob/CmdForge-Registry/pulls/42\n\nYour tool is pending review. You'll receive an email when it's approved.\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "tui-browse", - children: "TUI Browse" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "cmdforge registry browse" - }), " opens a full-screen terminal UI:"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "┌─ CmdForge Registry ───────────────────────────────────────┐\n│ Search: [________________] [All Categories ▼] [Sort: Popular ▼] │\n├─────────────────────────────────────────────────────────────┤\n│ │\n│ ▶ rob/summarize v1.2.0 ⬇ 142 │\n│ Summarize text using AI │\n│ [text-processing] [ai] [summarization] │\n│ │\n│ alice/translate v2.1.0 ⬇ 98 │\n│ Translate text between languages │\n│ [text-processing] [translation] │\n│ │\n│ official/code-review v1.0.0 ⬇ 87 │\n│ AI-powered code review │\n│ [code] [review] [ai] │\n│ │\n├─────────────────────────────────────────────────────────────┤\n│ ↑↓ Navigate Enter: Details i: Install /: Search q: Quit │\n└─────────────────────────────────────────────────────────────┘\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Keyboard shortcuts:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Key" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Action" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.td, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "↑/↓" - }), " or ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "j/k" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Navigate list" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "Enter" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "View tool details" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "i" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Install selected tool" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Focus search box" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "c" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Change category filter" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "s" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Change sort order" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "?" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Show help" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "q" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Quit" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Virtual scrolling:" - }), " For large tool lists (>100), use virtual scrolling to maintain performance."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "project-initialization", - children: "Project Initialization" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-bash", - children: "$ cmdforge init\n\nCreating cmdforge.yaml...\n\nProject name [my-project]: my-ai-project\nVersion [1.0.0]:\n\nWould you like to add any tools? (search with 's', skip with Enter)\n> s\nSearch: summ\n 1. rob/summarize v1.2.0 - Summarize text using AI\n 2. alice/summary v1.0.0 - Generate summaries\n\nAdd tool (number, or Enter to finish): 1\nAdded rob/summarize@^1.2.0\n\nAdd tool (number, or Enter to finish):\n\n✓ Created cmdforge.yaml\n\nname: my-ai-project\nversion: \"1.0.0\"\ndependencies:\n - name: rob/summarize\n version: \"^1.2.0\"\n\nRun 'cmdforge install' to install dependencies.\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "accessibility", - children: "Accessibility" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "CLI:" - }), " All output works with screen readers, no color-only information"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "TUI:" - }), " Full keyboard navigation, high-contrast mode support"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Web UI:" - }), " WCAG 2.1 AA compliance target", "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Semantic HTML" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "ARIA labels for interactive elements" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Focus management in modals" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Skip links for navigation" - }), "\n"] - }), "\n"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "offline-cache", - children: "Offline Cache" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Cache registry index locally:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "~/.cmdforge/registry/index.json\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: ["Refresh when older than 24 hours; support ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "--offline" - }), " and ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "--refresh" - }), " flags."] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "index-integrity", - children: "Index Integrity" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: ["The cached ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "index.json" - }), " includes integrity metadata:"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-json", - children: "{\n \"version\": \"1.0\",\n \"generated_at\": \"2025-01-20T12:00:00Z\",\n \"checksum\": \"sha256:abc123...\",\n \"tool_count\": 142,\n \"tools\": [...]\n}\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "API response headers:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "ETag: \"abc123def456\"\nX-Index-Checksum: sha256:abc123...\nX-Index-Generated: 2025-01-20T12:00:00Z\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "CLI verification:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-python", - children: "def verify_cached_index():\n \"\"\"Verify cached index integrity on load\"\"\"\n cached = load_cached_index()\n if not cached:\n return None\n\n # Verify checksum\n content = json.dumps(cached['tools'], sort_keys=True)\n computed = hashlib.sha256(content.encode()).hexdigest()\n\n if computed != cached.get('checksum', '').replace('sha256:', ''):\n logger.warning(\"Cached index checksum mismatch, will refresh\")\n return None\n\n return cached\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Corruption handling:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "If checksum fails, discard cache and fetch fresh" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "If partial write detected (missing fields), discard and refresh" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "CLI shows warning: \"Cached index corrupted, fetching fresh copy...\"" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "web-ui-vision", - children: "Web UI Vision" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "The registry includes a full website, not just an API:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Site structure:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "cmdforge.brrd.tech (or gitea.brrd.tech/registry)\n├── / # Landing page\n├── /tools # Browse all tools\n├── /tools/{owner}/{name} # Tool detail page\n├── /categories # Browse by category\n├── /categories/{name} # Tools in category\n├── /collections # Browse curated collections\n├── /collections/{name} # Collection detail page\n├── /search?q=... # Search results\n├── /docs # Documentation\n│ ├── /docs/getting-started\n│ ├── /docs/creating-tools\n│ ├── /docs/publishing\n│ └── /docs/best-practices\n├── /tutorials # Step-by-step guides\n│ ├── /tutorials/first-tool\n│ ├── /tutorials/chaining-steps\n│ └── /tutorials/code-steps\n├── /examples # Example projects\n├── /blog # Updates, announcements (optional)\n├── /register # Publisher registration\n├── /login # Publisher login\n├── /dashboard # Publisher dashboard\n│ ├── /dashboard/tools # My published tools\n│ ├── /dashboard/connections # Connected apps\n│ └── /dashboard/settings # Account settings\n└── /api/v1/... # API endpoints\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Landing page content:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Hero: \"Share and discover AI-powered CLI tools\"" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Quick install example" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Featured/popular tools" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Category highlights" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "\"Get Started\" CTA" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Tool detail page:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Name, description, version, author" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "README rendered as markdown (sanitized)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Install command (copy-to-clipboard)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Version history" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Download stats" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Category/tags" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "\"Report\" button for abuse" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "readme-security", - children: "README Security" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "When rendering README markdown, apply XSS sanitization:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-python", - children: "import bleach\nfrom markdown import markdown\n\nALLOWED_TAGS = [\n 'h1', 'h2', 'h3', 'h4', 'h5', 'h6',\n 'p', 'br', 'hr',\n 'ul', 'ol', 'li',\n 'strong', 'em', 'code', 'pre',\n 'blockquote',\n 'a', 'img',\n 'table', 'thead', 'tbody', 'tr', 'th', 'td'\n]\n\nALLOWED_ATTRS = {\n 'a': ['href', 'title'],\n 'img': ['src', 'alt', 'title'],\n 'code': ['class'], # for syntax highlighting\n}\n\ndef render_readme_safe(readme_raw: str) -> str:\n \"\"\"Convert markdown to sanitized HTML\"\"\"\n # Convert markdown to HTML\n html = markdown(readme_raw, extensions=['fenced_code', 'tables'])\n\n # Sanitize to prevent XSS\n safe_html = bleach.clean(\n html,\n tags=ALLOWED_TAGS,\n attributes=ALLOWED_ATTRS,\n strip=True\n )\n\n # Linkify URLs\n safe_html = bleach.linkify(safe_html)\n\n return safe_html\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Storage strategy:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Store raw README in ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "tools.readme" - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Render and sanitize on request (or cache rendered HTML)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Never trust client-submitted HTML directly" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Tech stack options:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Option" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Pros" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Cons" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Flask + Jinja + Tailwind" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Simple, Python-only, fast to build" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Less interactive" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "FastAPI + Vue/React SPA" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Modern, interactive" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "More complex, separate build" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Astro/Next.js" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Great SEO, static-first" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Different stack (Node.js)" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Recommendation:" - }), " Flask + Jinja + Tailwind for v1"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Keeps everything in Python" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Server-rendered is fine for a registry" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Good SEO out of the box" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Can add interactivity with Alpine.js or htmx if needed" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Monetization considerations:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "AdSense-compatible (server-rendered pages)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Analytics tracking for traffic insights" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Future: sponsored tools, featured placements" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Future: premium publisher tiers (more tools, priority review)" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "registry-curation-system", - children: "Registry Curation System" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "The registry includes a moderation system for content curation, abuse prevention, and quality control." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "roles-and-permissions", - children: "Roles and Permissions" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Role" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Permissions" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "user" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Publish tools, manage own tools, view public content" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "moderator" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "All user permissions + approve/reject tools, resolve reports, view all publishers" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "admin" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "All moderator permissions + ban/unban publishers, change roles, delete tools, view audit log" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Database columns:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-sql", - children: "-- In publishers table\nrole TEXT DEFAULT 'user', -- 'user', 'moderator', 'admin'\nbanned INTEGER DEFAULT 0,\nbanned_at TIMESTAMP,\nbanned_by TEXT,\nban_reason TEXT,\n\n-- In tools table\nvisibility TEXT DEFAULT 'public', -- 'public', 'private', 'unlisted'\nmoderation_status TEXT DEFAULT 'pending', -- 'pending', 'approved', 'rejected', 'removed'\nmoderation_note TEXT,\nmoderated_by TEXT,\nmoderated_at TIMESTAMP,\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "tool-visibility", - children: "Tool Visibility" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Visibility" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "In Search/List" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Direct Link" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Who Can See" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "public" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Yes (if approved)" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Yes (if approved)" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Everyone" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "private" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "No" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "No" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Owner only" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "unlisted" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "No" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Yes (if approved)" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Anyone with link" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "moderation-workflow", - children: "Moderation Workflow" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "Tool Published\n │\n ├── visibility = 'private' or 'unlisted'\n │ └── Auto-approved (moderation_status = 'approved')\n │\n └── visibility = 'public'\n └── moderation_status = 'pending'\n │\n ├── Moderator approves → 'approved' → Visible in search\n ├── Moderator rejects → 'rejected' → Not visible\n └── Moderator removes → 'removed' → Removed from view\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "admin-api-endpoints", - children: "Admin API Endpoints" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Tool Moderation (moderator+):" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /api/v1/admin/tools/pending # List pending tools\nGET /api/v1/admin/tools/<id> # Get full tool details for review\nPOST /api/v1/admin/tools/<id>/approve # Approve a tool\nPOST /api/v1/admin/tools/<id>/reject # Reject with reason (required)\nPOST /api/v1/admin/tools/<id>/remove # Soft-delete approved tool\nDELETE /api/v1/admin/tools/<id> # Hard delete (admin only)\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.strong, { - children: ["Tool Detail Response (", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /api/v1/admin/tools/<id>" - }), "):"] - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-json", - children: "{\n \"data\": {\n \"id\": 123,\n \"owner\": \"alice\",\n \"name\": \"my-tool\",\n \"version\": \"1.0.0\",\n \"description\": \"Tool description\",\n \"category\": \"Text Processing\",\n \"tags\": \"ai,text\",\n \"published_at\": \"2025-01-15T10:30:00Z\",\n \"publisher_name\": \"Alice Smith\",\n \"visibility\": \"public\",\n \"moderation_status\": \"pending\",\n \"scrutiny_status\": \"pending_review\",\n \"scrutiny_report\": {\n \"findings\": [\n {\"check\": \"shell_commands\", \"result\": \"warning\", \"message\": \"...\", \"suggestion\": \"...\"}\n ]\n },\n \"config\": {\n \"name\": \"my-tool\",\n \"description\": \"...\",\n \"arguments\": [...],\n \"steps\": [...]\n },\n \"readme\": \"# My Tool\\n\\nDocumentation here...\"\n }\n}\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Publisher Management (moderator+ to view, admin to modify):" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /api/v1/admin/publishers # List all publishers\nGET /api/v1/admin/publishers/<id> # Publisher details\nPOST /api/v1/admin/publishers/<id>/ban # Ban with reason (admin)\nPOST /api/v1/admin/publishers/<id>/unban # Unban (admin)\nPOST /api/v1/admin/publishers/<id>/role # Change role (admin)\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Reports (moderator+):" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /api/v1/admin/reports # List reports\nPOST /api/v1/admin/reports/<id>/resolve # Resolve with action\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Audit Log (admin only):" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "GET /api/v1/admin/audit-log # View moderation history\n ?target_type=tool|publisher\n ?target_id=<id>\n ?actor_id=<id>\n ?since=<date>\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "ban-behavior", - children: "Ban Behavior" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "When a publisher is banned:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ol, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "banned" - }), " set to 1, ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "banned_at" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "banned_by" - }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "ban_reason" - }), " recorded"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "All active API tokens revoked" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["All their tools set to ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "moderation_status = 'removed'" - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Action logged to audit trail" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Banned publishers see error on any authenticated API call:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-json", - children: "{\n \"error\": {\n \"code\": \"ACCOUNT_BANNED\",\n \"message\": \"Your account has been banned: <reason>\"\n }\n}\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "report-resolution-actions", - children: "Report Resolution Actions" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Action" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Effect" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "dismiss" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Close report, no action taken" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "warn" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Close report, no automated action (manual warning)" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "remove_tool" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Remove the reported tool" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "ban_publisher" - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Ban the tool's publisher" - })] - })] - })] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "audit-log", - children: "Audit Log" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "All moderation actions are logged:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-sql", - children: "CREATE TABLE audit_log (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n action TEXT NOT NULL, -- 'approve_tool', 'reject_tool', 'ban_publisher', etc.\n target_type TEXT NOT NULL, -- 'tool', 'publisher', 'report'\n target_id TEXT NOT NULL,\n actor_id TEXT NOT NULL, -- Who performed the action\n details TEXT, -- JSON with additional context\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n);\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "web-ui-admin-dashboard", - children: "Web UI Admin Dashboard" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Moderators and admins see an \"Admin Panel\" link in their dashboard sidebar leading to:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/dashboard/admin" - }), " - Overview with pending counts"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/dashboard/admin/pending" - }), " - Pending tools queue"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/dashboard/admin/publishers" - }), " - Publisher management"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/dashboard/admin/reports" - }), " - Report queue"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h4, { - id: "pending-tools-review-page", - children: "Pending Tools Review Page" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: ["The pending tools page (", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "/dashboard/admin/pending" - }), ") provides a comprehensive interface for reviewing submitted tools:"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Table View:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Tool name (clickable to open detail modal)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Publisher name and category" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Scrutiny status with expandable warnings" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Submission date" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Approve/Reject action buttons" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Pagination:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Page number links with ellipsis for large ranges" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["First (", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "«" - }), ") and Last (", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "»" - }), ") page buttons"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Previous/Next navigation" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "\"Page X of Y (total)\" indicator" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Tool Detail Modal:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Clicking a tool name opens a draggable modal showing:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ol, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Scrutiny Warnings" - }), " - Yellow warning boxes at the top showing any security or quality concerns from automated analysis, including:"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Check name (e.g., \"shell_commands\", \"network_access\")" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Warning message" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Suggestion for resolution" - }), "\n"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Description" - }), " - Tool's description text"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Arguments" - }), " - List of tool arguments with flags, variables, and descriptions"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Steps" - }), " - Full display of all tool steps:"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Prompt steps" - }), ": Shows provider, output variable, and full prompt content"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Code steps" - }), ": Shows output variable and code with syntax highlighting (dark theme)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Tool steps" - }), ": Shows tool name and arguments"] - }), "\n"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "README" - }), " - Full README content if provided"] - }), "\n"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { - children: "Modal Features:" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Draggable by header bar" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Scrollable content area (header and buttons stay fixed)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Approve/Reject buttons in modal footer" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Dark overlay prevents interaction with page behind" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Background scroll locked while modal is open" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Closes with X button or after action" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "creating-the-first-admin", - children: "Creating the First Admin" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "After deployment, create the first admin via direct SQL:" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.pre, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - className: "language-sql", - children: "UPDATE publishers SET role = 'admin' WHERE slug = 'rob';\n" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { - children: "Subsequent admins can be promoted via the web UI or API." - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "implementation-phases", - children: "Implementation Phases" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "phase-1-foundation", - children: "Phase 1: Foundation" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: ["Define ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "cmdforge.yaml" - }), " manifest format"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Implement tool resolution order (local → global → registry)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Create CmdForge-Registry repo on Gitea (bootstrap)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Add 3-5 example tools to seed the registry" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "phase-2-core-backend", - children: "Phase 2: Core Backend" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Set up Flask/FastAPI project structure" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Implement SQLite database schema" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Build core API endpoints (list, search, get, download)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Implement webhook receiver for Gitea sync" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Set up HMAC verification" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "phase-3-cli-commands", - children: "Phase 3: CLI Commands" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "cmdforge registry search" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "cmdforge registry install" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "cmdforge registry info" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "cmdforge registry browse" - }), " (TUI)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Local index caching" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "phase-4-publishing", - children: "Phase 4: Publishing" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Publisher registration (web UI)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Token management" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "cmdforge registry publish" - }), " command"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "PR creation via Gitea API" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "CI validation workflows" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "phase-5-project-dependencies", - children: "Phase 5: Project Dependencies" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "cmdforge install" - }), " (from manifest)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "cmdforge add" - }), " command"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Runtime override application" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Dependency resolution" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "phase-6-smart-features", - children: "Phase 6: Smart Features" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "SQLite FTS5 search index" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "AI-powered auto-categorization" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Duplicate/similarity detection" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Security scanning" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "phase-7-full-web-ui", - children: "Phase 7: Full Web UI" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Landing page" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Tool browsing/search pages" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Tool detail pages with README rendering" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Publisher dashboard" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Documentation/tutorials section" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "phase-8-polish--scale", - children: "Phase 8: Polish & Scale" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Rate limiting" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Abuse reporting" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Analytics integration" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Performance optimization" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Monitoring/alerting" - }), "\n"] - })] - }); -} -function MDXContent(props = {}) { - const {wrapper: MDXLayout} = { - ...(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__/* .useMDXComponents */ .R)(), - ...props.components - }; - return MDXLayout ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(MDXLayout, { - ...props, - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_createMdxContent, { - ...props - }) - }) : _createMdxContent(props); -} - - - -/***/ }, - -/***/ 9496 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ IconEdit) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1930); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function IconEdit({className,...restProps}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("svg",{fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)((_styles_module_css__WEBPACK_IMPORTED_MODULE_2___default().iconEdit),className),"aria-hidden":"true",...restProps,children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("g",{children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})})});} - -/***/ }, - -/***/ 9521 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ DocRootLayoutSidebarExpandButton) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_Translate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(986); -/* harmony import */ var _theme_Icon_Arrow__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5861); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(8721); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function DocRootLayoutSidebarExpandButton({toggleSidebar}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("div",{className:(_styles_module_css__WEBPACK_IMPORTED_MODULE_3___default().expandButton),title:(0,_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_1__/* .translate */ .T)({id:'theme.docs.sidebar.expandButtonTitle',message:'Expand sidebar',description:'The ARIA label and title attribute for expand button of doc sidebar'}),"aria-label":(0,_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_1__/* .translate */ .T)({id:'theme.docs.sidebar.expandButtonAriaLabel',message:'Expand sidebar',description:'The ARIA label and title attribute for expand button of doc sidebar'}),tabIndex:0,role:"button",onKeyDown:toggleSidebar,onClick:toggleSidebar,children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_theme_Icon_Arrow__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{className:(_styles_module_css__WEBPACK_IMPORTED_MODULE_3___default().expandButtonIcon)})});} - -/***/ }, - -/***/ 9532 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ Be: () => (/* binding */ useShallowMemoObject), -/* harmony export */ ZC: () => (/* binding */ usePrevious), -/* harmony export */ _q: () => (/* binding */ useEvent), -/* harmony export */ dV: () => (/* binding */ ReactContextError), -/* harmony export */ fM: () => (/* binding */ composeProviders) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(205); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - *//** - * Temporary userland implementation until an official hook is implemented - * See RFC: https://github.com/reactjs/rfcs/pull/220 - * - * Permits to transform an unstable callback (like an arrow function provided as - * props) to a "stable" callback that is safe to use in a `useEffect` dependency - * array. Useful to avoid React stale closure problems + avoid useless effect - * re-executions. - * - * This generally works but has some potential drawbacks, such as - * https://github.com/facebook/react/issues/16956#issuecomment-536636418 - */function useEvent(callback){const ref=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(callback);(0,_docusaurus_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(()=>{ref.current=callback;},[callback]);// @ts-expect-error: TS is right that this callback may be a supertype of T, -// but good enough for our use -return (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((...args)=>ref.current(...args),[]);}/** - * Gets `value` from the last render. - */function usePrevious(value){const ref=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();(0,_docusaurus_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(()=>{ref.current=value;});// TODO need to fix this React Compiler lint error -// probably requires changing the API though -// eslint-disable-next-line react-compiler/react-compiler -return ref.current;}/** - * This error is thrown when a context is consumed outside its provider. Allows - * reusing a generic error message format and reduces bundle size. The hook's - * name will be extracted from its stack, so only the provider's name is needed. - */class ReactContextError extends Error{constructor(providerName,additionalInfo){super();this.name='ReactContextError';this.message=`Hook ${this.stack?.split('\n')[1]?.match(/at (?:\w+\.)?(?<name>\w+)/)?.groups.name??''} is called outside the <${providerName}>. ${additionalInfo??''}`;}}/** - * Shallow-memoize an object. This means the returned object will be the same as - * the previous render if the property keys and values did not change. This - * works for simple cases: when property values are primitives or stable - * objects. - * - * @param obj - */function useShallowMemoObject(obj){const deps=Object.entries(obj);// Sort by keys to make it order-insensitive -deps.sort((a,b)=>a[0].localeCompare(b[0]));// eslint-disable-next-line react-compiler/react-compiler,react-hooks/exhaustive-deps -return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>obj,deps.flat());}/** - * Creates a single React provider from an array of existing providers - * assuming providers only take "children" as props. - * - * Prevents the annoying React element nesting - * Example here: https://getfrontend.tips/compose-multiple-react-providers/ - * - * The order matters: - * - The first provider is at the top of the tree. - * - The last provider is the most nested one - * - * @param providers array of providers to compose - */function composeProviders(providers){// Creates a single React component: it's cheaper to compose JSX elements -return({children})=>/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.Fragment,{children:providers.reduceRight((element,CurrentProvider)=>/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(CurrentProvider,{children:element}),children)});} - -/***/ }, - -/***/ 9568 -(module) { - -"use strict"; -module.exports = /*#__PURE__*/JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/rob/CmdForge/","versions":[{"name":"current","label":"Next","isLast":true,"path":"/rob/CmdForge/","mainDocId":"overview","docs":[{"id":"architecture","path":"/rob/CmdForge/architecture","sidebar":"docs"},{"id":"goals","path":"/rob/CmdForge/goals","sidebar":"docs"},{"id":"ideas-and-exploration","path":"/rob/CmdForge/ideas-and-exploration","sidebar":"docs"},{"id":"milestones","path":"/rob/CmdForge/milestones","sidebar":"docs"},{"id":"overview","path":"/rob/CmdForge/","sidebar":"docs"},{"id":"reference/collections","path":"/rob/CmdForge/reference/collections","sidebar":"docs"},{"id":"reference/design","path":"/rob/CmdForge/reference/design","sidebar":"docs"},{"id":"reference/examples","path":"/rob/CmdForge/reference/examples","sidebar":"docs"},{"id":"reference/meta-tools","path":"/rob/CmdForge/reference/meta-tools","sidebar":"docs"},{"id":"reference/providers","path":"/rob/CmdForge/reference/providers","sidebar":"docs"},{"id":"reference/registry-spec","path":"/rob/CmdForge/reference/registry-spec","sidebar":"docs"},{"id":"reference/web-ui-spec","path":"/rob/CmdForge/reference/web-ui-spec","sidebar":"docs"},{"id":"todos","path":"/rob/CmdForge/todos","sidebar":"docs"},{"id":"/category/reference","path":"/rob/CmdForge/category/reference","sidebar":"docs"}],"draftIds":[],"sidebars":{"docs":{"link":{"path":"/rob/CmdForge/","label":"overview"}}}}],"breadcrumbs":true}}}'); - -/***/ }, - -/***/ 9582 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ AnnouncementBar) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6342); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7559); -/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(5041); -/* harmony import */ var _theme_AnnouncementBar_CloseButton__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(5417); -/* harmony import */ var _theme_AnnouncementBar_Content__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(2256); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(2804); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function AnnouncementBar(){const{announcementBar}=(0,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__/* .useThemeConfig */ .p)();const{isActive,close}=(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_4__/* .useAnnouncementBar */ .M)();if(!isActive){return null;}const{backgroundColor,textColor,isCloseable}=announcementBar;return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxs)("div",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__/* .ThemeClassNames */ .G.announcementBar.container,(_styles_module_css__WEBPACK_IMPORTED_MODULE_7___default().announcementBar)),style:{backgroundColor,color:textColor},role:"banner",children:[isCloseable&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)("div",{className:(_styles_module_css__WEBPACK_IMPORTED_MODULE_7___default().announcementBarPlaceholder)}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(_theme_AnnouncementBar_Content__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A,{className:(_styles_module_css__WEBPACK_IMPORTED_MODULE_7___default().announcementBarContent)}),isCloseable&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(_theme_AnnouncementBar_CloseButton__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A,{onClick:close,className:(_styles_module_css__WEBPACK_IMPORTED_MODULE_7___default().announcementBarClose)})]});} - -/***/ }, - -/***/ 9588 -(module) { - -// Exports -module.exports = { - "buttonGroup": `buttonGroup_M5ko` -}; - - -/***/ }, - -/***/ 9622 -(module) { - -// Exports -module.exports = { - "anchorTargetStickyNavbar": `anchorTargetStickyNavbar_Vzrq`, - "anchorTargetHideOnScrollNavbar": `anchorTargetHideOnScrollNavbar_vjPI` -}; - - -/***/ }, - -/***/ 9631 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ IconMenu) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function IconMenu({width=30,height=30,className,...restProps}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("svg",{className:className,width:width,height:height,viewBox:"0 0 30 30","aria-hidden":"true",...restProps,children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})});} - -/***/ }, - -/***/ 9644 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ CodeBlock) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _docusaurus_useIsBrowser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2303); -/* harmony import */ var _theme_CodeBlock_Content_Element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6846); -/* harmony import */ var _theme_CodeBlock_Content_String__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(5745); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - *//** - * Best attempt to make the children a plain string so it is copyable. If there - * are react elements, we will not be able to copy the content, and it will - * return `children` as-is; otherwise, it concatenates the string children - * together. - */function maybeStringifyChildren(children){if(react__WEBPACK_IMPORTED_MODULE_0__.Children.toArray(children).some(el=>/*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.isValidElement)(el))){return children;}// The children is now guaranteed to be one/more plain strings -return Array.isArray(children)?children.join(''):children;}function CodeBlock({children:rawChildren,...props}){// The Prism theme on SSR is always the default theme but the site theme can -// be in a different mode. React hydration doesn't update DOM styles that come -// from SSR. Hence force a re-render after mounting to apply the current -// relevant styles. -const isBrowser=(0,_docusaurus_useIsBrowser__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)();const children=maybeStringifyChildren(rawChildren);const CodeBlockComp=typeof children==='string'?_theme_CodeBlock_Content_String__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A:_theme_CodeBlock_Content_Element__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A;return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(CodeBlockComp,{...props,children:children},String(isBrowser));} - -/***/ }, - -/***/ 9698 -(__unused_webpack_module, exports) { - -"use strict"; -/** - * @license React - * react-jsx-runtime.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - - -var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), - REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"); -function jsxProd(type, config, maybeKey) { - var key = null; - void 0 !== maybeKey && (key = "" + maybeKey); - void 0 !== config.key && (key = "" + config.key); - if ("key" in config) { - maybeKey = {}; - for (var propName in config) - "key" !== propName && (maybeKey[propName] = config[propName]); - } else maybeKey = config; - config = maybeKey.ref; - return { - $$typeof: REACT_ELEMENT_TYPE, - type: type, - key: key, - ref: void 0 !== config ? config : null, - props: maybeKey - }; -} -exports.Fragment = REACT_FRAGMENT_TYPE; -exports.jsx = jsxProd; -exports.jsxs = jsxProd; - - -/***/ }, - -/***/ 9700 -() { - -(function (Prism) { - - /** - * Returns the placeholder for the given language id and index. - * - * @param {string} language - * @param {string|number} index - * @returns {string} - */ - function getPlaceholder(language, index) { - return '___' + language.toUpperCase() + index + '___'; - } - - Object.defineProperties(Prism.languages['markup-templating'] = {}, { - buildPlaceholders: { - /** - * Tokenize all inline templating expressions matching `placeholderPattern`. - * - * If `replaceFilter` is provided, only matches of `placeholderPattern` for which `replaceFilter` returns - * `true` will be replaced. - * - * @param {object} env The environment of the `before-tokenize` hook. - * @param {string} language The language id. - * @param {RegExp} placeholderPattern The matches of this pattern will be replaced by placeholders. - * @param {(match: string) => boolean} [replaceFilter] - */ - value: function (env, language, placeholderPattern, replaceFilter) { - if (env.language !== language) { - return; - } - - var tokenStack = env.tokenStack = []; - - env.code = env.code.replace(placeholderPattern, function (match) { - if (typeof replaceFilter === 'function' && !replaceFilter(match)) { - return match; - } - var i = tokenStack.length; - var placeholder; - - // Check for existing strings - while (env.code.indexOf(placeholder = getPlaceholder(language, i)) !== -1) { - ++i; - } - - // Create a sparse array - tokenStack[i] = match; - - return placeholder; - }); - - // Switch the grammar to markup - env.grammar = Prism.languages.markup; - } - }, - tokenizePlaceholders: { - /** - * Replace placeholders with proper tokens after tokenizing. - * - * @param {object} env The environment of the `after-tokenize` hook. - * @param {string} language The language id. - */ - value: function (env, language) { - if (env.language !== language || !env.tokenStack) { - return; - } - - // Switch the grammar back - env.grammar = Prism.languages[language]; - - var j = 0; - var keys = Object.keys(env.tokenStack); - - function walkTokens(tokens) { - for (var i = 0; i < tokens.length; i++) { - // all placeholders are replaced already - if (j >= keys.length) { - break; - } - - var token = tokens[i]; - if (typeof token === 'string' || (token.content && typeof token.content === 'string')) { - var k = keys[j]; - var t = env.tokenStack[k]; - var s = typeof token === 'string' ? token : token.content; - var placeholder = getPlaceholder(language, k); - - var index = s.indexOf(placeholder); - if (index > -1) { - ++j; - - var before = s.substring(0, index); - var middle = new Prism.Token(language, Prism.tokenize(t, env.grammar), 'language-' + language, t); - var after = s.substring(index + placeholder.length); - - var replacement = []; - if (before) { - replacement.push.apply(replacement, walkTokens([before])); - } - replacement.push(middle); - if (after) { - replacement.push.apply(replacement, walkTokens([after])); - } - - if (typeof token === 'string') { - tokens.splice.apply(tokens, [i, 1].concat(replacement)); - } else { - token.content = replacement; - } - } - } else if (token.content /* && typeof token.content !== 'string' */) { - walkTokens(token.content); - } - } - - return tokens; - } - - walkTokens(env.tokens); - } - } - }); - -}(Prism)); - - -/***/ }, - -/***/ 9701 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ P: () => (/* binding */ useMutationObserver) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _utils_reactUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9532); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */const DefaultOptions={attributes:true,characterData:true,childList:true,subtree:true};function useMutationObserver(target,callback,options=DefaultOptions){const stableCallback=(0,_utils_reactUtils__WEBPACK_IMPORTED_MODULE_1__/* .useEvent */ ._q)(callback);// MutationObserver options are not nested much -// so this should be to memo options in 99% -// TODO handle options.attributeFilter array -const stableOptions=(0,_utils_reactUtils__WEBPACK_IMPORTED_MODULE_1__/* .useShallowMemoObject */ .Be)(options);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{const observer=new MutationObserver(stableCallback);if(target){observer.observe(target,stableOptions);}return()=>observer.disconnect();},[target,stableCallback,stableOptions]);} - -/***/ }, - -/***/ 9757 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ DocSidebarDesktopContent) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7559); -/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(5041); -/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(3104); -/* harmony import */ var _docusaurus_Translate__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(986); -/* harmony import */ var _theme_DocSidebarItems__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(5536); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(1733); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function useShowAnnouncementBar(){const{isActive}=(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_3__/* .useAnnouncementBar */ .M)();const[showAnnouncementBar,setShowAnnouncementBar]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(isActive);(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_4__/* .useScrollPosition */ .Mq)(({scrollY})=>{if(isActive){setShowAnnouncementBar(scrollY===0);}},[isActive]);return isActive&&showAnnouncementBar;}function DocSidebarDesktopContent({path,sidebar,className}){const showAnnouncementBar=useShowAnnouncementBar();return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)("nav",{"aria-label":(0,_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_5__/* .translate */ .T)({id:'theme.docs.sidebar.navAriaLabel',message:'Docs sidebar',description:'The ARIA label for the sidebar navigation'}),className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('menu thin-scrollbar',(_styles_module_css__WEBPACK_IMPORTED_MODULE_7___default().menu),showAnnouncementBar&&(_styles_module_css__WEBPACK_IMPORTED_MODULE_7___default().menuWithAnnouncementBar),className),children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)("ul",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__/* .ThemeClassNames */ .G.docs.docSidebarMenu,'menu__list'),children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(_theme_DocSidebarItems__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A,{items:sidebar,activePath:path,level:1})})});} - -/***/ }, - -/***/ 9788 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ DropdownNavbarItem) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var _theme_NavbarItem_DropdownNavbarItem_Mobile__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1207); -/* harmony import */ var _theme_NavbarItem_DropdownNavbarItem_Desktop__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(9083); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function DropdownNavbarItem({mobile=false,...props}){const Comp=mobile?_theme_NavbarItem_DropdownNavbarItem_Mobile__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A:_theme_NavbarItem_DropdownNavbarItem_Desktop__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A;return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Comp,{...props});} - -/***/ }, - -/***/ 9832 -(module) { - -// Exports -module.exports = { - -}; - - -/***/ }, - -/***/ 9840 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ assets: () => (/* binding */ assets), -/* harmony export */ contentTitle: () => (/* binding */ contentTitle), -/* harmony export */ "default": () => (/* binding */ MDXContent), -/* harmony export */ frontMatter: () => (/* binding */ frontMatter), -/* harmony export */ metadata: () => (/* reexport default export from named module */ _site_docusaurus_docusaurus_plugin_content_docs_default_site_docs_todos_md_1db_json__WEBPACK_IMPORTED_MODULE_0__), -/* harmony export */ toc: () => (/* binding */ toc) -/* harmony export */ }); -/* harmony import */ var _site_docusaurus_docusaurus_plugin_content_docs_default_site_docs_todos_md_1db_json__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7289); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4848); -/* harmony import */ var _mdx_js_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(8453); - - -const frontMatter = { - type: 'todos', - project: 'cmdforge', - updated: new Date('2026-01-17T00:00:00.000Z'), - sidebar_position: 6 -}; -const contentTitle = 'CmdForge TODOs'; - -const assets = { - -}; - - - -const toc = [{ - "value": "Active Tasks", - "id": "active-tasks", - "level": 2 -}, { - "value": "Low Priority", - "id": "low-priority", - "level": 3 -}, { - "value": "Completed", - "id": "completed", - "level": 2 -}, { - "value": "Ideas / Backlog", - "id": "ideas--backlog", - "level": 2 -}, { - "value": "Known Issues", - "id": "known-issues", - "level": 2 -}]; -function _createMdxContent(props) { - const _components = { - code: "code", - h1: "h1", - h2: "h2", - h3: "h3", - header: "header", - input: "input", - li: "li", - table: "table", - tbody: "tbody", - td: "td", - th: "th", - thead: "thead", - tr: "tr", - ul: "ul", - ...(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__/* .useMDXComponents */ .R)(), - ...props.components - }; - return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.Fragment, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.header, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h1, { - id: "cmdforge-todos", - children: "CmdForge TODOs" - }) - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "active-tasks", - children: "Active Tasks" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { - id: "low-priority", - children: "Low Priority" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - className: "contains-task-list", - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Email verification for registration"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Video embed component for tutorials"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Schema.org structured data for SEO"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "PWA features (offline support, install prompt)"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "completed", - children: "Completed" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - className: "contains-task-list", - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Project dependency system (", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "cmdforge install" - }), ") @M4 #high (2026-01-17)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "cmdforge add" - }), " command @M4 #high (2026-01-17)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Dependency resolution for meta-tools @M4 #high (2026-01-17)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Password reset flow @M4 #high (2026-01-17)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Collections CLI commands (", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "cmdforge collections list/info/install" - }), ") @M4 #high (2026-01-17)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Admin collections management UI @M4 #high (2026-01-17)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Improve error messages and debugging @M1 #medium (2026-01-13)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Set up CI/CD pipeline with Gitea webhook @M1 #medium (2026-01-13)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Add source field display to web UI @M1 #medium (2026-01-13)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Set up gunicorn for production server @M1 #medium (2026-01-13)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Enable systemd linger for service persistence @M1 #medium (2026-01-13)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Fix Dockerfile - remove docs/ symlink copy #medium (2026-01-10)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Create public documentation with Docusaurus @M1 #medium (2026-01-05)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Set up systemd service on production @M1 #medium (2025-12-05)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Migrate from SmartTools to CmdForge naming #medium (2025-12-15)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Add ToolSource dataclass for attribution #medium (2025-12-10)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Create Fabric import script #medium (2025-12-08)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Fix database persistence with backup/restore #medium (2025-12-03)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Update cron jobs to use cmdforge names #medium (2025-12-01)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Implement YAML tool definition system @M0 #medium (2025-12-01)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Create CLI entry point and subcommands @M0 #medium (2025-11-15)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Build provider abstraction layer @M0 #medium (2025-11-10)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Add offline caching for tools @M0 #medium (2025-11-05)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Create web UI for tool browsing @M0 #medium (2025-10-20)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Tool execution engine @M0 #medium (2025-10-15)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "YAML tool definition system @M0 #high (2026-01-13)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "CLI entry point and subcommands @M0 #high (2026-01-13)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Provider abstraction layer @M0 #high (2026-01-13)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Offline caching for tools @M0 #high (2026-01-13)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Web UI for tool browsing @M0 #high (2026-01-13)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Public documentation @M1 #high (2026-01-13)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Systemd service setup @M1 #high (2026-01-13)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Gunicorn production server @M1 #high (2026-01-13)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Systemd linger for persistence @M1 #high (2026-01-13)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "CI/CD pipeline @M1 #high (2026-01-13)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Error message improvements @M1 #high (2026-01-13)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Source field display in web UI @M1 #high (2026-01-13)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "TUI Registry browser @M2 #high (2026-01-13)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "TUI Publishing with token input @M2 #high (2026-01-13)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Docker containers (test + ready) @M2 #high (2026-01-13)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Interactive installer script @M2 #high (2026-01-13)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Database migration system @M2 #high (2026-01-13)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Tool search and filtering @M2 #high (2026-01-13)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "App pairing/connection flow @M2 #high (2026-01-14)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Registry curation system @M2 #high (2026-01-14)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "PySide6 GUI conversion @M2 #high (2026-01-14)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "GUI Registry browser @M2 #high (2026-01-14)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "GUI Publishing with connect flow @M2 #high (2026-01-14)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Tool ratings/reviews @M2 #high (2026-01-14)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Tool marketplace UI enhancements @M2 #high (2026-01-14)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "AI persona profiles @M2 #high (2026-01-14)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "AI-assisted code generation @M2 #high (2026-01-14)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Import Fabric patterns (233 total) @M3 #high (2026-01-14)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Scheduled Fabric repo sync @M3 #high (2026-01-14)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Auto-vetting pipeline integration @M3 #high (2026-01-14)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Community tool submissions workflow @M3 #high (2026-01-14)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Duplicate detection automation @M3 #high (2026-01-14)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Collections CLI commands @M4 #high (2026-01-17)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Visual node-based step editor @M4 #high (2026-01-17)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Tool visualization improvements @M4 #high (2026-01-17)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Drag-and-drop step reordering @M4 #high (2026-01-17)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Tool composition and chaining UI @M4 #high (2026-01-17)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Auto-populate dependencies for ToolStep in GUI @M4 #high (2026-01-17)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "--auto-install" - }), " flag for runtime dependency installation @M4 #high (2026-01-17)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Interactive onboarding walkthroughs @M4 #medium (2026-01-17)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Project dependency system (", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "cmdforge install" - }), ") @M5 #high (2026-01-17)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { - children: "cmdforge add" - }), " command @M5 #high (2026-01-17)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Dependency resolution for meta-tools @M5 #high (2026-01-17)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Tool versioning support @M5 #high (2026-01-17)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Version constraints in manifests @M5 #high (2026-01-17)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Simple theming (external QSS files) @M5 #high (2026-01-17)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Dark mode @M5 #high (2026-01-17)"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - checked: true, - disabled: true - }), " ", "Tool testing framework @M5 #high (2026-01-17)"] - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "ideas--backlog", - children: "Ideas / Backlog" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { - children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Tool usage analytics" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "GUI tool builder (visual YAML editor)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "VS Code extension" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Provider auto-detection" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Parallel tool step execution" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Conditional step execution (skip based on conditions)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Tool aliases (shorthand names for frequently used tools)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Output caching for identical inputs" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "CDN setup for static assets" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Accessibility testing (WCAG 2.1 AA formal verification)" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Newsletter signup with double opt-in" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "A/B testing for landing page" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Premium publisher tiers" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { - children: "Internationalization (i18n)" - }), "\n"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "known-issues", - children: "Known Issues" - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Issue" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Status" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.th, { - children: "Workaround" - })] - }) - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tbody, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "MergerFS SQLite limitation" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Resolved" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Database moved to /var/tmp on root filesystem" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Service persistence" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Resolved" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Systemd linger now enabled" - })] - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Flask dev server" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Resolved" - }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.td, { - children: "Now using gunicorn for production" - })] - })] - })] - })] - }); -} -function MDXContent(props = {}) { - const {wrapper: MDXLayout} = { - ...(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__/* .useMDXComponents */ .R)(), - ...props.components - }; - return MDXLayout ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(MDXLayout, { - ...props, - children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_createMdxContent, { - ...props - }) - }) : _createMdxContent(props); -} - - - -/***/ }, - -/***/ 9867 -(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ _interopRequireWildcard) -/* harmony export */ }); -/* harmony import */ var _typeof_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2284); - -function _interopRequireWildcard(e, t) { - if ("function" == typeof WeakMap) var r = new WeakMap(), - n = new WeakMap(); - return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { - if (!t && e && e.__esModule) return e; - var o, - i, - f = { - __proto__: null, - "default": e - }; - if (null === e || "object" != (0,_typeof_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(e) && "function" != typeof e) return f; - if (o = t ? n : r) { - if (o.has(e)) return o.get(e); - o.set(e, f); - } - for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); - return f; - })(e, t); -} - - -/***/ }, - -/***/ 9869 -(__unused_webpack_module, exports) { - -"use strict"; -/** - * @license React - * react.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - - -var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), - REACT_PORTAL_TYPE = Symbol.for("react.portal"), - REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), - REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), - REACT_PROFILER_TYPE = Symbol.for("react.profiler"), - REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), - REACT_CONTEXT_TYPE = Symbol.for("react.context"), - REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), - REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), - REACT_MEMO_TYPE = Symbol.for("react.memo"), - REACT_LAZY_TYPE = Symbol.for("react.lazy"), - REACT_ACTIVITY_TYPE = Symbol.for("react.activity"), - MAYBE_ITERATOR_SYMBOL = Symbol.iterator; -function getIteratorFn(maybeIterable) { - if (null === maybeIterable || "object" !== typeof maybeIterable) return null; - maybeIterable = - (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) || - maybeIterable["@@iterator"]; - return "function" === typeof maybeIterable ? maybeIterable : null; -} -var ReactNoopUpdateQueue = { - isMounted: function () { - return !1; - }, - enqueueForceUpdate: function () {}, - enqueueReplaceState: function () {}, - enqueueSetState: function () {} - }, - assign = Object.assign, - emptyObject = {}; -function Component(props, context, updater) { - this.props = props; - this.context = context; - this.refs = emptyObject; - this.updater = updater || ReactNoopUpdateQueue; -} -Component.prototype.isReactComponent = {}; -Component.prototype.setState = function (partialState, callback) { - if ( - "object" !== typeof partialState && - "function" !== typeof partialState && - null != partialState - ) - throw Error( - "takes an object of state variables to update or a function which returns an object of state variables." - ); - this.updater.enqueueSetState(this, partialState, callback, "setState"); -}; -Component.prototype.forceUpdate = function (callback) { - this.updater.enqueueForceUpdate(this, callback, "forceUpdate"); -}; -function ComponentDummy() {} -ComponentDummy.prototype = Component.prototype; -function PureComponent(props, context, updater) { - this.props = props; - this.context = context; - this.refs = emptyObject; - this.updater = updater || ReactNoopUpdateQueue; -} -var pureComponentPrototype = (PureComponent.prototype = new ComponentDummy()); -pureComponentPrototype.constructor = PureComponent; -assign(pureComponentPrototype, Component.prototype); -pureComponentPrototype.isPureReactComponent = !0; -var isArrayImpl = Array.isArray; -function noop() {} -var ReactSharedInternals = { H: null, A: null, T: null, S: null }, - hasOwnProperty = Object.prototype.hasOwnProperty; -function ReactElement(type, key, props) { - var refProp = props.ref; - return { - $$typeof: REACT_ELEMENT_TYPE, - type: type, - key: key, - ref: void 0 !== refProp ? refProp : null, - props: props - }; -} -function cloneAndReplaceKey(oldElement, newKey) { - return ReactElement(oldElement.type, newKey, oldElement.props); -} -function isValidElement(object) { - return ( - "object" === typeof object && - null !== object && - object.$$typeof === REACT_ELEMENT_TYPE - ); -} -function escape(key) { - var escaperLookup = { "=": "=0", ":": "=2" }; - return ( - "$" + - key.replace(/[=:]/g, function (match) { - return escaperLookup[match]; - }) - ); -} -var userProvidedKeyEscapeRegex = /\/+/g; -function getElementKey(element, index) { - return "object" === typeof element && null !== element && null != element.key - ? escape("" + element.key) - : index.toString(36); -} -function resolveThenable(thenable) { - switch (thenable.status) { - case "fulfilled": - return thenable.value; - case "rejected": - throw thenable.reason; - default: - switch ( - ("string" === typeof thenable.status - ? thenable.then(noop, noop) - : ((thenable.status = "pending"), - thenable.then( - function (fulfilledValue) { - "pending" === thenable.status && - ((thenable.status = "fulfilled"), - (thenable.value = fulfilledValue)); - }, - function (error) { - "pending" === thenable.status && - ((thenable.status = "rejected"), (thenable.reason = error)); - } - )), - thenable.status) - ) { - case "fulfilled": - return thenable.value; - case "rejected": - throw thenable.reason; - } - } - throw thenable; -} -function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) { - var type = typeof children; - if ("undefined" === type || "boolean" === type) children = null; - var invokeCallback = !1; - if (null === children) invokeCallback = !0; - else - switch (type) { - case "bigint": - case "string": - case "number": - invokeCallback = !0; - break; - case "object": - switch (children.$$typeof) { - case REACT_ELEMENT_TYPE: - case REACT_PORTAL_TYPE: - invokeCallback = !0; - break; - case REACT_LAZY_TYPE: - return ( - (invokeCallback = children._init), - mapIntoArray( - invokeCallback(children._payload), - array, - escapedPrefix, - nameSoFar, - callback - ) - ); - } - } - if (invokeCallback) - return ( - (callback = callback(children)), - (invokeCallback = - "" === nameSoFar ? "." + getElementKey(children, 0) : nameSoFar), - isArrayImpl(callback) - ? ((escapedPrefix = ""), - null != invokeCallback && - (escapedPrefix = - invokeCallback.replace(userProvidedKeyEscapeRegex, "$&/") + "/"), - mapIntoArray(callback, array, escapedPrefix, "", function (c) { - return c; - })) - : null != callback && - (isValidElement(callback) && - (callback = cloneAndReplaceKey( - callback, - escapedPrefix + - (null == callback.key || - (children && children.key === callback.key) - ? "" - : ("" + callback.key).replace( - userProvidedKeyEscapeRegex, - "$&/" - ) + "/") + - invokeCallback - )), - array.push(callback)), - 1 - ); - invokeCallback = 0; - var nextNamePrefix = "" === nameSoFar ? "." : nameSoFar + ":"; - if (isArrayImpl(children)) - for (var i = 0; i < children.length; i++) - (nameSoFar = children[i]), - (type = nextNamePrefix + getElementKey(nameSoFar, i)), - (invokeCallback += mapIntoArray( - nameSoFar, - array, - escapedPrefix, - type, - callback - )); - else if (((i = getIteratorFn(children)), "function" === typeof i)) - for ( - children = i.call(children), i = 0; - !(nameSoFar = children.next()).done; - - ) - (nameSoFar = nameSoFar.value), - (type = nextNamePrefix + getElementKey(nameSoFar, i++)), - (invokeCallback += mapIntoArray( - nameSoFar, - array, - escapedPrefix, - type, - callback - )); - else if ("object" === type) { - if ("function" === typeof children.then) - return mapIntoArray( - resolveThenable(children), - array, - escapedPrefix, - nameSoFar, - callback - ); - array = String(children); - throw Error( - "Objects are not valid as a React child (found: " + - ("[object Object]" === array - ? "object with keys {" + Object.keys(children).join(", ") + "}" - : array) + - "). If you meant to render a collection of children, use an array instead." - ); - } - return invokeCallback; -} -function mapChildren(children, func, context) { - if (null == children) return children; - var result = [], - count = 0; - mapIntoArray(children, result, "", "", function (child) { - return func.call(context, child, count++); - }); - return result; -} -function lazyInitializer(payload) { - if (-1 === payload._status) { - var ctor = payload._result; - ctor = ctor(); - ctor.then( - function (moduleObject) { - if (0 === payload._status || -1 === payload._status) - (payload._status = 1), (payload._result = moduleObject); - }, - function (error) { - if (0 === payload._status || -1 === payload._status) - (payload._status = 2), (payload._result = error); - } - ); - -1 === payload._status && ((payload._status = 0), (payload._result = ctor)); - } - if (1 === payload._status) return payload._result.default; - throw payload._result; -} -var reportGlobalError = - "function" === typeof reportError - ? reportError - : function (error) { - if ( - "object" === typeof window && - "function" === typeof window.ErrorEvent - ) { - var event = new window.ErrorEvent("error", { - bubbles: !0, - cancelable: !0, - message: - "object" === typeof error && - null !== error && - "string" === typeof error.message - ? String(error.message) - : String(error), - error: error - }); - if (!window.dispatchEvent(event)) return; - } else if ( - "object" === typeof process && - "function" === typeof process.emit - ) { - process.emit("uncaughtException", error); - return; - } - console.error(error); - }, - Children = { - map: mapChildren, - forEach: function (children, forEachFunc, forEachContext) { - mapChildren( - children, - function () { - forEachFunc.apply(this, arguments); - }, - forEachContext - ); - }, - count: function (children) { - var n = 0; - mapChildren(children, function () { - n++; - }); - return n; - }, - toArray: function (children) { - return ( - mapChildren(children, function (child) { - return child; - }) || [] - ); - }, - only: function (children) { - if (!isValidElement(children)) - throw Error( - "React.Children.only expected to receive a single React element child." - ); - return children; - } - }; -exports.Activity = REACT_ACTIVITY_TYPE; -exports.Children = Children; -exports.Component = Component; -exports.Fragment = REACT_FRAGMENT_TYPE; -exports.Profiler = REACT_PROFILER_TYPE; -exports.PureComponent = PureComponent; -exports.StrictMode = REACT_STRICT_MODE_TYPE; -exports.Suspense = REACT_SUSPENSE_TYPE; -exports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = - ReactSharedInternals; -exports.__COMPILER_RUNTIME = { - __proto__: null, - c: function (size) { - return ReactSharedInternals.H.useMemoCache(size); - } -}; -exports.cache = function (fn) { - return function () { - return fn.apply(null, arguments); - }; -}; -exports.cacheSignal = function () { - return null; -}; -exports.cloneElement = function (element, config, children) { - if (null === element || void 0 === element) - throw Error( - "The argument must be a React element, but you passed " + element + "." - ); - var props = assign({}, element.props), - key = element.key; - if (null != config) - for (propName in (void 0 !== config.key && (key = "" + config.key), config)) - !hasOwnProperty.call(config, propName) || - "key" === propName || - "__self" === propName || - "__source" === propName || - ("ref" === propName && void 0 === config.ref) || - (props[propName] = config[propName]); - var propName = arguments.length - 2; - if (1 === propName) props.children = children; - else if (1 < propName) { - for (var childArray = Array(propName), i = 0; i < propName; i++) - childArray[i] = arguments[i + 2]; - props.children = childArray; - } - return ReactElement(element.type, key, props); -}; -exports.createContext = function (defaultValue) { - defaultValue = { - $$typeof: REACT_CONTEXT_TYPE, - _currentValue: defaultValue, - _currentValue2: defaultValue, - _threadCount: 0, - Provider: null, - Consumer: null - }; - defaultValue.Provider = defaultValue; - defaultValue.Consumer = { - $$typeof: REACT_CONSUMER_TYPE, - _context: defaultValue - }; - return defaultValue; -}; -exports.createElement = function (type, config, children) { - var propName, - props = {}, - key = null; - if (null != config) - for (propName in (void 0 !== config.key && (key = "" + config.key), config)) - hasOwnProperty.call(config, propName) && - "key" !== propName && - "__self" !== propName && - "__source" !== propName && - (props[propName] = config[propName]); - var childrenLength = arguments.length - 2; - if (1 === childrenLength) props.children = children; - else if (1 < childrenLength) { - for (var childArray = Array(childrenLength), i = 0; i < childrenLength; i++) - childArray[i] = arguments[i + 2]; - props.children = childArray; - } - if (type && type.defaultProps) - for (propName in ((childrenLength = type.defaultProps), childrenLength)) - void 0 === props[propName] && - (props[propName] = childrenLength[propName]); - return ReactElement(type, key, props); -}; -exports.createRef = function () { - return { current: null }; -}; -exports.forwardRef = function (render) { - return { $$typeof: REACT_FORWARD_REF_TYPE, render: render }; -}; -exports.isValidElement = isValidElement; -exports.lazy = function (ctor) { - return { - $$typeof: REACT_LAZY_TYPE, - _payload: { _status: -1, _result: ctor }, - _init: lazyInitializer - }; -}; -exports.memo = function (type, compare) { - return { - $$typeof: REACT_MEMO_TYPE, - type: type, - compare: void 0 === compare ? null : compare - }; -}; -exports.startTransition = function (scope) { - var prevTransition = ReactSharedInternals.T, - currentTransition = {}; - ReactSharedInternals.T = currentTransition; - try { - var returnValue = scope(), - onStartTransitionFinish = ReactSharedInternals.S; - null !== onStartTransitionFinish && - onStartTransitionFinish(currentTransition, returnValue); - "object" === typeof returnValue && - null !== returnValue && - "function" === typeof returnValue.then && - returnValue.then(noop, reportGlobalError); - } catch (error) { - reportGlobalError(error); - } finally { - null !== prevTransition && - null !== currentTransition.types && - (prevTransition.types = currentTransition.types), - (ReactSharedInternals.T = prevTransition); - } -}; -exports.unstable_useCacheRefresh = function () { - return ReactSharedInternals.H.useCacheRefresh(); -}; -exports.use = function (usable) { - return ReactSharedInternals.H.use(usable); -}; -exports.useActionState = function (action, initialState, permalink) { - return ReactSharedInternals.H.useActionState(action, initialState, permalink); -}; -exports.useCallback = function (callback, deps) { - return ReactSharedInternals.H.useCallback(callback, deps); -}; -exports.useContext = function (Context) { - return ReactSharedInternals.H.useContext(Context); -}; -exports.useDebugValue = function () {}; -exports.useDeferredValue = function (value, initialValue) { - return ReactSharedInternals.H.useDeferredValue(value, initialValue); -}; -exports.useEffect = function (create, deps) { - return ReactSharedInternals.H.useEffect(create, deps); -}; -exports.useEffectEvent = function (callback) { - return ReactSharedInternals.H.useEffectEvent(callback); -}; -exports.useId = function () { - return ReactSharedInternals.H.useId(); -}; -exports.useImperativeHandle = function (ref, create, deps) { - return ReactSharedInternals.H.useImperativeHandle(ref, create, deps); -}; -exports.useInsertionEffect = function (create, deps) { - return ReactSharedInternals.H.useInsertionEffect(create, deps); -}; -exports.useLayoutEffect = function (create, deps) { - return ReactSharedInternals.H.useLayoutEffect(create, deps); -}; -exports.useMemo = function (create, deps) { - return ReactSharedInternals.H.useMemo(create, deps); -}; -exports.useOptimistic = function (passthrough, reducer) { - return ReactSharedInternals.H.useOptimistic(passthrough, reducer); -}; -exports.useReducer = function (reducer, initialArg, init) { - return ReactSharedInternals.H.useReducer(reducer, initialArg, init); -}; -exports.useRef = function (initialValue) { - return ReactSharedInternals.H.useRef(initialValue); -}; -exports.useState = function (initialState) { - return ReactSharedInternals.H.useState(initialState); -}; -exports.useSyncExternalStore = function ( - subscribe, - getSnapshot, - getServerSnapshot -) { - return ReactSharedInternals.H.useSyncExternalStore( - subscribe, - getSnapshot, - getServerSnapshot - ); -}; -exports.useTransition = function () { - return ReactSharedInternals.H.useTransition(); -}; -exports.version = "19.2.3"; - - -/***/ }, - -/***/ 9907 -(module) { - -// Exports -module.exports = { - "dropdownNavbarItemMobile": `dropdownNavbarItemMobile_J0Sd` -}; - - -/***/ }, - -/***/ 9978 -(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ A: () => (/* binding */ DocBreadcrumbs) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4164); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7559); -/* harmony import */ var _docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6972); -/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(9169); -/* harmony import */ var _docusaurus_Link__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(8774); -/* harmony import */ var _docusaurus_Translate__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(986); -/* harmony import */ var _theme_DocBreadcrumbs_Items_Home__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(1737); -/* harmony import */ var _theme_DocBreadcrumbs_StructuredData__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(3956); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(3928); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_9__); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(4848); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// TODO move to design system folder -function BreadcrumbsItemLink({children,href,isLast}){const className='breadcrumbs__link';if(isLast){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("span",{className:className,children:children});}return href?/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_docusaurus_Link__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A,{className:className,href:href,children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("span",{children:children})}):/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("span",{className:className,children:children});}// TODO move to design system folder -function BreadcrumbsItem({children,active}){return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("li",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)('breadcrumbs__item',{'breadcrumbs__item--active':active}),children:children});}function DocBreadcrumbs(){const breadcrumbs=(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_3__/* .useSidebarBreadcrumbs */ .OF)();const homePageRoute=(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_4__/* .useHomePageRoute */ .Dt)();if(!breadcrumbs){return null;}return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.Fragment,{children:[/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_theme_DocBreadcrumbs_StructuredData__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .A,{breadcrumbs:breadcrumbs}),/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("nav",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__/* .ThemeClassNames */ .G.docs.docBreadcrumbs,(_styles_module_css__WEBPACK_IMPORTED_MODULE_9___default().breadcrumbsContainer)),"aria-label":(0,_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_6__/* .translate */ .T)({id:'theme.docs.breadcrumbs.navAriaLabel',message:'Breadcrumbs',description:'The ARIA label for the breadcrumbs'}),children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("ul",{className:"breadcrumbs",children:[homePageRoute&&/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_theme_DocBreadcrumbs_Items_Home__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A,{}),breadcrumbs.map((item,idx)=>{const isLast=idx===breadcrumbs.length-1;const href=item.type==='category'&&item.linkUnlisted?undefined:item.href;return/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(BreadcrumbsItem,{active:isLast,children:/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(BreadcrumbsItemLink,{href:href,isLast:isLast,children:item.label})},idx);})]})})]});} - -/***/ } - -/******/ }); -/************************************************************************/ -/******/ // The module cache -/******/ var __webpack_module_cache__ = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ // Check if module is in cache -/******/ var cachedModule = __webpack_module_cache__[moduleId]; -/******/ if (cachedModule !== undefined) { -/******/ return cachedModule.exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = __webpack_module_cache__[moduleId] = { -/******/ id: moduleId, -/******/ loaded: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.loaded = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = __webpack_modules__; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = __webpack_module_cache__; -/******/ -/************************************************************************/ -/******/ /* webpack/runtime/compat get default export */ -/******/ (() => { -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = (module) => { -/******/ var getter = module && module.__esModule ? -/******/ () => (module['default']) : -/******/ () => (module); -/******/ __webpack_require__.d(getter, { a: getter }); -/******/ return getter; -/******/ }; -/******/ })(); -/******/ -/******/ /* webpack/runtime/define property getters */ -/******/ (() => { -/******/ // define getter functions for harmony exports -/******/ __webpack_require__.d = (exports, definition) => { -/******/ for(var key in definition) { -/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { -/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); -/******/ } -/******/ } -/******/ }; -/******/ })(); -/******/ -/******/ /* webpack/runtime/hasOwnProperty shorthand */ -/******/ (() => { -/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) -/******/ })(); -/******/ -/******/ /* webpack/runtime/make namespace object */ -/******/ (() => { -/******/ // define __esModule on exports -/******/ __webpack_require__.r = (exports) => { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ })(); -/******/ -/************************************************************************/ -/******/ -/******/ // module factories are used so entry inlining is disabled -/******/ // startup -/******/ // Load entry module and return exports -/******/ var __webpack_exports__ = __webpack_require__(4905); -/******/ module.exports = __webpack_exports__; -/******/ -/******/ })() -; \ No newline at end of file diff --git a/architecture/index.html b/architecture/index.html index dbff35f..9a10703 100644 --- a/architecture/index.html +++ b/architecture/index.html @@ -4,7 +4,7 @@ <meta charset="UTF-8"> <meta name="generator" content="Docusaurus v3.9.2"> <title data-rh="true">CmdForge Architecture | CmdForge - + diff --git a/assets/js/de715384.c9cc7bb3.js b/assets/js/de715384.c9cc7bb3.js deleted file mode 100644 index 7407b73..0000000 --- a/assets/js/de715384.c9cc7bb3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(globalThis.webpackChunkproject_public_docs=globalThis.webpackChunkproject_public_docs||[]).push([[746],{7921(e,n,s){s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>i,default:()=>p,frontMatter:()=>l,metadata:()=>t,toc:()=>c});const t=JSON.parse('{"id":"reference/examples","title":"Example Tools","description":"CmdForge comes with 28 pre-built tools. This document shows their configurations and usage.","source":"@site/docs/reference/examples.md","sourceDirName":"reference","slug":"/reference/examples","permalink":"/rob/CmdForge/reference/examples","draft":false,"unlisted":false,"tags":[],"version":"current","sidebarPosition":4,"frontMatter":{"sidebar_label":"Example Tools","sidebar_position":4,"format":"md"},"sidebar":"docs","previous":{"title":"Collections","permalink":"/rob/CmdForge/reference/collections"},"next":{"title":"Design Philosophy","permalink":"/rob/CmdForge/reference/design"}}');var r=s(4848),a=s(8453);const l={sidebar_label:"Example Tools",sidebar_position:4,format:"md"},i="Example Tools",o={},c=[{value:"Quick Install",id:"quick-install",level:2},{value:"Text Processing Tools",id:"text-processing-tools",level:2},{value:"summarize",id:"summarize",level:3},{value:"translate",id:"translate",level:3},{value:"fix-grammar",id:"fix-grammar",level:3},{value:"simplify",id:"simplify",level:3},{value:"tone-shift",id:"tone-shift",level:3},{value:"eli5",id:"eli5",level:3},{value:"tldr",id:"tldr",level:3},{value:"expand",id:"expand",level:3},{value:"Developer Tools",id:"developer-tools",level:2},{value:"explain-error",id:"explain-error",level:3},{value:"explain-code",id:"explain-code",level:3},{value:"review-code",id:"review-code",level:3},{value:"gen-tests",id:"gen-tests",level:3},{value:"docstring",id:"docstring",level:3},{value:"commit-msg",id:"commit-msg",level:3},{value:"Data Tools",id:"data-tools",level:2},{value:"json-extract",id:"json-extract",level:3},{value:"sql-from-text",id:"sql-from-text",level:3},{value:"Advanced Multi-Step Tools",id:"advanced-multi-step-tools",level:2},{value:"log-errors",id:"log-errors",level:3},{value:"diff-focus",id:"diff-focus",level:3},{value:"Pipeline Recipes",id:"pipeline-recipes",level:2},{value:"Development Workflows",id:"development-workflows",level:3},{value:"Data Processing",id:"data-processing",level:3},{value:"Text Processing Pipelines",id:"text-processing-pipelines",level:3},{value:"Shell Functions",id:"shell-functions",level:3}];function d(e){const n={code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",hr:"hr",p:"p",pre:"pre",strong:"strong",...(0,a.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"example-tools",children:"Example Tools"})}),"\n",(0,r.jsx)(n.p,{children:"CmdForge comes with 28 pre-built tools. This document shows their configurations and usage."}),"\n",(0,r.jsx)(n.h2,{id:"quick-install",children:"Quick Install"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"# Install all example tools (from the CmdForge directory)\npython examples/install.py\ncmdforge refresh\n\n# Or install from anywhere\ncurl -sSL https://gitea.brrd.tech/rob/cmdforge/raw/branch/main/examples/install.py | python3\n"})}),"\n",(0,r.jsx)(n.h2,{id:"text-processing-tools",children:"Text Processing Tools"}),"\n",(0,r.jsx)(n.h3,{id:"summarize",children:"summarize"}),"\n",(0,r.jsx)(n.p,{children:"Condense long documents to key points."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'name: summarize\ndescription: Condense long documents to key points\narguments:\n - flag: --length\n variable: length\n default: "3-5 bullet points"\nsteps:\n - type: prompt\n prompt: |\n Summarize the following text into {length}. Be concise and capture the key points:\n\n {input}\n provider: opencode-pickle\n output_var: response\noutput: "{response}"\n'})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Usage:"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'cat article.txt | summarize\ncat book.txt | summarize --length "10 bullet points"\n'})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h3,{id:"translate",children:"translate"}),"\n",(0,r.jsx)(n.p,{children:"Translate text to any language."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'name: translate\ndescription: Translate text to any language\narguments:\n - flag: --lang\n variable: lang\n default: Spanish\nsteps:\n - type: prompt\n prompt: |\n Translate the following text to {lang}. Only output the translation, nothing else:\n\n {input}\n provider: claude-haiku\n output_var: response\noutput: "{response}"\n'})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Usage:"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'echo "Hello, world!" | translate --lang French\ncat readme.md | translate --lang Japanese\n'})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h3,{id:"fix-grammar",children:"fix-grammar"}),"\n",(0,r.jsx)(n.p,{children:"Fix grammar and spelling errors."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'name: fix-grammar\ndescription: Fix grammar and spelling errors\narguments: []\nsteps:\n - type: prompt\n prompt: |\n Fix all grammar, spelling, and punctuation errors in the following text. Only output the corrected text, no explanations:\n\n {input}\n provider: opencode-deepseek\n output_var: response\noutput: "{response}"\n'})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Usage:"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'echo "teh cat sat on teh mat" | fix-grammar\ncat draft.txt | fix-grammar > fixed.txt\n'})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h3,{id:"simplify",children:"simplify"}),"\n",(0,r.jsx)(n.p,{children:"Rewrite text for easier understanding."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'name: simplify\ndescription: Rewrite text for easier understanding\narguments:\n - flag: --level\n variable: level\n default: "5th grade reading level"\nsteps:\n - type: prompt\n prompt: |\n Rewrite the following text for a {level}. Keep the meaning but use simpler words and shorter sentences:\n\n {input}\n provider: opencode-pickle\n output_var: response\noutput: "{response}"\n'})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Usage:"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'cat legal_document.txt | simplify\ncat technical.md | simplify --level "non-technical reader"\n'})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h3,{id:"tone-shift",children:"tone-shift"}),"\n",(0,r.jsx)(n.p,{children:"Change the tone of text."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'name: tone-shift\ndescription: Change the tone of text\narguments:\n - flag: --tone\n variable: tone\n default: professional\nsteps:\n - type: prompt\n prompt: |\n Rewrite the following text in a {tone} tone. Keep the core message but adjust the style:\n\n {input}\n provider: opencode-deepseek\n output_var: response\noutput: "{response}"\n'})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Usage:"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'cat angry_email.txt | tone-shift --tone "calm and professional"\ncat casual_note.txt | tone-shift --tone formal\n'})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h3,{id:"eli5",children:"eli5"}),"\n",(0,r.jsx)(n.p,{children:"Explain like I'm 5."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"name: eli5\ndescription: Explain like I'm 5\narguments: []\nsteps:\n - type: prompt\n prompt: |\n Explain this like I'm 5 years old. Use simple words and fun analogies:\n\n {input}\n provider: opencode-pickle\n output_var: response\noutput: \"{response}\"\n"})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Usage:"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'echo "What is quantum computing?" | eli5\ncat whitepaper.txt | eli5\n'})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h3,{id:"tldr",children:"tldr"}),"\n",(0,r.jsx)(n.p,{children:"One-line summary."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'name: tldr\ndescription: One-line summary\narguments: []\nsteps:\n - type: prompt\n prompt: |\n Give a one-line TL;DR summary of this text:\n\n {input}\n provider: opencode-grok\n output_var: response\noutput: "{response}"\n'})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Usage:"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"cat long_article.txt | tldr\ncurl -s https://example.com | tldr\n"})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h3,{id:"expand",children:"expand"}),"\n",(0,r.jsx)(n.p,{children:"Expand bullet points to paragraphs."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'name: expand\ndescription: Expand bullet points to paragraphs\narguments: []\nsteps:\n - type: prompt\n prompt: |\n Expand these bullet points into well-written paragraphs:\n\n {input}\n provider: opencode-pickle\n output_var: response\noutput: "{response}"\n'})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Usage:"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'cat notes.txt | expand\necho "- Fast\\n- Reliable\\n- Easy to use" | expand\n'})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"developer-tools",children:"Developer Tools"}),"\n",(0,r.jsx)(n.h3,{id:"explain-error",children:"explain-error"}),"\n",(0,r.jsx)(n.p,{children:"Explain error messages and stack traces."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'name: explain-error\ndescription: Explain error messages and stack traces\narguments: []\nsteps:\n - type: prompt\n prompt: |\n Explain this error/stack trace in plain English. What went wrong and how to fix it:\n\n {input}\n provider: claude-haiku\n output_var: response\noutput: "{response}"\n'})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Usage:"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"cat error.log | explain-error\npython script.py 2>&1 | explain-error\n"})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h3,{id:"explain-code",children:"explain-code"}),"\n",(0,r.jsx)(n.p,{children:"Explain what code does."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"name: explain-code\ndescription: Explain what code does\narguments:\n - flag: --detail\n variable: detail\n default: moderate\nsteps:\n - type: prompt\n prompt: |\n Explain what this code does at a {detail} level of detail:\n\n"})}),"\n",input,"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:'provider: opencode-pickle\noutput_var: response\noutput: "{response}"\n'})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Usage:"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'cat script.py | explain-code\ncat complex.js | explain-code --detail "very detailed"\n'})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h3,{id:"review-code",children:"review-code"}),"\n",(0,r.jsx)(n.p,{children:"Quick code review with suggestions."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'name: review-code\ndescription: Quick code review with suggestions\narguments:\n - flag: --focus\n variable: focus\n default: "bugs, security, and improvements"\nsteps:\n - type: prompt\n prompt: |\n Review this code focusing on {focus}. Be concise and actionable:\n\n'})}),"\n",input,"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:'provider: claude-sonnet\noutput_var: response\noutput: "{response}"\n'})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Usage:"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'cat pull_request.diff | review-code\ncat auth.py | review-code --focus "security vulnerabilities"\n'})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h3,{id:"gen-tests",children:"gen-tests"}),"\n",(0,r.jsx)(n.p,{children:"Generate unit tests for code."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"name: gen-tests\ndescription: Generate unit tests for code\narguments:\n - flag: --framework\n variable: framework\n default: pytest\nsteps:\n - type: prompt\n prompt: |\n Generate comprehensive unit tests for this code using {framework}. Include edge cases:\n\n"})}),"\n",input,"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:'provider: claude-haiku\noutput_var: response\noutput: "{response}"\n'})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Usage:"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"cat utils.py | gen-tests\ncat api.js | gen-tests --framework jest\n"})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h3,{id:"docstring",children:"docstring"}),"\n",(0,r.jsx)(n.p,{children:"Add docstrings to functions/classes."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"name: docstring\ndescription: Add docstrings to functions/classes\narguments:\n - flag: --style\n variable: style\n default: Google style\nsteps:\n - type: prompt\n prompt: |\n Add {style} docstrings to all functions and classes in this code. Output the complete code with docstrings:\n\n"})}),"\n",input,"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:'provider: opencode-deepseek\noutput_var: response\noutput: "{response}"\n'})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Usage:"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'cat module.py | docstring\ncat functions.py | docstring --style "NumPy style"\n'})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h3,{id:"commit-msg",children:"commit-msg"}),"\n",(0,r.jsx)(n.p,{children:"Generate commit message from diff."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'name: commit-msg\ndescription: Generate commit message from diff\narguments:\n - flag: --style\n variable: style\n default: conventional commits\nsteps:\n - type: prompt\n prompt: |\n Generate a concise {style} commit message for this diff. Just the message, no explanation:\n\n {input}\n provider: opencode-pickle\n output_var: response\noutput: "{response}"\n'})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Usage:"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'git diff --staged | commit-msg\ngit diff HEAD~1 | commit-msg --style "simple"\n'})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"data-tools",children:"Data Tools"}),"\n",(0,r.jsx)(n.h3,{id:"json-extract",children:"json-extract"}),"\n",(0,r.jsx)(n.p,{children:"Extract structured data as validated JSON."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"name: json-extract\ndescription: Extract structured data as validated JSON\narguments:\n - flag: --fields\n variable: fields\n default: any relevant fields\nsteps:\n - type: prompt\n prompt: |\n Extract {fields} from this text as a JSON object. Output ONLY valid JSON, no markdown, no explanation:\n\n {input}\n provider: opencode-deepseek\n output_var: raw_json\n - type: code\n code: |\n import json\n import re\n text = raw_json.strip()\n text = re.sub(r'^```json?\\s*', '', text)\n text = re.sub(r'\\s*```$', '', text)\n try:\n parsed = json.loads(text)\n validated = json.dumps(parsed, indent=2)\n except json.JSONDecodeError as e:\n validated = f\"ERROR: Invalid JSON - {e}\\nRaw output: {text[:500]}\"\n output_var: validated\noutput: \"{validated}\"\n"})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Usage:"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'echo "Price $49.99, SKU ABC-123" | json-extract --fields "price, sku"\ncat invoice.txt | json-extract --fields "total, date, items"\n'})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h3,{id:"sql-from-text",children:"sql-from-text"}),"\n",(0,r.jsx)(n.p,{children:"Generate SQL from natural language."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'name: sql-from-text\ndescription: Generate SQL from natural language\narguments:\n - flag: --dialect\n variable: dialect\n default: PostgreSQL\nsteps:\n - type: prompt\n prompt: |\n Generate a {dialect} SQL query for this request. Output only the SQL, no explanation:\n\n {input}\n provider: claude-haiku\n output_var: response\noutput: "{response}"\n'})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Usage:"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'echo "get all users who signed up last month" | sql-from-text\necho "count orders by status" | sql-from-text --dialect MySQL\n'})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"advanced-multi-step-tools",children:"Advanced Multi-Step Tools"}),"\n",(0,r.jsx)(n.h3,{id:"log-errors",children:"log-errors"}),"\n",(0,r.jsx)(n.p,{children:"Extract and explain errors from large log files."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"name: log-errors\ndescription: Extract and explain errors from large log files\narguments: []\nsteps:\n - type: code\n code: |\n import re\n lines = input.split('\\n')\n result = []\n for i, line in enumerate(lines):\n if re.search(r'\\b(ERROR|CRITICAL|FATAL|Exception|Traceback)\\b', line, re.I):\n result.extend(lines[i:i+5])\n extracted = '\\n'.join(result[:200])\n output_var: extracted\n - type: prompt\n prompt: |\n Analyze these error log entries. Group by error type, explain likely causes, and suggest fixes:\n\n {extracted}\n provider: claude-haiku\n output_var: response\noutput: \"{response}\"\n"})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Usage:"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"cat huge_app.log | log-errors\nzcat archived.log.gz | log-errors\n"})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h3,{id:"diff-focus",children:"diff-focus"}),"\n",(0,r.jsx)(n.p,{children:"Review only the added/changed code in a diff."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"name: diff-focus\ndescription: Review only the added/changed code in a diff\narguments: []\nsteps:\n - type: code\n code: |\n lines = input.split('\\n')\n result = []\n for i, line in enumerate(lines):\n if line.startswith('@@') or line.startswith('+++') or line.startswith('---'):\n result.append(line)\n elif line.startswith('+') and not line.startswith('+++'):\n result.append(line)\n extracted = '\\n'.join(result)\n output_var: extracted\n - type: prompt\n prompt: |\n Review these added lines of code. Focus on bugs, security issues, and improvements:\n\n {extracted}\n provider: claude-haiku\n output_var: response\noutput: \"{response}\"\n"})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Usage:"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"git diff | diff-focus\ngit diff HEAD~5 | diff-focus\n"})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"pipeline-recipes",children:"Pipeline Recipes"}),"\n",(0,r.jsx)(n.p,{children:"CmdForge tools chain together like Unix commands:"}),"\n",(0,r.jsx)(n.h3,{id:"development-workflows",children:"Development Workflows"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"# Quick PR review: extract changes, review, summarize\ngit diff main | diff-focus | review-code --focus \"bugs and security\" | tldr\n\n# Explain and fix an error in one pipeline\npython script.py 2>&1 | explain-error | tee error_analysis.txt\n\n# Generate tests for changed files only\ngit diff --name-only | grep '\\.py$' | xargs cat | gen-tests > new_tests.py\n\n# Create release notes from commits\ngit log v1.0..v1.1 --oneline | changelog | translate --lang French > RELEASE_FR.md\n"})}),"\n",(0,r.jsx)(n.h3,{id:"data-processing",children:"Data Processing"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'# Extract, transform, analyze\ncurl -s api.example.com/data | json-extract --fields "users, revenue" | json2csv | csv-insights\n\n# Process multiple files\nfor f in reports/*.txt; do\n cat "$f" | json-extract --fields "total, date"\ndone | json2csv > summary.csv\n'})}),"\n",(0,r.jsx)(n.h3,{id:"text-processing-pipelines",children:"Text Processing Pipelines"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'# Translate technical docs for international team\ncat API.md | simplify --level "non-technical" | translate --lang Spanish > API_ES.md\n\n# Process customer feedback\ncat feedback.txt | summarize --length "10 points" | tone-shift --tone analytical\n'})}),"\n",(0,r.jsx)(n.h3,{id:"shell-functions",children:"Shell Functions"}),"\n",(0,r.jsxs)(n.p,{children:["Add to ",(0,r.jsx)(n.code,{children:"~/.bashrc"})," for common workflows:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'# Review recent changes\nreview-recent() {\n git diff HEAD~"${1:-1}" | diff-focus | review-code | tldr\n}\n\n# Quick translate with summary\ntranslate-summary() {\n cat "$1" | summarize | translate --lang "${2:-Spanish}"\n}\n\n# Generate commit message and commit\nauto-commit() {\n msg=$(git diff --staged | commit-msg)\n echo "Commit message: $msg"\n read -p "Commit? [y/N] " confirm\n [[ $confirm == [yY] ]] && git commit -m "$msg"\n}\n'})})]})}function p(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},8453(e,n,s){s.d(n,{R:()=>l,x:()=>i});var t=s(6540);const r={},a=t.createContext(r);function l(e){const n=t.useContext(a);return t.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/de715384.f1197b74.js b/assets/js/de715384.f1197b74.js new file mode 100644 index 0000000..444437a --- /dev/null +++ b/assets/js/de715384.f1197b74.js @@ -0,0 +1 @@ +"use strict";(globalThis.webpackChunkproject_public_docs=globalThis.webpackChunkproject_public_docs||[]).push([[746],{7921(e,n,s){s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>i,default:()=>p,frontMatter:()=>l,metadata:()=>t,toc:()=>c});const t=JSON.parse('{"id":"reference/examples","title":"Example Tools","description":"CmdForge comes with 28 pre-built tools. This document shows their configurations and usage.","source":"@site/docs/reference/examples.md","sourceDirName":"reference","slug":"/reference/examples","permalink":"/rob/CmdForge/reference/examples","draft":false,"unlisted":false,"tags":[],"version":"current","sidebarPosition":4,"frontMatter":{"sidebar_label":"Example Tools","sidebar_position":4,"format":"md"},"sidebar":"docs","previous":{"title":"Collections","permalink":"/rob/CmdForge/reference/collections"},"next":{"title":"Design Philosophy","permalink":"/rob/CmdForge/reference/design"}}');var r=s(4848),a=s(8453);const l={sidebar_label:"Example Tools",sidebar_position:4,format:"md"},i="Example Tools",o={},c=[{value:"Quick Install",id:"quick-install",level:2},{value:"Text Processing Tools",id:"text-processing-tools",level:2},{value:"summarize",id:"summarize",level:3},{value:"translate",id:"translate",level:3},{value:"fix-grammar",id:"fix-grammar",level:3},{value:"simplify",id:"simplify",level:3},{value:"tone-shift",id:"tone-shift",level:3},{value:"eli5",id:"eli5",level:3},{value:"tldr",id:"tldr",level:3},{value:"expand",id:"expand",level:3},{value:"Developer Tools",id:"developer-tools",level:2},{value:"explain-error",id:"explain-error",level:3},{value:"explain-code",id:"explain-code",level:3},{value:"review-code",id:"review-code",level:3},{value:"gen-tests",id:"gen-tests",level:3},{value:"docstring",id:"docstring",level:3},{value:"commit-msg",id:"commit-msg",level:3},{value:"Data Tools",id:"data-tools",level:2},{value:"json-extract",id:"json-extract",level:3},{value:"sql-from-text",id:"sql-from-text",level:3},{value:"Advanced Multi-Step Tools",id:"advanced-multi-step-tools",level:2},{value:"log-errors",id:"log-errors",level:3},{value:"diff-focus",id:"diff-focus",level:3},{value:"Pipeline Recipes",id:"pipeline-recipes",level:2},{value:"Development Workflows",id:"development-workflows",level:3},{value:"Data Processing",id:"data-processing",level:3},{value:"Text Processing Pipelines",id:"text-processing-pipelines",level:3},{value:"Shell Functions",id:"shell-functions",level:3}];function d(e){const n={code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",hr:"hr",p:"p",pre:"pre",strong:"strong",...(0,a.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"example-tools",children:"Example Tools"})}),"\n",(0,r.jsx)(n.p,{children:"CmdForge comes with 28 pre-built tools. This document shows their configurations and usage."}),"\n",(0,r.jsx)(n.h2,{id:"quick-install",children:"Quick Install"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"# Install all example tools (from the CmdForge directory)\npython examples/install.py\ncmdforge refresh\n\n# Or install from anywhere\ncurl -sSL https://gitea.brrd.tech/rob/cmdforge/raw/branch/main/examples/install.py | python3\n"})}),"\n",(0,r.jsx)(n.h2,{id:"text-processing-tools",children:"Text Processing Tools"}),"\n",(0,r.jsx)(n.h3,{id:"summarize",children:"summarize"}),"\n",(0,r.jsx)(n.p,{children:"Condense long documents to key points."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'name: summarize\ndescription: Condense long documents to key points\narguments:\n - flag: --length\n variable: length\n default: "3-5 bullet points"\nsteps:\n - type: prompt\n prompt: |\n Summarize the following text into \\{length\\}. Be concise and capture the key points:\n\n \\{input\\}\n provider: opencode-pickle\n output_var: response\noutput: "\\{response\\}"\n'})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Usage:"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'cat article.txt | summarize\ncat book.txt | summarize --length "10 bullet points"\n'})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h3,{id:"translate",children:"translate"}),"\n",(0,r.jsx)(n.p,{children:"Translate text to any language."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'name: translate\ndescription: Translate text to any language\narguments:\n - flag: --lang\n variable: lang\n default: Spanish\nsteps:\n - type: prompt\n prompt: |\n Translate the following text to \\{lang\\}. Only output the translation, nothing else:\n\n \\{input\\}\n provider: claude-haiku\n output_var: response\noutput: "\\{response\\}"\n'})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Usage:"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'echo "Hello, world!" | translate --lang French\ncat readme.md | translate --lang Japanese\n'})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h3,{id:"fix-grammar",children:"fix-grammar"}),"\n",(0,r.jsx)(n.p,{children:"Fix grammar and spelling errors."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'name: fix-grammar\ndescription: Fix grammar and spelling errors\narguments: []\nsteps:\n - type: prompt\n prompt: |\n Fix all grammar, spelling, and punctuation errors in the following text. Only output the corrected text, no explanations:\n\n \\{input\\}\n provider: opencode-deepseek\n output_var: response\noutput: "\\{response\\}"\n'})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Usage:"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'echo "teh cat sat on teh mat" | fix-grammar\ncat draft.txt | fix-grammar > fixed.txt\n'})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h3,{id:"simplify",children:"simplify"}),"\n",(0,r.jsx)(n.p,{children:"Rewrite text for easier understanding."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'name: simplify\ndescription: Rewrite text for easier understanding\narguments:\n - flag: --level\n variable: level\n default: "5th grade reading level"\nsteps:\n - type: prompt\n prompt: |\n Rewrite the following text for a \\{level\\}. Keep the meaning but use simpler words and shorter sentences:\n\n \\{input\\}\n provider: opencode-pickle\n output_var: response\noutput: "\\{response\\}"\n'})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Usage:"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'cat legal_document.txt | simplify\ncat technical.md | simplify --level "non-technical reader"\n'})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h3,{id:"tone-shift",children:"tone-shift"}),"\n",(0,r.jsx)(n.p,{children:"Change the tone of text."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'name: tone-shift\ndescription: Change the tone of text\narguments:\n - flag: --tone\n variable: tone\n default: professional\nsteps:\n - type: prompt\n prompt: |\n Rewrite the following text in a \\{tone\\} tone. Keep the core message but adjust the style:\n\n \\{input\\}\n provider: opencode-deepseek\n output_var: response\noutput: "\\{response\\}"\n'})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Usage:"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'cat angry_email.txt | tone-shift --tone "calm and professional"\ncat casual_note.txt | tone-shift --tone formal\n'})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h3,{id:"eli5",children:"eli5"}),"\n",(0,r.jsx)(n.p,{children:"Explain like I'm 5."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"name: eli5\ndescription: Explain like I'm 5\narguments: []\nsteps:\n - type: prompt\n prompt: |\n Explain this like I'm 5 years old. Use simple words and fun analogies:\n\n \\{input\\}\n provider: opencode-pickle\n output_var: response\noutput: \"\\{response\\}\"\n"})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Usage:"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'echo "What is quantum computing?" | eli5\ncat whitepaper.txt | eli5\n'})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h3,{id:"tldr",children:"tldr"}),"\n",(0,r.jsx)(n.p,{children:"One-line summary."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'name: tldr\ndescription: One-line summary\narguments: []\nsteps:\n - type: prompt\n prompt: |\n Give a one-line TL;DR summary of this text:\n\n \\{input\\}\n provider: opencode-grok\n output_var: response\noutput: "\\{response\\}"\n'})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Usage:"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"cat long_article.txt | tldr\ncurl -s https://example.com | tldr\n"})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h3,{id:"expand",children:"expand"}),"\n",(0,r.jsx)(n.p,{children:"Expand bullet points to paragraphs."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'name: expand\ndescription: Expand bullet points to paragraphs\narguments: []\nsteps:\n - type: prompt\n prompt: |\n Expand these bullet points into well-written paragraphs:\n\n \\{input\\}\n provider: opencode-pickle\n output_var: response\noutput: "\\{response\\}"\n'})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Usage:"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'cat notes.txt | expand\necho "- Fast\\n- Reliable\\n- Easy to use" | expand\n'})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"developer-tools",children:"Developer Tools"}),"\n",(0,r.jsx)(n.h3,{id:"explain-error",children:"explain-error"}),"\n",(0,r.jsx)(n.p,{children:"Explain error messages and stack traces."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'name: explain-error\ndescription: Explain error messages and stack traces\narguments: []\nsteps:\n - type: prompt\n prompt: |\n Explain this error/stack trace in plain English. What went wrong and how to fix it:\n\n \\{input\\}\n provider: claude-haiku\n output_var: response\noutput: "\\{response\\}"\n'})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Usage:"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"cat error.log | explain-error\npython script.py 2>&1 | explain-error\n"})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h3,{id:"explain-code",children:"explain-code"}),"\n",(0,r.jsx)(n.p,{children:"Explain what code does."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"name: explain-code\ndescription: Explain what code does\narguments:\n - flag: --detail\n variable: detail\n default: moderate\nsteps:\n - type: prompt\n prompt: |\n Explain what this code does at a \\{detail\\} level of detail:\n\n"})}),"\n",(0,r.jsx)(n.p,{children:"{input}"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:'provider: opencode-pickle\noutput_var: response\noutput: "\\{response\\}"\n'})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Usage:"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'cat script.py | explain-code\ncat complex.js | explain-code --detail "very detailed"\n'})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h3,{id:"review-code",children:"review-code"}),"\n",(0,r.jsx)(n.p,{children:"Quick code review with suggestions."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'name: review-code\ndescription: Quick code review with suggestions\narguments:\n - flag: --focus\n variable: focus\n default: "bugs, security, and improvements"\nsteps:\n - type: prompt\n prompt: |\n Review this code focusing on \\{focus\\}. Be concise and actionable:\n\n'})}),"\n",(0,r.jsx)(n.p,{children:"{input}"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:'provider: claude-sonnet\noutput_var: response\noutput: "\\{response\\}"\n'})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Usage:"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'cat pull_request.diff | review-code\ncat auth.py | review-code --focus "security vulnerabilities"\n'})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h3,{id:"gen-tests",children:"gen-tests"}),"\n",(0,r.jsx)(n.p,{children:"Generate unit tests for code."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"name: gen-tests\ndescription: Generate unit tests for code\narguments:\n - flag: --framework\n variable: framework\n default: pytest\nsteps:\n - type: prompt\n prompt: |\n Generate comprehensive unit tests for this code using \\{framework\\}. Include edge cases:\n\n"})}),"\n",(0,r.jsx)(n.p,{children:"{input}"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:'provider: claude-haiku\noutput_var: response\noutput: "\\{response\\}"\n'})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Usage:"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"cat utils.py | gen-tests\ncat api.js | gen-tests --framework jest\n"})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h3,{id:"docstring",children:"docstring"}),"\n",(0,r.jsx)(n.p,{children:"Add docstrings to functions/classes."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"name: docstring\ndescription: Add docstrings to functions/classes\narguments:\n - flag: --style\n variable: style\n default: Google style\nsteps:\n - type: prompt\n prompt: |\n Add \\{style\\} docstrings to all functions and classes in this code. Output the complete code with docstrings:\n\n"})}),"\n",(0,r.jsx)(n.p,{children:"{input}"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:'provider: opencode-deepseek\noutput_var: response\noutput: "\\{response\\}"\n'})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Usage:"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'cat module.py | docstring\ncat functions.py | docstring --style "NumPy style"\n'})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h3,{id:"commit-msg",children:"commit-msg"}),"\n",(0,r.jsx)(n.p,{children:"Generate commit message from diff."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'name: commit-msg\ndescription: Generate commit message from diff\narguments:\n - flag: --style\n variable: style\n default: conventional commits\nsteps:\n - type: prompt\n prompt: |\n Generate a concise \\{style\\} commit message for this diff. Just the message, no explanation:\n\n \\{input\\}\n provider: opencode-pickle\n output_var: response\noutput: "\\{response\\}"\n'})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Usage:"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'git diff --staged | commit-msg\ngit diff HEAD~1 | commit-msg --style "simple"\n'})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"data-tools",children:"Data Tools"}),"\n",(0,r.jsx)(n.h3,{id:"json-extract",children:"json-extract"}),"\n",(0,r.jsx)(n.p,{children:"Extract structured data as validated JSON."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"name: json-extract\ndescription: Extract structured data as validated JSON\narguments:\n - flag: --fields\n variable: fields\n default: any relevant fields\nsteps:\n - type: prompt\n prompt: |\n Extract \\{fields\\} from this text as a JSON object. Output ONLY valid JSON, no markdown, no explanation:\n\n \\{input\\}\n provider: opencode-deepseek\n output_var: raw_json\n - type: code\n code: |\n import json\n import re\n text = raw_json.strip()\n text = re.sub(r'^```json?\\s*', '', text)\n text = re.sub(r'\\s*```$', '', text)\n try:\n parsed = json.loads(text)\n validated = json.dumps(parsed, indent=2)\n except json.JSONDecodeError as e:\n validated = f\"ERROR: Invalid JSON - {e}\\nRaw output: {text[:500]}\"\n output_var: validated\noutput: \"\\{validated\\}\"\n"})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Usage:"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'echo "Price $49.99, SKU ABC-123" | json-extract --fields "price, sku"\ncat invoice.txt | json-extract --fields "total, date, items"\n'})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h3,{id:"sql-from-text",children:"sql-from-text"}),"\n",(0,r.jsx)(n.p,{children:"Generate SQL from natural language."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'name: sql-from-text\ndescription: Generate SQL from natural language\narguments:\n - flag: --dialect\n variable: dialect\n default: PostgreSQL\nsteps:\n - type: prompt\n prompt: |\n Generate a \\{dialect\\} SQL query for this request. Output only the SQL, no explanation:\n\n \\{input\\}\n provider: claude-haiku\n output_var: response\noutput: "\\{response\\}"\n'})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Usage:"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'echo "get all users who signed up last month" | sql-from-text\necho "count orders by status" | sql-from-text --dialect MySQL\n'})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"advanced-multi-step-tools",children:"Advanced Multi-Step Tools"}),"\n",(0,r.jsx)(n.h3,{id:"log-errors",children:"log-errors"}),"\n",(0,r.jsx)(n.p,{children:"Extract and explain errors from large log files."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"name: log-errors\ndescription: Extract and explain errors from large log files\narguments: []\nsteps:\n - type: code\n code: |\n import re\n lines = input.split('\\n')\n result = []\n for i, line in enumerate(lines):\n if re.search(r'\\b(ERROR|CRITICAL|FATAL|Exception|Traceback)\\b', line, re.I):\n result.extend(lines[i:i+5])\n extracted = '\\n'.join(result[:200])\n output_var: extracted\n - type: prompt\n prompt: |\n Analyze these error log entries. Group by error type, explain likely causes, and suggest fixes:\n\n \\{extracted\\}\n provider: claude-haiku\n output_var: response\noutput: \"\\{response\\}\"\n"})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Usage:"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"cat huge_app.log | log-errors\nzcat archived.log.gz | log-errors\n"})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h3,{id:"diff-focus",children:"diff-focus"}),"\n",(0,r.jsx)(n.p,{children:"Review only the added/changed code in a diff."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"name: diff-focus\ndescription: Review only the added/changed code in a diff\narguments: []\nsteps:\n - type: code\n code: |\n lines = input.split('\\n')\n result = []\n for i, line in enumerate(lines):\n if line.startswith('@@') or line.startswith('+++') or line.startswith('---'):\n result.append(line)\n elif line.startswith('+') and not line.startswith('+++'):\n result.append(line)\n extracted = '\\n'.join(result)\n output_var: extracted\n - type: prompt\n prompt: |\n Review these added lines of code. Focus on bugs, security issues, and improvements:\n\n \\{extracted\\}\n provider: claude-haiku\n output_var: response\noutput: \"\\{response\\}\"\n"})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Usage:"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"git diff | diff-focus\ngit diff HEAD~5 | diff-focus\n"})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"pipeline-recipes",children:"Pipeline Recipes"}),"\n",(0,r.jsx)(n.p,{children:"CmdForge tools chain together like Unix commands:"}),"\n",(0,r.jsx)(n.h3,{id:"development-workflows",children:"Development Workflows"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"# Quick PR review: extract changes, review, summarize\ngit diff main | diff-focus | review-code --focus \"bugs and security\" | tldr\n\n# Explain and fix an error in one pipeline\npython script.py 2>&1 | explain-error | tee error_analysis.txt\n\n# Generate tests for changed files only\ngit diff --name-only | grep '\\.py$' | xargs cat | gen-tests > new_tests.py\n\n# Create release notes from commits\ngit log v1.0..v1.1 --oneline | changelog | translate --lang French > RELEASE_FR.md\n"})}),"\n",(0,r.jsx)(n.h3,{id:"data-processing",children:"Data Processing"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'# Extract, transform, analyze\ncurl -s api.example.com/data | json-extract --fields "users, revenue" | json2csv | csv-insights\n\n# Process multiple files\nfor f in reports/*.txt; do\n cat "$f" | json-extract --fields "total, date"\ndone | json2csv > summary.csv\n'})}),"\n",(0,r.jsx)(n.h3,{id:"text-processing-pipelines",children:"Text Processing Pipelines"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'# Translate technical docs for international team\ncat API.md | simplify --level "non-technical" | translate --lang Spanish > API_ES.md\n\n# Process customer feedback\ncat feedback.txt | summarize --length "10 points" | tone-shift --tone analytical\n'})}),"\n",(0,r.jsx)(n.h3,{id:"shell-functions",children:"Shell Functions"}),"\n",(0,r.jsxs)(n.p,{children:["Add to ",(0,r.jsx)(n.code,{children:"~/.bashrc"})," for common workflows:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'# Review recent changes\nreview-recent() {\n git diff HEAD~"${1:-1}" | diff-focus | review-code | tldr\n}\n\n# Quick translate with summary\ntranslate-summary() {\n cat "$1" | summarize | translate --lang "${2:-Spanish}"\n}\n\n# Generate commit message and commit\nauto-commit() {\n msg=$(git diff --staged | commit-msg)\n echo "Commit message: $msg"\n read -p "Commit? [y/N] " confirm\n [[ $confirm == [yY] ]] && git commit -m "$msg"\n}\n'})})]})}function p(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},8453(e,n,s){s.d(n,{R:()=>l,x:()=>i});var t=s(6540);const r={},a=t.createContext(r);function l(e){const n=t.useContext(a);return t.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.97cd58b2.js b/assets/js/runtime~main.97cd58b2.js new file mode 100644 index 0000000..578ba01 --- /dev/null +++ b/assets/js/runtime~main.97cd58b2.js @@ -0,0 +1 @@ +(()=>{"use strict";var e,r,t,a,o,n={},b={};function c(e){var r=b[e];if(void 0!==r)return r.exports;var t=b[e]={id:e,loaded:!1,exports:{}};return n[e].call(t.exports,t,t.exports,c),t.loaded=!0,t.exports}c.m=n,c.c=b,e=[],c.O=(r,t,a,o)=>{if(!t){var n=1/0;for(i=0;i=o)&&Object.keys(c.O).every(e=>c.O[e](t[d]))?t.splice(d--,1):(b=!1,o0&&e[i-1][2]>o;i--)e[i]=e[i-1];e[i]=[t,a,o]},c.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return c.d(r,{a:r}),r},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,c.t=function(e,a){if(1&a&&(e=this(e)),8&a)return e;if("object"==typeof e&&e){if(4&a&&e.__esModule)return e;if(16&a&&"function"==typeof e.then)return e}var o=Object.create(null);c.r(o);var n={};r=r||[null,t({}),t([]),t(t)];for(var b=2&a&&e;("object"==typeof b||"function"==typeof b)&&!~r.indexOf(b);b=t(b))Object.getOwnPropertyNames(b).forEach(r=>n[r]=()=>e[r]);return n.default=()=>e,c.d(o,n),o},c.d=(e,r)=>{for(var t in r)c.o(r,t)&&!c.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},c.f={},c.e=e=>Promise.all(Object.keys(c.f).reduce((r,t)=>(c.f[t](e,r),r),[])),c.u=e=>"assets/js/"+({48:"a94703ab",98:"a7bd4aaa",105:"6704ba13",203:"0330220f",207:"e719f3dc",331:"263e9506",393:"1db78e9f",401:"17896441",413:"1db64337",443:"5281b7a2",530:"9bb76ab4",574:"817f7194",647:"5e95c892",742:"aba21aa0",746:"de715384",838:"edbf8f3a",854:"3fbf7384",877:"28c758de",887:"387720e6",894:"5eebbccf",969:"14eb3368"}[e]||e)+"."+{48:"b8c77466",98:"3ba34601",105:"e26e2266",203:"41bc8204",207:"de2c390f",237:"447ba118",331:"4466c5fa",393:"338adddd",401:"3815ec59",413:"aca18eaa",443:"1fd85cce",530:"34bde5a9",574:"9dbada51",647:"a3b66919",742:"4a552a5c",746:"f1197b74",838:"fe76e489",854:"013e3796",877:"7bd54231",887:"1e51a2f9",894:"e6c8b639",969:"33737677"}[e]+".js",c.miniCssF=e=>{},c.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),a={},o="project-public-docs:",c.l=(e,r,t,n)=>{if(a[e])a[e].push(r);else{var b,d;if(void 0!==t)for(var f=document.getElementsByTagName("script"),i=0;i{b.onerror=b.onload=null,clearTimeout(s);var o=a[e];if(delete a[e],b.parentNode&&b.parentNode.removeChild(b),o&&o.forEach(e=>e(t)),r)return r(t)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:b}),12e4);b.onerror=u.bind(null,b.onerror),b.onload=u.bind(null,b.onload),d&&document.head.appendChild(b)}},c.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},c.p="/rob/CmdForge/",c.gca=function(e){return e={17896441:"401",a94703ab:"48",a7bd4aaa:"98","6704ba13":"105","0330220f":"203",e719f3dc:"207","263e9506":"331","1db78e9f":"393","1db64337":"413","5281b7a2":"443","9bb76ab4":"530","817f7194":"574","5e95c892":"647",aba21aa0:"742",de715384:"746",edbf8f3a:"838","3fbf7384":"854","28c758de":"877","387720e6":"887","5eebbccf":"894","14eb3368":"969"}[e]||e,c.p+c.u(e)},(()=>{var e={354:0,869:0};c.f.j=(r,t)=>{var a=c.o(e,r)?e[r]:void 0;if(0!==a)if(a)t.push(a[2]);else if(/^(354|869)$/.test(r))e[r]=0;else{var o=new Promise((t,o)=>a=e[r]=[t,o]);t.push(a[2]=o);var n=c.p+c.u(r),b=new Error;c.l(n,t=>{if(c.o(e,r)&&(0!==(a=e[r])&&(e[r]=void 0),a)){var o=t&&("load"===t.type?"missing":t.type),n=t&&t.target&&t.target.src;b.message="Loading chunk "+r+" failed.\n("+o+": "+n+")",b.name="ChunkLoadError",b.type=o,b.request=n,a[1](b)}},"chunk-"+r,r)}},c.O.j=r=>0===e[r];var r=(r,t)=>{var a,o,[n,b,d]=t,f=0;if(n.some(r=>0!==e[r])){for(a in b)c.o(b,a)&&(c.m[a]=b[a]);if(d)var i=d(c)}for(r&&r(t);f{"use strict";var e,r,t,a,o,n={},c={};function b(e){var r=c[e];if(void 0!==r)return r.exports;var t=c[e]={id:e,loaded:!1,exports:{}};return n[e].call(t.exports,t,t.exports,b),t.loaded=!0,t.exports}b.m=n,b.c=c,e=[],b.O=(r,t,a,o)=>{if(!t){var n=1/0;for(i=0;i=o)&&Object.keys(b.O).every(e=>b.O[e](t[d]))?t.splice(d--,1):(c=!1,o0&&e[i-1][2]>o;i--)e[i]=e[i-1];e[i]=[t,a,o]},b.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return b.d(r,{a:r}),r},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,b.t=function(e,a){if(1&a&&(e=this(e)),8&a)return e;if("object"==typeof e&&e){if(4&a&&e.__esModule)return e;if(16&a&&"function"==typeof e.then)return e}var o=Object.create(null);b.r(o);var n={};r=r||[null,t({}),t([]),t(t)];for(var c=2&a&&e;("object"==typeof c||"function"==typeof c)&&!~r.indexOf(c);c=t(c))Object.getOwnPropertyNames(c).forEach(r=>n[r]=()=>e[r]);return n.default=()=>e,b.d(o,n),o},b.d=(e,r)=>{for(var t in r)b.o(r,t)&&!b.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},b.f={},b.e=e=>Promise.all(Object.keys(b.f).reduce((r,t)=>(b.f[t](e,r),r),[])),b.u=e=>"assets/js/"+({48:"a94703ab",98:"a7bd4aaa",105:"6704ba13",203:"0330220f",207:"e719f3dc",331:"263e9506",393:"1db78e9f",401:"17896441",413:"1db64337",443:"5281b7a2",530:"9bb76ab4",574:"817f7194",647:"5e95c892",742:"aba21aa0",746:"de715384",838:"edbf8f3a",854:"3fbf7384",877:"28c758de",887:"387720e6",894:"5eebbccf",969:"14eb3368"}[e]||e)+"."+{48:"b8c77466",98:"3ba34601",105:"e26e2266",203:"41bc8204",207:"de2c390f",237:"447ba118",331:"4466c5fa",393:"338adddd",401:"3815ec59",413:"aca18eaa",443:"1fd85cce",530:"34bde5a9",574:"9dbada51",647:"a3b66919",742:"4a552a5c",746:"c9cc7bb3",838:"fe76e489",854:"013e3796",877:"7bd54231",887:"1e51a2f9",894:"e6c8b639",969:"33737677"}[e]+".js",b.miniCssF=e=>{},b.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),a={},o="project-public-docs:",b.l=(e,r,t,n)=>{if(a[e])a[e].push(r);else{var c,d;if(void 0!==t)for(var f=document.getElementsByTagName("script"),i=0;i{c.onerror=c.onload=null,clearTimeout(s);var o=a[e];if(delete a[e],c.parentNode&&c.parentNode.removeChild(c),o&&o.forEach(e=>e(t)),r)return r(t)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:c}),12e4);c.onerror=u.bind(null,c.onerror),c.onload=u.bind(null,c.onload),d&&document.head.appendChild(c)}},b.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},b.p="/rob/CmdForge/",b.gca=function(e){return e={17896441:"401",a94703ab:"48",a7bd4aaa:"98","6704ba13":"105","0330220f":"203",e719f3dc:"207","263e9506":"331","1db78e9f":"393","1db64337":"413","5281b7a2":"443","9bb76ab4":"530","817f7194":"574","5e95c892":"647",aba21aa0:"742",de715384:"746",edbf8f3a:"838","3fbf7384":"854","28c758de":"877","387720e6":"887","5eebbccf":"894","14eb3368":"969"}[e]||e,b.p+b.u(e)},(()=>{var e={354:0,869:0};b.f.j=(r,t)=>{var a=b.o(e,r)?e[r]:void 0;if(0!==a)if(a)t.push(a[2]);else if(/^(354|869)$/.test(r))e[r]=0;else{var o=new Promise((t,o)=>a=e[r]=[t,o]);t.push(a[2]=o);var n=b.p+b.u(r),c=new Error;b.l(n,t=>{if(b.o(e,r)&&(0!==(a=e[r])&&(e[r]=void 0),a)){var o=t&&("load"===t.type?"missing":t.type),n=t&&t.target&&t.target.src;c.message="Loading chunk "+r+" failed.\n("+o+": "+n+")",c.name="ChunkLoadError",c.type=o,c.request=n,a[1](c)}},"chunk-"+r,r)}},b.O.j=r=>0===e[r];var r=(r,t)=>{var a,o,[n,c,d]=t,f=0;if(n.some(r=>0!==e[r])){for(a in c)b.o(c,a)&&(b.m[a]=c[a]);if(d)var i=d(b)}for(r&&r(t);f Reference | CmdForge - + diff --git a/goals/index.html b/goals/index.html index eaa7995..0ee10e9 100644 --- a/goals/index.html +++ b/goals/index.html @@ -4,7 +4,7 @@ Goals | CmdForge - + diff --git a/ideas-and-exploration/index.html b/ideas-and-exploration/index.html index 2b01c1d..223dc25 100644 --- a/ideas-and-exploration/index.html +++ b/ideas-and-exploration/index.html @@ -4,7 +4,7 @@ Ideas & Exploration | CmdForge - + diff --git a/index.html b/index.html index 9c530e2..47ebe00 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,7 @@ CmdForge Overview | CmdForge - + diff --git a/milestones/index.html b/milestones/index.html index b460a28..98834a3 100644 --- a/milestones/index.html +++ b/milestones/index.html @@ -4,7 +4,7 @@ Milestones | CmdForge - + diff --git a/reference/collections/index.html b/reference/collections/index.html index 4594539..1fb6740 100644 --- a/reference/collections/index.html +++ b/reference/collections/index.html @@ -4,7 +4,7 @@ CmdForge Collections | CmdForge - + diff --git a/reference/design/index.html b/reference/design/index.html index fad10f2..226825a 100644 --- a/reference/design/index.html +++ b/reference/design/index.html @@ -4,7 +4,7 @@ CmdForge Design Document | CmdForge - + diff --git a/reference/examples/index.html b/reference/examples/index.html new file mode 100644 index 0000000..2723e8a --- /dev/null +++ b/reference/examples/index.html @@ -0,0 +1,150 @@ + + + + + +Example Tools | CmdForge + + + + + + + +

    Example Tools

    +

    CmdForge comes with 28 pre-built tools. This document shows their configurations and usage.

    +

    Quick Install

    +
    # Install all example tools (from the CmdForge directory)
    python examples/install.py
    cmdforge refresh

    # Or install from anywhere
    curl -sSL https://gitea.brrd.tech/rob/cmdforge/raw/branch/main/examples/install.py | python3
    +

    Text Processing Tools

    +

    summarize

    +

    Condense long documents to key points.

    +
    name: summarize
    description: Condense long documents to key points
    arguments:
    - flag: --length
    variable: length
    default: "3-5 bullet points"
    steps:
    - type: prompt
    prompt: |
    Summarize the following text into \{length\}. Be concise and capture the key points:

    \{input\}
    provider: opencode-pickle
    output_var: response
    output: "\{response\}"
    +

    Usage:

    +
    cat article.txt | summarize
    cat book.txt | summarize --length "10 bullet points"
    +
    +

    translate

    +

    Translate text to any language.

    +
    name: translate
    description: Translate text to any language
    arguments:
    - flag: --lang
    variable: lang
    default: Spanish
    steps:
    - type: prompt
    prompt: |
    Translate the following text to \{lang\}. Only output the translation, nothing else:

    \{input\}
    provider: claude-haiku
    output_var: response
    output: "\{response\}"
    +

    Usage:

    +
    echo "Hello, world!" | translate --lang French
    cat readme.md | translate --lang Japanese
    +
    +

    fix-grammar

    +

    Fix grammar and spelling errors.

    +
    name: fix-grammar
    description: Fix grammar and spelling errors
    arguments: []
    steps:
    - type: prompt
    prompt: |
    Fix all grammar, spelling, and punctuation errors in the following text. Only output the corrected text, no explanations:

    \{input\}
    provider: opencode-deepseek
    output_var: response
    output: "\{response\}"
    +

    Usage:

    +
    echo "teh cat sat on teh mat" | fix-grammar
    cat draft.txt | fix-grammar > fixed.txt
    +
    +

    simplify

    +

    Rewrite text for easier understanding.

    +
    name: simplify
    description: Rewrite text for easier understanding
    arguments:
    - flag: --level
    variable: level
    default: "5th grade reading level"
    steps:
    - type: prompt
    prompt: |
    Rewrite the following text for a \{level\}. Keep the meaning but use simpler words and shorter sentences:

    \{input\}
    provider: opencode-pickle
    output_var: response
    output: "\{response\}"
    +

    Usage:

    +
    cat legal_document.txt | simplify
    cat technical.md | simplify --level "non-technical reader"
    +
    +

    tone-shift

    +

    Change the tone of text.

    +
    name: tone-shift
    description: Change the tone of text
    arguments:
    - flag: --tone
    variable: tone
    default: professional
    steps:
    - type: prompt
    prompt: |
    Rewrite the following text in a \{tone\} tone. Keep the core message but adjust the style:

    \{input\}
    provider: opencode-deepseek
    output_var: response
    output: "\{response\}"
    +

    Usage:

    +
    cat angry_email.txt | tone-shift --tone "calm and professional"
    cat casual_note.txt | tone-shift --tone formal
    +
    +

    eli5

    +

    Explain like I'm 5.

    +
    name: eli5
    description: Explain like I'm 5
    arguments: []
    steps:
    - type: prompt
    prompt: |
    Explain this like I'm 5 years old. Use simple words and fun analogies:

    \{input\}
    provider: opencode-pickle
    output_var: response
    output: "\{response\}"
    +

    Usage:

    +
    echo "What is quantum computing?" | eli5
    cat whitepaper.txt | eli5
    +
    +

    tldr

    +

    One-line summary.

    +
    name: tldr
    description: One-line summary
    arguments: []
    steps:
    - type: prompt
    prompt: |
    Give a one-line TL;DR summary of this text:

    \{input\}
    provider: opencode-grok
    output_var: response
    output: "\{response\}"
    +

    Usage:

    +
    cat long_article.txt | tldr
    curl -s https://example.com | tldr
    +
    +

    expand

    +

    Expand bullet points to paragraphs.

    +
    name: expand
    description: Expand bullet points to paragraphs
    arguments: []
    steps:
    - type: prompt
    prompt: |
    Expand these bullet points into well-written paragraphs:

    \{input\}
    provider: opencode-pickle
    output_var: response
    output: "\{response\}"
    +

    Usage:

    +
    cat notes.txt | expand
    echo "- Fast\n- Reliable\n- Easy to use" | expand
    +
    +

    Developer Tools

    +

    explain-error

    +

    Explain error messages and stack traces.

    +
    name: explain-error
    description: Explain error messages and stack traces
    arguments: []
    steps:
    - type: prompt
    prompt: |
    Explain this error/stack trace in plain English. What went wrong and how to fix it:

    \{input\}
    provider: claude-haiku
    output_var: response
    output: "\{response\}"
    +

    Usage:

    +
    cat error.log | explain-error
    python script.py 2>&1 | explain-error
    +
    +

    explain-code

    +

    Explain what code does.

    +
    name: explain-code
    description: Explain what code does
    arguments:
    - flag: --detail
    variable: detail
    default: moderate
    steps:
    - type: prompt
    prompt: |
    Explain what this code does at a \{detail\} level of detail:

    +

    {input}

    +
    provider: opencode-pickle
    output_var: response
    output: "\{response\}"
    +

    Usage:

    +
    cat script.py | explain-code
    cat complex.js | explain-code --detail "very detailed"
    +
    +

    review-code

    +

    Quick code review with suggestions.

    +
    name: review-code
    description: Quick code review with suggestions
    arguments:
    - flag: --focus
    variable: focus
    default: "bugs, security, and improvements"
    steps:
    - type: prompt
    prompt: |
    Review this code focusing on \{focus\}. Be concise and actionable:

    +

    {input}

    +
    provider: claude-sonnet
    output_var: response
    output: "\{response\}"
    +

    Usage:

    +
    cat pull_request.diff | review-code
    cat auth.py | review-code --focus "security vulnerabilities"
    +
    +

    gen-tests

    +

    Generate unit tests for code.

    +
    name: gen-tests
    description: Generate unit tests for code
    arguments:
    - flag: --framework
    variable: framework
    default: pytest
    steps:
    - type: prompt
    prompt: |
    Generate comprehensive unit tests for this code using \{framework\}. Include edge cases:

    +

    {input}

    +
    provider: claude-haiku
    output_var: response
    output: "\{response\}"
    +

    Usage:

    +
    cat utils.py | gen-tests
    cat api.js | gen-tests --framework jest
    +
    +

    docstring

    +

    Add docstrings to functions/classes.

    +
    name: docstring
    description: Add docstrings to functions/classes
    arguments:
    - flag: --style
    variable: style
    default: Google style
    steps:
    - type: prompt
    prompt: |
    Add \{style\} docstrings to all functions and classes in this code. Output the complete code with docstrings:

    +

    {input}

    +
    provider: opencode-deepseek
    output_var: response
    output: "\{response\}"
    +

    Usage:

    +
    cat module.py | docstring
    cat functions.py | docstring --style "NumPy style"
    +
    +

    commit-msg

    +

    Generate commit message from diff.

    +
    name: commit-msg
    description: Generate commit message from diff
    arguments:
    - flag: --style
    variable: style
    default: conventional commits
    steps:
    - type: prompt
    prompt: |
    Generate a concise \{style\} commit message for this diff. Just the message, no explanation:

    \{input\}
    provider: opencode-pickle
    output_var: response
    output: "\{response\}"
    +

    Usage:

    +
    git diff --staged | commit-msg
    git diff HEAD~1 | commit-msg --style "simple"
    +
    +

    Data Tools

    +

    json-extract

    +

    Extract structured data as validated JSON.

    +
    name: json-extract
    description: Extract structured data as validated JSON
    arguments:
    - flag: --fields
    variable: fields
    default: any relevant fields
    steps:
    - type: prompt
    prompt: |
    Extract \{fields\} from this text as a JSON object. Output ONLY valid JSON, no markdown, no explanation:

    \{input\}
    provider: opencode-deepseek
    output_var: raw_json
    - type: code
    code: |
    import json
    import re
    text = raw_json.strip()
    text = re.sub(r'^```json?\s*', '', text)
    text = re.sub(r'\s*```$', '', text)
    try:
    parsed = json.loads(text)
    validated = json.dumps(parsed, indent=2)
    except json.JSONDecodeError as e:
    validated = f"ERROR: Invalid JSON - {e}\nRaw output: {text[:500]}"
    output_var: validated
    output: "\{validated\}"
    +

    Usage:

    +
    echo "Price $49.99, SKU ABC-123" | json-extract --fields "price, sku"
    cat invoice.txt | json-extract --fields "total, date, items"
    +
    +

    sql-from-text

    +

    Generate SQL from natural language.

    +
    name: sql-from-text
    description: Generate SQL from natural language
    arguments:
    - flag: --dialect
    variable: dialect
    default: PostgreSQL
    steps:
    - type: prompt
    prompt: |
    Generate a \{dialect\} SQL query for this request. Output only the SQL, no explanation:

    \{input\}
    provider: claude-haiku
    output_var: response
    output: "\{response\}"
    +

    Usage:

    +
    echo "get all users who signed up last month" | sql-from-text
    echo "count orders by status" | sql-from-text --dialect MySQL
    +
    +

    Advanced Multi-Step Tools

    +

    log-errors

    +

    Extract and explain errors from large log files.

    +
    name: log-errors
    description: Extract and explain errors from large log files
    arguments: []
    steps:
    - type: code
    code: |
    import re
    lines = input.split('\n')
    result = []
    for i, line in enumerate(lines):
    if re.search(r'\b(ERROR|CRITICAL|FATAL|Exception|Traceback)\b', line, re.I):
    result.extend(lines[i:i+5])
    extracted = '\n'.join(result[:200])
    output_var: extracted
    - type: prompt
    prompt: |
    Analyze these error log entries. Group by error type, explain likely causes, and suggest fixes:

    \{extracted\}
    provider: claude-haiku
    output_var: response
    output: "\{response\}"
    +

    Usage:

    +
    cat huge_app.log | log-errors
    zcat archived.log.gz | log-errors
    +
    +

    diff-focus

    +

    Review only the added/changed code in a diff.

    +
    name: diff-focus
    description: Review only the added/changed code in a diff
    arguments: []
    steps:
    - type: code
    code: |
    lines = input.split('\n')
    result = []
    for i, line in enumerate(lines):
    if line.startswith('@@') or line.startswith('+++') or line.startswith('---'):
    result.append(line)
    elif line.startswith('+') and not line.startswith('+++'):
    result.append(line)
    extracted = '\n'.join(result)
    output_var: extracted
    - type: prompt
    prompt: |
    Review these added lines of code. Focus on bugs, security issues, and improvements:

    \{extracted\}
    provider: claude-haiku
    output_var: response
    output: "\{response\}"
    +

    Usage:

    +
    git diff | diff-focus
    git diff HEAD~5 | diff-focus
    +
    +

    Pipeline Recipes

    +

    CmdForge tools chain together like Unix commands:

    +

    Development Workflows

    +
    # Quick PR review: extract changes, review, summarize
    git diff main | diff-focus | review-code --focus "bugs and security" | tldr

    # Explain and fix an error in one pipeline
    python script.py 2>&1 | explain-error | tee error_analysis.txt

    # Generate tests for changed files only
    git diff --name-only | grep '\.py$' | xargs cat | gen-tests > new_tests.py

    # Create release notes from commits
    git log v1.0..v1.1 --oneline | changelog | translate --lang French > RELEASE_FR.md
    +

    Data Processing

    +
    # Extract, transform, analyze
    curl -s api.example.com/data | json-extract --fields "users, revenue" | json2csv | csv-insights

    # Process multiple files
    for f in reports/*.txt; do
    cat "$f" | json-extract --fields "total, date"
    done | json2csv > summary.csv
    +

    Text Processing Pipelines

    +
    # Translate technical docs for international team
    cat API.md | simplify --level "non-technical" | translate --lang Spanish > API_ES.md

    # Process customer feedback
    cat feedback.txt | summarize --length "10 points" | tone-shift --tone analytical
    +

    Shell Functions

    +

    Add to ~/.bashrc for common workflows:

    +
    # Review recent changes
    review-recent() {
    git diff HEAD~"${1:-1}" | diff-focus | review-code | tldr
    }

    # Quick translate with summary
    translate-summary() {
    cat "$1" | summarize | translate --lang "${2:-Spanish}"
    }

    # Generate commit message and commit
    auto-commit() {
    msg=$(git diff --staged | commit-msg)
    echo "Commit message: $msg"
    read -p "Commit? [y/N] " confirm
    [[ $confirm == [yY] ]] && git commit -m "$msg"
    }
    + + \ No newline at end of file diff --git a/reference/meta-tools/index.html b/reference/meta-tools/index.html index 8e899ab..4663247 100644 --- a/reference/meta-tools/index.html +++ b/reference/meta-tools/index.html @@ -4,7 +4,7 @@ Meta-Tools: Tools That Call Other Tools | CmdForge - + diff --git a/reference/providers/index.html b/reference/providers/index.html index 7119cf5..8d372cc 100644 --- a/reference/providers/index.html +++ b/reference/providers/index.html @@ -4,7 +4,7 @@ Provider Setup Guide | CmdForge - + diff --git a/reference/registry-spec/index.html b/reference/registry-spec/index.html index 68eb756..4409368 100644 --- a/reference/registry-spec/index.html +++ b/reference/registry-spec/index.html @@ -4,7 +4,7 @@ CmdForge Registry Design | CmdForge - + diff --git a/reference/web-ui-spec/index.html b/reference/web-ui-spec/index.html index e39bbdf..7626cdc 100644 --- a/reference/web-ui-spec/index.html +++ b/reference/web-ui-spec/index.html @@ -4,7 +4,7 @@ CmdForge Web UI Design | CmdForge - + diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000..ac23d10 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1 @@ +https://pages.brrd.tech/rob/CmdForge/architecture/weekly0.5https://pages.brrd.tech/rob/CmdForge/category/reference/weekly0.5https://pages.brrd.tech/rob/CmdForge/goals/weekly0.5https://pages.brrd.tech/rob/CmdForge/ideas-and-exploration/weekly0.5https://pages.brrd.tech/rob/CmdForge/milestones/weekly0.5https://pages.brrd.tech/rob/CmdForge/reference/collections/weekly0.5https://pages.brrd.tech/rob/CmdForge/reference/design/weekly0.5https://pages.brrd.tech/rob/CmdForge/reference/examples/weekly0.5https://pages.brrd.tech/rob/CmdForge/reference/meta-tools/weekly0.5https://pages.brrd.tech/rob/CmdForge/reference/providers/weekly0.5https://pages.brrd.tech/rob/CmdForge/reference/registry-spec/weekly0.5https://pages.brrd.tech/rob/CmdForge/reference/web-ui-spec/weekly0.5https://pages.brrd.tech/rob/CmdForge/todos/weekly0.5https://pages.brrd.tech/rob/CmdForge/weekly0.5 \ No newline at end of file diff --git a/todos/index.html b/todos/index.html index 453c0c4..8db1924 100644 --- a/todos/index.html +++ b/todos/index.html @@ -4,7 +4,7 @@ CmdForge TODOs | CmdForge - +