@things-factory/ai-dashboard 10.1.221 → 10.1.223

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.
Files changed (37) hide show
  1. package/client/components/card-dialogs.ts +1 -1
  2. package/client/utils/card-api.ts +1 -2
  3. package/dist-client/components/card-dialogs.js +1 -1
  4. package/dist-client/components/card-dialogs.js.map +1 -1
  5. package/dist-client/tsconfig.tsbuildinfo +1 -1
  6. package/dist-client/utils/card-api.d.ts +0 -1
  7. package/dist-client/utils/card-api.js +1 -1
  8. package/dist-client/utils/card-api.js.map +1 -1
  9. package/dist-server/service/card/card-access.d.ts +4 -33
  10. package/dist-server/service/card/card-access.js +6 -35
  11. package/dist-server/service/card/card-access.js.map +1 -1
  12. package/dist-server/service/card/card-resolver.js +11 -34
  13. package/dist-server/service/card/card-resolver.js.map +1 -1
  14. package/dist-server/service/card/card-run.d.ts +2 -0
  15. package/dist-server/service/card/card-run.js +7 -4
  16. package/dist-server/service/card/card-run.js.map +1 -1
  17. package/dist-server/service/card/card-tool.js +8 -12
  18. package/dist-server/service/card/card-tool.js.map +1 -1
  19. package/dist-server/service/card/card-types.d.ts +0 -1
  20. package/dist-server/service/card/card-types.js +0 -4
  21. package/dist-server/service/card/card-types.js.map +1 -1
  22. package/dist-server/tsconfig.tsbuildinfo +1 -1
  23. package/package.json +6 -5
  24. package/server/service/card/card-access.test.ts +5 -25
  25. package/server/service/card/card-access.ts +7 -43
  26. package/server/service/card/card-resolver.ts +15 -36
  27. package/server/service/card/card-run.ts +10 -5
  28. package/server/service/card/card-tool.ts +8 -11
  29. package/server/service/card/card-types.ts +0 -3
  30. package/server/service/card/card-words.test.ts +72 -0
  31. package/test/translations.test.ts +1 -1
  32. package/translations/en.json +2 -2
  33. package/translations/es.json +2 -2
  34. package/translations/ja.json +2 -2
  35. package/translations/ko.json +2 -2
  36. package/translations/ms.json +2 -2
  37. package/translations/zh.json +2 -2
@@ -317,7 +317,7 @@ export class CardShareForm extends localize(i18next)(LitElement) {
317
317
  <input type="checkbox" .checked=${this.has('DOMAIN', options.domainId)} @change=${(e: any) => this.toggle({ scope: 'DOMAIN', targetId: options.domainId, targetName: options.domainName }, e.target.checked)} />
318
318
  <md-icon>domain</md-icon>${t('ai-dashboard.share.everyone-in', { name: options.domainName })}
319
319
  </label>
320
- ${options.departmentsAvailable && options.departments.length
320
+ ${options.departments.length
321
321
  ? html`<h5>${t('ai-dashboard.share.departments')}</h5>
322
322
  ${options.departments.map(
323
323
  one => html`<label class="option">
@@ -75,10 +75,9 @@ export const cardApi = {
75
75
  createdAt?: string
76
76
  }[],
77
77
  shareOptions: async () =>
78
- (await ask<any>(`query { dashboardShareOptions { domainId domainName departmentsAvailable departments { id name } peopleAvailable roles { id name note } } }`)).dashboardShareOptions as {
78
+ (await ask<any>(`query { dashboardShareOptions { domainId domainName departments { id name } peopleAvailable roles { id name note } } }`)).dashboardShareOptions as {
79
79
  domainId: string
80
80
  domainName: string
81
- departmentsAvailable: boolean
82
81
  departments: { id: string; name: string }[]
83
82
  peopleAvailable: boolean
84
83
  roles: { id: string; name: string; note?: string | null }[]
@@ -327,7 +327,7 @@ let CardShareForm = class CardShareForm extends localize(i18next)(LitElement) {
327
327
  <input type="checkbox" .checked=${this.has('DOMAIN', options.domainId)} @change=${(e) => this.toggle({ scope: 'DOMAIN', targetId: options.domainId, targetName: options.domainName }, e.target.checked)} />
328
328
  <md-icon>domain</md-icon>${t('ai-dashboard.share.everyone-in', { name: options.domainName })}
329
329
  </label>
330
- ${options.departmentsAvailable && options.departments.length
330
+ ${options.departments.length
331
331
  ? html `<h5>${t('ai-dashboard.share.departments')}</h5>
332
332
  ${options.departments.map(one => html `<label class="option">
333
333
  <input type="checkbox" .checked=${this.has('DEPARTMENT', one.id)} @change=${(e) => this.toggle({ scope: 'DEPARTMENT', targetId: one.id, targetName: one.name }, e.target.checked)} />
@@ -1 +1 @@
1
- {"version":3,"file":"card-dialogs.js","sourceRoot":"","sources":["../../client/components/card-dialogs.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * The small forms a card opens - what to change with the assistant, a new name, whom to share it with, and its\n * versions (ADR-0160 decisions 7, 9). Each changes one card through its own door and tells an open dashboard.\n */\nimport '@material/web/icon/icon.js'\nimport '@material/web/button/filled-button.js'\nimport '@material/web/button/text-button.js'\nimport '@operato/popup/ox-popup-actions.js'\n\nimport { LitElement, css, html, nothing } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\n\nimport { i18next, localize } from '@operato/i18n'\nimport { notify, openPopup } from '@operato/layout'\nimport { CommonPopupStyles, PopupBodyStyles } from '@operato/styles'\nimport { askAssistant } from '@things-factory/ai-assistant/dist-client/index.js'\n\nimport { cardApi, dashboardChanged, type CardItem, type CardShare } from '../utils/card-api.js'\nimport { cardSelection } from '../utils/card-words.js'\n\nconst t = (key: string, options: Record<string, unknown> = {}) => String(i18next.t(key, options))\n\n/*\n * The house popup (CommonPopupStyles, PopupBodyStyles): only .body scrolls and ox-popup-actions stays put - a share\n * list of three people pushed 저장 out of sight (2026-10-25). The form fills the popup it is opened in.\n */\nconst FormStyles = css`\n :host {\n height: 100%;\n line-height: 1.5;\n }\n\n p.lead,\n p.note {\n margin: 0;\n }\n\n p.lead {\n color: var(--ui-muted, var(--md-sys-color-on-surface-variant));\n }\n\n textarea,\n input[type='text'],\n input[type='search'] {\n box-sizing: border-box;\n width: 100%;\n padding: 9px 12px;\n border: 1px solid var(--ui-line, var(--md-sys-color-outline-variant));\n border-radius: 8px;\n background: var(--ui-panel, var(--md-sys-color-surface-container-lowest));\n color: inherit;\n font: inherit;\n }\n\n textarea {\n min-height: 88px;\n resize: vertical;\n }\n\n textarea:focus,\n input:focus {\n outline: 2px solid color-mix(in srgb, var(--ui-accent, var(--md-sys-color-primary)) 40%, transparent);\n border-color: var(--ui-accent, var(--md-sys-color-primary));\n }\n\n .hints {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n }\n\n .hints button {\n padding: 4px 10px;\n border: 1px solid var(--ui-line, var(--md-sys-color-outline-variant));\n border-radius: 999px;\n background: transparent;\n color: var(--ui-muted, var(--md-sys-color-on-surface-variant));\n font: inherit;\n font-size: var(--ui-t-small, 12px);\n cursor: pointer;\n }\n\n .hints button:hover {\n border-color: var(--ui-accent, var(--md-sys-color-primary));\n color: var(--ui-accent, var(--md-sys-color-primary));\n }\n\n h5 {\n margin: 6px 0 0;\n font-size: var(--ui-t-small, 12px);\n font-weight: 600;\n color: var(--ui-muted, var(--md-sys-color-on-surface-variant));\n text-transform: none;\n }\n\n label.option {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 8px 10px;\n border: 1px solid var(--ui-line-soft, var(--md-sys-color-outline-variant));\n border-radius: 8px;\n cursor: pointer;\n }\n\n label.option small {\n margin-left: auto;\n color: var(--ui-faint, var(--md-sys-color-on-surface-variant));\n }\n\n .people {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n\n .person {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 10px;\n border-radius: 8px;\n background: var(--ui-panel-2, var(--md-sys-color-surface-container-low));\n --md-icon-size: 16px;\n }\n\n .person small {\n color: var(--ui-faint, var(--md-sys-color-on-surface-variant));\n }\n\n .person button,\n .found button {\n margin-left: auto;\n border: 0;\n background: transparent;\n color: var(--ui-accent, var(--md-sys-color-primary));\n font: inherit;\n cursor: pointer;\n }\n\n .found {\n display: flex;\n flex-direction: column;\n border: 1px solid var(--ui-line-soft, var(--md-sys-color-outline-variant));\n border-radius: 8px;\n }\n\n .found div {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 10px;\n }\n\n .found div + div {\n border-top: 1px solid var(--ui-line-soft, var(--md-sys-color-outline-variant));\n }\n\n ol.versions {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n\n ol.versions li {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 12px;\n border: 1px solid var(--ui-line-soft, var(--md-sys-color-outline-variant));\n border-radius: 8px;\n }\n\n ol.versions .v {\n flex: none;\n min-width: 36px;\n font-weight: 650;\n font-variant-numeric: tabular-nums;\n color: var(--ui-accent, var(--md-sys-color-primary));\n }\n\n ol.versions .label {\n flex: 1;\n min-width: 0;\n }\n\n ol.versions small {\n display: block;\n color: var(--ui-faint, var(--md-sys-color-on-surface-variant));\n }\n`\n\n/** What to change in a card - sent to the conversation beside the page with the card picked, as a screen request. */\n@customElement('ai-dashboard-card-ai-form')\nexport class CardAiForm extends localize(i18next)(LitElement) {\n static styles = [CommonPopupStyles, PopupBodyStyles, FormStyles]\n @property({ attribute: false }) card!: CardItem\n @state() private text = ''\n\n render() {\n const hints = ['ai-dashboard.ai.hint-period', 'ai-dashboard.ai.hint-top', 'ai-dashboard.ai.hint-line', 'ai-dashboard.ai.hint-table']\n return html`<div class=\"body\">\n <p class=\"lead\">${t('ai-dashboard.ai.lead', { name: this.card.name })}</p>\n <textarea .value=${this.text} placeholder=${t('ai-dashboard.ai.placeholder')} @input=${(e: any) => (this.text = e.target.value)} @keydown=${(e: KeyboardEvent) => e.key === 'Enter' && (e.metaKey || e.ctrlKey) && this.send()}></textarea>\n <div class=\"hints\">${hints.map(key => html`<button @click=${() => (this.text = t(key))}>${t(key)}</button>`)}</div>\n </div>\n <ox-popup-actions>\n <md-text-button slot=\"cancel\" @click=${() => this.close()}>${t('ai-dashboard.button.cancel')}</md-text-button>\n <md-filled-button slot=\"confirm\" ?disabled=${!this.text.trim()} @click=${() => this.send()}>${t('ai-dashboard.ai.send')}</md-filled-button>\n </ox-popup-actions>`\n }\n\n private close() {\n this.dispatchEvent(new CustomEvent('done', { bubbles: true, composed: true }))\n }\n\n private send() {\n if (!this.text.trim()) return\n /* Closed first: the dock opens over the page, and a popup that is no longer the top one refuses to close. */\n this.close()\n askAssistant({\n ask: t('ai-dashboard.ai.ask', { name: this.card.name, version: this.card.version, change: this.text.trim() }),\n selection: cardSelection(this.card, t('ai-dashboard.title'))\n })\n }\n}\n\n/** A card's new name - a new version. */\n@customElement('ai-dashboard-card-rename-form')\nexport class CardRenameForm extends localize(i18next)(LitElement) {\n static styles = [CommonPopupStyles, PopupBodyStyles, FormStyles]\n @property({ attribute: false }) card!: CardItem\n @state() private name = ''\n\n connectedCallback() {\n super.connectedCallback()\n this.name = this.card?.name ?? ''\n }\n\n render() {\n return html`<div class=\"body\">\n <input type=\"text\" .value=${this.name} maxlength=\"100\" @input=${(e: any) => (this.name = e.target.value)} @keydown=${(e: KeyboardEvent) => e.key === 'Enter' && this.save()} />\n </div>\n <ox-popup-actions>\n <md-text-button slot=\"cancel\" @click=${() => this.close()}>${t('ai-dashboard.button.cancel')}</md-text-button>\n <md-filled-button slot=\"confirm\" ?disabled=${!this.name.trim() || this.name.trim() === this.card.name} @click=${() => this.save()}>${t('ai-dashboard.button.save')}</md-filled-button>\n </ox-popup-actions>`\n }\n\n private close() {\n this.dispatchEvent(new CustomEvent('done', { bubbles: true, composed: true }))\n }\n\n private async save() {\n try {\n await cardApi.rename(this.card.id, this.name.trim())\n dashboardChanged()\n this.close()\n } catch (error: any) {\n notify({ level: 'error', message: error?.message ?? String(error) })\n }\n }\n}\n\n/** Whom one's own card is shared with - the whole domain, one's own departments, people found by name. */\n@customElement('ai-dashboard-card-share-form')\nexport class CardShareForm extends localize(i18next)(LitElement) {\n static styles = [CommonPopupStyles, PopupBodyStyles, FormStyles]\n @property({ attribute: false }) card!: CardItem\n @state() private options?: Awaited<ReturnType<typeof cardApi.shareOptions>>\n @state() private shares: CardShare[] = []\n @state() private found: { id: string; name: string; note?: string }[] = []\n @state() private search = ''\n private searching?: ReturnType<typeof setTimeout>\n\n async connectedCallback() {\n super.connectedCallback()\n this.shares = [...(this.card?.shares ?? [])].map(({ scope, targetId, targetName }) => ({ scope, targetId, targetName }))\n try {\n this.options = await cardApi.shareOptions()\n } catch (error: any) {\n notify({ level: 'error', message: error?.message ?? String(error) })\n }\n }\n\n private has(scope: string, id: string) {\n return this.shares.some(one => one.scope === scope && one.targetId === id)\n }\n\n private toggle(share: CardShare, on: boolean) {\n this.shares = on ? [...this.shares.filter(one => !(one.scope === share.scope && one.targetId === share.targetId)), share] : this.shares.filter(one => !(one.scope === share.scope && one.targetId === share.targetId))\n }\n\n private find(text: string) {\n this.search = text\n clearTimeout(this.searching)\n this.searching = setTimeout(async () => {\n try {\n this.found = text.trim() ? await cardApi.people(text.trim()) : []\n } catch {\n this.found = []\n }\n }, 250)\n }\n\n render() {\n const options = this.options\n const people = this.shares.filter(one => one.scope === 'USER')\n return html`<div class=\"body\">\n <p class=\"lead\">${t('ai-dashboard.share.lead')}</p>\n ${options\n ? html`<h5>${t('ai-dashboard.share.everyone-title')}</h5>\n <label class=\"option\">\n <input type=\"checkbox\" .checked=${this.has('DOMAIN', options.domainId)} @change=${(e: any) => this.toggle({ scope: 'DOMAIN', targetId: options.domainId, targetName: options.domainName }, e.target.checked)} />\n <md-icon>domain</md-icon>${t('ai-dashboard.share.everyone-in', { name: options.domainName })}\n </label>\n ${options.departmentsAvailable && options.departments.length\n ? html`<h5>${t('ai-dashboard.share.departments')}</h5>\n ${options.departments.map(\n one => html`<label class=\"option\">\n <input type=\"checkbox\" .checked=${this.has('DEPARTMENT', one.id)} @change=${(e: any) => this.toggle({ scope: 'DEPARTMENT', targetId: one.id, targetName: one.name }, e.target.checked)} />\n <md-icon>groups</md-icon>${one.name}<small>${t('ai-dashboard.share.department-members')}</small>\n </label>`\n )}`\n : nothing}\n ${options.roles.length\n ? html`<h5>${t('ai-dashboard.share.roles')}</h5>\n ${options.roles.map(\n one => html`<label class=\"option\">\n <input type=\"checkbox\" .checked=${this.has('ROLE', one.id)} @change=${(e: any) => this.toggle({ scope: 'ROLE', targetId: one.id, targetName: one.name }, e.target.checked)} />\n <md-icon>badge</md-icon>${one.name}<small>${t('ai-dashboard.share.role-holders')}</small>\n </label>`\n )}`\n : nothing}\n <h5>${t('ai-dashboard.share.people')}</h5>\n ${people.length\n ? html`<div class=\"people\">\n ${people.map(one => html`<div class=\"person\"><md-icon>person</md-icon>${one.targetName ?? one.targetId}<button @click=${() => this.toggle(one, false)}>${t('ai-dashboard.share.remove')}</button></div>`)}\n </div>`\n : nothing}\n ${options.peopleAvailable\n ? html`<input type=\"search\" .value=${this.search} placeholder=${t('ai-dashboard.share.find-person')} @input=${(e: any) => this.find(e.target.value)} />\n ${this.found.length\n ? html`<div class=\"found\">\n ${this.found\n .filter(one => !this.has('USER', one.id))\n .map(one => html`<div><md-icon>person_add</md-icon>${one.name} ${one.note ? html`<small>${one.note}</small>` : nothing}<button @click=${() => this.toggle({ scope: 'USER', targetId: one.id, targetName: one.name }, true)}>${t('ai-dashboard.share.add')}</button></div>`)}\n </div>`\n : nothing}`\n : html`<p class=\"note\">${t('ai-dashboard.share.people-unavailable')}</p>`}\n <p class=\"note\">${t('ai-dashboard.share.rule')}</p>`\n : nothing}\n </div>\n <ox-popup-actions>\n <md-text-button slot=\"cancel\" @click=${() => this.close()}>${t('ai-dashboard.button.cancel')}</md-text-button>\n <md-filled-button slot=\"confirm\" ?disabled=${!options} @click=${() => this.save()}>${t('ai-dashboard.button.save')}</md-filled-button>\n </ox-popup-actions>`\n }\n\n private close() {\n this.dispatchEvent(new CustomEvent('done', { bubbles: true, composed: true }))\n }\n\n private async save() {\n try {\n await cardApi.share(this.card.id, this.shares)\n notify({ level: 'info', message: t(this.shares.length ? 'ai-dashboard.text.shared' : 'ai-dashboard.text.private', { name: this.card.name }) })\n dashboardChanged()\n this.close()\n } catch (error: any) {\n notify({ level: 'error', message: error?.message ?? String(error) })\n }\n }\n}\n\n/** One's own card's versions, newest first - an earlier one comes back as a new version. */\n@customElement('ai-dashboard-card-versions')\nexport class CardVersions extends localize(i18next)(LitElement) {\n static styles = [CommonPopupStyles, PopupBodyStyles, FormStyles]\n @property({ attribute: false }) card!: CardItem\n @state() private versions?: Awaited<ReturnType<typeof cardApi.versions>>\n\n async connectedCallback() {\n super.connectedCallback()\n try {\n this.versions = await cardApi.versions(this.card.id)\n } catch (error: any) {\n notify({ level: 'error', message: error?.message ?? String(error) })\n }\n }\n\n render() {\n const view = (definition: any) => t(`ai-dashboard.view.${definition?.view?.kind ?? 'table'}`)\n return html`<div class=\"body\">\n <p class=\"lead\">${t('ai-dashboard.versions.lead')}</p>\n <ol class=\"versions\">\n ${(this.versions ?? []).map(\n one => html`<li>\n <span class=\"v\">v${one.version}</span>\n <span class=\"label\">${one.name}<small>${view(one.definition)} · ${one.creatorName ?? ''} · ${one.createdAt ? new Date(one.createdAt).toLocaleString(i18next.language) : ''}</small></span>\n ${one.version === this.card.version\n ? html`<small>${t('ai-dashboard.versions.current')}</small>`\n : html`<md-text-button @click=${() => this.restore(one.version)}>${t('ai-dashboard.versions.restore')}</md-text-button>`}\n </li>`\n )}\n </ol>\n </div>`\n }\n\n private async restore(version: number) {\n try {\n await cardApi.restore(this.card.id, version)\n notify({ level: 'info', message: t('ai-dashboard.text.restored', { version }) })\n dashboardChanged()\n this.dispatchEvent(new CustomEvent('done', { bubbles: true, composed: true }))\n } catch (error: any) {\n notify({ level: 'error', message: error?.message ?? String(error) })\n }\n }\n}\n\n/* 'fit' is the house size of a form of a few fields - it stands at its own height; a small popup was narrower than the form. */\nfunction open(template: unknown, title: string, size: 'fit' | 'medium' = 'fit') {\n const popup: any = openPopup(html`<div @done=${() => popup?.close?.()}>${template}</div>`, { backdrop: true, size, title })\n return popup\n}\n\nexport const openCardAiPrompt = (card: CardItem) => open(html`<ai-dashboard-card-ai-form .card=${card}></ai-dashboard-card-ai-form>`, t('ai-dashboard.card.ai'), 'medium')\nexport const openCardRename = (card: CardItem) => open(html`<ai-dashboard-card-rename-form .card=${card}></ai-dashboard-card-rename-form>`, t('ai-dashboard.card.rename'))\nexport const openCardShare = (card: CardItem) => open(html`<ai-dashboard-card-share-form .card=${card}></ai-dashboard-card-share-form>`, t('ai-dashboard.share.title', { name: card.name }), 'medium')\nexport const openCardVersions = (card: CardItem) => open(html`<ai-dashboard-card-versions .card=${card}></ai-dashboard-card-versions>`, t('ai-dashboard.card.versions'), 'medium')\n"]}
1
+ {"version":3,"file":"card-dialogs.js","sourceRoot":"","sources":["../../client/components/card-dialogs.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * The small forms a card opens - what to change with the assistant, a new name, whom to share it with, and its\n * versions (ADR-0160 decisions 7, 9). Each changes one card through its own door and tells an open dashboard.\n */\nimport '@material/web/icon/icon.js'\nimport '@material/web/button/filled-button.js'\nimport '@material/web/button/text-button.js'\nimport '@operato/popup/ox-popup-actions.js'\n\nimport { LitElement, css, html, nothing } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\n\nimport { i18next, localize } from '@operato/i18n'\nimport { notify, openPopup } from '@operato/layout'\nimport { CommonPopupStyles, PopupBodyStyles } from '@operato/styles'\nimport { askAssistant } from '@things-factory/ai-assistant/dist-client/index.js'\n\nimport { cardApi, dashboardChanged, type CardItem, type CardShare } from '../utils/card-api.js'\nimport { cardSelection } from '../utils/card-words.js'\n\nconst t = (key: string, options: Record<string, unknown> = {}) => String(i18next.t(key, options))\n\n/*\n * The house popup (CommonPopupStyles, PopupBodyStyles): only .body scrolls and ox-popup-actions stays put - a share\n * list of three people pushed 저장 out of sight (2026-10-25). The form fills the popup it is opened in.\n */\nconst FormStyles = css`\n :host {\n height: 100%;\n line-height: 1.5;\n }\n\n p.lead,\n p.note {\n margin: 0;\n }\n\n p.lead {\n color: var(--ui-muted, var(--md-sys-color-on-surface-variant));\n }\n\n textarea,\n input[type='text'],\n input[type='search'] {\n box-sizing: border-box;\n width: 100%;\n padding: 9px 12px;\n border: 1px solid var(--ui-line, var(--md-sys-color-outline-variant));\n border-radius: 8px;\n background: var(--ui-panel, var(--md-sys-color-surface-container-lowest));\n color: inherit;\n font: inherit;\n }\n\n textarea {\n min-height: 88px;\n resize: vertical;\n }\n\n textarea:focus,\n input:focus {\n outline: 2px solid color-mix(in srgb, var(--ui-accent, var(--md-sys-color-primary)) 40%, transparent);\n border-color: var(--ui-accent, var(--md-sys-color-primary));\n }\n\n .hints {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n }\n\n .hints button {\n padding: 4px 10px;\n border: 1px solid var(--ui-line, var(--md-sys-color-outline-variant));\n border-radius: 999px;\n background: transparent;\n color: var(--ui-muted, var(--md-sys-color-on-surface-variant));\n font: inherit;\n font-size: var(--ui-t-small, 12px);\n cursor: pointer;\n }\n\n .hints button:hover {\n border-color: var(--ui-accent, var(--md-sys-color-primary));\n color: var(--ui-accent, var(--md-sys-color-primary));\n }\n\n h5 {\n margin: 6px 0 0;\n font-size: var(--ui-t-small, 12px);\n font-weight: 600;\n color: var(--ui-muted, var(--md-sys-color-on-surface-variant));\n text-transform: none;\n }\n\n label.option {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 8px 10px;\n border: 1px solid var(--ui-line-soft, var(--md-sys-color-outline-variant));\n border-radius: 8px;\n cursor: pointer;\n }\n\n label.option small {\n margin-left: auto;\n color: var(--ui-faint, var(--md-sys-color-on-surface-variant));\n }\n\n .people {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n\n .person {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 10px;\n border-radius: 8px;\n background: var(--ui-panel-2, var(--md-sys-color-surface-container-low));\n --md-icon-size: 16px;\n }\n\n .person small {\n color: var(--ui-faint, var(--md-sys-color-on-surface-variant));\n }\n\n .person button,\n .found button {\n margin-left: auto;\n border: 0;\n background: transparent;\n color: var(--ui-accent, var(--md-sys-color-primary));\n font: inherit;\n cursor: pointer;\n }\n\n .found {\n display: flex;\n flex-direction: column;\n border: 1px solid var(--ui-line-soft, var(--md-sys-color-outline-variant));\n border-radius: 8px;\n }\n\n .found div {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 10px;\n }\n\n .found div + div {\n border-top: 1px solid var(--ui-line-soft, var(--md-sys-color-outline-variant));\n }\n\n ol.versions {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n\n ol.versions li {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 12px;\n border: 1px solid var(--ui-line-soft, var(--md-sys-color-outline-variant));\n border-radius: 8px;\n }\n\n ol.versions .v {\n flex: none;\n min-width: 36px;\n font-weight: 650;\n font-variant-numeric: tabular-nums;\n color: var(--ui-accent, var(--md-sys-color-primary));\n }\n\n ol.versions .label {\n flex: 1;\n min-width: 0;\n }\n\n ol.versions small {\n display: block;\n color: var(--ui-faint, var(--md-sys-color-on-surface-variant));\n }\n`\n\n/** What to change in a card - sent to the conversation beside the page with the card picked, as a screen request. */\n@customElement('ai-dashboard-card-ai-form')\nexport class CardAiForm extends localize(i18next)(LitElement) {\n static styles = [CommonPopupStyles, PopupBodyStyles, FormStyles]\n @property({ attribute: false }) card!: CardItem\n @state() private text = ''\n\n render() {\n const hints = ['ai-dashboard.ai.hint-period', 'ai-dashboard.ai.hint-top', 'ai-dashboard.ai.hint-line', 'ai-dashboard.ai.hint-table']\n return html`<div class=\"body\">\n <p class=\"lead\">${t('ai-dashboard.ai.lead', { name: this.card.name })}</p>\n <textarea .value=${this.text} placeholder=${t('ai-dashboard.ai.placeholder')} @input=${(e: any) => (this.text = e.target.value)} @keydown=${(e: KeyboardEvent) => e.key === 'Enter' && (e.metaKey || e.ctrlKey) && this.send()}></textarea>\n <div class=\"hints\">${hints.map(key => html`<button @click=${() => (this.text = t(key))}>${t(key)}</button>`)}</div>\n </div>\n <ox-popup-actions>\n <md-text-button slot=\"cancel\" @click=${() => this.close()}>${t('ai-dashboard.button.cancel')}</md-text-button>\n <md-filled-button slot=\"confirm\" ?disabled=${!this.text.trim()} @click=${() => this.send()}>${t('ai-dashboard.ai.send')}</md-filled-button>\n </ox-popup-actions>`\n }\n\n private close() {\n this.dispatchEvent(new CustomEvent('done', { bubbles: true, composed: true }))\n }\n\n private send() {\n if (!this.text.trim()) return\n /* Closed first: the dock opens over the page, and a popup that is no longer the top one refuses to close. */\n this.close()\n askAssistant({\n ask: t('ai-dashboard.ai.ask', { name: this.card.name, version: this.card.version, change: this.text.trim() }),\n selection: cardSelection(this.card, t('ai-dashboard.title'))\n })\n }\n}\n\n/** A card's new name - a new version. */\n@customElement('ai-dashboard-card-rename-form')\nexport class CardRenameForm extends localize(i18next)(LitElement) {\n static styles = [CommonPopupStyles, PopupBodyStyles, FormStyles]\n @property({ attribute: false }) card!: CardItem\n @state() private name = ''\n\n connectedCallback() {\n super.connectedCallback()\n this.name = this.card?.name ?? ''\n }\n\n render() {\n return html`<div class=\"body\">\n <input type=\"text\" .value=${this.name} maxlength=\"100\" @input=${(e: any) => (this.name = e.target.value)} @keydown=${(e: KeyboardEvent) => e.key === 'Enter' && this.save()} />\n </div>\n <ox-popup-actions>\n <md-text-button slot=\"cancel\" @click=${() => this.close()}>${t('ai-dashboard.button.cancel')}</md-text-button>\n <md-filled-button slot=\"confirm\" ?disabled=${!this.name.trim() || this.name.trim() === this.card.name} @click=${() => this.save()}>${t('ai-dashboard.button.save')}</md-filled-button>\n </ox-popup-actions>`\n }\n\n private close() {\n this.dispatchEvent(new CustomEvent('done', { bubbles: true, composed: true }))\n }\n\n private async save() {\n try {\n await cardApi.rename(this.card.id, this.name.trim())\n dashboardChanged()\n this.close()\n } catch (error: any) {\n notify({ level: 'error', message: error?.message ?? String(error) })\n }\n }\n}\n\n/** Whom one's own card is shared with - the whole domain, one's own departments, people found by name. */\n@customElement('ai-dashboard-card-share-form')\nexport class CardShareForm extends localize(i18next)(LitElement) {\n static styles = [CommonPopupStyles, PopupBodyStyles, FormStyles]\n @property({ attribute: false }) card!: CardItem\n @state() private options?: Awaited<ReturnType<typeof cardApi.shareOptions>>\n @state() private shares: CardShare[] = []\n @state() private found: { id: string; name: string; note?: string }[] = []\n @state() private search = ''\n private searching?: ReturnType<typeof setTimeout>\n\n async connectedCallback() {\n super.connectedCallback()\n this.shares = [...(this.card?.shares ?? [])].map(({ scope, targetId, targetName }) => ({ scope, targetId, targetName }))\n try {\n this.options = await cardApi.shareOptions()\n } catch (error: any) {\n notify({ level: 'error', message: error?.message ?? String(error) })\n }\n }\n\n private has(scope: string, id: string) {\n return this.shares.some(one => one.scope === scope && one.targetId === id)\n }\n\n private toggle(share: CardShare, on: boolean) {\n this.shares = on ? [...this.shares.filter(one => !(one.scope === share.scope && one.targetId === share.targetId)), share] : this.shares.filter(one => !(one.scope === share.scope && one.targetId === share.targetId))\n }\n\n private find(text: string) {\n this.search = text\n clearTimeout(this.searching)\n this.searching = setTimeout(async () => {\n try {\n this.found = text.trim() ? await cardApi.people(text.trim()) : []\n } catch {\n this.found = []\n }\n }, 250)\n }\n\n render() {\n const options = this.options\n const people = this.shares.filter(one => one.scope === 'USER')\n return html`<div class=\"body\">\n <p class=\"lead\">${t('ai-dashboard.share.lead')}</p>\n ${options\n ? html`<h5>${t('ai-dashboard.share.everyone-title')}</h5>\n <label class=\"option\">\n <input type=\"checkbox\" .checked=${this.has('DOMAIN', options.domainId)} @change=${(e: any) => this.toggle({ scope: 'DOMAIN', targetId: options.domainId, targetName: options.domainName }, e.target.checked)} />\n <md-icon>domain</md-icon>${t('ai-dashboard.share.everyone-in', { name: options.domainName })}\n </label>\n ${options.departments.length\n ? html`<h5>${t('ai-dashboard.share.departments')}</h5>\n ${options.departments.map(\n one => html`<label class=\"option\">\n <input type=\"checkbox\" .checked=${this.has('DEPARTMENT', one.id)} @change=${(e: any) => this.toggle({ scope: 'DEPARTMENT', targetId: one.id, targetName: one.name }, e.target.checked)} />\n <md-icon>groups</md-icon>${one.name}<small>${t('ai-dashboard.share.department-members')}</small>\n </label>`\n )}`\n : nothing}\n ${options.roles.length\n ? html`<h5>${t('ai-dashboard.share.roles')}</h5>\n ${options.roles.map(\n one => html`<label class=\"option\">\n <input type=\"checkbox\" .checked=${this.has('ROLE', one.id)} @change=${(e: any) => this.toggle({ scope: 'ROLE', targetId: one.id, targetName: one.name }, e.target.checked)} />\n <md-icon>badge</md-icon>${one.name}<small>${t('ai-dashboard.share.role-holders')}</small>\n </label>`\n )}`\n : nothing}\n <h5>${t('ai-dashboard.share.people')}</h5>\n ${people.length\n ? html`<div class=\"people\">\n ${people.map(one => html`<div class=\"person\"><md-icon>person</md-icon>${one.targetName ?? one.targetId}<button @click=${() => this.toggle(one, false)}>${t('ai-dashboard.share.remove')}</button></div>`)}\n </div>`\n : nothing}\n ${options.peopleAvailable\n ? html`<input type=\"search\" .value=${this.search} placeholder=${t('ai-dashboard.share.find-person')} @input=${(e: any) => this.find(e.target.value)} />\n ${this.found.length\n ? html`<div class=\"found\">\n ${this.found\n .filter(one => !this.has('USER', one.id))\n .map(one => html`<div><md-icon>person_add</md-icon>${one.name} ${one.note ? html`<small>${one.note}</small>` : nothing}<button @click=${() => this.toggle({ scope: 'USER', targetId: one.id, targetName: one.name }, true)}>${t('ai-dashboard.share.add')}</button></div>`)}\n </div>`\n : nothing}`\n : html`<p class=\"note\">${t('ai-dashboard.share.people-unavailable')}</p>`}\n <p class=\"note\">${t('ai-dashboard.share.rule')}</p>`\n : nothing}\n </div>\n <ox-popup-actions>\n <md-text-button slot=\"cancel\" @click=${() => this.close()}>${t('ai-dashboard.button.cancel')}</md-text-button>\n <md-filled-button slot=\"confirm\" ?disabled=${!options} @click=${() => this.save()}>${t('ai-dashboard.button.save')}</md-filled-button>\n </ox-popup-actions>`\n }\n\n private close() {\n this.dispatchEvent(new CustomEvent('done', { bubbles: true, composed: true }))\n }\n\n private async save() {\n try {\n await cardApi.share(this.card.id, this.shares)\n notify({ level: 'info', message: t(this.shares.length ? 'ai-dashboard.text.shared' : 'ai-dashboard.text.private', { name: this.card.name }) })\n dashboardChanged()\n this.close()\n } catch (error: any) {\n notify({ level: 'error', message: error?.message ?? String(error) })\n }\n }\n}\n\n/** One's own card's versions, newest first - an earlier one comes back as a new version. */\n@customElement('ai-dashboard-card-versions')\nexport class CardVersions extends localize(i18next)(LitElement) {\n static styles = [CommonPopupStyles, PopupBodyStyles, FormStyles]\n @property({ attribute: false }) card!: CardItem\n @state() private versions?: Awaited<ReturnType<typeof cardApi.versions>>\n\n async connectedCallback() {\n super.connectedCallback()\n try {\n this.versions = await cardApi.versions(this.card.id)\n } catch (error: any) {\n notify({ level: 'error', message: error?.message ?? String(error) })\n }\n }\n\n render() {\n const view = (definition: any) => t(`ai-dashboard.view.${definition?.view?.kind ?? 'table'}`)\n return html`<div class=\"body\">\n <p class=\"lead\">${t('ai-dashboard.versions.lead')}</p>\n <ol class=\"versions\">\n ${(this.versions ?? []).map(\n one => html`<li>\n <span class=\"v\">v${one.version}</span>\n <span class=\"label\">${one.name}<small>${view(one.definition)} · ${one.creatorName ?? ''} · ${one.createdAt ? new Date(one.createdAt).toLocaleString(i18next.language) : ''}</small></span>\n ${one.version === this.card.version\n ? html`<small>${t('ai-dashboard.versions.current')}</small>`\n : html`<md-text-button @click=${() => this.restore(one.version)}>${t('ai-dashboard.versions.restore')}</md-text-button>`}\n </li>`\n )}\n </ol>\n </div>`\n }\n\n private async restore(version: number) {\n try {\n await cardApi.restore(this.card.id, version)\n notify({ level: 'info', message: t('ai-dashboard.text.restored', { version }) })\n dashboardChanged()\n this.dispatchEvent(new CustomEvent('done', { bubbles: true, composed: true }))\n } catch (error: any) {\n notify({ level: 'error', message: error?.message ?? String(error) })\n }\n }\n}\n\n/* 'fit' is the house size of a form of a few fields - it stands at its own height; a small popup was narrower than the form. */\nfunction open(template: unknown, title: string, size: 'fit' | 'medium' = 'fit') {\n const popup: any = openPopup(html`<div @done=${() => popup?.close?.()}>${template}</div>`, { backdrop: true, size, title })\n return popup\n}\n\nexport const openCardAiPrompt = (card: CardItem) => open(html`<ai-dashboard-card-ai-form .card=${card}></ai-dashboard-card-ai-form>`, t('ai-dashboard.card.ai'), 'medium')\nexport const openCardRename = (card: CardItem) => open(html`<ai-dashboard-card-rename-form .card=${card}></ai-dashboard-card-rename-form>`, t('ai-dashboard.card.rename'))\nexport const openCardShare = (card: CardItem) => open(html`<ai-dashboard-card-share-form .card=${card}></ai-dashboard-card-share-form>`, t('ai-dashboard.share.title', { name: card.name }), 'medium')\nexport const openCardVersions = (card: CardItem) => open(html`<ai-dashboard-card-versions .card=${card}></ai-dashboard-card-versions>`, t('ai-dashboard.card.versions'), 'medium')\n"]}