@aparte/plugin-cards 0.29.1 → 0.29.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/kit/fence.d.ts.map +1 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -74,6 +74,8 @@ function setupCardFences(options = {}) {
|
|
|
74
74
|
const names = /* @__PURE__ */ new Set([...SHIPPED, ...cardsSetUp(config), ...Object.keys(options.load ?? {})]);
|
|
75
75
|
const renderer = {
|
|
76
76
|
languages: [...names].map((name) => `${CARD_FENCE_PREFIX}${name}`),
|
|
77
|
+
// A card is not code to its reader: no code card around it, no copy button.
|
|
78
|
+
bare: true,
|
|
77
79
|
render: ({ language, source, open }) => {
|
|
78
80
|
if (open) return '<span class="aparte-skeleton aparte-skeleton--rect aparte-rich-card__fence-wait" aria-hidden="true"></span>';
|
|
79
81
|
const card = language.slice(CARD_FENCE_PREFIX.length);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/kit/fence.ts"],"sourcesContent":["/**\n * Cards written as text: a fenced block whose language names the card and whose body is its\n * fields, the way ```echarts holds a chart's option —\n *\n * ```card-weather\n * { \"location\": \"Lille\", \"temperature\": 11, \"condition\": \"rain\" }\n * ```\n *\n * For whatever produces text and no tool calls the chat can see: a backend that runs its tools\n * itself and streams only its answer, a workflow engine, a model with no tools. A client\n * without this plugin shows the block as code, which reads; one with it draws the card.\n *\n * A code-language renderer answers with markup, and a card is live DOM (its buttons, its\n * controls, its language switch), so the markup is an element that draws the card when it\n * reaches the page, through the card's own setup. A card that is not set up yet is fetched\n * by `load`, the first time its type appears.\n */\nimport { aparteGlobalConfig, escapeAttr, resolveConfig, type AparteConfig } from '@aparte/core';\nimport { cardsSetUp, drawCardSegment } from './define.js';\n\n/** The language prefix: ```card-weather draws the weather card. */\nexport const CARD_FENCE_PREFIX = 'card-';\n\n/** The cards this package ships, so their fences are known before any of them is set up. */\nconst SHIPPED = ['weather', 'items', 'product', 'place', 'stats', 'order', 'stock', 'plan', 'score', 'media', 'link'];\n\nconst TAG = 'aparte-card-fence';\n\nexport interface CardFenceOptions {\n /** The config to register on (the global one by default). */\n config?: AparteConfig;\n /**\n * How to fetch a card the page has not set up, by its name: called the first time a\n * fence names it, and its `setup…Card` export run on this config. Without an entry for\n * a name, a fence that names it shows its source.\n *\n * @example\n * setupCardFences({ load: { weather: () => import('@aparte/plugin-cards/weather') } });\n */\n load?: Record<string, () => Promise<Record<string, unknown>>>;\n}\n\n/** Each config's loaders, and what each load has become. */\nconst loaders = new WeakMap<AparteConfig, { load: NonNullable<CardFenceOptions['load']>; pending: Map<string, Promise<boolean>> }>();\n\n/** `weather` → `setupWeatherCard`, the setup each card's entry exports. */\nconst setupName = (card: string) => `setup${card.charAt(0).toUpperCase()}${card.slice(1)}Card`;\n\nfunction fetchCard(config: AparteConfig, card: string): Promise<boolean> {\n const own = loaders.get(config);\n const loader = own?.load[card];\n if (!own || !loader) return Promise.resolve(false);\n let pending = own.pending.get(card);\n if (!pending) {\n pending = loader().then((module) => {\n const setup = module[setupName(card)];\n if (typeof setup !== 'function') return false;\n (setup as (options: { config: AparteConfig }) => unknown)({ config });\n return true;\n }, (error: unknown) => {\n console.warn(`[aparte-cards] the ${card} card could not be loaded; its fence shows its source.`, error);\n return false;\n });\n own.pending.set(card, pending);\n }\n return pending;\n}\n\n/** A short, stable id for a fence's card, from what it holds: the same block, the same card. */\nfunction idOf(card: string, source: string): string {\n let h = 0;\n for (let i = 0; i < source.length; i++) h = (Math.imul(31, h) + source.charCodeAt(i)) | 0;\n return `fence-${card}-${(h >>> 0).toString(36)}`;\n}\n\n/** The fence drawn as its card, or its source when it cannot be. */\nasync function drawFence(el: HTMLElement): Promise<void> {\n const card = el.getAttribute('data-card') ?? '';\n const source = el.getAttribute('data-source') ?? '';\n const config = resolveConfig(el);\n const showSource = () => {\n const code = document.createElement('code');\n code.className = 'aparte-code-error';\n code.textContent = source;\n el.replaceChildren(code);\n };\n let data: unknown;\n try {\n data = JSON.parse(source);\n } catch {\n showSource();\n return;\n }\n const segment = { id: idOf(card, source), type: 'card' as const, card, data };\n let drawn = drawCardSegment(config, segment);\n if (!drawn && await fetchCard(config, card) && el.isConnected) drawn = drawCardSegment(config, segment);\n if (drawn) el.replaceChildren(drawn);\n else showSource();\n}\n\nfunction defineElement(): void {\n if (typeof customElements === 'undefined' || typeof HTMLElement === 'undefined' || customElements.get(TAG)) return;\n customElements.define(TAG, class extends HTMLElement {\n connectedCallback(): void {\n // Drawn once: a fence moved inside the page keeps the card it already holds.\n if (this.hasAttribute('data-drawn')) return;\n this.setAttribute('data-drawn', '');\n void drawFence(this);\n }\n });\n}\n\n/**\n * Draw the ```card-<name> fences in replies as their cards. Returns the function that stops\n * it. The cards are the ones set up on the config, and those `load` can fetch.\n */\nexport function setupCardFences(options: CardFenceOptions = {}): () => void {\n const config = options.config ?? aparteGlobalConfig;\n if (options.load) loaders.set(config, { load: options.load, pending: new Map() });\n defineElement();\n const names = new Set([...SHIPPED, ...cardsSetUp(config), ...Object.keys(options.load ?? {})]);\n const renderer = {\n languages: [...names].map((name) => `${CARD_FENCE_PREFIX}${name}`),\n render: ({ language, source, open }: { language: string; source: string; open: boolean }): string => {\n // A card arrives whole: until the fence closes, a quiet box where it will be.\n if (open) return '<span class=\"aparte-skeleton aparte-skeleton--rect aparte-rich-card__fence-wait\" aria-hidden=\"true\"></span>';\n const card = language.slice(CARD_FENCE_PREFIX.length);\n return `<${TAG} data-card=\"${escapeAttr(card)}\" data-source=\"${escapeAttr(source)}\"></${TAG}>`;\n },\n };\n const stop = config.registerCodeLanguageRenderer(renderer);\n return () => {\n stop();\n loaders.delete(config);\n };\n}\n"],"names":["h","i"],"mappings":";;;;;;;AAqBO,MAAM,oBAAoB;AAGjC,MAAM,UAAU,CAAC,WAAW,SAAS,WAAW,SAAS,SAAS,SAAS,SAAS,QAAQ,SAAS,SAAS,MAAM;AAEpH,MAAM,MAAM;AAiBZ,MAAM,8BAAc,QAAA;AAGpB,MAAM,YAAY,CAAC,SAAiB,QAAQ,KAAK,OAAO,CAAC,EAAE,YAAA,CAAa,GAAG,KAAK,MAAM,CAAC,CAAC;AAExF,SAAS,UAAU,QAAsB,MAAgC;AACrE,QAAM,MAAM,QAAQ,IAAI,MAAM;AAC9B,QAAM,SAAS,KAAK,KAAK,IAAI;AAC7B,MAAI,CAAC,OAAO,CAAC,OAAQ,QAAO,QAAQ,QAAQ,KAAK;AACjD,MAAI,UAAU,IAAI,QAAQ,IAAI,IAAI;AAClC,MAAI,CAAC,SAAS;AACV,cAAU,OAAA,EAAS,KAAK,CAAC,WAAW;AAChC,YAAM,QAAQ,OAAO,UAAU,IAAI,CAAC;AACpC,UAAI,OAAO,UAAU,WAAY,QAAO;AACvC,YAAyD,EAAE,QAAQ;AACpE,aAAO;AAAA,IACX,GAAG,CAAC,UAAmB;AACnB,cAAQ,KAAK,sBAAsB,IAAI,0DAA0D,KAAK;AACtG,aAAO;AAAA,IACX,CAAC;AACD,QAAI,QAAQ,IAAI,MAAM,OAAO;AAAA,EACjC;AACA,SAAO;AACX;AAGA,SAAS,KAAK,MAAc,QAAwB;AAChD,MAAIA,KAAI;AACR,WAASC,KAAI,GAAGA,KAAI,OAAO,QAAQA,KAAK,CAAAD,KAAK,KAAK,KAAK,IAAIA,EAAC,IAAI,OAAO,WAAWC,EAAC,IAAK;AACxF,SAAO,SAAS,IAAI,KAAKD,OAAM,GAAG,SAAS,EAAE,CAAC;AAClD;AAGA,eAAe,UAAU,IAAgC;AACrD,QAAM,OAAO,GAAG,aAAa,WAAW,KAAK;AAC7C,QAAM,SAAS,GAAG,aAAa,aAAa,KAAK;AACjD,QAAM,SAAS,cAAc,EAAE;AAC/B,QAAM,aAAa,MAAM;AACrB,UAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,SAAK,YAAY;AACjB,SAAK,cAAc;AACnB,OAAG,gBAAgB,IAAI;AAAA,EAC3B;AACA,MAAI;AACJ,MAAI;AACA,WAAO,KAAK,MAAM,MAAM;AAAA,EAC5B,QAAQ;AACJ,eAAA;AACA;AAAA,EACJ;AACA,QAAM,UAAU,EAAE,IAAI,KAAK,MAAM,MAAM,GAAG,MAAM,QAAiB,MAAM,KAAA;AACvE,MAAI,QAAQ,gBAAgB,QAAQ,OAAO;AAC3C,MAAI,CAAC,SAAS,MAAM,UAAU,QAAQ,IAAI,KAAK,GAAG,YAAa,SAAQ,gBAAgB,QAAQ,OAAO;AACtG,MAAI,MAAO,IAAG,gBAAgB,KAAK;AAAA,MAC9B,YAAA;AACT;AAEA,SAAS,gBAAsB;AAC3B,MAAI,OAAO,mBAAmB,eAAe,OAAO,gBAAgB,eAAe,eAAe,IAAI,GAAG,EAAG;AAC5G,iBAAe,OAAO,KAAK,cAAc,YAAY;AAAA,IACjD,oBAA0B;AAEtB,UAAI,KAAK,aAAa,YAAY,EAAG;AACrC,WAAK,aAAa,cAAc,EAAE;AAClC,WAAK,UAAU,IAAI;AAAA,IACvB;AAAA,EAAA,CACH;AACL;AAMO,SAAS,gBAAgB,UAA4B,IAAgB;AACxE,QAAM,SAAS,QAAQ,UAAU;AACjC,MAAI,QAAQ,KAAM,SAAQ,IAAI,QAAQ,EAAE,MAAM,QAAQ,MAAM,SAAS,oBAAI,IAAA,GAAO;AAChF,gBAAA;AACA,QAAM,QAAQ,oBAAI,IAAI,CAAC,GAAG,SAAS,GAAG,WAAW,MAAM,GAAG,GAAG,OAAO,KAAK,QAAQ,QAAQ,CAAA,CAAE,CAAC,CAAC;AAC7F,QAAM,WAAW;AAAA,IACb,WAAW,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,SAAS,GAAG,iBAAiB,GAAG,IAAI,EAAE;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/kit/fence.ts"],"sourcesContent":["/**\n * Cards written as text: a fenced block whose language names the card and whose body is its\n * fields, the way ```echarts holds a chart's option —\n *\n * ```card-weather\n * { \"location\": \"Lille\", \"temperature\": 11, \"condition\": \"rain\" }\n * ```\n *\n * For whatever produces text and no tool calls the chat can see: a backend that runs its tools\n * itself and streams only its answer, a workflow engine, a model with no tools. A client\n * without this plugin shows the block as code, which reads; one with it draws the card.\n *\n * A code-language renderer answers with markup, and a card is live DOM (its buttons, its\n * controls, its language switch), so the markup is an element that draws the card when it\n * reaches the page, through the card's own setup. A card that is not set up yet is fetched\n * by `load`, the first time its type appears.\n */\nimport { aparteGlobalConfig, escapeAttr, resolveConfig, type AparteConfig } from '@aparte/core';\nimport { cardsSetUp, drawCardSegment } from './define.js';\n\n/** The language prefix: ```card-weather draws the weather card. */\nexport const CARD_FENCE_PREFIX = 'card-';\n\n/** The cards this package ships, so their fences are known before any of them is set up. */\nconst SHIPPED = ['weather', 'items', 'product', 'place', 'stats', 'order', 'stock', 'plan', 'score', 'media', 'link'];\n\nconst TAG = 'aparte-card-fence';\n\nexport interface CardFenceOptions {\n /** The config to register on (the global one by default). */\n config?: AparteConfig;\n /**\n * How to fetch a card the page has not set up, by its name: called the first time a\n * fence names it, and its `setup…Card` export run on this config. Without an entry for\n * a name, a fence that names it shows its source.\n *\n * @example\n * setupCardFences({ load: { weather: () => import('@aparte/plugin-cards/weather') } });\n */\n load?: Record<string, () => Promise<Record<string, unknown>>>;\n}\n\n/** Each config's loaders, and what each load has become. */\nconst loaders = new WeakMap<AparteConfig, { load: NonNullable<CardFenceOptions['load']>; pending: Map<string, Promise<boolean>> }>();\n\n/** `weather` → `setupWeatherCard`, the setup each card's entry exports. */\nconst setupName = (card: string) => `setup${card.charAt(0).toUpperCase()}${card.slice(1)}Card`;\n\nfunction fetchCard(config: AparteConfig, card: string): Promise<boolean> {\n const own = loaders.get(config);\n const loader = own?.load[card];\n if (!own || !loader) return Promise.resolve(false);\n let pending = own.pending.get(card);\n if (!pending) {\n pending = loader().then((module) => {\n const setup = module[setupName(card)];\n if (typeof setup !== 'function') return false;\n (setup as (options: { config: AparteConfig }) => unknown)({ config });\n return true;\n }, (error: unknown) => {\n console.warn(`[aparte-cards] the ${card} card could not be loaded; its fence shows its source.`, error);\n return false;\n });\n own.pending.set(card, pending);\n }\n return pending;\n}\n\n/** A short, stable id for a fence's card, from what it holds: the same block, the same card. */\nfunction idOf(card: string, source: string): string {\n let h = 0;\n for (let i = 0; i < source.length; i++) h = (Math.imul(31, h) + source.charCodeAt(i)) | 0;\n return `fence-${card}-${(h >>> 0).toString(36)}`;\n}\n\n/** The fence drawn as its card, or its source when it cannot be. */\nasync function drawFence(el: HTMLElement): Promise<void> {\n const card = el.getAttribute('data-card') ?? '';\n const source = el.getAttribute('data-source') ?? '';\n const config = resolveConfig(el);\n const showSource = () => {\n const code = document.createElement('code');\n code.className = 'aparte-code-error';\n code.textContent = source;\n el.replaceChildren(code);\n };\n let data: unknown;\n try {\n data = JSON.parse(source);\n } catch {\n showSource();\n return;\n }\n const segment = { id: idOf(card, source), type: 'card' as const, card, data };\n let drawn = drawCardSegment(config, segment);\n if (!drawn && await fetchCard(config, card) && el.isConnected) drawn = drawCardSegment(config, segment);\n if (drawn) el.replaceChildren(drawn);\n else showSource();\n}\n\nfunction defineElement(): void {\n if (typeof customElements === 'undefined' || typeof HTMLElement === 'undefined' || customElements.get(TAG)) return;\n customElements.define(TAG, class extends HTMLElement {\n connectedCallback(): void {\n // Drawn once: a fence moved inside the page keeps the card it already holds.\n if (this.hasAttribute('data-drawn')) return;\n this.setAttribute('data-drawn', '');\n void drawFence(this);\n }\n });\n}\n\n/**\n * Draw the ```card-<name> fences in replies as their cards. Returns the function that stops\n * it. The cards are the ones set up on the config, and those `load` can fetch.\n */\nexport function setupCardFences(options: CardFenceOptions = {}): () => void {\n const config = options.config ?? aparteGlobalConfig;\n if (options.load) loaders.set(config, { load: options.load, pending: new Map() });\n defineElement();\n const names = new Set([...SHIPPED, ...cardsSetUp(config), ...Object.keys(options.load ?? {})]);\n const renderer = {\n languages: [...names].map((name) => `${CARD_FENCE_PREFIX}${name}`),\n // A card is not code to its reader: no code card around it, no copy button.\n bare: true,\n render: ({ language, source, open }: { language: string; source: string; open: boolean }): string => {\n // A card arrives whole: until the fence closes, a quiet box where it will be.\n if (open) return '<span class=\"aparte-skeleton aparte-skeleton--rect aparte-rich-card__fence-wait\" aria-hidden=\"true\"></span>';\n const card = language.slice(CARD_FENCE_PREFIX.length);\n return `<${TAG} data-card=\"${escapeAttr(card)}\" data-source=\"${escapeAttr(source)}\"></${TAG}>`;\n },\n };\n const stop = config.registerCodeLanguageRenderer(renderer);\n return () => {\n stop();\n loaders.delete(config);\n };\n}\n"],"names":["h","i"],"mappings":"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"}
|
package/dist/kit/fence.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fence.d.ts","sourceRoot":"","sources":["../../src/kit/fence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAiD,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAGhG,mEAAmE;AACnE,eAAO,MAAM,iBAAiB,UAAU,CAAC;AAOzC,MAAM,WAAW,gBAAgB;IAC7B,6DAA6D;IAC7D,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;CACjE;AAwED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,GAAE,gBAAqB,GAAG,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"fence.d.ts","sourceRoot":"","sources":["../../src/kit/fence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAiD,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAGhG,mEAAmE;AACnE,eAAO,MAAM,iBAAiB,UAAU,CAAC;AAOzC,MAAM,WAAW,gBAAgB;IAC7B,6DAA6D;IAC7D,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;CACjE;AAwED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,GAAE,gBAAqB,GAAG,MAAM,IAAI,CAqB1E"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aparte/plugin-cards",
|
|
3
|
-
"version": "0.29.
|
|
3
|
+
"version": "0.29.2",
|
|
4
4
|
"homepage": "https://apartejs.dev/guides/cards/",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -94,12 +94,12 @@
|
|
|
94
94
|
"node": ">=18"
|
|
95
95
|
},
|
|
96
96
|
"peerDependencies": {
|
|
97
|
-
"@aparte/core": ">=0.29.
|
|
97
|
+
"@aparte/core": ">=0.29.2 <1.0.0"
|
|
98
98
|
},
|
|
99
99
|
"devDependencies": {
|
|
100
100
|
"typescript": "~5.7.0",
|
|
101
101
|
"vite": "^6.0.0",
|
|
102
|
-
"@aparte/core": "0.29.
|
|
102
|
+
"@aparte/core": "0.29.2"
|
|
103
103
|
},
|
|
104
104
|
"keywords": [
|
|
105
105
|
"aparte",
|