@smarter.sh/ui-widgets 0.35.4-alpha.2 → 0.36.0-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +32 -15
- package/dist/types/components/Cli/Component.d.ts +25 -0
- package/dist/types/components/Contribute/Component.d.ts +18 -0
- package/dist/types/components/Extensions/Component.d.ts +20 -0
- package/dist/types/components/Instructors/Component.d.ts +27 -0
- package/dist/types/components/Integrations/Component.d.ts +28 -0
- package/dist/types/components/McpServer/Component.d.ts +28 -0
- package/dist/types/components/VSCodeExtension/Component.d.ts +19 -0
- package/dist/types/components/WhatsNew/Component.d.ts +17 -0
- package/dist/types/index.d.ts +12 -0
- package/dist/ui-widgets.css +1 -1
- package/dist/ui-widgets.es.js +1039 -10
- package/dist/ui-widgets.es.js.map +1 -1
- package/package.json +7 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-widgets.es.js","names":["_jsx","_Fragment","Fragment","packageJson","nodedotjsLogo","goLogo","_Fragment","dockerLogo","kubernetesLogo","terraformLogo","_Fragment","Fragment$1","PLACEHOLDER","catalog","gettext","django","msgid","interpolateNodes","parts","last","match","message","placeholder","name","index","values","jsx","Fragment","part","package_default","\"private\"","\"import\"","\"require\"","\"types\"","\"clean\"","\"build\"","\"lint\"","\"storybook\"","\"typecheck\"","\"test\"","\"react\"","\"eslint\"","\"globals\"","\"typescript\"","\"vitest\"","packageName","packageVersion","go_default","nodedotjs_default","OPENAPI_URL","SDKS","Sdk","className","sdk","openapiUrl","STEPS","SelfHost","step"],"sources":["../../smarter-common/dist/lib/i18n.js","../../smarter-common/package.json","../../smarter-common/dist/lib/const.js","../../smarter-common/dist/components/TabbedListView/cookie.js","../../smarter-common/dist/lib/cache.js","../src/assets/go.svg","../src/assets/nodedotjs.svg","../src/components/Sdk/Component.tsx","../src/assets/docker.svg","../src/assets/kubernetes.svg","../src/assets/terraform.svg","../src/components/SelfHost/Component.tsx"],"sourcesContent":["import { jsx as _jsx, Fragment as _Fragment } from \"react/jsx-runtime\";\n/**\n * Translation functions for the web console's React apps.\n *\n * The web console is translated with gettext. Django renders each page in the\n * user's language, and dashboard/base.html loads that language's message\n * catalog for the React apps from Django's JavaScriptCatalog view (the djangojs\n * domain), which defines window.django.gettext() and friends. These functions\n * call it, and fall back to the English source text when no catalog is loaded,\n * e.g. in tests and Storybook.\n *\n * Every message is English source text, and must be a string literal, so that\n * `npm run i18n:extract` can find it. Interpolate values afterwards, with\n * Python-style named placeholders, so that a translator can move them:\n *\n * @example\n * gettext(\"Secrets\");\n * interpolate(gettext(\"Rename secret %(name)s.\"), { name: secret.name });\n * ngettext(\"%(count)s secret\", \"%(count)s secrets\", n);\n * pgettext(\"verb\", \"Clone\");\n * // a React element inside a sentence:\n * interpolateNodes(gettext(\"Delete secret %(name)s?\"), { name: <strong>{secret.name}</strong> });\n *\n * A comment that begins with \"Translators:\" on the line before a call is copied\n * into the message catalog for the translator.\n */\nimport { Fragment } from \"react\";\nconst PLACEHOLDER = /%\\(([A-Za-z_][A-Za-z0-9_]*)\\)s/g;\nconst catalog = () => (typeof window === \"undefined\" ? undefined : window.django);\n/** Translates a message. */\nexport function gettext(msgid) {\n const django = catalog();\n return django?.gettext ? django.gettext(msgid) : msgid;\n}\n/** Translates a message that has a singular and a plural form, chosen by count. */\nexport function ngettext(singular, plural, count) {\n const django = catalog();\n if (django?.ngettext)\n return django.ngettext(singular, plural, count);\n return count === 1 ? singular : plural;\n}\n/** Translates a message in a context, which tells apart two messages with the same English text. */\nexport function pgettext(context, msgid) {\n const django = catalog();\n return django?.pgettext ? django.pgettext(context, msgid) : msgid;\n}\n/** ngettext() in a context. */\nexport function npgettext(context, singular, plural, count) {\n const django = catalog();\n if (django?.npgettext)\n return django.npgettext(context, singular, plural, count);\n return count === 1 ? singular : plural;\n}\n/**\n * Replaces each %(name)s placeholder in a translated message with values[name].\n * A placeholder with no value is left as it is, so that the mistake shows.\n */\nexport function interpolate(message, values) {\n return message.replace(PLACEHOLDER, (placeholder, name) => {\n const value = values[name];\n return value === undefined || value === null ? placeholder : String(value);\n });\n}\n/**\n * interpolate() for values that are React nodes, e.g. a name in <strong> inside a\n * sentence. Returns a fragment of the message's text and the values, in the order\n * that the (translated) message puts them.\n */\nexport function interpolateNodes(message, values) {\n const parts = [];\n let last = 0;\n for (const match of message.matchAll(PLACEHOLDER)) {\n const [placeholder, name] = match;\n const index = match.index ?? 0;\n if (index > last)\n parts.push(message.slice(last, index));\n parts.push(name in values ? values[name] : placeholder);\n last = index + placeholder.length;\n }\n if (last < message.length)\n parts.push(message.slice(last));\n return (_jsx(_Fragment, { children: parts.map((part, index) => (_jsx(Fragment, { children: part }, index))) }));\n}\n/** The language of the page, from the lang attribute that Django renders on <html>, e.g. \"en\". */\nexport function currentLanguage() {\n if (typeof document === \"undefined\")\n return \"en\";\n return document.documentElement.lang || \"en\";\n}\n//# sourceMappingURL=i18n.js.map","{\n \"name\": \"@smarter/common\",\n \"private\": false,\n \"version\": \"0.2.0\",\n \"type\": \"module\",\n \"main\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\"\n }\n },\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"clean\": \"rm -rf dist\",\n \"build\": \"npm run clean && tsc -p tsconfig.build.json && rsync -a --prune-empty-dirs --include='/' --include='.css' --exclude='*' src/ dist/\",\n \"build:dist-manifest\": \"node --input-type=module -e \\\"import fs from 'node:fs'; const pkg = JSON.parse(fs.readFileSync('package.json','utf8')); const out = { name: pkg.name, version: pkg.version, type: pkg.type, main: './index.js', types: './index.d.ts', peerDependencies: pkg.peerDependencies ?? {}, dependencies: pkg.dependencies ?? {} }; fs.writeFileSync('dist/package.json', JSON.stringify(out, null, 2) + '\\\\n');\\\"\",\n \"pack:tgz\": \"npm pack --ignore-scripts\",\n \"lint\": \"eslint .\",\n \"storybook\": \"storybook dev -p 6006\",\n \"build-storybook\": \"storybook build\",\n \"typecheck\": \"tsc -b\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\"\n },\n \"peerDependencies\": {\n \"react\": \"^19\",\n \"react-dom\": \"^19\"\n },\n \"dependencies\": {\n \"date-fns\": \"^4.4.0\"\n },\n \"devDependencies\": {\n \"@eslint/js\": \"^10.0.1\",\n \"@storybook/addon-a11y\": \"^10.6.1\",\n \"@storybook/addon-docs\": \"^10.6.1\",\n \"@storybook/react-vite\": \"^10.6.1\",\n \"@types/node\": \"^26.6.3\",\n \"@types/react\": \"^19.3.0\",\n \"@types/react-dom\": \"^19.3.0\",\n \"eslint\": \"^10.11.0\",\n \"eslint-plugin-react-hooks\": \"^7.1.1\",\n \"eslint-plugin-storybook\": \"^10.6.1\",\n \"globals\": \"^17.13.0\",\n \"react\": \"^19.3.0\",\n \"react-dom\": \"^19.3.0\",\n \"storybook\": \"^10.6.1\",\n \"typescript\": \"~6.0.2\",\n \"typescript-eslint\": \"^8.71.0\",\n \"vitest\": \"^5.0.3\"\n }\n}\n","import packageJson from \"../../package.json\" with { type: \"json\" };\nexport const packageName = packageJson.name;\nexport const packageVersion = packageJson.version;\nexport const loggerPrefix = `[Smarter ${packageName} v${packageVersion}]`;\n//# sourceMappingURL=const.js.map","import { loggerPrefix } from \"../../lib/const\";\nimport { packageName, packageVersion } from \"../../lib/const\";\nconst COOKIE_NAME_PREFIX = `${packageName}_v${packageVersion}`;\nconst getUrlOrigin = () => {\n if (typeof window !== \"undefined\" && typeof window.location?.origin === \"string\") {\n return window.location.origin;\n }\n return \"http://localhost\";\n};\nexport const getUrlPath = (url) => {\n console.debug(loggerPrefix, `getUrlPath(): Extracting path from URL: ${url}`);\n return new URL(url, getUrlOrigin()).pathname;\n};\n/**\n * Sets a cookie to store the llmclient count for a given URL.\n *\n * @param url - The unique identifier for the llmclient group.\n * @param llmclientCount - The number of llmclients to store.\n * @param days - Number of days until the cookie expires.\n */\nexport const setCookieForUrl = (url, llmclientCount, days) => {\n const MS_PER_DAY = 24 * 60 * 60 * 1000;\n const expires = new Date(Date.now() + days * MS_PER_DAY).toUTCString();\n const cookieName = `${COOKIE_NAME_PREFIX}_${getUrlPath(url)}`;\n const cookieValue = `${cookieName}=${llmclientCount}; path=/; expires=${expires};`;\n try {\n document.cookie = cookieValue;\n console.debug(loggerPrefix, `setCookieForUrl(): ${cookieValue}`);\n }\n catch (e) {\n console.warn(loggerPrefix, \"setCookieForUrl(): Unable to set llmclient count cookie\", e);\n }\n};\n/**\n * Retrieves the llmclient count stored in a cookie for a given URL.\n *\n * @param url - The unique identifier for the llmclient group.\n * @returns The number of llmclients stored in the cookie, or undefined if not found or invalid.\n */\nexport const getCookieForUrl = (url) => {\n const cookieName = `${COOKIE_NAME_PREFIX}_${getUrlPath(url)}`;\n const cookies = document.cookie.split(\";\").map((c) => c.trim());\n for (const cookie of cookies) {\n if (cookie.startsWith(cookieName + \"=\")) {\n const strVal = cookie.substring(cookieName.length + 1);\n const numVal = parseInt(strVal, 10);\n const retVal = isNaN(numVal) ? undefined : numVal;\n console.debug(loggerPrefix, `getCookieForUrl(): Retrieved cookie for ${cookieName}:`, retVal);\n return retVal;\n }\n }\n console.warn(loggerPrefix, `getCookieForUrl(): Cookie for ${cookieName} not found. If you are not under /, it may not be visible due to cookie path restrictions.`);\n return undefined;\n};\n//# sourceMappingURL=cookie.js.map","/**\n * Tabbed list cache utilities.\n *\n * Stores plugin objects in sessionStorage using a key scoped by API URL and slug,\n * with a one-week TTL and automatic cleanup of expired entries.\n */\nimport { loggerPrefix } from \"./const\";\nimport { packageName, packageVersion } from \"./const\";\nconst CACHE_PREFIX = `${packageName}_v${packageVersion}_objects_v1`;\nconst CACHE_TTL_MS = 7 * 24 * 60 * 60 * 1000; // 1 week\n/**\n * Builds a stable sessionStorage key for a specific API endpoint and tab slug.\n *\n * @param apiUrl Base API URL used to scope cache entries by backend.\n * @param slug Tab or list identifier to isolate cached objects per view.\n * @returns A deterministic sessionStorage key.\n * @throws This function does not throw under normal operation.\n */\nexport const makeCacheKey = (apiUrl, slug) => {\n return `${CACHE_PREFIX}:${apiUrl}${slug}`;\n};\n/**\n * Reads and validates cached llmclient objects.\n *\n * Returns null for missing, invalid, or expired entries and removes expired\n * data to keep storage clean.\n *\n * @param key Fully qualified sessionStorage cache key.\n * @returns The cached llmclient array when present and valid; otherwise `null`.\n * @throws No exceptions are propagated. JSON parse errors, sessionStorage access\n * failures, and other runtime errors are caught and treated as a cache miss.\n */\nexport const readCache = (key) => {\n try {\n const raw = sessionStorage.getItem(key);\n if (!raw) {\n console.debug(`${loggerPrefix} readCache() cache miss for`, key);\n return null;\n }\n const parsed = JSON.parse(raw);\n if (!parsed || typeof parsed.ts !== \"number\" || !Array.isArray(parsed.objects)) {\n console.debug(`${loggerPrefix} readCache() cache invalid for`, key);\n return null;\n }\n if (Date.now() - parsed.ts > CACHE_TTL_MS) {\n console.debug(`${loggerPrefix} readCache() cache expired for`, key);\n sessionStorage.removeItem(key);\n return null;\n }\n console.debug(`${loggerPrefix} readCache() cache hit for`, key, \"with\", parsed.objects);\n return parsed.objects;\n }\n catch {\n return null;\n }\n};\n/**\n * Persists llmclient objects to sessionStorage with a write timestamp.\n *\n * @param key Fully qualified sessionStorage cache key.\n * @param objects LLMClient objects to cache for subsequent reads.\n * @returns `void`.\n * @throws No exceptions are propagated. sessionStorage write failures (for\n * example quota exceeded or private mode restrictions) are caught and ignored.\n */\nexport const writeCache = (key, objects) => {\n try {\n console.debug(`${loggerPrefix} writeCache() writing sessionStorage cache for`, key, \"with\", objects.length, \"objects\");\n const payload = { ts: Date.now(), objects };\n sessionStorage.setItem(key, JSON.stringify(payload));\n }\n catch {\n // ignore quota/private-mode errors\n }\n};\n//# sourceMappingURL=cache.js.map","export default \"data:image/svg+xml,%3csvg%20fill='%2300ADD8'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eGo%3c/title%3e%3cpath%20d='M1.811%2010.231c-.047%200-.058-.023-.035-.059l.246-.315c.023-.035.081-.058.128-.058h4.172c.046%200%20.058.035.035.07l-.199.303c-.023.036-.082.07-.117.07zM.047%2011.306c-.047%200-.059-.023-.035-.058l.245-.316c.023-.035.082-.058.129-.058h5.328c.047%200%20.07.035.058.07l-.093.28c-.012.047-.058.07-.105.07zm2.828%201.075c-.047%200-.059-.035-.035-.07l.163-.292c.023-.035.07-.07.117-.07h2.337c.047%200%20.07.035.07.082l-.023.28c0%20.047-.047.082-.082.082zm12.129-2.36c-.736.187-1.239.327-1.963.514-.176.046-.187.058-.34-.117-.174-.199-.303-.327-.548-.444-.737-.362-1.45-.257-2.115.175-.795.514-1.204%201.274-1.192%202.22.011.935.654%201.706%201.577%201.835.795.105%201.46-.175%201.987-.77.105-.13.198-.27.315-.434H10.47c-.245%200-.304-.152-.222-.35.152-.362.432-.97.596-1.274a.315.315%200%2001.292-.187h4.253c-.023.316-.023.631-.07.947a4.983%204.983%200%2001-.958%202.29c-.841%201.11-1.94%201.8-3.33%201.986-1.145.152-2.209-.07-3.143-.77-.865-.655-1.356-1.52-1.484-2.595-.152-1.274.222-2.419.993-3.424.83-1.086%201.928-1.776%203.272-2.02%201.098-.2%202.15-.07%203.096.571.62.41%201.063.97%201.356%201.648.07.105.023.164-.117.2m3.868%206.461c-1.064-.024-2.034-.328-2.852-1.029a3.665%203.665%200%2001-1.262-2.255c-.21-1.32.152-2.489.947-3.529.853-1.122%201.881-1.706%203.272-1.95%201.192-.21%202.314-.095%203.33.595.923.63%201.496%201.484%201.648%202.605.198%201.578-.257%202.863-1.344%203.962-.771.783-1.718%201.273-2.805%201.495-.315.06-.63.07-.934.106zm2.78-4.72c-.011-.153-.011-.27-.034-.387-.21-1.157-1.274-1.81-2.384-1.554-1.087.245-1.788.935-2.045%202.033-.21.912.234%201.835%201.075%202.21.643.28%201.285.244%201.905-.07.923-.48%201.425-1.228%201.484-2.233z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20fill='%235FA04E'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eNode.js%3c/title%3e%3cpath%20d='M11.998,24c-0.321,0-0.641-0.084-0.922-0.247l-2.936-1.737c-0.438-0.245-0.224-0.332-0.08-0.383%20c0.585-0.203,0.703-0.25,1.328-0.604c0.065-0.037,0.151-0.023,0.218,0.017l2.256,1.339c0.082,0.045,0.197,0.045,0.272,0l8.795-5.076%20c0.082-0.047,0.134-0.141,0.134-0.238V6.921c0-0.099-0.053-0.192-0.137-0.242l-8.791-5.072c-0.081-0.047-0.189-0.047-0.271,0%20L3.075,6.68C2.99,6.729,2.936,6.825,2.936,6.921v10.15c0,0.097,0.054,0.189,0.139,0.235l2.409,1.392%20c1.307,0.654,2.108-0.116,2.108-0.89V7.787c0-0.142,0.114-0.253,0.256-0.253h1.115c0.139,0,0.255,0.112,0.255,0.253v10.021%20c0,1.745-0.95,2.745-2.604,2.745c-0.508,0-0.909,0-2.026-0.551L2.28,18.675c-0.57-0.329-0.922-0.945-0.922-1.604V6.921%20c0-0.659,0.353-1.275,0.922-1.603l8.795-5.082c0.557-0.315,1.296-0.315,1.848,0l8.794,5.082c0.57,0.329,0.924,0.944,0.924,1.603%20v10.15c0,0.659-0.354,1.273-0.924,1.604l-8.794,5.078C12.643,23.916,12.324,24,11.998,24z%20M19.099,13.993%20c0-1.9-1.284-2.406-3.987-2.763c-2.731-0.361-3.009-0.548-3.009-1.187c0-0.528,0.235-1.233,2.258-1.233%20c1.807,0,2.473,0.389,2.747,1.607c0.024,0.115,0.129,0.199,0.247,0.199h1.141c0.071,0,0.138-0.031,0.186-0.081%20c0.048-0.054,0.074-0.123,0.067-0.196c-0.177-2.098-1.571-3.076-4.388-3.076c-2.508,0-4.004,1.058-4.004,2.833%20c0,1.925,1.488,2.457,3.895,2.695c2.88,0.282,3.103,0.703,3.103,1.269c0,0.983-0.789,1.402-2.642,1.402%20c-2.327,0-2.839-0.584-3.011-1.742c-0.02-0.124-0.126-0.215-0.253-0.215h-1.137c-0.141,0-0.254,0.112-0.254,0.253%20c0,1.482,0.806,3.248,4.655,3.248C17.501,17.007,19.099,15.91,19.099,13.993z'/%3e%3c/svg%3e\"","/**\n * Sdk dashboard widget.\n *\n * This component renders a promotional card for the Smarter developer SDKs:\n * the smarter-chat NPM package (@smarter.sh/ui-chat), the Node.js SDK\n * (@smarter.sh/api), the Python PyPI library (smarter-api) and the Go module\n * (github.com/smarter-sh/smarter-golang). Each SDK shows its logo, links to its\n * package registry, and shows its install command, followed by links to the\n * APIs and SDKs documentation and to a platform's OpenAPI document.\n *\n * :param openapiUrl: The OpenAPI document that the API reference button opens. Defaults to this\n * platform's, which every web console serves. A page outside the web console, such as\n * smarter.sh, passes a platform's absolute url.\n * :type openapiUrl: str\n * :param className: The card's grid column classes, so that the page can set its width.\n * :type className: str\n * :returns: A JSX fragment containing the SDK call-to-action widget.\n * :rtype: JSX.Element\n *\n * :example:\n *\n * <Sdk />\n * <Sdk openapiUrl=\"https://platform.smarter.sh/docs/openapi/\" className=\"col-12\" />\n */\nimport \"./styles.css\";\nimport { gettext, interpolateNodes } from \"@smarter/common\";\nimport goLogo from \"../../assets/go.svg\";\nimport nodedotjsLogo from \"../../assets/nodedotjs.svg\";\n\n/** This platform's OpenAPI document, which every platform serves in its web console. */\nconst OPENAPI_URL = \"/docs/openapi/\";\n\nexport interface SdkProps {\n /** The OpenAPI document that the API reference button opens. */\n openapiUrl?: string;\n /** The card's grid column classes, so that the page can set its width. */\n className?: string;\n}\n\n// The React and Python logos, and the illustration below, are the Keen theme's. They stay at their\n// /static/assets/ paths, which the page serves along with the Keen stylesheet.\nconst SDKS = [\n {\n name: \"smarter-chat NPM Package\",\n href: \"https://www.npmjs.com/package/@smarter.sh/ui-chat\",\n logo: \"/static/assets/media/svg/brand-logos/react.svg\",\n install: \"npm install @smarter.sh/ui-chat\",\n },\n {\n name: \"Node.js SDK\",\n href: \"https://www.npmjs.com/package/@smarter.sh/api\",\n logo: nodedotjsLogo,\n install: \"npm install @smarter.sh/api\",\n },\n {\n name: \"Python PyPi Library\",\n href: \"https://pypi.org/project/smarter-api/\",\n logo: \"/static/assets/media/svg/brand-logos/python-5.svg\",\n install: \"pip install smarter-api\",\n },\n {\n name: \"Go SDK\",\n href: \"https://pkg.go.dev/github.com/smarter-sh/smarter-golang\",\n logo: goLogo,\n install: \"go get github.com/smarter-sh/smarter-golang\",\n },\n];\n\nfunction Sdk({ openapiUrl = OPENAPI_URL, className = \"col-xl-4\" }: SdkProps) {\n return (\n <>\n <section id=\"sdk\" aria-label={gettext(\"SDK\")} className={`${className} mb-5 mb-xl-10`}>\n {/* begin::SDKs widget */}\n <div className=\"card border-transparent h-100 sdk-card\" data-bs-theme=\"light\">\n {/* begin::Body */}\n <div className=\"card-body d-flex flex-column ps-xl-15 h-100 position-relative\">\n {/* begin::Illustration */}\n <img\n src=\"/static/assets/media/illustrations/dozzy-1/4.png\"\n className=\"position-absolute top-0 end-0 h-100px me-1 mt-1\"\n alt=\"\"\n />\n {/* end::Illustration */}\n {/* begin::Title */}\n <div className=\"position-relative fs-2x fw-bold text-gray-900 mb-2 z-index-2\">\n {/* Translators: a headline. %(span)s is its highlighted last words, translated separately. */}\n {interpolateNodes(gettext(\"Build with the %(span)s\"), {\n span: (\n <span className=\"position-relative d-inline-block\">\n {/* Translators: the highlighted words of a headline. %(span)s is their decorative underline, and stays at the end. */}\n {interpolateNodes(gettext(\"SDKs%(span)s\"), {\n span: (\n <span className=\"position-absolute opacity-50 bottom-0 start-0 border-4 border-danger border-bottom w-100\"></span>\n ),\n })}\n </span>\n ),\n })}\n </div>\n <p className=\"text-gray-700 fs-6 mb-7 z-index-2 sdk-lede\">\n {gettext(\"Typed access to your Smarter resources, in the language you already use.\")}\n </p>\n {/* end::Title */}\n {/* begin::SDKs */}\n <ul className=\"sdk-list z-index-2\">\n {SDKS.map((sdk) => (\n <li key={sdk.name} className=\"sdk-item\">\n <span className=\"sdk-logo\">\n <img src={sdk.logo} alt=\"\" />\n </span>\n <span className=\"sdk-text\">\n <a href={sdk.href} target=\"_blank\" className=\"sdk-name\">\n {sdk.name}\n </a>\n <span className=\"sdk-install\">{sdk.install}</span>\n </span>\n </li>\n ))}\n </ul>\n {/* end::SDKs */}\n {/* begin::Action */}\n <div className=\"d-flex flex-wrap gap-2 mt-auto pt-7 z-index-2\">\n <a\n href=\"https://docs.smarter.sh/en/latest/smarter-framework/apis-and-sdks.html\"\n target=\"_blank\"\n className=\"btn btn-sm btn-danger fw-semibold\"\n >\n {gettext(\"Documentation\")}\n </a>\n <a href={openapiUrl} className=\"btn btn-sm btn-light-danger fw-semibold\">\n {gettext(\"API reference\")}\n </a>\n <a\n href=\"https://github.com/smarter-sh\"\n target=\"_blank\"\n className=\"btn btn-sm btn-dark fw-semibold\"\n aria-label={gettext(\"SDK source code\")}\n >\n {gettext(\"GitHub\")}\n </a>\n </div>\n {/* end::Action */}\n </div>\n {/* end::Body */}\n </div>\n {/* end::SDKs widget */}\n </section>\n </>\n );\n}\n\nexport default Sdk;\n","export default \"data:image/svg+xml,%3csvg%20fill='%232496ED'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eDocker%3c/title%3e%3cpath%20d='M13.983%2011.078h2.119a.186.186%200%2000.186-.185V9.006a.186.186%200%2000-.186-.186h-2.119a.185.185%200%2000-.185.185v1.888c0%20.102.083.185.185.185m-2.954-5.43h2.118a.186.186%200%2000.186-.186V3.574a.186.186%200%2000-.186-.185h-2.118a.185.185%200%2000-.185.185v1.888c0%20.102.082.185.185.185m0%202.716h2.118a.187.187%200%2000.186-.186V6.29a.186.186%200%2000-.186-.185h-2.118a.185.185%200%2000-.185.185v1.887c0%20.102.082.185.185.186m-2.93%200h2.12a.186.186%200%2000.184-.186V6.29a.185.185%200%2000-.185-.185H8.1a.185.185%200%2000-.185.185v1.887c0%20.102.083.185.185.186m-2.964%200h2.119a.186.186%200%2000.185-.186V6.29a.185.185%200%2000-.185-.185H5.136a.186.186%200%2000-.186.185v1.887c0%20.102.084.185.186.186m5.893%202.715h2.118a.186.186%200%2000.186-.185V9.006a.186.186%200%2000-.186-.186h-2.118a.185.185%200%2000-.185.185v1.888c0%20.102.082.185.185.185m-2.93%200h2.12a.185.185%200%2000.184-.185V9.006a.185.185%200%2000-.184-.186h-2.12a.185.185%200%2000-.184.185v1.888c0%20.102.083.185.185.185m-2.964%200h2.119a.185.185%200%2000.185-.185V9.006a.185.185%200%2000-.184-.186h-2.12a.186.186%200%2000-.186.186v1.887c0%20.102.084.185.186.185m-2.92%200h2.12a.185.185%200%2000.184-.185V9.006a.185.185%200%2000-.184-.186h-2.12a.185.185%200%2000-.184.185v1.888c0%20.102.082.185.185.185M23.763%209.89c-.065-.051-.672-.51-1.954-.51-.338.001-.676.03-1.01.087-.248-1.7-1.653-2.53-1.716-2.566l-.344-.199-.226.327c-.284.438-.49.922-.612%201.43-.23.97-.09%201.882.403%202.661-.595.332-1.55.413-1.744.42H.751a.751.751%200%2000-.75.748%2011.376%2011.376%200%2000.692%204.062c.545%201.428%201.355%202.48%202.41%203.124%201.18.723%203.1%201.137%205.275%201.137.983.003%201.963-.086%202.93-.266a12.248%2012.248%200%20003.823-1.389c.98-.567%201.86-1.288%202.61-2.136%201.252-1.418%201.998-2.997%202.553-4.4h.221c1.372%200%202.215-.549%202.68-1.009.309-.293.55-.65.707-1.046l.098-.288Z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20fill='%23326CE5'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eKubernetes%3c/title%3e%3cpath%20d='M10.204%2014.35l.007.01-.999%202.413a5.171%205.171%200%200%201-2.075-2.597l2.578-.437.004.005a.44.44%200%200%201%20.484.606zm-.833-2.129a.44.44%200%200%200%20.173-.756l.002-.011L7.585%209.7a5.143%205.143%200%200%200-.73%203.255l2.514-.725.002-.009zm1.145-1.98a.44.44%200%200%200%20.699-.337l.01-.005.15-2.62a5.144%205.144%200%200%200-3.01%201.442l2.147%201.523.004-.002zm.76%202.75l.723.349.722-.347.18-.78-.5-.623h-.804l-.5.623.179.779zm1.5-3.095a.44.44%200%200%200%20.7.336l.008.003%202.134-1.513a5.188%205.188%200%200%200-2.992-1.442l.148%202.615.002.001zm10.876%205.97l-5.773%207.181a1.6%201.6%200%200%201-1.248.594l-9.261.003a1.6%201.6%200%200%201-1.247-.596l-5.776-7.18a1.583%201.583%200%200%201-.307-1.34L2.1%205.573c.108-.47.425-.864.863-1.073L11.305.513a1.606%201.606%200%200%201%201.385%200l8.345%203.985c.438.209.755.604.863%201.073l2.062%208.955c.108.47-.005.963-.308%201.34zm-3.289-2.057c-.042-.01-.103-.026-.145-.034-.174-.033-.315-.025-.479-.038-.35-.037-.638-.067-.895-.148-.105-.04-.18-.165-.216-.216l-.201-.059a6.45%206.45%200%200%200-.105-2.332%206.465%206.465%200%200%200-.936-2.163c.052-.047.15-.133.177-.159.008-.09.001-.183.094-.282.197-.185.444-.338.743-.522.142-.084.273-.137.415-.242.032-.024.076-.062.11-.089.24-.191.295-.52.123-.736-.172-.216-.506-.236-.745-.045-.034.027-.08.062-.111.088-.134.116-.217.23-.33.35-.246.25-.45.458-.673.609-.097.056-.239.037-.303.033l-.19.135a6.545%206.545%200%200%200-4.146-2.003l-.012-.223c-.065-.062-.143-.115-.163-.25-.022-.268.015-.557.057-.905.023-.163.061-.298.068-.475.001-.04-.001-.099-.001-.142%200-.306-.224-.555-.5-.555-.275%200-.499.249-.499.555l.001.014c0%20.041-.002.092%200%20.128.006.177.044.312.067.475.042.348.078.637.056.906a.545.545%200%200%201-.162.258l-.012.211a6.424%206.424%200%200%200-4.166%202.003%208.373%208.373%200%200%201-.18-.128c-.09.012-.18.04-.297-.029-.223-.15-.427-.358-.673-.608-.113-.12-.195-.234-.329-.349-.03-.026-.077-.062-.111-.088a.594.594%200%200%200-.348-.132.481.481%200%200%200-.398.176c-.172.216-.117.546.123.737l.007.005.104.083c.142.105.272.159.414.242.299.185.546.338.743.522.076.082.09.226.1.288l.16.143a6.462%206.462%200%200%200-1.02%204.506l-.208.06c-.055.072-.133.184-.215.217-.257.081-.546.11-.895.147-.164.014-.305.006-.48.039-.037.007-.09.02-.133.03l-.004.002-.007.002c-.295.071-.484.342-.423.608.061.267.349.429.645.365l.007-.001.01-.003.129-.029c.17-.046.294-.113.448-.172.33-.118.604-.217.87-.256.112-.009.23.069.288.101l.217-.037a6.5%206.5%200%200%200%202.88%203.596l-.09.218c.033.084.069.199.044.282-.097.252-.263.517-.452.813-.091.136-.185.242-.268.399-.02.037-.045.095-.064.134-.128.275-.034.591.213.71.248.12.556-.007.69-.282v-.002c.02-.039.046-.09.062-.127.07-.162.094-.301.144-.458.132-.332.205-.68.387-.897.05-.06.13-.082.215-.105l.113-.205a6.453%206.453%200%200%200%204.609.012l.106.192c.086.028.18.042.256.155.136.232.229.507.342.84.05.156.074.295.145.457.016.037.043.09.062.129.133.276.442.402.69.282.247-.118.341-.435.213-.71-.02-.039-.045-.096-.065-.134-.083-.156-.177-.261-.268-.398-.19-.296-.346-.541-.443-.793-.04-.13.007-.21.038-.294-.018-.022-.059-.144-.083-.202a6.499%206.499%200%200%200%202.88-3.622c.064.01.176.03.213.038.075-.05.144-.114.28-.104.266.039.54.138.87.256.154.06.277.128.448.173.036.01.088.019.13.028l.009.003.007.001c.297.064.584-.098.645-.365.06-.266-.128-.537-.423-.608zM16.4%209.701l-1.95%201.746v.005a.44.44%200%200%200%20.173.757l.003.01%202.526.728a5.199%205.199%200%200%200-.108-1.674A5.208%205.208%200%200%200%2016.4%209.7zm-4.013%205.325a.437.437%200%200%200-.404-.232.44.44%200%200%200-.372.233h-.002l-1.268%202.292a5.164%205.164%200%200%200%203.326.003l-1.27-2.296h-.01zm1.888-1.293a.44.44%200%200%200-.27.036.44.44%200%200%200-.214.572l-.003.004%201.01%202.438a5.15%205.15%200%200%200%202.081-2.615l-2.6-.44-.004.005z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20fill='%23844FBA'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eTerraform%3c/title%3e%3cpath%20d='M1.44%200v7.575l6.561%203.79V3.787zm21.12%204.227l-6.561%203.791v7.574l6.56-3.787zM8.72%204.23v7.575l6.561%203.787V8.018zm0%208.405v7.575L15.28%2024v-7.578z'/%3e%3c/svg%3e\"","/**\n * SelfHost dashboard widget.\n *\n * This component renders a promotional card for self-hosting Smarter, as a\n * three-step path from a laptop to production: the Docker Compose Quick Start\n * (smarter-deploy), the official Helm chart for Kubernetes, and the official\n * Terraform modules for AWS (smarter-infrastructure). Each step links to its\n * resource, followed by a link to the installation guide.\n *\n * :returns: A JSX fragment containing the self-host call-to-action widget.\n * :rtype: JSX.Element\n *\n * :example:\n *\n * <SelfHost />\n */\nimport \"./styles.css\";\nimport { gettext, interpolateNodes } from \"@smarter/common\";\nimport dockerLogo from \"../../assets/docker.svg\";\nimport kubernetesLogo from \"../../assets/kubernetes.svg\";\nimport terraformLogo from \"../../assets/terraform.svg\";\n\nconst STEPS = [\n {\n name: \"Docker\",\n where: gettext(\"Your laptop\"),\n description: gettext(\"Quick Start with Docker Compose\"),\n logo: dockerLogo,\n href: \"https://github.com/smarter-sh/smarter-deploy\",\n },\n {\n name: \"Kubernetes\",\n where: gettext(\"Your cluster\"),\n description: gettext(\"The official Helm chart\"),\n logo: kubernetesLogo,\n href: \"https://artifacthub.io/packages/helm/project-smarter/smarter\",\n },\n {\n name: \"Terraform\",\n where: gettext(\"Your AWS cloud\"),\n description: gettext(\"The official Terraform modules\"),\n logo: terraformLogo,\n href: \"https://github.com/smarter-sh/smarter-infrastructure\",\n },\n];\n\nfunction SelfHost() {\n return (\n <>\n {/* begin::Engage widget 4 */}\n <section\n id=\"self-host\"\n aria-label={gettext(\"Self Host\")}\n className=\"card border-transparent h-100 selfhost-card\"\n data-bs-theme=\"light\"\n >\n {/* begin::Body */}\n <div className=\"card-body d-flex flex-column ps-xl-15 h-100\">\n {/* begin::Title */}\n <span className=\"selfhost-eyebrow\">{gettext(\"Self-host Smarter\")}</span>\n <div className=\"fs-2x fw-bold text-white mt-3 mb-2\">\n {/* Translators: a headline. %(span)s is its highlighted last words, translated separately. */}\n {interpolateNodes(gettext(\"Run it %(span)s\"), {\n span: (\n <span className=\"position-relative d-inline-block\">\n {/* Translators: the highlighted words of a headline. %(span)s is their decorative underline, and stays at the end. */}\n {interpolateNodes(gettext(\"anywhere%(span)s\"), {\n span: (\n <span className=\"position-absolute bottom-0 start-0 border-4 border-bottom w-100 selfhost-underline\"></span>\n ),\n })}\n </span>\n ),\n })}\n </div>\n <p className=\"fs-6 mb-7 selfhost-lede\">\n {gettext(\"The same open source platform, from your laptop to production. No license fees, no seat counts.\")}\n </p>\n {/* end::Title */}\n {/* begin::Steps */}\n <ol className=\"selfhost-steps\">\n {STEPS.map((step, index) => (\n <li key={step.name} className=\"selfhost-step\">\n <a href={step.href} target=\"_blank\" className=\"selfhost-step-link hover-elevate-up\">\n <span className=\"selfhost-logo\">\n <img src={step.logo} alt=\"\" />\n <span className=\"selfhost-number\">{index + 1}</span>\n </span>\n <span className=\"selfhost-where\">{step.where}</span>\n <span className=\"selfhost-name\">{step.name}</span>\n <span className=\"selfhost-description\">{step.description}</span>\n </a>\n </li>\n ))}\n </ol>\n {/* end::Steps */}\n {/* begin::Action */}\n <div className=\"d-flex flex-wrap align-items-center gap-3 mt-auto pt-7\">\n <a\n href=\"https://docs.smarter.sh/en/latest/smarter-platform/installation.html\"\n target=\"_blank\"\n className=\"btn btn-sm fw-semibold selfhost-btn\"\n >\n {gettext(\"Installation Guide\")}\n </a>\n <span className=\"selfhost-license\">{gettext(\"Open source · AGPL-3.0\")}</span>\n </div>\n {/* end::Action */}\n </div>\n {/* end::Body */}\n </section>\n {/* end::Engage widget 4 */}\n </>\n );\n}\n\nexport default SelfHost;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ui-widgets.es.js","names":["_jsx","_Fragment","Fragment","packageJson","_Fragment","_Fragment","DOCS","STEPS","_Fragment","DOCS_BASE_URL","_Fragment","wordpressLogo","drupalLogo","shopifyLogo","docusaurusLogo","materialformkdocsLogo","sphinxLogo","vitepressLogo","_Fragment","_Fragment","nodedotjsLogo","goLogo","_Fragment","dockerLogo","kubernetesLogo","terraformLogo","_Fragment","FEATURES","_Fragment","_Fragment","Fragment$1","PLACEHOLDER","catalog","gettext","django","msgid","interpolateNodes","parts","last","match","message","placeholder","name","index","values","jsx","Fragment","part","package_default","\"private\"","\"import\"","\"require\"","\"types\"","\"clean\"","\"build\"","\"lint\"","\"storybook\"","\"typecheck\"","\"test\"","\"react\"","\"eslint\"","\"globals\"","\"typescript\"","\"vitest\"","packageName","packageVersion","SESSION","Cli","className","line","WAYS_TO_HELP","BADGES","Contribute","way","badge","DOCS$1","EXTENSIONS","STEPS$1","Extensions","step","extension","DOCS_BASE_URL$1","CATALOG","STATS","COURSES","FORMATS","CourseChips","hidden","courses","course","Instructors","stat","row","format","docusaurus_default","drupal_default","materialformkdocs_default","shopify_default","sphinx_default","vitepress_default","wordpress_default","DOCS","INTEGRATIONS","Integrations","integration","MCP_SERVER_PATH","TOOLS","defaultServerUrl","McpServer","serverUrl","tool","go_default","nodedotjs_default","OPENAPI_URL","SDKS","Sdk","sdk","openapiUrl","STEPS","SelfHost","MARKETPLACE","FEATURES$1","VSCodeExtension","feature","DOCS_BASE_URL","FEATURES","WhatsNew"],"sources":["../../smarter-common/dist/lib/i18n.js","../../smarter-common/package.json","../../smarter-common/dist/lib/const.js","../../smarter-common/dist/components/TabbedListView/cookie.js","../../smarter-common/dist/lib/cache.js","../src/components/Cli/Component.tsx","../src/components/Contribute/Component.tsx","../src/components/Extensions/Component.tsx","../src/components/Instructors/Component.tsx","../src/assets/docusaurus.svg","../src/assets/drupal.svg","../src/assets/materialformkdocs.svg","../src/assets/shopify.svg","../src/assets/sphinx.svg","../src/assets/vitepress.svg","../src/assets/wordpress.svg","../src/components/Integrations/Component.tsx","../src/components/McpServer/Component.tsx","../src/assets/go.svg","../src/assets/nodedotjs.svg","../src/components/Sdk/Component.tsx","../src/assets/docker.svg","../src/assets/kubernetes.svg","../src/assets/terraform.svg","../src/components/SelfHost/Component.tsx","../src/components/VSCodeExtension/Component.tsx","../src/components/WhatsNew/Component.tsx"],"sourcesContent":["import { jsx as _jsx, Fragment as _Fragment } from \"react/jsx-runtime\";\n/**\n * Translation functions for the web console's React apps.\n *\n * The web console is translated with gettext. Django renders each page in the\n * user's language, and dashboard/base.html loads that language's message\n * catalog for the React apps from Django's JavaScriptCatalog view (the djangojs\n * domain), which defines window.django.gettext() and friends. These functions\n * call it, and fall back to the English source text when no catalog is loaded,\n * e.g. in tests and Storybook.\n *\n * Every message is English source text, and must be a string literal, so that\n * `npm run i18n:extract` can find it. Interpolate values afterwards, with\n * Python-style named placeholders, so that a translator can move them:\n *\n * @example\n * gettext(\"Secrets\");\n * interpolate(gettext(\"Rename secret %(name)s.\"), { name: secret.name });\n * ngettext(\"%(count)s secret\", \"%(count)s secrets\", n);\n * pgettext(\"verb\", \"Clone\");\n * // a React element inside a sentence:\n * interpolateNodes(gettext(\"Delete secret %(name)s?\"), { name: <strong>{secret.name}</strong> });\n *\n * A comment that begins with \"Translators:\" on the line before a call is copied\n * into the message catalog for the translator.\n */\nimport { Fragment } from \"react\";\nconst PLACEHOLDER = /%\\(([A-Za-z_][A-Za-z0-9_]*)\\)s/g;\nconst catalog = () => (typeof window === \"undefined\" ? undefined : window.django);\n/** Translates a message. */\nexport function gettext(msgid) {\n const django = catalog();\n return django?.gettext ? django.gettext(msgid) : msgid;\n}\n/** Translates a message that has a singular and a plural form, chosen by count. */\nexport function ngettext(singular, plural, count) {\n const django = catalog();\n if (django?.ngettext)\n return django.ngettext(singular, plural, count);\n return count === 1 ? singular : plural;\n}\n/** Translates a message in a context, which tells apart two messages with the same English text. */\nexport function pgettext(context, msgid) {\n const django = catalog();\n return django?.pgettext ? django.pgettext(context, msgid) : msgid;\n}\n/** ngettext() in a context. */\nexport function npgettext(context, singular, plural, count) {\n const django = catalog();\n if (django?.npgettext)\n return django.npgettext(context, singular, plural, count);\n return count === 1 ? singular : plural;\n}\n/**\n * Replaces each %(name)s placeholder in a translated message with values[name].\n * A placeholder with no value is left as it is, so that the mistake shows.\n */\nexport function interpolate(message, values) {\n return message.replace(PLACEHOLDER, (placeholder, name) => {\n const value = values[name];\n return value === undefined || value === null ? placeholder : String(value);\n });\n}\n/**\n * interpolate() for values that are React nodes, e.g. a name in <strong> inside a\n * sentence. Returns a fragment of the message's text and the values, in the order\n * that the (translated) message puts them.\n */\nexport function interpolateNodes(message, values) {\n const parts = [];\n let last = 0;\n for (const match of message.matchAll(PLACEHOLDER)) {\n const [placeholder, name] = match;\n const index = match.index ?? 0;\n if (index > last)\n parts.push(message.slice(last, index));\n parts.push(name in values ? values[name] : placeholder);\n last = index + placeholder.length;\n }\n if (last < message.length)\n parts.push(message.slice(last));\n return (_jsx(_Fragment, { children: parts.map((part, index) => (_jsx(Fragment, { children: part }, index))) }));\n}\n/** The language of the page, from the lang attribute that Django renders on <html>, e.g. \"en\". */\nexport function currentLanguage() {\n if (typeof document === \"undefined\")\n return \"en\";\n return document.documentElement.lang || \"en\";\n}\n//# sourceMappingURL=i18n.js.map","{\n \"name\": \"@smarter/common\",\n \"private\": true,\n \"version\": \"0.2.0\",\n \"type\": \"module\",\n \"main\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\"\n }\n },\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"clean\": \"rm -rf dist\",\n \"build\": \"npm run clean && tsc -p tsconfig.build.json && rsync -a --prune-empty-dirs --include='/' --include='.css' --exclude='*' src/ dist/\",\n \"build:dist-manifest\": \"node --input-type=module -e \\\"import fs from 'node:fs'; const pkg = JSON.parse(fs.readFileSync('package.json','utf8')); const out = { name: pkg.name, version: pkg.version, type: pkg.type, main: './index.js', types: './index.d.ts', peerDependencies: pkg.peerDependencies ?? {}, dependencies: pkg.dependencies ?? {} }; fs.writeFileSync('dist/package.json', JSON.stringify(out, null, 2) + '\\\\n');\\\"\",\n \"pack:tgz\": \"npm pack --ignore-scripts\",\n \"lint\": \"eslint .\",\n \"storybook\": \"storybook dev -p 6006\",\n \"build-storybook\": \"storybook build\",\n \"typecheck\": \"tsc -b\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\"\n },\n \"peerDependencies\": {\n \"react\": \"^19\",\n \"react-dom\": \"^19\"\n },\n \"dependencies\": {\n \"date-fns\": \"^4.4.0\"\n },\n \"devDependencies\": {\n \"@eslint/js\": \"^10.0.1\",\n \"@storybook/addon-a11y\": \"^10.6.1\",\n \"@storybook/addon-docs\": \"^10.6.1\",\n \"@storybook/react-vite\": \"^10.6.1\",\n \"@types/node\": \"^26.6.3\",\n \"@types/react\": \"^19.3.0\",\n \"@types/react-dom\": \"^19.3.0\",\n \"eslint\": \"^10.11.0\",\n \"eslint-plugin-react-hooks\": \"^7.1.1\",\n \"eslint-plugin-storybook\": \"^10.6.1\",\n \"globals\": \"^17.13.0\",\n \"react\": \"^19.3.0\",\n \"react-dom\": \"^19.3.0\",\n \"storybook\": \"^10.6.1\",\n \"typescript\": \"~6.0.2\",\n \"typescript-eslint\": \"^8.71.0\",\n \"vitest\": \"^5.0.3\"\n }\n}\n","import packageJson from \"../../package.json\" with { type: \"json\" };\nexport const packageName = packageJson.name;\nexport const packageVersion = packageJson.version;\nexport const loggerPrefix = `[Smarter ${packageName} v${packageVersion}]`;\n//# sourceMappingURL=const.js.map","import { loggerPrefix } from \"../../lib/const\";\nimport { packageName, packageVersion } from \"../../lib/const\";\nconst COOKIE_NAME_PREFIX = `${packageName}_v${packageVersion}`;\nconst getUrlOrigin = () => {\n if (typeof window !== \"undefined\" && typeof window.location?.origin === \"string\") {\n return window.location.origin;\n }\n return \"http://localhost\";\n};\nexport const getUrlPath = (url) => {\n console.debug(loggerPrefix, `getUrlPath(): Extracting path from URL: ${url}`);\n return new URL(url, getUrlOrigin()).pathname;\n};\n/**\n * Sets a cookie to store the llmclient count for a given URL.\n *\n * @param url - The unique identifier for the llmclient group.\n * @param llmclientCount - The number of llmclients to store.\n * @param days - Number of days until the cookie expires.\n */\nexport const setCookieForUrl = (url, llmclientCount, days) => {\n const MS_PER_DAY = 24 * 60 * 60 * 1000;\n const expires = new Date(Date.now() + days * MS_PER_DAY).toUTCString();\n const cookieName = `${COOKIE_NAME_PREFIX}_${getUrlPath(url)}`;\n const cookieValue = `${cookieName}=${llmclientCount}; path=/; expires=${expires};`;\n try {\n document.cookie = cookieValue;\n console.debug(loggerPrefix, `setCookieForUrl(): ${cookieValue}`);\n }\n catch (e) {\n console.warn(loggerPrefix, \"setCookieForUrl(): Unable to set llmclient count cookie\", e);\n }\n};\n/**\n * Retrieves the llmclient count stored in a cookie for a given URL.\n *\n * @param url - The unique identifier for the llmclient group.\n * @returns The number of llmclients stored in the cookie, or undefined if not found or invalid.\n */\nexport const getCookieForUrl = (url) => {\n const cookieName = `${COOKIE_NAME_PREFIX}_${getUrlPath(url)}`;\n const cookies = document.cookie.split(\";\").map((c) => c.trim());\n for (const cookie of cookies) {\n if (cookie.startsWith(cookieName + \"=\")) {\n const strVal = cookie.substring(cookieName.length + 1);\n const numVal = parseInt(strVal, 10);\n const retVal = isNaN(numVal) ? undefined : numVal;\n console.debug(loggerPrefix, `getCookieForUrl(): Retrieved cookie for ${cookieName}:`, retVal);\n return retVal;\n }\n }\n console.warn(loggerPrefix, `getCookieForUrl(): Cookie for ${cookieName} not found. If you are not under /, it may not be visible due to cookie path restrictions.`);\n return undefined;\n};\n//# sourceMappingURL=cookie.js.map","/**\n * Tabbed list cache utilities.\n *\n * Stores plugin objects in sessionStorage using a key scoped by API URL and slug,\n * with a one-week TTL and automatic cleanup of expired entries.\n */\nimport { loggerPrefix } from \"./const\";\nimport { packageName, packageVersion } from \"./const\";\nconst CACHE_PREFIX = `${packageName}_v${packageVersion}_objects_v1`;\nconst CACHE_TTL_MS = 7 * 24 * 60 * 60 * 1000; // 1 week\n/**\n * Builds a stable sessionStorage key for a specific API endpoint and tab slug.\n *\n * @param apiUrl Base API URL used to scope cache entries by backend.\n * @param slug Tab or list identifier to isolate cached objects per view.\n * @returns A deterministic sessionStorage key.\n * @throws This function does not throw under normal operation.\n */\nexport const makeCacheKey = (apiUrl, slug) => {\n return `${CACHE_PREFIX}:${apiUrl}${slug}`;\n};\n/**\n * Reads and validates cached llmclient objects.\n *\n * Returns null for missing, invalid, or expired entries and removes expired\n * data to keep storage clean.\n *\n * @param key Fully qualified sessionStorage cache key.\n * @returns The cached llmclient array when present and valid; otherwise `null`.\n * @throws No exceptions are propagated. JSON parse errors, sessionStorage access\n * failures, and other runtime errors are caught and treated as a cache miss.\n */\nexport const readCache = (key) => {\n try {\n const raw = sessionStorage.getItem(key);\n if (!raw) {\n console.debug(`${loggerPrefix} readCache() cache miss for`, key);\n return null;\n }\n const parsed = JSON.parse(raw);\n if (!parsed || typeof parsed.ts !== \"number\" || !Array.isArray(parsed.objects)) {\n console.debug(`${loggerPrefix} readCache() cache invalid for`, key);\n return null;\n }\n if (Date.now() - parsed.ts > CACHE_TTL_MS) {\n console.debug(`${loggerPrefix} readCache() cache expired for`, key);\n sessionStorage.removeItem(key);\n return null;\n }\n console.debug(`${loggerPrefix} readCache() cache hit for`, key, \"with\", parsed.objects);\n return parsed.objects;\n }\n catch {\n return null;\n }\n};\n/**\n * Persists llmclient objects to sessionStorage with a write timestamp.\n *\n * @param key Fully qualified sessionStorage cache key.\n * @param objects LLMClient objects to cache for subsequent reads.\n * @returns `void`.\n * @throws No exceptions are propagated. sessionStorage write failures (for\n * example quota exceeded or private mode restrictions) are caught and ignored.\n */\nexport const writeCache = (key, objects) => {\n try {\n console.debug(`${loggerPrefix} writeCache() writing sessionStorage cache for`, key, \"with\", objects.length, \"objects\");\n const payload = { ts: Date.now(), objects };\n sessionStorage.setItem(key, JSON.stringify(payload));\n }\n catch {\n // ignore quota/private-mode errors\n }\n};\n//# sourceMappingURL=cache.js.map","/**\n * Cli dashboard widget.\n *\n * This component renders a dashboard call-to-action card for the Smarter\n * command-line interface, styled as a terminal window that shows a typical\n * session (install, configure, apply, deploy, list), followed by links to\n * download the CLI and open its documentation.\n *\n * :param className: The card's grid column classes, so that the page can set its width.\n * :type className: str\n * :returns: A JSX fragment containing the CLI promotion widget.\n * :rtype: JSX.Element\n *\n * :example:\n *\n * <Cli />\n * <Cli className=\"col-12\" />\n */\nimport \"./styles.css\";\nimport { gettext, interpolateNodes } from \"@smarter/common\";\n\nconst SESSION = [\n { command: \"brew install smarter\", comment: gettext(\"or apt, choco, docker\") },\n { command: \"smarter configure\" },\n { command: \"smarter apply -f llmclient.yaml\" },\n { command: \"smarter deploy llmclient customer_support\" },\n { command: \"smarter get llmclients\" },\n];\n\nexport interface CliProps {\n /** The card's grid column classes, so that the page can set its width. */\n className?: string;\n}\n\nfunction Cli({ className = \"col-xl-4\" }: CliProps) {\n return (\n <>\n <section id=\"cli\" aria-label={gettext(\"CLI\")} className={`${className} mb-5 mb-xl-10`}>\n {/* begin::Engage widget 4 */}\n <div className=\"card border-transparent h-100 cli-card\" data-bs-theme=\"light\">\n {/* begin::Body */}\n <div className=\"card-body d-flex flex-column ps-xl-15 h-100\">\n {/* begin::Title */}\n <div className=\"fs-2x fw-bold text-white mb-2\">\n {/* Translators: a headline. %(span)s is its highlighted last words, translated separately. */}\n {interpolateNodes(gettext(\"Smarter %(span)s\"), {\n span: (\n <span className=\"position-relative d-inline-block\">\n {/* Translators: the highlighted words of a headline. %(span)s is their decorative underline, and stays at the end. */}\n {interpolateNodes(gettext(\"CLI%(span)s\"), {\n span: (\n <span className=\"position-absolute opacity-50 bottom-0 start-0 border-4 border-success border-bottom w-100\"></span>\n ),\n })}\n </span>\n ),\n })}\n </div>\n <p className=\"text-gray-400 fs-6 mb-7\">{gettext(\"Powerful tools for managing your AI resources.\")}</p>\n {/* end::Title */}\n {/* begin::Terminal */}\n <div className=\"cli-terminal\" aria-label={gettext(\"Example CLI session\")}>\n <div className=\"cli-terminal-bar\">\n <span className=\"cli-dot cli-dot-red\"></span>\n <span className=\"cli-dot cli-dot-yellow\"></span>\n <span className=\"cli-dot cli-dot-green\"></span>\n </div>\n <pre className=\"cli-terminal-body\">\n {SESSION.map((line) => (\n <div key={line.command}>\n <span className=\"cli-prompt\">$ </span>\n {line.command}\n {line.comment && <span className=\"cli-comment\"> # {line.comment}</span>}\n </div>\n ))}\n <div>\n <span className=\"cli-prompt\">$ </span>\n <span className=\"cli-cursor\"></span>\n </div>\n </pre>\n </div>\n {/* end::Terminal */}\n {/* begin::Action */}\n <div className=\"mt-auto pt-7\">\n <a href=\"https://smarter.sh/cli/\" target=\"_blank\" className=\"btn btn-sm btn-success fw-semibold me-2\">\n {gettext(\"Download\")}\n </a>\n <a\n href=\"https://docs.smarter.sh/en/latest/smarter-framework/smarter-cli.html\"\n target=\"_blank\"\n className=\"btn btn-sm btn-light fw-semibold\"\n >\n {gettext(\"Documentation\")}\n </a>\n </div>\n {/* end::Action */}\n </div>\n {/* end::Body */}\n </div>\n {/* end::Engage widget 4 */}\n </section>\n </>\n );\n}\n\nexport default Cli;\n","/**\n * Contribute dashboard widget.\n *\n * This component renders a dashboard contribution-focused card that encourages community\n * participation in the Smarter project: a few ways to help, the repository's activity\n * badges, links to the contributing guide and the open issues, and a supporting\n * illustration.\n *\n * :returns: A JSX fragment containing the contribution engagement widget.\n * :rtype: JSX.Element\n *\n * :example:\n *\n * <Contribute />\n */\nimport \"./styles.css\";\nimport { gettext, interpolateNodes } from \"@smarter/common\";\n\nconst WAYS_TO_HELP = [\n gettext(\"Fix a bug\"),\n gettext(\"Improve the docs\"),\n gettext(\"Write a test\"),\n gettext(\"Build an extension\"),\n];\n\nconst BADGES = [\n {\n href: \"https://github.com/smarter-sh/smarter/releases\",\n src: \"https://img.shields.io/github/v/release/smarter-sh/smarter?style=flat&color=ea580c\",\n alt: gettext(\"Latest Release\"),\n },\n {\n href: \"https://github.com/smarter-sh/smarter/stargazers\",\n src: \"https://img.shields.io/github/stars/smarter-sh/smarter?style=flat&color=ea580c\",\n alt: gettext(\"GitHub Stars\"),\n },\n {\n href: \"https://github.com/smarter-sh/smarter/network/members\",\n src: \"https://img.shields.io/github/forks/smarter-sh/smarter?style=flat&color=ea580c\",\n alt: gettext(\"GitHub Forks\"),\n },\n];\n\nfunction Contribute() {\n return (\n <>\n {/* begin::Engage widget 4 */}\n <section\n id=\"contribute\"\n aria-label={gettext(\"Contribute\")}\n className=\"card border-transparent h-100 contribute-card\"\n data-bs-theme=\"light\"\n >\n {/* begin::Body */}\n <div className=\"card-body d-flex flex-column ps-xl-15 h-100 position-relative\">\n {/* begin::Illustration */}\n {/* The Keen theme's illustration, which the page serves along with the Keen stylesheet. */}\n <img\n src=\"/static/assets/media/illustrations/dozzy-1/13.png\"\n className=\"position-absolute bottom-0 end-0 me-3 h-250px d-none d-md-block contribute-illustration\"\n alt=\"\"\n />\n {/* end::Illustration */}\n {/* begin::Title */}\n <div className=\"position-relative fs-2x fw-bold text-gray-900 mb-2 z-index-2\">\n {/* Translators: a headline. %(span)s is its highlighted last words, translated separately. */}\n {interpolateNodes(gettext(\"Contribute to %(span)s\"), {\n span: (\n <span className=\"position-relative d-inline-block\">\n {/* Translators: the highlighted words of a headline. %(span)s is their decorative underline, and stays at the end. */}\n {interpolateNodes(gettext(\"Smarter%(span)s\"), {\n span: (\n <span className=\"position-absolute bottom-0 start-0 border-4 border-bottom w-100 contribute-underline\"></span>\n ),\n })}\n </span>\n ),\n })}\n </div>\n <p className=\"text-gray-700 fs-6 mb-5 z-index-2 contribute-lede\">\n {gettext(\n \"Start small, learn by doing, and help improve Smarter while you discover how real Python projects work.\",\n )}\n </p>\n {/* end::Title */}\n {/* begin::Ways to help */}\n <ul className=\"contribute-chips z-index-2\" aria-label={gettext(\"Ways to help\")}>\n {WAYS_TO_HELP.map((way) => (\n <li key={way} className=\"contribute-chip\">\n {way}\n </li>\n ))}\n </ul>\n {/* end::Ways to help */}\n {/* begin::Badges */}\n <ul className=\"contribute-badges z-index-2\">\n {BADGES.map((badge) => (\n <li key={badge.alt}>\n <a href={badge.href} target=\"_blank\" rel=\"noopener noreferrer\">\n <img src={badge.src} alt={badge.alt} />\n </a>\n </li>\n ))}\n </ul>\n {/* end::Badges */}\n {/* begin::Action */}\n <div className=\"mt-auto pt-7 z-index-2\">\n <a\n href=\"https://docs.smarter.sh/en/latest/smarter-framework/guides/contributing.html\"\n target=\"_blank\"\n className=\"btn btn-sm fw-semibold me-2 contribute-btn\"\n >\n {gettext(\"Contributing guide\")}\n </a>\n <a\n href=\"https://github.com/smarter-sh/smarter/issues\"\n target=\"_blank\"\n className=\"btn btn-sm btn-light fw-semibold\"\n >\n {gettext(\"Open issues\")}\n </a>\n </div>\n {/* end::Action */}\n </div>\n {/* end::Body */}\n </section>\n {/* end::Engage widget 4 */}\n </>\n );\n}\n\nexport default Contribute;\n","/**\n * Extensions dashboard widget.\n *\n * This component renders a card about Smarter Extensions: Python packages\n * that add tools to a platform's LLMs, installed by superusers from the\n * signed Smarter Extension registry without a redeploy, and listed in an\n * LLMClient's ``spec.extensions``. It shows the three official extensions\n * with their trust badge and a link to its GitHub repository, a manifest that uses one, and links to the\n * documentation, the registry, and the guide to building an extension.\n *\n * :returns: A JSX fragment containing the Extensions widget.\n * :rtype: JSX.Element\n *\n * :example:\n *\n * <Extensions />\n */\nimport \"./styles.css\";\nimport { gettext, interpolateNodes } from \"@smarter/common\";\n\nconst DOCS = \"https://docs.smarter.sh/en/latest\";\n\nconst EXTENSIONS = [\n {\n slug: \"weather\",\n name: \"Weather\",\n description: gettext(\"Current weather and a 24-hour forecast for any location.\"),\n icon: \"ki-cloud\",\n },\n {\n slug: \"calculator\",\n name: \"Calculator\",\n description: gettext(\"Evaluates math expressions exactly, so that LLMs don't guess.\"),\n icon: \"ki-calculator\",\n },\n {\n slug: \"date-calculator\",\n name: \"Date Calculator\",\n description: gettext(\"Date arithmetic: differences, adding and subtracting days.\"),\n icon: \"ki-calendar\",\n },\n];\n\nconst STEPS = [\n gettext(\"Browse the registry\"),\n gettext(\"Install, signature-checked\"),\n gettext(\"Enable, then list it in a manifest\"),\n];\n\nfunction Extensions() {\n return (\n <>\n <section id=\"extensions\" aria-label={gettext(\"Extensions\")} className=\"card border-transparent extensions-card\">\n <div className=\"card-body ps-xl-15\">\n <div className=\"row g-7 align-items-center\">\n {/* begin::Pitch */}\n <div className=\"col-md-6\">\n <span className=\"extensions-eyebrow\">{gettext(\"New in 0.27\")}</span>\n <div className=\"fs-2x fw-bold text-gray-900 mt-3 mb-2\">\n {/* Translators: a headline. %(span)s is its highlighted last words, translated separately. */}\n {interpolateNodes(gettext(\"Add tools with %(span)s\"), {\n span: (\n <span className=\"position-relative d-inline-block\">\n {/* Translators: the highlighted words of a headline. %(span)s is their decorative underline, and stays at the end. */}\n {interpolateNodes(gettext(\"Extensions%(span)s\"), {\n span: (\n <span className=\"position-absolute bottom-0 start-0 border-4 border-bottom w-100 extensions-underline\"></span>\n ),\n })}\n </span>\n ),\n })}\n </div>\n <p className=\"text-gray-700 fs-6 mb-4\">\n {gettext(\n \"Python packages that give your LLMs new tools, installed from the signed Smarter Extension registry without a redeploy.\",\n )}\n </p>\n <ol className=\"extensions-steps\">\n {STEPS.map((step, index) => (\n <li key={step}>\n <span className=\"extensions-step-number\">{index + 1}</span>\n {step}\n </li>\n ))}\n </ol>\n <div className=\"d-flex flex-wrap gap-2 mt-5\">\n <a\n href={`${DOCS}/smarter-platform/extensions.html`}\n target=\"_blank\"\n className=\"btn btn-sm fw-semibold extensions-btn\"\n >\n {gettext(\"How extensions work\")}\n </a>\n <a\n href=\"https://github.com/smarter-sh/extensions-registry\"\n target=\"_blank\"\n className=\"btn btn-sm btn-light fw-semibold\"\n >\n {gettext(\"Browse the registry\")}\n </a>\n <a\n href={`${DOCS}/smarter-framework/smarter-extensions.html`}\n target=\"_blank\"\n className=\"align-self-center fw-semibold extensions-link\"\n >\n {gettext(\"Build one →\")}\n </a>\n </div>\n </div>\n {/* end::Pitch */}\n {/* begin::Registry */}\n <div className=\"col-md-6\">\n <ul className=\"extensions-list\" aria-label={gettext(\"Official extensions\")}>\n {EXTENSIONS.map((extension) => (\n <li key={extension.slug}>\n <a\n href={`https://github.com/smarter-sh/smarter-extension-${extension.slug}`}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"extensions-item\"\n >\n <span className=\"extensions-icon\">\n <i className={`ki-outline ${extension.icon} fs-2`}></i>\n </span>\n <span className=\"extensions-text\">\n <span className=\"extensions-name\">\n {extension.name}\n <span className=\"extensions-badge\">{gettext(\"Official\")}</span>\n </span>\n <span className=\"extensions-description\">{extension.description}</span>\n </span>\n </a>\n </li>\n ))}\n </ul>\n <pre className=\"extensions-manifest\" aria-label={gettext(\"An LLMClient manifest that uses an extension\")}>\n <span className=\"extensions-key\">kind</span>: <span className=\"extensions-str\">LLMClient</span>\n {\"\\n\"}\n <span className=\"extensions-key\">spec</span>:{\"\\n\"}\n {\" \"}\n <span className=\"extensions-key\">extensions</span>:{\"\\n\"}\n {\" \"}- <span className=\"extensions-str\">weather</span>\n </pre>\n </div>\n {/* end::Registry */}\n </div>\n </div>\n </section>\n </>\n );\n}\n\nexport default Extensions;\n","/**\n * Instructors dashboard widget.\n *\n * This component renders a promotional card for teaching with Smarter: the\n * Smarter Instructor Guide and the Free Course Designs, 21 ready-to-teach\n * course designs (19 micro courses and 2 master classes) that are free and\n * open source. It shows the catalog's headline numbers, two scrolling\n * ribbons of every course, each linked to its course design, the three\n * formats of a micro course, and links to the catalog and the guide.\n *\n * :param className: The card's grid column classes, so that the page can set its width.\n * :type className: str\n * :returns: A JSX fragment containing the instructors call-to-action widget.\n * :rtype: JSX.Element\n *\n * :example:\n *\n * <Instructors />\n * <Instructors className=\"col-12\" />\n */\nimport \"./styles.css\";\nimport { gettext, interpolateNodes } from \"@smarter/common\";\n\nconst DOCS_BASE_URL = \"https://docs.smarter.sh\";\nconst CATALOG = `${DOCS_BASE_URL}/smarter-instructors/example-courses`;\n\ninterface Course {\n name: string;\n path: string;\n}\n\nconst STATS = [\n { value: \"21\", label: gettext(\"course designs\") },\n { value: \"19\", label: gettext(\"micro courses\") },\n { value: \"2\", label: gettext(\"master classes\") },\n { value: \"$0\", label: gettext(\"license fees\") },\n];\n\nconst COURSES: Course[] = [\n { name: gettext(\"Prompt Engineering\"), path: \"micro-courses/prompt-engineering\" },\n { name: gettext(\"Building AI Applications\"), path: \"micro-courses/ai-applications\" },\n { name: gettext(\"Agentic Development\"), path: \"micro-courses/agentic-development\" },\n { name: \"Kubernetes\", path: \"micro-courses/kubernetes\" },\n { name: gettext(\"Django Master Class\"), path: \"master-classes/django-master-class\" },\n { name: gettext(\"The Economics of AI\"), path: \"micro-courses/ai-economics\" },\n { name: gettext(\"AI Governance\"), path: \"micro-courses/ai-governance\" },\n { name: gettext(\"API Design\"), path: \"micro-courses/api-design\" },\n { name: gettext(\"Backend Development\"), path: \"micro-courses/backend-development\" },\n { name: \"Docker\", path: \"micro-courses/docker\" },\n { name: gettext(\"AI Application Development Master Class\"), path: \"master-classes/ai-application-development\" },\n { name: gettext(\"Extension Development\"), path: \"micro-courses/extension-development\" },\n { name: gettext(\"Front End Development\"), path: \"micro-courses/frontend-development\" },\n { name: gettext(\"Full Stack Development\"), path: \"micro-courses/full-stack-development\" },\n { name: gettext(\"Infrastructure as Code\"), path: \"micro-courses/infrastructure-as-code\" },\n { name: gettext(\"Open Source Participation\"), path: \"micro-courses/open-source\" },\n { name: gettext(\"Secure Software\"), path: \"micro-courses/secure-software\" },\n { name: gettext(\"Self-Hosting Open Models\"), path: \"micro-courses/self-hosted-models\" },\n { name: gettext(\"Software Architecture\"), path: \"micro-courses/software-architecture\" },\n { name: gettext(\"Software Quality\"), path: \"micro-courses/software-quality\" },\n { name: gettext(\"Documentation with Sphinx\"), path: \"micro-courses/sphinx-documentation\" },\n];\n\nconst FORMATS = [\n { value: \"8 hours\", label: gettext(\"classroom bootcamp\") },\n { value: \"2 weeks\", label: gettext(\"online course\") },\n { value: \"4 weeks\", label: gettext(\"online course\") },\n];\n\nfunction CourseChips({ courses, hidden }: { courses: Course[]; hidden?: boolean }) {\n return (\n <ul className=\"instructors-ribbon-set\" aria-hidden={hidden || undefined}>\n {courses.map((course) => (\n <li key={course.path}>\n <a\n href={`${CATALOG}/${course.path}.html`}\n target=\"_blank\"\n className=\"instructors-chip\"\n tabIndex={hidden ? -1 : undefined}\n >\n {course.name}\n </a>\n </li>\n ))}\n </ul>\n );\n}\n\nexport interface InstructorsProps {\n /** The card's grid column classes, so that the page can set its width. */\n className?: string;\n}\n\nfunction Instructors({ className = \"col-xl-6\" }: InstructorsProps) {\n return (\n <>\n <section id=\"instructors\" aria-label={gettext(\"Instructors\")} className={`${className} mb-5 mb-xl-10`}>\n {/* begin::Instructors widget */}\n <div className=\"card border-transparent h-100 instructors-card\" data-bs-theme=\"light\">\n {/* begin::Body */}\n <div className=\"card-body d-flex flex-column ps-xl-15 h-100 position-relative\">\n {/* begin::Illustration */}\n {/* The Keen theme's illustration, which the page serves along with the Keen stylesheet. */}\n <img\n src=\"/static/assets/media/illustrations/sigma-1/2.png\"\n className=\"position-absolute top-0 end-0 h-175px me-5 mt-5 d-none d-md-block instructors-illustration\"\n alt=\"\"\n />\n {/* end::Illustration */}\n {/* begin::Title */}\n <span className=\"instructors-eyebrow z-index-2\">{gettext(\"Free for instructors\")}</span>\n <div className=\"fs-2x fw-bold text-white mt-3 mb-2 z-index-2 instructors-headline\">\n {/* Translators: a headline. %(span)s is its highlighted last words, translated separately. */}\n {interpolateNodes(gettext(\"Teach AI with a %(span)s\"), {\n span: (\n <span className=\"position-relative d-inline-block\">\n {/* Translators: the highlighted words of a headline. %(span)s is their decorative underline, and stays at the end. */}\n {interpolateNodes(gettext(\"real platform%(span)s\"), {\n span: (\n <span className=\"position-absolute bottom-0 start-0 border-4 border-bottom w-100 instructors-underline\"></span>\n ),\n })}\n </span>\n ),\n })}\n </div>\n <p className=\"fs-6 mb-6 z-index-2 instructors-lede\">\n {gettext(\n \"Ready-to-teach course designs, from prompt engineering for non-programmers to Kubernetes for platform engineers, with schedules, graded assignments, rubrics and capstone projects.\",\n )}\n </p>\n {/* end::Title */}\n {/* begin::Stats */}\n <dl className=\"instructors-stats z-index-2\">\n {STATS.map((stat) => (\n <div key={stat.label} className=\"instructors-stat\">\n <dt>{stat.label}</dt>\n <dd>{stat.value}</dd>\n </div>\n ))}\n </dl>\n {/* end::Stats */}\n {/* begin::Courses */}\n <nav className=\"instructors-ribbons z-index-2\" aria-label={gettext(\"Free courses\")}>\n {[COURSES.slice(0, 11), COURSES.slice(11)].map((courses, row) => (\n <div key={row} className=\"instructors-ribbon\">\n <div className={`instructors-ribbon-track${row ? \" instructors-ribbon-reverse\" : \"\"}`}>\n <CourseChips courses={courses} />\n <CourseChips courses={courses} hidden />\n </div>\n </div>\n ))}\n </nav>\n {/* end::Courses */}\n {/* begin::Formats */}\n <div className=\"instructors-formats z-index-2\">\n <span className=\"instructors-formats-label\">{gettext(\"Every micro course, three ways\")}</span>\n <ul>\n {FORMATS.map((format) => (\n <li key={format.value}>\n <strong>{format.value}</strong> {format.label}\n </li>\n ))}\n </ul>\n </div>\n {/* end::Courses */}\n {/* begin::Action */}\n <div className=\"mt-auto pt-7 z-index-2\">\n <a href={`${CATALOG}/index.html`} target=\"_blank\" className=\"btn btn-sm fw-semibold me-2 instructors-btn\">\n {gettext(\"Browse the free courses\")}\n </a>\n <a\n href={`${DOCS_BASE_URL}/smarter-instructor.html`}\n target=\"_blank\"\n className=\"btn btn-sm btn-light fw-semibold\"\n >\n {gettext(\"Instructor Guide\")}\n </a>\n </div>\n {/* end::Action */}\n </div>\n {/* end::Body */}\n </div>\n {/* end::Instructors widget */}\n </section>\n </>\n );\n}\n\nexport default Instructors;\n","export default \"data:image/svg+xml,%3csvg%20fill='%233ECC5F'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eDocusaurus%3c/title%3e%3cpath%20d='M2.462%2022.201h12.321a2.466%202.466%200%200%200%202.369-1.854c.026.004.052.008.079.008a.621.621%200%200%200%20.615-.615.621.621%200%200%200-.615-.615c-.027%200-.053.004-.079.007l-.014-.055a.62.62%200%200%200%20.378-.568.621.621%200%200%200-.615-.615.608.608%200%200%200-.371.127l-.042-.041a.606.606%200%200%200%20.125-.368c0-.67-.919-.858-1.181-.241l-.055-.014c.003-.026.008-.052.008-.079a.622.622%200%200%200-.616-.615.621.621%200%200%200-.615.615h-.096a.617.617%200%200%200-1.033%200h-.717v-2.461h2.461c.115%200%20.226-.017.331-.047a.307.307%200%201%200%20.529-.304l.02-.021c.052.04.116.064.186.064h.002c.337%200%20.428-.463.117-.591l.007-.028c.013.001.026.004.039.004a.31.31%200%200%200%20.308-.308.31.31%200%200%200-.308-.308c-.013%200-.026.003-.039.004a.28.28%200%200%201-.007-.027c.327-.13-.028-.745-.305-.528l-.02-.021a.307.307%200%200%200%20.062-.184c-.011-.326-.454-.416-.591-.12a1.238%201.238%200%200%200-.32-.047h-2.143a2.465%202.465%200%200%201%202.132-1.23h7.385V9.894l-8.618-.539a1.315%201.315%200%200%201-1.229-1.308c0-.688.542-1.265%201.229-1.307l8.618-.539v-1.23a2.473%202.473%200%200%200-2.462-2.462H8.615l-.307-.533a.356.356%200%200%200-.616%200l-.307.533-.308-.533a.355.355%200%200%200-.615%200l-.308.533-.308-.533a.355.355%200%200%200-.615%200l-.308.533-.008.001-.51-.51a.354.354%200%200%200-.594.159l-.168.628-.639-.171a.357.357%200%200%200-.436.435l.172.639-.628.169a.356.356%200%200%200-.16.594l.51.51v.008l-.533.307a.356.356%200%200%200%200%20.616l.533.307-.533.308a.356.356%200%200%200%200%20.616l.533.307-.533.308a.355.355%200%200%200%200%20.615l.533.308-.533.308a.355.355%200%200%200%200%20.615l.533.308-.533.307a.356.356%200%200%200%200%20.616l.533.308-.533.307a.356.356%200%200%200%200%20.616l.533.307-.533.308a.355.355%200%200%200%200%20.615l.533.308-.533.308a.355.355%200%200%200%200%20.615l.533.308-.533.308a.355.355%200%200%200%200%20.615l.533.308-.533.307a.356.356%200%200%200%200%20.616l.533.307-.533.308a.355.355%200%200%200%200%20.615l.533.308-.533.308a.355.355%200%200%200%200%20.615l.533.308a2.463%202.463%200%200%201-2.13-1.231A2.465%202.465%200%200%200%200%2019.74c0%201.35%201.112%202.46%202.462%202.461zm19.692-5.204v2.743a2.473%202.473%200%200%201-2.461%202.461h-.001%201.231a2.466%202.466%200%200%200%202.383-1.854c.026.004.052.008.079.008A.621.621%200%200%200%2024%2019.74a.621.621%200%200%200-.615-.615c-.027%200-.053.004-.079.007l-.014-.055a.62.62%200%200%200%20.378-.568.621.621%200%200%200-.615-.615.608.608%200%200%200-.371.127l-.042-.041a.612.612%200%200%200%20.125-.368.623.623%200%200%200-.613-.615zm-4.067%202.62h2.223c.067%200%20.123.056.123.123a.124.124%200%200%201-.123.123h-2.223a.845.845%200%200%200%200-.246zm-.33-1.231h2.553c.067%200%20.123.056.123.123a.124.124%200%200%201-.123.123h-2.553a.845.845%200%200%200%200-.246zm-1.026-1.231h3.579c.067%200%20.123.056.123.123a.124.124%200%200%201-.123.123h-3.474a.85.85%200%200%200-.105-.246zm3.579-.984h-6.159a.126.126%200%200%201-.123-.123c0-.068.056-.123.123-.123h6.159c.067%200%20.123.056.123.123a.124.124%200%200%201-.123.123zm1.844-3.816v2.462c.115%200%20.225-.017.331-.047a.308.308%200%201%200%20.528-.304l.021-.021c.052.04.116.064.186.064a.312.312%200%200%200%20.307-.308.306.306%200%200%200-.189-.283l.007-.028c.013.001.026.004.04.004a.312.312%200%200%200%20.307-.308.312.312%200%200%200-.307-.308c-.014%200-.027.003-.04.004l-.007-.027a.31.31%200%200%200-.118-.592.306.306%200%200%200-.186.064l-.021-.021a.3.3%200%200%200%20.063-.184c-.011-.326-.454-.416-.591-.12a1.24%201.24%200%200%200-.321-.047zm-6.059%202.339h4.215c.067%200%20.123.056.123.123a.124.124%200%200%201-.123.123h-4.451a.564.564%200%200%200%20.073-.19.553.553%200%200%200%20.163-.056zm.454-1.208h3.761c.067%200%20.123.056.123.123a.124.124%200%200%201-.123.123h-3.772a.552.552%200%200%200%20.011-.246zm5.605-6.225h-.004c-.381.013-.561.393-.719.729-.166.35-.294.578-.504.572-.233-.009-.366-.271-.506-.549-.162-.32-.347-.682-.734-.668-.375.013-.556.344-.715.636-.169.311-.285.5-.507.491-.237-.008-.363-.222-.509-.469-.163-.275-.351-.585-.731-.574-.368.013-.549.294-.709.542-.169.262-.287.421-.513.412-.243-.009-.368-.186-.513-.391-.163-.231-.347-.491-.726-.479-.36.013-.541.243-.701.446-.151.192-.27.344-.52.335h-.005a.126.126%200%200%200-.123.123c0%20.066.053.121.119.123.371.012.559-.222.723-.429.145-.184.27-.343.516-.352.237-.01.348.138.516.375.16.226.341.482.705.495.382.013.566-.273.729-.525.145-.226.271-.421.511-.429.22-.008.34.166.51.453.159.271.34.577.712.59.385.014.57-.322.732-.619.14-.257.273-.5.507-.508.221-.005.336.196.506.533.159.314.339.67.717.684h.021c.377%200%20.556-.378.714-.713.14-.297.273-.576.501-.588zM7.385%206.509a.312.312%200%200%201-.308-.308c-.01-.532-.378-.911-.927-.922-.528-.011-.888.432-.919.922-.011.168-.139.307-.308.308a.31.31%200%200%201-.308-.308c0-.848.69-1.538%201.539-1.538.848%200%201.538.69%201.538%201.538a.312.312%200%200%201-.307.308zm9.846-2.308a.31.31%200%200%201%20.308.308.31.31%200%200%201-.308.308.31.31%200%200%201-.308-.308.31.31%200%200%201%20.308-.308zm2.461-.153a.31.31%200%200%201%20.307.308.31.31%200%200%201-.308.308h-.001a.31.31%200%200%201-.307-.308.31.31%200%200%201%20.308-.308z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20fill='%230678BE'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eDrupal%3c/title%3e%3cpath%20d='M15.78%205.113C14.09%203.425%2012.48%201.815%2011.998%200c-.48%201.815-2.09%203.425-3.778%205.113-2.534%202.53-5.405%205.4-5.405%209.702a9.184%209.185%200%201018.368%200c0-4.303-2.871-7.171-5.405-9.702M6.72%2016.954c-.563-.019-2.64-3.6%201.215-7.416l2.55%202.788a.218.218%200%2001-.016.325c-.61.625-3.204%203.227-3.527%204.126-.066.186-.164.18-.222.177M12%2021.677a3.158%203.158%200%2001-3.158-3.159%203.291%203.291%200%2001.787-2.087c.57-.696%202.37-2.655%202.37-2.655s1.774%201.988%202.367%202.649a3.09%203.09%200%2001.792%202.093A3.158%203.158%200%200112%2021.677m6.046-5.123c-.068.15-.223.398-.431.405-.371.014-.411-.177-.686-.583-.604-.892-5.864-6.39-6.848-7.455-.866-.935-.122-1.595.223-1.94C10.736%206.547%2012%205.285%2012%205.285s3.766%203.574%205.336%206.016c1.57%202.443%201.029%204.556.71%205.253'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20fill='%23526CFE'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eMaterial%20for%20MkDocs%3c/title%3e%3cpath%20d='m17.029%2018.772.777%201.166-5.417%202.709L0%2016.451V4.063l5.417-2.709%205.298%207.948%207.867-5.24L24%201.354V16.84l-5.417%202.709zm2.023-13.827v13.253l3.949-1.975V2.97zM5.076%202.642%201.458%204.45%2012.73%2021.358l3.618-1.809z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20fill='%237AB55C'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eShopify%3c/title%3e%3cpath%20d='M15.337%2023.979l7.216-1.561s-2.604-17.613-2.625-17.73c-.018-.116-.114-.192-.211-.192s-1.929-.136-1.929-.136-1.275-1.274-1.439-1.411c-.045-.037-.075-.057-.121-.074l-.914%2021.104h.023zM11.71%2011.305s-.81-.424-1.774-.424c-1.447%200-1.504.906-1.504%201.141%200%201.232%203.24%201.715%203.24%204.629%200%202.295-1.44%203.76-3.406%203.76-2.354%200-3.54-1.465-3.54-1.465l.646-2.086s1.245%201.066%202.28%201.066c.675%200%20.975-.545.975-.932%200-1.619-2.654-1.694-2.654-4.359-.034-2.237%201.571-4.416%204.827-4.416%201.257%200%201.875.361%201.875.361l-.945%202.715-.02.01zM11.17.83c.136%200%20.271.038.405.135-.984.465-2.064%201.639-2.508%203.992-.656.213-1.293.405-1.889.578C7.697%203.75%208.951.84%2011.17.84V.83zm1.235%202.949v.135c-.754.232-1.583.484-2.394.736.466-1.777%201.333-2.645%202.085-2.971.193.501.309%201.176.309%202.1zm.539-2.234c.694.074%201.141.867%201.429%201.755-.349.114-.735.231-1.158.366v-.252c0-.752-.096-1.371-.271-1.871v.002zm2.992%201.289c-.02%200-.06.021-.078.021s-.289.075-.714.21c-.423-1.233-1.176-2.37-2.508-2.37h-.115C12.135.209%2011.669%200%2011.265%200%208.159%200%206.675%203.877%206.21%205.846c-1.194.365-2.063.636-2.16.674-.675.213-.694.232-.772.87-.075.462-1.83%2014.063-1.83%2014.063L15.009%2024l.927-21.166z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20fill='%23000000'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eSphinx%3c/title%3e%3cpath%20d='M16.284%2019.861c0-.654.177-1.834.393-2.623.499-1.822.774-4.079.497-4.079-.116%200-.959.762-1.873%201.694-3.472%203.54-7.197%205.543-10.312%205.543-1.778%200-2.987-.45-4.154-1.545C.128%2018.186%200%2017.858%200%2016.703c0-1.188.117-1.468.909-2.175.718-.642%201.171-.813%202.157-.813.76.171%201.21.16%201.457.461.251.296.338%201.265.035%201.832-.162.303-.585.491-1.105.491-.49%200-.77-.116-.669-.278.315-.511-.135-.857-.713-.548-.699.374-.711%201.698-.021%202.322.969.878%203.65%201.208%205.262.648%201.743-.605%204.022-2.061%205.841-3.732l1.6-1.469-2.088-.013c-2.186-.012-3.608-.273-8.211-1.506-1.531-.41-3.003-.765-3.271-.789-.304-.026-.503-.274-.487-.656.027-.646.378-1.127.793-1.308.249-.109%201.977-.274%203.809-.761%207.136-1.898%207.569-1.629%2012.323-.426%201.553.393%203.351.821%204.147.835%201.227.022%201.493.124%201.74.666.16.351.291.686.291.745%200%20.058-.695.424-1.545.813-3.12%201.428-4.104%202.185-3.088%203.635.421.602.412.666-.14%201.052-.323.227-.59.687-.593%201.022-.009.908-.583%202.856-1.417%203.624l-.732.675v-1.189Zm1.594-8.328c1.242-.346%201.994-.738%203.539-1.562-1.272-.372-4.462-.895-4.462-.895-2.354-.472-2.108-.448-2.214.071a3.475%203.475%200%200%201-.45%201.105c-.541.848-2.521%201.026-3.656.483-.356-.171-.714-.821-.709-1.283.007-.65-.362-.801-.598-.714-.191.07-.813.079-2.179.448-4.514%201.217-5.132%201.078-2.189%201.495.353.05%202.223.572%203.136.815%202.239.597%202.658.641%205.556.581%202.015-.042%202.858-.163%204.226-.544ZM.732%206.258c.056-.577.088-.702%201.692-1.025.919-.185%203.185-.785%205.036-1.333%204.254-1.26%205.462-1.263%209.873-.026%201.904.535%204.037.973%204.74.975%201.097.002%201.668.487%201.668.487.505%201.16.412%201.24-1.558%201.24-1.374%200-2.558-.232-4.385-.857-1.389-.476-3.369-.923-4.451-1.004-1.974-.149-1.971-.15-8.072%201.529-1.072.295-2.553.624-3.29.732l-1.342.196.089-.914Z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20fill='%235C73E7'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eVitePress%3c/title%3e%3cpath%20d='M17.029.0014a1.8382%201.8382%200%200%200-.1875.0176L4.0845%201.8334C3.0779%201.9767%202.3767%202.9196%202.518%203.939l2.5604%2018.457c.1415%201.0193%201.0735%201.7292%202.08%201.586l12.757-1.8165c1.0066-.1433%201.7078-1.0861%201.5664-2.1054L18.9215%201.6049C18.7889.6493%2017.961-.035%2017.029.0014Zm.127.9316c.4271.027.7915.3549.8534.8008l2.5604%2018.457c.0707.5097-.28.9812-.7831%201.0528L7.0296%2023.058c-.5033.0717-.9683-.2833-1.039-.793L3.4302%203.81c-.0707-.5097.2799-.9811.7832-1.0528L16.9704.9408A.9066.9066%200%200%201%2017.156.933zm-3.6443%205.3541L9.9668%207.5215a.1364.1364%200%200%200-.0898.1406l.3183%203.8692c.0075.0911.0994.1497.1836.1171l.9824-.3789c.092-.0355.1894.0373.1836.1368l-.0898%201.539c-.006.1036.1005.1763.1933.1328l.5997-.2812c.093-.0435.1976.031.1914.1347l-.1465%202.418c-.0092.1513.195.2037.2578.0664l.041-.0918%202.123-6.4238c.0355-.1076-.0658-.2104-.1718-.1738l-1.0176.3515c-.0955.033-.1917-.0491-.1777-.1504l.3437-2.4902a.1368.1368%200%200%200-.1426-.1562c-.016-.001-.0422.0084-.037.0058zm2.8223.7988a.2717.2717%200%200%200-.0801.0137L14%207.8496l-.0762.5606.4551-.1563c.5074-.1627.973.2955.8106.8027l-2.131%206.4493-.0526.1171c-.1268.2776-.4416.4304-.7383.3516-.2904-.077-.4911-.353-.4727-.6562l.1094-1.8086c-.5057.2578-.9731-.1473-.9473-.5938l.0567-.9765-.4532.1757c-.4144.1536-.8298-.1366-.8632-.543L9.453%208.5997l-3.0625-.123c-.2294-.0093-.3635.2552-.2226.4394l6.291%208.2305c.1293.169.391.1302.4668-.0684l3.668-9.6191c.072-.1889-.0765-.377-.2598-.373z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20fill='%2321759B'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eWordPress%3c/title%3e%3cpath%20d='M21.469%206.825c.84%201.537%201.318%203.3%201.318%205.175%200%203.979-2.156%207.456-5.363%209.325l3.295-9.527c.615-1.54.82-2.771.82-3.864%200-.405-.026-.78-.07-1.11m-7.981.105c.647-.03%201.232-.105%201.232-.105.582-.075.514-.93-.067-.899%200%200-1.755.135-2.88.135-1.064%200-2.85-.15-2.85-.15-.585-.03-.661.855-.075.885%200%200%20.54.061%201.125.09l1.68%204.605-2.37%207.08L5.354%206.9c.649-.03%201.234-.1%201.234-.1.585-.075.516-.93-.065-.896%200%200-1.746.138-2.874.138-.2%200-.438-.008-.69-.015C4.911%203.15%208.235%201.215%2012%201.215c2.809%200%205.365%201.072%207.286%202.833-.046-.003-.091-.009-.141-.009-1.06%200-1.812.923-1.812%201.914%200%20.89.513%201.643%201.06%202.531.411.72.89%201.643.89%202.977%200%20.915-.354%201.994-.821%203.479l-1.075%203.585-3.9-11.61.001.014zM12%2022.784c-1.059%200-2.081-.153-3.048-.437l3.237-9.406%203.315%209.087c.024.053.05.101.078.149-1.12.393-2.325.609-3.582.609M1.211%2012c0-1.564.336-3.05.935-4.39L7.29%2021.709C3.694%2019.96%201.212%2016.271%201.211%2012M12%200C5.385%200%200%205.385%200%2012s5.385%2012%2012%2012%2012-5.385%2012-12S18.615%200%2012%200'/%3e%3c/svg%3e\"","/**\n * Integrations dashboard widget.\n *\n * This component renders a promotional card for the Smarter Chat\n * integrations, which add a deployed LLMClient's chat to a third-party\n * platform with @smarter.sh/ui-chat's embed script: the WordPress plugin, the\n * Drupal module, the Shopify app, the Google Tag Manager template, and the\n * plugins for the Docusaurus, MkDocs, Sphinx and VitePress documentation site\n * generators. Each integration is a logo tile that links to its\n * documentation, followed by links to the embedding guide and the source code.\n *\n * :param className: The card's grid column classes, so that the page can set its width.\n * :type className: str\n * :returns: A JSX fragment containing the integrations call-to-action widget.\n * :rtype: JSX.Element\n *\n * :example:\n *\n * <Integrations />\n * <Integrations className=\"col-12\" />\n */\nimport \"./styles.css\";\nimport { gettext, interpolateNodes } from \"@smarter/common\";\nimport docusaurusLogo from \"../../assets/docusaurus.svg\";\nimport drupalLogo from \"../../assets/drupal.svg\";\nimport materialformkdocsLogo from \"../../assets/materialformkdocs.svg\";\nimport shopifyLogo from \"../../assets/shopify.svg\";\nimport sphinxLogo from \"../../assets/sphinx.svg\";\nimport vitepressLogo from \"../../assets/vitepress.svg\";\nimport wordpressLogo from \"../../assets/wordpress.svg\";\n\n// The Google Tag Manager logo and the illustration are the Keen theme's. They stay at their\n// /static/assets/ paths, which the page serves along with the Keen stylesheet.\nconst DOCS = \"https://docs.smarter.sh/en/latest/smarter-framework\";\n\nconst INTEGRATIONS = [\n {\n name: \"WordPress\",\n logo: wordpressLogo,\n docs: `${DOCS}/smarter-wordpress.html`,\n },\n {\n name: \"Drupal\",\n logo: drupalLogo,\n docs: `${DOCS}/smarter-drupal.html`,\n },\n {\n name: \"Shopify\",\n logo: shopifyLogo,\n docs: `${DOCS}/smarter-shopify.html`,\n },\n {\n name: \"Google Tag Manager\",\n logo: \"/static/assets/media/svg/brand-logos/google-tag-manager.svg\",\n docs: `${DOCS}/smarter-gtm.html`,\n },\n {\n name: \"Docusaurus\",\n logo: docusaurusLogo,\n docs: `${DOCS}/smarter-docs-sites.html`,\n },\n {\n name: \"MkDocs\",\n logo: materialformkdocsLogo,\n docs: `${DOCS}/smarter-docs-sites.html`,\n },\n {\n name: \"Sphinx\",\n logo: sphinxLogo,\n docs: `${DOCS}/smarter-docs-sites.html`,\n },\n {\n name: \"VitePress\",\n logo: vitepressLogo,\n docs: `${DOCS}/smarter-docs-sites.html`,\n },\n];\n\nexport interface IntegrationsProps {\n /** The card's grid column classes, so that the page can set its width. */\n className?: string;\n}\n\nfunction Integrations({ className = \"col-xl-4\" }: IntegrationsProps) {\n return (\n <>\n <section id=\"integrations\" aria-label={gettext(\"Integrations\")} className={`${className} mb-5 mb-xl-10`}>\n {/* begin::Integrations widget */}\n <div className=\"card border-transparent h-100 integrations-card\" data-bs-theme=\"light\">\n {/* begin::Body */}\n <div className=\"card-body d-flex flex-column ps-xl-15 h-100 position-relative\">\n {/* begin::Illustration */}\n <img\n src=\"/static/assets/media/illustrations/sketchy-1/17-dark.png\"\n className=\"position-absolute top-0 end-0 h-125px me-3 mt-3 integrations-illustration\"\n alt=\"\"\n />\n {/* end::Illustration */}\n {/* begin::Title */}\n <div className=\"position-relative fs-2x fw-bold text-white mb-2 z-index-2\">\n {/* Translators: a headline. %(span)s is its highlighted last words, translated separately. */}\n {interpolateNodes(gettext(\"Put your chatbot %(span)s\"), {\n span: (\n <span className=\"position-relative d-inline-block\">\n {/* Translators: the highlighted words of a headline. %(span)s is their decorative underline, and stays at the end. */}\n {interpolateNodes(gettext(\"everywhere%(span)s\"), {\n span: (\n <span className=\"position-absolute opacity-50 bottom-0 start-0 border-4 border-warning border-bottom w-100\"></span>\n ),\n })}\n </span>\n ),\n })}\n </div>\n <p className=\"text-white opacity-75 fs-6 mb-7 z-index-2 integrations-lede\">\n {gettext(\"Add Smarter Chat to the sites your users already visit, with one setting.\")}\n </p>\n {/* end::Title */}\n {/* begin::Logos */}\n <ul className=\"integrations-grid z-index-2\">\n {INTEGRATIONS.map((integration) => (\n <li key={integration.name}>\n <a\n href={integration.docs}\n target=\"_blank\"\n className=\"integrations-tile hover-elevate-up\"\n title={integration.name}\n >\n <span className=\"integrations-logo\">\n <img src={integration.logo} alt=\"\" />\n </span>\n <span className=\"integrations-name\">{integration.name}</span>\n </a>\n </li>\n ))}\n </ul>\n {/* end::Logos */}\n {/* begin::Action */}\n <div className=\"mt-auto pt-7 z-index-2\">\n <a\n href={`${DOCS}/smarter-chat/embedding.html`}\n target=\"_blank\"\n className=\"btn btn-sm btn-warning fw-semibold me-2\"\n >\n {gettext(\"Embedding guide\")}\n </a>\n <a\n href=\"https://github.com/smarter-sh\"\n target=\"_blank\"\n className=\"btn btn-sm btn-light fw-semibold\"\n aria-label={gettext(\"Integrations source code\")}\n >\n {gettext(\"GitHub\")}\n </a>\n </div>\n {/* end::Action */}\n </div>\n {/* end::Body */}\n </div>\n {/* end::Integrations widget */}\n </section>\n </>\n );\n}\n\nexport default Integrations;\n","/**\n * McpServer dashboard widget.\n *\n * This component renders a promotional card for the Smarter Project MCP\n * Server, which every platform runs at ``/api/v1/mcp/smarter-project/``: a\n * read-only Model Context Protocol server, without authentication, that answers\n * questions about The Smarter Project from its own code and documentation. It\n * shows the command that adds this platform's server to Claude Code, its main\n * tools, and a link to its documentation.\n *\n * :param serverUrl: The MCP server's url, in the command. Defaults to this platform's, on the page's\n * own domain. A page outside the web console, such as smarter.sh, passes a platform's absolute url.\n * :type serverUrl: str\n * :returns: A JSX fragment containing the MCP server call-to-action widget.\n * :rtype: JSX.Element\n *\n * :example:\n *\n * <McpServer />\n * <McpServer serverUrl=\"https://platform.smarter.sh/api/v1/mcp/smarter-project/\" />\n */\nimport \"./styles.css\";\nimport { gettext, interpolateNodes } from \"@smarter/common\";\n\n/** The server's path, on this platform's own domain. */\nconst MCP_SERVER_PATH = \"/api/v1/mcp/smarter-project/\";\n\nconst TOOLS = [\"search_documentation\", \"search_code\", \"read_file\"];\n\nexport interface McpServerProps {\n /** The MCP server's url, in the command. */\n serverUrl?: string;\n}\n\n/** This platform's server, on the page's own domain. Rendered without a browser, the path alone. */\nconst defaultServerUrl = () =>\n typeof window === \"undefined\" ? MCP_SERVER_PATH : `${window.location.origin}${MCP_SERVER_PATH}`;\n\nfunction McpServer({ serverUrl = defaultServerUrl() }: McpServerProps) {\n return (\n <>\n <section id=\"mcp-server\" aria-label={gettext(\"MCP Server\")} className=\"card border-transparent h-100 mcp-card\">\n <div className=\"card-body d-flex flex-column ps-xl-15 h-100\">\n <span className=\"mcp-eyebrow\">{gettext(\"Smarter MCP Server\")}</span>\n <div className=\"fs-2x fw-bold mt-3 mb-2 mcp-headline\">\n {/* Translators: a headline. %(span)s is its highlighted last words, translated separately. */}\n {interpolateNodes(gettext(\"Ask your %(span)s\"), {\n span: (\n <span className=\"position-relative d-inline-block\">\n {/* Translators: the highlighted words of a headline. %(span)s is their decorative underline, and stays at the end. */}\n {interpolateNodes(gettext(\"AI assistant%(span)s\"), {\n span: (\n <span className=\"position-absolute bottom-0 start-0 border-4 border-bottom w-100 mcp-underline\"></span>\n ),\n })}\n </span>\n ),\n })}\n </div>\n <p className=\"fs-6 mb-5 mcp-lede\">\n {gettext(\"This platform answers questions about itself from its own code and docs, for any MCP client.\")}\n </p>\n <pre className=\"mcp-command\" aria-label={gettext(\"Add this platform's MCP server to Claude Code\")}>\n <span className=\"mcp-prompt\">$ </span>claude mcp add --transport http smarter-project {serverUrl}\n </pre>\n <ul className=\"mcp-tools\" aria-label={gettext(\"Tools\")}>\n {TOOLS.map((tool) => (\n <li key={tool}>{tool}</li>\n ))}\n </ul>\n <div className=\"mt-auto pt-6\">\n <a\n href=\"https://docs.smarter.sh/en/latest/smarter-platform/smarter-project-mcp-server.html\"\n target=\"_blank\"\n className=\"btn btn-sm fw-semibold mcp-btn\"\n >\n {gettext(\"Documentation\")}\n </a>\n </div>\n </div>\n </section>\n </>\n );\n}\n\nexport default McpServer;\n","export default \"data:image/svg+xml,%3csvg%20fill='%2300ADD8'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eGo%3c/title%3e%3cpath%20d='M1.811%2010.231c-.047%200-.058-.023-.035-.059l.246-.315c.023-.035.081-.058.128-.058h4.172c.046%200%20.058.035.035.07l-.199.303c-.023.036-.082.07-.117.07zM.047%2011.306c-.047%200-.059-.023-.035-.058l.245-.316c.023-.035.082-.058.129-.058h5.328c.047%200%20.07.035.058.07l-.093.28c-.012.047-.058.07-.105.07zm2.828%201.075c-.047%200-.059-.035-.035-.07l.163-.292c.023-.035.07-.07.117-.07h2.337c.047%200%20.07.035.07.082l-.023.28c0%20.047-.047.082-.082.082zm12.129-2.36c-.736.187-1.239.327-1.963.514-.176.046-.187.058-.34-.117-.174-.199-.303-.327-.548-.444-.737-.362-1.45-.257-2.115.175-.795.514-1.204%201.274-1.192%202.22.011.935.654%201.706%201.577%201.835.795.105%201.46-.175%201.987-.77.105-.13.198-.27.315-.434H10.47c-.245%200-.304-.152-.222-.35.152-.362.432-.97.596-1.274a.315.315%200%2001.292-.187h4.253c-.023.316-.023.631-.07.947a4.983%204.983%200%2001-.958%202.29c-.841%201.11-1.94%201.8-3.33%201.986-1.145.152-2.209-.07-3.143-.77-.865-.655-1.356-1.52-1.484-2.595-.152-1.274.222-2.419.993-3.424.83-1.086%201.928-1.776%203.272-2.02%201.098-.2%202.15-.07%203.096.571.62.41%201.063.97%201.356%201.648.07.105.023.164-.117.2m3.868%206.461c-1.064-.024-2.034-.328-2.852-1.029a3.665%203.665%200%2001-1.262-2.255c-.21-1.32.152-2.489.947-3.529.853-1.122%201.881-1.706%203.272-1.95%201.192-.21%202.314-.095%203.33.595.923.63%201.496%201.484%201.648%202.605.198%201.578-.257%202.863-1.344%203.962-.771.783-1.718%201.273-2.805%201.495-.315.06-.63.07-.934.106zm2.78-4.72c-.011-.153-.011-.27-.034-.387-.21-1.157-1.274-1.81-2.384-1.554-1.087.245-1.788.935-2.045%202.033-.21.912.234%201.835%201.075%202.21.643.28%201.285.244%201.905-.07.923-.48%201.425-1.228%201.484-2.233z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20fill='%235FA04E'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eNode.js%3c/title%3e%3cpath%20d='M11.998,24c-0.321,0-0.641-0.084-0.922-0.247l-2.936-1.737c-0.438-0.245-0.224-0.332-0.08-0.383%20c0.585-0.203,0.703-0.25,1.328-0.604c0.065-0.037,0.151-0.023,0.218,0.017l2.256,1.339c0.082,0.045,0.197,0.045,0.272,0l8.795-5.076%20c0.082-0.047,0.134-0.141,0.134-0.238V6.921c0-0.099-0.053-0.192-0.137-0.242l-8.791-5.072c-0.081-0.047-0.189-0.047-0.271,0%20L3.075,6.68C2.99,6.729,2.936,6.825,2.936,6.921v10.15c0,0.097,0.054,0.189,0.139,0.235l2.409,1.392%20c1.307,0.654,2.108-0.116,2.108-0.89V7.787c0-0.142,0.114-0.253,0.256-0.253h1.115c0.139,0,0.255,0.112,0.255,0.253v10.021%20c0,1.745-0.95,2.745-2.604,2.745c-0.508,0-0.909,0-2.026-0.551L2.28,18.675c-0.57-0.329-0.922-0.945-0.922-1.604V6.921%20c0-0.659,0.353-1.275,0.922-1.603l8.795-5.082c0.557-0.315,1.296-0.315,1.848,0l8.794,5.082c0.57,0.329,0.924,0.944,0.924,1.603%20v10.15c0,0.659-0.354,1.273-0.924,1.604l-8.794,5.078C12.643,23.916,12.324,24,11.998,24z%20M19.099,13.993%20c0-1.9-1.284-2.406-3.987-2.763c-2.731-0.361-3.009-0.548-3.009-1.187c0-0.528,0.235-1.233,2.258-1.233%20c1.807,0,2.473,0.389,2.747,1.607c0.024,0.115,0.129,0.199,0.247,0.199h1.141c0.071,0,0.138-0.031,0.186-0.081%20c0.048-0.054,0.074-0.123,0.067-0.196c-0.177-2.098-1.571-3.076-4.388-3.076c-2.508,0-4.004,1.058-4.004,2.833%20c0,1.925,1.488,2.457,3.895,2.695c2.88,0.282,3.103,0.703,3.103,1.269c0,0.983-0.789,1.402-2.642,1.402%20c-2.327,0-2.839-0.584-3.011-1.742c-0.02-0.124-0.126-0.215-0.253-0.215h-1.137c-0.141,0-0.254,0.112-0.254,0.253%20c0,1.482,0.806,3.248,4.655,3.248C17.501,17.007,19.099,15.91,19.099,13.993z'/%3e%3c/svg%3e\"","/**\n * Sdk dashboard widget.\n *\n * This component renders a promotional card for the Smarter developer SDKs:\n * the smarter-chat NPM package (@smarter.sh/ui-chat), the Node.js SDK\n * (@smarter.sh/api), the Python PyPI library (smarter-api) and the Go module\n * (github.com/smarter-sh/smarter-golang). Each SDK shows its logo, links to its\n * package registry, and shows its install command, followed by links to the\n * APIs and SDKs documentation and to a platform's OpenAPI document.\n *\n * :param openapiUrl: The OpenAPI document that the API reference button opens. Defaults to this\n * platform's, which every web console serves. A page outside the web console, such as\n * smarter.sh, passes a platform's absolute url.\n * :type openapiUrl: str\n * :param className: The card's grid column classes, so that the page can set its width.\n * :type className: str\n * :returns: A JSX fragment containing the SDK call-to-action widget.\n * :rtype: JSX.Element\n *\n * :example:\n *\n * <Sdk />\n * <Sdk openapiUrl=\"https://platform.smarter.sh/docs/openapi/\" className=\"col-12\" />\n */\nimport \"./styles.css\";\nimport { gettext, interpolateNodes } from \"@smarter/common\";\nimport goLogo from \"../../assets/go.svg\";\nimport nodedotjsLogo from \"../../assets/nodedotjs.svg\";\n\n/** This platform's OpenAPI document, which every platform serves in its web console. */\nconst OPENAPI_URL = \"/docs/openapi/\";\n\nexport interface SdkProps {\n /** The OpenAPI document that the API reference button opens. */\n openapiUrl?: string;\n /** The card's grid column classes, so that the page can set its width. */\n className?: string;\n}\n\n// The React and Python logos, and the illustration below, are the Keen theme's. They stay at their\n// /static/assets/ paths, which the page serves along with the Keen stylesheet.\nconst SDKS = [\n {\n name: \"smarter-chat NPM Package\",\n href: \"https://www.npmjs.com/package/@smarter.sh/ui-chat\",\n logo: \"/static/assets/media/svg/brand-logos/react.svg\",\n install: \"npm install @smarter.sh/ui-chat\",\n },\n {\n name: \"Node.js SDK\",\n href: \"https://www.npmjs.com/package/@smarter.sh/api\",\n logo: nodedotjsLogo,\n install: \"npm install @smarter.sh/api\",\n },\n {\n name: \"Python PyPi Library\",\n href: \"https://pypi.org/project/smarter-api/\",\n logo: \"/static/assets/media/svg/brand-logos/python-5.svg\",\n install: \"pip install smarter-api\",\n },\n {\n name: \"Go SDK\",\n href: \"https://pkg.go.dev/github.com/smarter-sh/smarter-golang\",\n logo: goLogo,\n install: \"go get github.com/smarter-sh/smarter-golang\",\n },\n];\n\nfunction Sdk({ openapiUrl = OPENAPI_URL, className = \"col-xl-4\" }: SdkProps) {\n return (\n <>\n <section id=\"sdk\" aria-label={gettext(\"SDK\")} className={`${className} mb-5 mb-xl-10`}>\n {/* begin::SDKs widget */}\n <div className=\"card border-transparent h-100 sdk-card\" data-bs-theme=\"light\">\n {/* begin::Body */}\n <div className=\"card-body d-flex flex-column ps-xl-15 h-100 position-relative\">\n {/* begin::Illustration */}\n <img\n src=\"/static/assets/media/illustrations/dozzy-1/4.png\"\n className=\"position-absolute top-0 end-0 h-100px me-1 mt-1\"\n alt=\"\"\n />\n {/* end::Illustration */}\n {/* begin::Title */}\n <div className=\"position-relative fs-2x fw-bold text-gray-900 mb-2 z-index-2\">\n {/* Translators: a headline. %(span)s is its highlighted last words, translated separately. */}\n {interpolateNodes(gettext(\"Build with the %(span)s\"), {\n span: (\n <span className=\"position-relative d-inline-block\">\n {/* Translators: the highlighted words of a headline. %(span)s is their decorative underline, and stays at the end. */}\n {interpolateNodes(gettext(\"SDKs%(span)s\"), {\n span: (\n <span className=\"position-absolute opacity-50 bottom-0 start-0 border-4 border-danger border-bottom w-100\"></span>\n ),\n })}\n </span>\n ),\n })}\n </div>\n <p className=\"text-gray-700 fs-6 mb-7 z-index-2 sdk-lede\">\n {gettext(\"Typed access to your Smarter resources, in the language you already use.\")}\n </p>\n {/* end::Title */}\n {/* begin::SDKs */}\n <ul className=\"sdk-list z-index-2\">\n {SDKS.map((sdk) => (\n <li key={sdk.name} className=\"sdk-item\">\n <span className=\"sdk-logo\">\n <img src={sdk.logo} alt=\"\" />\n </span>\n <span className=\"sdk-text\">\n <a href={sdk.href} target=\"_blank\" className=\"sdk-name\">\n {sdk.name}\n </a>\n <span className=\"sdk-install\">{sdk.install}</span>\n </span>\n </li>\n ))}\n </ul>\n {/* end::SDKs */}\n {/* begin::Action */}\n <div className=\"d-flex flex-wrap gap-2 mt-auto pt-7 z-index-2\">\n <a\n href=\"https://docs.smarter.sh/en/latest/smarter-framework/apis-and-sdks.html\"\n target=\"_blank\"\n className=\"btn btn-sm btn-danger fw-semibold\"\n >\n {gettext(\"Documentation\")}\n </a>\n <a href={openapiUrl} className=\"btn btn-sm btn-light-danger fw-semibold\">\n {gettext(\"API reference\")}\n </a>\n <a\n href=\"https://github.com/smarter-sh\"\n target=\"_blank\"\n className=\"btn btn-sm btn-dark fw-semibold\"\n aria-label={gettext(\"SDK source code\")}\n >\n {gettext(\"GitHub\")}\n </a>\n </div>\n {/* end::Action */}\n </div>\n {/* end::Body */}\n </div>\n {/* end::SDKs widget */}\n </section>\n </>\n );\n}\n\nexport default Sdk;\n","export default \"data:image/svg+xml,%3csvg%20fill='%232496ED'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eDocker%3c/title%3e%3cpath%20d='M13.983%2011.078h2.119a.186.186%200%2000.186-.185V9.006a.186.186%200%2000-.186-.186h-2.119a.185.185%200%2000-.185.185v1.888c0%20.102.083.185.185.185m-2.954-5.43h2.118a.186.186%200%2000.186-.186V3.574a.186.186%200%2000-.186-.185h-2.118a.185.185%200%2000-.185.185v1.888c0%20.102.082.185.185.185m0%202.716h2.118a.187.187%200%2000.186-.186V6.29a.186.186%200%2000-.186-.185h-2.118a.185.185%200%2000-.185.185v1.887c0%20.102.082.185.185.186m-2.93%200h2.12a.186.186%200%2000.184-.186V6.29a.185.185%200%2000-.185-.185H8.1a.185.185%200%2000-.185.185v1.887c0%20.102.083.185.185.186m-2.964%200h2.119a.186.186%200%2000.185-.186V6.29a.185.185%200%2000-.185-.185H5.136a.186.186%200%2000-.186.185v1.887c0%20.102.084.185.186.186m5.893%202.715h2.118a.186.186%200%2000.186-.185V9.006a.186.186%200%2000-.186-.186h-2.118a.185.185%200%2000-.185.185v1.888c0%20.102.082.185.185.185m-2.93%200h2.12a.185.185%200%2000.184-.185V9.006a.185.185%200%2000-.184-.186h-2.12a.185.185%200%2000-.184.185v1.888c0%20.102.083.185.185.185m-2.964%200h2.119a.185.185%200%2000.185-.185V9.006a.185.185%200%2000-.184-.186h-2.12a.186.186%200%2000-.186.186v1.887c0%20.102.084.185.186.185m-2.92%200h2.12a.185.185%200%2000.184-.185V9.006a.185.185%200%2000-.184-.186h-2.12a.185.185%200%2000-.184.185v1.888c0%20.102.082.185.185.185M23.763%209.89c-.065-.051-.672-.51-1.954-.51-.338.001-.676.03-1.01.087-.248-1.7-1.653-2.53-1.716-2.566l-.344-.199-.226.327c-.284.438-.49.922-.612%201.43-.23.97-.09%201.882.403%202.661-.595.332-1.55.413-1.744.42H.751a.751.751%200%2000-.75.748%2011.376%2011.376%200%2000.692%204.062c.545%201.428%201.355%202.48%202.41%203.124%201.18.723%203.1%201.137%205.275%201.137.983.003%201.963-.086%202.93-.266a12.248%2012.248%200%20003.823-1.389c.98-.567%201.86-1.288%202.61-2.136%201.252-1.418%201.998-2.997%202.553-4.4h.221c1.372%200%202.215-.549%202.68-1.009.309-.293.55-.65.707-1.046l.098-.288Z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20fill='%23326CE5'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eKubernetes%3c/title%3e%3cpath%20d='M10.204%2014.35l.007.01-.999%202.413a5.171%205.171%200%200%201-2.075-2.597l2.578-.437.004.005a.44.44%200%200%201%20.484.606zm-.833-2.129a.44.44%200%200%200%20.173-.756l.002-.011L7.585%209.7a5.143%205.143%200%200%200-.73%203.255l2.514-.725.002-.009zm1.145-1.98a.44.44%200%200%200%20.699-.337l.01-.005.15-2.62a5.144%205.144%200%200%200-3.01%201.442l2.147%201.523.004-.002zm.76%202.75l.723.349.722-.347.18-.78-.5-.623h-.804l-.5.623.179.779zm1.5-3.095a.44.44%200%200%200%20.7.336l.008.003%202.134-1.513a5.188%205.188%200%200%200-2.992-1.442l.148%202.615.002.001zm10.876%205.97l-5.773%207.181a1.6%201.6%200%200%201-1.248.594l-9.261.003a1.6%201.6%200%200%201-1.247-.596l-5.776-7.18a1.583%201.583%200%200%201-.307-1.34L2.1%205.573c.108-.47.425-.864.863-1.073L11.305.513a1.606%201.606%200%200%201%201.385%200l8.345%203.985c.438.209.755.604.863%201.073l2.062%208.955c.108.47-.005.963-.308%201.34zm-3.289-2.057c-.042-.01-.103-.026-.145-.034-.174-.033-.315-.025-.479-.038-.35-.037-.638-.067-.895-.148-.105-.04-.18-.165-.216-.216l-.201-.059a6.45%206.45%200%200%200-.105-2.332%206.465%206.465%200%200%200-.936-2.163c.052-.047.15-.133.177-.159.008-.09.001-.183.094-.282.197-.185.444-.338.743-.522.142-.084.273-.137.415-.242.032-.024.076-.062.11-.089.24-.191.295-.52.123-.736-.172-.216-.506-.236-.745-.045-.034.027-.08.062-.111.088-.134.116-.217.23-.33.35-.246.25-.45.458-.673.609-.097.056-.239.037-.303.033l-.19.135a6.545%206.545%200%200%200-4.146-2.003l-.012-.223c-.065-.062-.143-.115-.163-.25-.022-.268.015-.557.057-.905.023-.163.061-.298.068-.475.001-.04-.001-.099-.001-.142%200-.306-.224-.555-.5-.555-.275%200-.499.249-.499.555l.001.014c0%20.041-.002.092%200%20.128.006.177.044.312.067.475.042.348.078.637.056.906a.545.545%200%200%201-.162.258l-.012.211a6.424%206.424%200%200%200-4.166%202.003%208.373%208.373%200%200%201-.18-.128c-.09.012-.18.04-.297-.029-.223-.15-.427-.358-.673-.608-.113-.12-.195-.234-.329-.349-.03-.026-.077-.062-.111-.088a.594.594%200%200%200-.348-.132.481.481%200%200%200-.398.176c-.172.216-.117.546.123.737l.007.005.104.083c.142.105.272.159.414.242.299.185.546.338.743.522.076.082.09.226.1.288l.16.143a6.462%206.462%200%200%200-1.02%204.506l-.208.06c-.055.072-.133.184-.215.217-.257.081-.546.11-.895.147-.164.014-.305.006-.48.039-.037.007-.09.02-.133.03l-.004.002-.007.002c-.295.071-.484.342-.423.608.061.267.349.429.645.365l.007-.001.01-.003.129-.029c.17-.046.294-.113.448-.172.33-.118.604-.217.87-.256.112-.009.23.069.288.101l.217-.037a6.5%206.5%200%200%200%202.88%203.596l-.09.218c.033.084.069.199.044.282-.097.252-.263.517-.452.813-.091.136-.185.242-.268.399-.02.037-.045.095-.064.134-.128.275-.034.591.213.71.248.12.556-.007.69-.282v-.002c.02-.039.046-.09.062-.127.07-.162.094-.301.144-.458.132-.332.205-.68.387-.897.05-.06.13-.082.215-.105l.113-.205a6.453%206.453%200%200%200%204.609.012l.106.192c.086.028.18.042.256.155.136.232.229.507.342.84.05.156.074.295.145.457.016.037.043.09.062.129.133.276.442.402.69.282.247-.118.341-.435.213-.71-.02-.039-.045-.096-.065-.134-.083-.156-.177-.261-.268-.398-.19-.296-.346-.541-.443-.793-.04-.13.007-.21.038-.294-.018-.022-.059-.144-.083-.202a6.499%206.499%200%200%200%202.88-3.622c.064.01.176.03.213.038.075-.05.144-.114.28-.104.266.039.54.138.87.256.154.06.277.128.448.173.036.01.088.019.13.028l.009.003.007.001c.297.064.584-.098.645-.365.06-.266-.128-.537-.423-.608zM16.4%209.701l-1.95%201.746v.005a.44.44%200%200%200%20.173.757l.003.01%202.526.728a5.199%205.199%200%200%200-.108-1.674A5.208%205.208%200%200%200%2016.4%209.7zm-4.013%205.325a.437.437%200%200%200-.404-.232.44.44%200%200%200-.372.233h-.002l-1.268%202.292a5.164%205.164%200%200%200%203.326.003l-1.27-2.296h-.01zm1.888-1.293a.44.44%200%200%200-.27.036.44.44%200%200%200-.214.572l-.003.004%201.01%202.438a5.15%205.15%200%200%200%202.081-2.615l-2.6-.44-.004.005z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20fill='%23844FBA'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eTerraform%3c/title%3e%3cpath%20d='M1.44%200v7.575l6.561%203.79V3.787zm21.12%204.227l-6.561%203.791v7.574l6.56-3.787zM8.72%204.23v7.575l6.561%203.787V8.018zm0%208.405v7.575L15.28%2024v-7.578z'/%3e%3c/svg%3e\"","/**\n * SelfHost dashboard widget.\n *\n * This component renders a promotional card for self-hosting Smarter, as a\n * three-step path from a laptop to production: the Docker Compose Quick Start\n * (smarter-deploy), the official Helm chart for Kubernetes, and the official\n * Terraform modules for AWS (smarter-infrastructure). Each step links to its\n * resource, followed by a link to the installation guide.\n *\n * :returns: A JSX fragment containing the self-host call-to-action widget.\n * :rtype: JSX.Element\n *\n * :example:\n *\n * <SelfHost />\n */\nimport \"./styles.css\";\nimport { gettext, interpolateNodes } from \"@smarter/common\";\nimport dockerLogo from \"../../assets/docker.svg\";\nimport kubernetesLogo from \"../../assets/kubernetes.svg\";\nimport terraformLogo from \"../../assets/terraform.svg\";\n\nconst STEPS = [\n {\n name: \"Docker\",\n where: gettext(\"Your laptop\"),\n description: gettext(\"Quick Start with Docker Compose\"),\n logo: dockerLogo,\n href: \"https://github.com/smarter-sh/smarter-deploy\",\n },\n {\n name: \"Kubernetes\",\n where: gettext(\"Your cluster\"),\n description: gettext(\"The official Helm chart\"),\n logo: kubernetesLogo,\n href: \"https://artifacthub.io/packages/helm/project-smarter/smarter\",\n },\n {\n name: \"Terraform\",\n where: gettext(\"Your AWS cloud\"),\n description: gettext(\"The official Terraform modules\"),\n logo: terraformLogo,\n href: \"https://github.com/smarter-sh/smarter-infrastructure\",\n },\n];\n\nfunction SelfHost() {\n return (\n <>\n {/* begin::Engage widget 4 */}\n <section\n id=\"self-host\"\n aria-label={gettext(\"Self Host\")}\n className=\"card border-transparent h-100 selfhost-card\"\n data-bs-theme=\"light\"\n >\n {/* begin::Body */}\n <div className=\"card-body d-flex flex-column ps-xl-15 h-100\">\n {/* begin::Title */}\n <span className=\"selfhost-eyebrow\">{gettext(\"Self-host Smarter\")}</span>\n <div className=\"fs-2x fw-bold text-white mt-3 mb-2\">\n {/* Translators: a headline. %(span)s is its highlighted last words, translated separately. */}\n {interpolateNodes(gettext(\"Run it %(span)s\"), {\n span: (\n <span className=\"position-relative d-inline-block\">\n {/* Translators: the highlighted words of a headline. %(span)s is their decorative underline, and stays at the end. */}\n {interpolateNodes(gettext(\"anywhere%(span)s\"), {\n span: (\n <span className=\"position-absolute bottom-0 start-0 border-4 border-bottom w-100 selfhost-underline\"></span>\n ),\n })}\n </span>\n ),\n })}\n </div>\n <p className=\"fs-6 mb-7 selfhost-lede\">\n {gettext(\"The same open source platform, from your laptop to production. No license fees, no seat counts.\")}\n </p>\n {/* end::Title */}\n {/* begin::Steps */}\n <ol className=\"selfhost-steps\">\n {STEPS.map((step, index) => (\n <li key={step.name} className=\"selfhost-step\">\n <a href={step.href} target=\"_blank\" className=\"selfhost-step-link hover-elevate-up\">\n <span className=\"selfhost-logo\">\n <img src={step.logo} alt=\"\" />\n <span className=\"selfhost-number\">{index + 1}</span>\n </span>\n <span className=\"selfhost-where\">{step.where}</span>\n <span className=\"selfhost-name\">{step.name}</span>\n <span className=\"selfhost-description\">{step.description}</span>\n </a>\n </li>\n ))}\n </ol>\n {/* end::Steps */}\n {/* begin::Action */}\n <div className=\"d-flex flex-wrap align-items-center gap-3 mt-auto pt-7\">\n <a\n href=\"https://docs.smarter.sh/en/latest/smarter-platform/installation.html\"\n target=\"_blank\"\n className=\"btn btn-sm fw-semibold selfhost-btn\"\n >\n {gettext(\"Installation Guide\")}\n </a>\n <span className=\"selfhost-license\">{gettext(\"Open source · AGPL-3.0\")}</span>\n </div>\n {/* end::Action */}\n </div>\n {/* end::Body */}\n </section>\n {/* end::Engage widget 4 */}\n </>\n );\n}\n\nexport default SelfHost;\n","/**\n * VSCodeExtension dashboard widget.\n *\n * This component renders a promotional card for the Smarter Manifest VS Code\n * extension: its main features, direct links to the Visual Studio Marketplace\n * listing and official documentation, its install count, and a mock editor\n * that shows the extension flagging a misspelled key in a manifest.\n *\n * :returns: A JSX fragment containing the VS Code extension call-to-action\n * widget.\n * :rtype: JSX.Element\n *\n * :example:\n *\n * <VSCodeExtension />\n */\nimport \"./styles.css\";\nimport { gettext, interpolateNodes } from \"@smarter/common\";\n\nconst MARKETPLACE = \"https://marketplace.visualstudio.com/items?itemName=Querium.smarter-manifest\";\n\nconst FEATURES = [\n gettext(\"Validation as you type\"),\n gettext(\"Quick fixes for misspelled keys\"),\n gettext(\"Completion and hover help\"),\n gettext(\"Apply and deploy from the editor\"),\n];\n\nfunction VSCodeExtension() {\n return (\n <>\n {/* begin::Download VS Code Extension widget 4 */}\n <div\n id=\"vscode-extension\"\n aria-label={gettext(\"VS Code Extension\")}\n className=\"card border-transparent h-100 vscode-card\"\n data-bs-theme=\"light\"\n >\n {/* begin::Body */}\n <div className=\"card-body ps-xl-15\">\n <div className=\"row g-7 align-items-center\">\n {/* begin::Pitch */}\n <div className=\"col-md-6\">\n {/* begin::Title */}\n <div className=\"fs-2x fw-bold text-white mb-2\">\n {/* Translators: a headline. %(span)s is its highlighted last words, translated separately. */}\n {interpolateNodes(gettext(\"Get the %(span)s\"), {\n span: (\n <span className=\"position-relative d-inline-block\">\n <a href={MARKETPLACE} className=\"vscode-title-link\">\n {gettext(\"VS Code Extension\")}\n </a>\n <span className=\"position-absolute bottom-0 start-0 border-4 border-bottom w-100 vscode-underline\"></span>\n </span>\n ),\n })}\n </div>\n <p className=\"text-gray-400 fs-6 mb-5\">\n {interpolateNodes(\n gettext(\n \"Write Smarter manifests with the same validation that %(code)s uses, before you apply them.\",\n ),\n { code: <code className=\"vscode-inline\">smarter apply</code> },\n )}\n </p>\n {/* end::Title */}\n {/* begin::Features */}\n <ul className=\"vscode-features\" aria-label={gettext(\"Features\")}>\n {FEATURES.map((feature) => (\n <li key={feature}>\n <span className=\"vscode-check\">✓</span>\n {feature}\n </li>\n ))}\n </ul>\n {/* end::Features */}\n {/* begin::Action */}\n <div className=\"d-flex flex-wrap align-items-center gap-2 mt-6\">\n <a href={MARKETPLACE} target=\"_blank\" className=\"btn btn-sm fw-semibold vscode-btn\">\n {gettext(\"Install\")}\n </a>\n <a\n href=\"https://docs.smarter.sh/en/latest/smarter-framework/vs-code-extension.html\"\n target=\"_blank\"\n className=\"btn btn-sm btn-light fw-semibold\"\n >\n {gettext(\"Documentation\")}\n </a>\n <a href={MARKETPLACE} target=\"_blank\" className=\"ms-2\">\n <img\n src=\"https://vsmarketplacebadges.dev/installs-short/Querium.smarter-manifest.svg\"\n alt={gettext(\"Installs\")}\n />\n </a>\n </div>\n {/* end::Action */}\n </div>\n {/* end::Pitch */}\n {/* begin::Editor */}\n <div className=\"col-md-6\">\n <div className=\"vscode-editor\" aria-label={gettext(\"Example manifest with a validation problem\")}>\n <div className=\"vscode-editor-bar\">\n <span className=\"vscode-dot vscode-dot-red\"></span>\n <span className=\"vscode-dot vscode-dot-yellow\"></span>\n <span className=\"vscode-dot vscode-dot-green\"></span>\n <span className=\"vscode-tab\">\n {/* Served by the page: library mode would inline it, and it is 115 kB. */}\n <img src=\"/static/images/vs-code-logo.png\" alt=\"\" />\n {gettext(\"secret.yaml\")}\n </span>\n </div>\n <pre className=\"vscode-code\">\n <div>\n <span className=\"vscode-ln\">1</span>\n <span className=\"vscode-key\">apiVersion</span>: <span className=\"vscode-str\">smarter.sh/v1</span>\n </div>\n <div>\n <span className=\"vscode-ln\">2</span>\n <span className=\"vscode-key\">kind</span>: <span className=\"vscode-str\">Secret</span>\n </div>\n <div>\n <span className=\"vscode-ln\">3</span>\n <span className=\"vscode-key\">metadata</span>:\n </div>\n <div>\n <span className=\"vscode-ln\">4</span>\n {\" \"}\n <span className=\"vscode-key\">name</span>: <span className=\"vscode-str\">openai_api_key</span>\n </div>\n <div>\n <span className=\"vscode-ln\">5</span>\n {\" \"}\n <span className=\"vscode-key vscode-squiggle\">descripton</span>:{\" \"}\n <span className=\"vscode-str\">The OpenAI API key</span>\n <span className=\"vscode-hover\" role=\"note\">\n Unknown key 'descripton' in metadata. Did you mean 'description'?\n </span>\n </div>\n <div>\n <span className=\"vscode-ln\">6</span>\n {\" \"}\n <span className=\"vscode-key\">version</span>: <span className=\"vscode-str\">1.0.0</span>\n </div>\n <div>\n <span className=\"vscode-ln\">7</span>\n <span className=\"vscode-key\">spec</span>:\n </div>\n </pre>\n </div>\n </div>\n {/* end::Editor */}\n </div>\n </div>\n {/* end::Body */}\n </div>\n {/* end::Download VS Code Extension widget 4 */}\n </>\n );\n}\n\nexport default VSCodeExtension;\n","/**\n * WhatsNew dashboard widget.\n *\n * This component renders a card that highlights notable features added in\n * recent Smarter releases, with each entry linking to its documentation page\n * on docs.smarter.sh.\n *\n * :returns: A JSX fragment containing the new features widget.\n * :rtype: JSX.Element\n *\n * :example:\n *\n * <WhatsNew />\n */\nimport \"./styles.css\";\nimport { gettext } from \"@smarter/common\";\n\ninterface Feature {\n name: string;\n version: string;\n description: string;\n docsPath: string;\n}\n\nconst DOCS_BASE_URL = \"https://docs.smarter.sh\";\n\nconst FEATURES: Feature[] = [\n {\n name: gettext(\"Extensions\"),\n version: \"0.27\",\n description: gettext(\"Install signed, third-party LLM tools from the Smarter Extension registry\"),\n docsPath: \"smarter-platform/extensions.html\",\n },\n {\n name: \"Smarter MCP Server\",\n version: \"0.24\",\n description: gettext(\"Answers about The Smarter Project, from its own code and docs, for any MCP client\"),\n docsPath: \"smarter-platform/smarter-project-mcp-server.html\",\n },\n {\n name: \"OpenAPI\",\n version: \"0.22\",\n description: gettext(\"An OpenAPI document and JSON Schemas for the Smarter api, served by every platform\"),\n docsPath: \"smarter-framework/smarter-openapi.html\",\n },\n {\n name: gettext(\"Themable Chat\"),\n version: \"0.21\",\n description: gettext(\"Brand your LLMClient's chat with your own logo, colors, fonts and avatar\"),\n docsPath: \"smarter-resources/llmclient/styles.html\",\n },\n {\n name: \"ImageSearchPlugin\",\n version: \"0.19\",\n description: gettext(\"Let LLMs find and show images from the web\"),\n docsPath: \"smarter-resources/llmtool/plugin/image-search.html\",\n },\n {\n name: gettext(\"Infrastructure Manager\"),\n version: \"0.18\",\n description: gettext(\"Manage and monitor your cloud infrastructure from the web console\"),\n docsPath: \"smarter-framework/technologies/infrastructure.html\",\n },\n {\n name: gettext(\"Custom Domains\"),\n version: \"0.18\",\n description: gettext(\"Serve LLMClients from your own branded domain, managed with a SAM manifest\"),\n docsPath: \"smarter-resources/smarter-custom-domain.html\",\n },\n {\n name: gettext(\"Manifest Editor\"),\n version: \"0.17\",\n description: gettext(\"Edit, validate, save, clone and delete manifests in the web console\"),\n docsPath: \"smarter-platform/smarter-web-console.html\",\n },\n {\n name: gettext(\"Budgets\"),\n version: \"0.16\",\n description: gettext(\"Enforce spending limits on any resource, with budget vs actual charts\"),\n docsPath: \"smarter-resources/smarter-budget.html\",\n },\n {\n name: \"LLMHosts\",\n version: \"0.16\",\n description: gettext(\"Run open-weight LLMs on your own Kubernetes cluster\"),\n docsPath: \"smarter-resources/smarter-llmhost.html\",\n },\n {\n name: gettext(\"Proxies\"),\n version: \"0.16\",\n description: gettext(\"Pass requests through to LLM provider APIs, with keys kept as Smarter Secrets\"),\n docsPath: \"smarter-resources/smarter-proxy.html\",\n },\n {\n name: \"VectorStores\",\n version: \"0.16\",\n description: gettext(\"Manage RAG vector databases: self-hosted Qdrant, Qdrant Cloud and Pinecone\"),\n docsPath: \"smarter-resources/smarter-vectorstore.html\",\n },\n];\n\nfunction WhatsNew() {\n return (\n <>\n {/* begin::What's New widget */}\n <section id=\"whats-new\" aria-label={gettext(\"What's New\")} className=\"card border-transparent h-xl-100\">\n {/* begin::Header */}\n <div className=\"card-header border-0 pt-5\">\n <h3 className=\"card-title align-items-start flex-column\">\n <span className=\"card-label fw-bold text-gray-900\">{gettext(\"What's New\")}</span>\n <span className=\"text-muted mt-1 fw-semibold fs-7\">{gettext(\"Recently added Smarter features\")}</span>\n </h3>\n </div>\n {/* end::Header */}\n {/* begin::Body */}\n <div className=\"card-body pt-3\">\n <ul className=\"whats-new-list list-unstyled row g-4 mb-0\">\n {FEATURES.map((feature) => (\n <li key={feature.name} className=\"col-md-6 d-flex align-items-start\">\n <span className=\"badge badge-light-primary fw-bold me-3 mt-1\">{feature.version}</span>\n <div>\n <a\n href={`${DOCS_BASE_URL}/${feature.docsPath}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-gray-900 text-hover-primary fw-bold fs-6\"\n >\n {feature.name}\n </a>\n <div className=\"text-gray-600 fs-7\">{feature.description}</div>\n </div>\n </li>\n ))}\n </ul>\n </div>\n {/* end::Body */}\n </section>\n {/* end::What's New widget */}\n </>\n );\n}\n\nexport default WhatsNew;\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@smarter.sh/ui-widgets",
|
|
3
3
|
"description": "Smarter web console dashboard widgets, for the web console and smarter.sh. They are styled for the Keen Bootstrap theme, which the page provides.",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.36.0-alpha.4",
|
|
5
5
|
"homepage": "https://smarter.sh",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "./dist/ui-widgets.es.js",
|
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
"exports": {
|
|
11
11
|
".": {
|
|
12
12
|
"types": "./dist/types/index.d.ts",
|
|
13
|
-
"import": "./dist/ui-widgets.es.js"
|
|
13
|
+
"import": "./dist/ui-widgets.es.js",
|
|
14
|
+
"default": "./dist/ui-widgets.es.js"
|
|
14
15
|
},
|
|
15
16
|
"./style.css": "./dist/ui-widgets.css"
|
|
16
17
|
},
|
|
@@ -32,7 +33,7 @@
|
|
|
32
33
|
"repository": {
|
|
33
34
|
"type": "git",
|
|
34
35
|
"url": "git+https://github.com/smarter-sh/smarter.git",
|
|
35
|
-
"directory": "smarter/react/packages/smarter-widgets"
|
|
36
|
+
"directory": "smarter/react/packages/smarter.sh-widgets"
|
|
36
37
|
},
|
|
37
38
|
"bugs": {
|
|
38
39
|
"url": "https://github.com/smarter-sh/smarter/issues"
|
|
@@ -74,5 +75,8 @@
|
|
|
74
75
|
"typescript-eslint": "^8.71.0",
|
|
75
76
|
"vite": "^8.3.2",
|
|
76
77
|
"vitest": "^5.0.3"
|
|
78
|
+
},
|
|
79
|
+
"publishConfig": {
|
|
80
|
+
"access": "public"
|
|
77
81
|
}
|
|
78
82
|
}
|