pith-ui 0.1.1 → 0.1.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.
Files changed (110) hide show
  1. package/AI.md +12 -1
  2. package/API.md +347 -192
  3. package/README.md +3 -1
  4. package/dist/composer.d.ts.map +1 -1
  5. package/dist/composer.js +37 -27
  6. package/dist/composer.js.map +1 -1
  7. package/dist/content/conversation-reader.d.ts.map +1 -1
  8. package/dist/content/conversation-reader.js +8 -1
  9. package/dist/content/conversation-reader.js.map +1 -1
  10. package/dist/content/conversation-view.d.ts.map +1 -1
  11. package/dist/content/conversation-view.js +34 -8
  12. package/dist/content/conversation-view.js.map +1 -1
  13. package/dist/content/image-viewer.d.ts.map +1 -1
  14. package/dist/content/image-viewer.js +11 -3
  15. package/dist/content/image-viewer.js.map +1 -1
  16. package/dist/content/paged-preview.d.ts +1 -1
  17. package/dist/content/paged-preview.d.ts.map +1 -1
  18. package/dist/content/paged-preview.js +4 -2
  19. package/dist/content/paged-preview.js.map +1 -1
  20. package/dist/content/views.d.ts +3 -0
  21. package/dist/content/views.d.ts.map +1 -1
  22. package/dist/content/views.js +110 -41
  23. package/dist/content/views.js.map +1 -1
  24. package/dist/content/welcome.d.ts.map +1 -1
  25. package/dist/content/welcome.js +5 -2
  26. package/dist/content/welcome.js.map +1 -1
  27. package/dist/dom.js +1 -1
  28. package/dist/dom.js.map +1 -1
  29. package/dist/files/panels.d.ts +2 -0
  30. package/dist/files/panels.d.ts.map +1 -1
  31. package/dist/files/panels.js +202 -128
  32. package/dist/files/panels.js.map +1 -1
  33. package/dist/files/systems.d.ts.map +1 -1
  34. package/dist/files/systems.js +37 -64
  35. package/dist/files/systems.js.map +1 -1
  36. package/dist/forms/actions.d.ts +23 -2
  37. package/dist/forms/actions.d.ts.map +1 -1
  38. package/dist/forms/actions.js +53 -25
  39. package/dist/forms/actions.js.map +1 -1
  40. package/dist/forms/custom-connection.d.ts.map +1 -1
  41. package/dist/forms/custom-connection.js +3 -2
  42. package/dist/forms/custom-connection.js.map +1 -1
  43. package/dist/forms/history.d.ts +1 -1
  44. package/dist/forms/history.d.ts.map +1 -1
  45. package/dist/forms/history.js +78 -15
  46. package/dist/forms/history.js.map +1 -1
  47. package/dist/forms/identity.d.ts.map +1 -1
  48. package/dist/forms/identity.js +9 -25
  49. package/dist/forms/identity.js.map +1 -1
  50. package/dist/forms/model-editor.js +3 -3
  51. package/dist/forms/model-editor.js.map +1 -1
  52. package/dist/forms/panels.d.ts +9 -2
  53. package/dist/forms/panels.d.ts.map +1 -1
  54. package/dist/forms/panels.js +79 -88
  55. package/dist/forms/panels.js.map +1 -1
  56. package/dist/forms/provider-login.d.ts.map +1 -1
  57. package/dist/forms/provider-login.js +20 -36
  58. package/dist/forms/provider-login.js.map +1 -1
  59. package/dist/forms/resource-editor.js +5 -4
  60. package/dist/forms/resource-editor.js.map +1 -1
  61. package/dist/foundations.d.ts +1 -1
  62. package/dist/foundations.d.ts.map +1 -1
  63. package/dist/foundations.js +22 -38
  64. package/dist/foundations.js.map +1 -1
  65. package/dist/navigation/context-menu.d.ts +7 -1
  66. package/dist/navigation/context-menu.d.ts.map +1 -1
  67. package/dist/navigation/context-menu.js +60 -57
  68. package/dist/navigation/context-menu.js.map +1 -1
  69. package/dist/navigation/navigation.d.ts +13 -0
  70. package/dist/navigation/navigation.d.ts.map +1 -1
  71. package/dist/navigation/navigation.js +96 -130
  72. package/dist/navigation/navigation.js.map +1 -1
  73. package/dist/operation.d.ts +12 -0
  74. package/dist/operation.d.ts.map +1 -0
  75. package/dist/operation.js +49 -0
  76. package/dist/operation.js.map +1 -0
  77. package/dist/primitives.d.ts +8 -1
  78. package/dist/primitives.d.ts.map +1 -1
  79. package/dist/primitives.js +114 -143
  80. package/dist/primitives.js.map +1 -1
  81. package/dist/reconcile.d.ts +11 -0
  82. package/dist/reconcile.d.ts.map +1 -0
  83. package/dist/reconcile.js +36 -0
  84. package/dist/reconcile.js.map +1 -0
  85. package/dist/select.d.ts +14 -0
  86. package/dist/select.d.ts.map +1 -0
  87. package/dist/select.js +304 -0
  88. package/dist/select.js.map +1 -0
  89. package/dist/styles.css +435 -369
  90. package/dist/surface.d.ts +31 -0
  91. package/dist/surface.d.ts.map +1 -1
  92. package/dist/surface.js +193 -3
  93. package/dist/surface.js.map +1 -1
  94. package/dist/tasks/approval.d.ts.map +1 -1
  95. package/dist/tasks/approval.js +83 -45
  96. package/dist/tasks/approval.js.map +1 -1
  97. package/dist/tasks/permission-element.d.ts +3 -0
  98. package/dist/tasks/permission-element.d.ts.map +1 -0
  99. package/dist/tasks/permission-element.js +10 -0
  100. package/dist/tasks/permission-element.js.map +1 -0
  101. package/dist/tasks/permission.d.ts.map +1 -1
  102. package/dist/tasks/permission.js +37 -18
  103. package/dist/tasks/permission.js.map +1 -1
  104. package/dist/tasks/runtime.d.ts.map +1 -1
  105. package/dist/tasks/runtime.js +30 -13
  106. package/dist/tasks/runtime.js.map +1 -1
  107. package/dist/workspace.d.ts.map +1 -1
  108. package/dist/workspace.js +93 -40
  109. package/dist/workspace.js.map +1 -1
  110. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"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","sourcesContent":["import { Generation, type UIBlock, type ActionResult } from './core.js';\nimport { icon } from './dom.js';\nimport { controlDisabled } from './core.js';\nimport { adoptProductParts, reconcileSelectOptions } from './foundations.js';\nimport { installDialogLifecycle } from './surface.js';\n\nexport interface ComposerViewState {\n placeholder?: string; disabled?: boolean; readOnly?: boolean;\n action?: 'send' | 'queue' | 'stop'; actionDisabled?: boolean;\n model?: { label: string; description: string; disabled?: boolean };\n thinking?: { options: readonly { value: string; label: string }[]; value: string; disabled?: boolean };\n}\nexport interface ComposerViewOptions {\n prefix?: string;\n onSubmit?: (text: string) => void | ActionResult | Promise<void | ActionResult>;\n onStop?: () => void | ActionResult | Promise<void | ActionResult>;\n onInput?: (text: string) => void;\n onModel?: () => void;\n onAttach?: () => void;\n onImages?: (files: File[]) => void;\n onThinkingChange?: (value: string) => void;\n}\nlet sequence = 0;\nfunction identify(root: HTMLElement, prefix: string): void {\n if (!prefix) return;\n const attributes = ['id', 'for', 'aria-labelledby', 'aria-describedby', 'aria-controls', 'data-close'];\n for (const node of [root, ...root.querySelectorAll<HTMLElement>('*')]) for (const attribute of attributes) {\n const value = node.getAttribute(attribute); if (value) node.setAttribute(attribute, value.split(' ').map(part => prefix + part).join(' '));\n }\n}\nexport function createComposerView(options: ComposerViewOptions = {}) {\n const holder = document.createElement('div'); holder.innerHTML = `<form id=\"composer-form\" class=\"pui-composer\">\n <div id=\"draft-images\" class=\"pui-draft-images\" aria-label=\"Image attachments\" hidden></div>\n <input id=\"image-picker\" type=\"file\" accept=\"image/png,image/jpeg,image/gif,image/webp\" multiple hidden />\n <textarea id=\"composer-input\" rows=\"1\" placeholder=\"Ask Pith to help with your work…\" aria-label=\"Message Pith\"></textarea>\n <div class=\"pui-composer-toolbar\">\n <div class=\"pui-composer-context\">\n <button id=\"attach-images\" type=\"button\" class=\"pui-quiet-icon pui-attach-images\" data-action=\"attach-images\" aria-label=\"Attach images\" title=\"Attach images\">${icon('image')}</button>\n <label class=\"pui-permission-control\" id=\"permission-control\">${icon('shield')}<span class=\"pui-sr-only\">Conversation permissions</span><select id=\"permission-mode\" aria-describedby=\"permission-description\"><option value=\"ask\">Ask before changes</option><option value=\"workspace-write\">Allow workspace changes</option><option value=\"full-access\">Full access</option></select>${icon('down')}</label>\n </div>\n <div class=\"pui-composer-actions\"><button id=\"composer-model\" type=\"button\" class=\"pui-composer-model\" data-action=\"model\" data-idle-action data-global-idle aria-label=\"Choose model\">Choose model</button><label class=\"pui-composer-thinking\"><span class=\"pui-sr-only\">Thinking effort</span><select id=\"composer-thinking\" aria-label=\"Thinking effort\"></select></label><button id=\"send-button\" class=\"pui-send-button\" type=\"submit\" aria-label=\"Send message\">${icon('arrow')}</button></div>\n </div>\n </form>`;\n const element = holder.firstElementChild as HTMLFormElement;\n const input = element.querySelector<HTMLTextAreaElement>('textarea')!;\n const action = element.querySelector<HTMLButtonElement>('[type=\"submit\"]')!;\n const model = element.querySelector<HTMLButtonElement>('[data-action=\"model\"]')!;\n const thinking = element.querySelector<HTMLSelectElement>('[aria-label=\"Thinking effort\"]')!;\n const imagePicker = element.querySelector<HTMLInputElement>('[type=\"file\"]')!;\n identify(element, options.prefix ?? 'pui-composer-' + ++sequence + '-');\n const generation = new Generation();\n const parts = adoptProductParts(element);\n let destroyed = false;\n let pending = false, last: ComposerViewState = {}, lastAction = 'send';\n const error = document.createElement('div'); error.className = 'pui-form-error'; error.setAttribute('role','alert'); error.hidden = true; element.insertBefore(error, element.firstChild);\n const resize = () => { input.style.height = 'auto'; input.style.height = Math.min(input.scrollHeight, 180) + 'px'; };\n const update = (state: ComposerViewState) => {\n if (destroyed) return;\n last = state;\n parts.control(input).update({ disabled: !!state.disabled, readOnly: !!state.readOnly, ...(state.placeholder !== undefined ? { placeholder: state.placeholder } : {}) });\n if (state.action && state.action !== lastAction) { lastAction = state.action; action.type = state.action === 'stop' ? 'button' : 'submit'; action.innerHTML = icon(state.action === 'stop' ? 'stop' : 'arrow'); action.classList.toggle('pui-is-stop', state.action === 'stop'); }\n const actionLabel = lastAction === 'stop' ? 'Stop agent' : lastAction === 'queue' ? 'Queue message' : 'Send message';\n action.setAttribute('aria-label', actionLabel); action.title = actionLabel;\n parts.action(action).update({ disabled: !!(state.actionDisabled || state.disabled), pending });\n if (state.model) {\n parts.action(model).update({ label: state.model.label, title: state.model.description, disabled: !!state.model.disabled });\n }\n if (state.thinking) {\n const { options: choices, value, disabled } = state.thinking;\n reconcileSelectOptions(thinking, choices, value);\n parts.control(thinking).update({ disabled: !!disabled }); thinking.parentElement!.hidden = choices.length < 2;\n }\n parts.update();\n };\n const onInput = () => { resize(); options.onInput?.(input.value); };\n const run = async (callback: (() => void | ActionResult | Promise<void | ActionResult>) | undefined, textSubmission = true) => {\n if (!callback || pending || action.disabled || (textSubmission && (input.disabled || input.readOnly))) return;\n const seq = generation.next(); pending = true; error.hidden = true; error.textContent = ''; update(last);\n try {\n const result = await callback();\n if (generation.current(seq) && result && !result.ok) { error.textContent = result.error; error.hidden = false; }\n } catch (reason) {\n if (generation.current(seq)) { error.textContent = reason instanceof Error ? reason.message : String(reason); error.hidden = false; }\n } finally { if (generation.current(seq)) { pending = false; update(last); } }\n };\n const submit = (event: SubmitEvent) => { if (options.onSubmit) { event.preventDefault(); const text = input.value; void run(() => options.onSubmit!(text)); } };\n const stop = () => { if (action.type === 'button') void run(options.onStop, false); };\n const keydown = (event: KeyboardEvent) => {\n if (options.onSubmit && event.key === 'Enter' && !event.shiftKey && !event.isComposing) {\n event.preventDefault();\n if (action.type === 'submit') element.requestSubmit();\n }\n };\n const click = (event: MouseEvent) => {\n const button = (event.target as Element).closest<HTMLButtonElement>('button');\n if (!button || button.disabled) return;\n const callback = button === model ? options.onModel : button.hasAttribute('data-action') && button.dataset.action === 'attach-images' ? options.onAttach : undefined;\n if (callback) { event.stopPropagation(); callback(); }\n };\n const chooseThinking = () => options.onThinkingChange?.(thinking.value);\n const images = () => { const files = Array.from(imagePicker.files ?? []); imagePicker.value = ''; options.onImages?.(files); };\n element.addEventListener('click', click); thinking.addEventListener('change', chooseThinking); imagePicker.addEventListener('change', images);\n input.addEventListener('input', onInput); input.addEventListener('keydown', keydown); element.addEventListener('submit', submit); action.addEventListener('click', stop);\n return { element, input, update, getValue: () => input.value,\n reset(value: string) { if (destroyed) return; generation.invalidate(); pending = false; error.hidden = true; error.textContent = ''; input.value = value; update(last); resize(); }, focus: () => { if (!destroyed) input.focus(); }, resize,\n pickImages() { if (!destroyed) imagePicker.click(); },\n destroy() { if (destroyed) return; destroyed = true; generation.destroy(); parts.destroy(); input.removeEventListener('input', onInput); input.removeEventListener('keydown', keydown); element.removeEventListener('submit', submit); action.removeEventListener('click', stop); element.removeEventListener('click', click); thinking.removeEventListener('change', chooseThinking); imagePicker.removeEventListener('change', images); element.remove(); } };\n\n}\n\nexport type WorkspaceDialogName = 'model' | 'settings' | 'workspace' | 'permissions' | 'delete' | 'rename' | 'queue-edit' | 'message-edit' | 'resources' | 'connections' | 'preview' | 'image';\nexport interface ActionScope { kind: 'global' | 'conversation' | 'workspace' | 'active'; id?: string; }\nexport interface WorkspaceShellOptions { brand: Node; prefix?: string; composer?: ComposerViewOptions; onDialogClose?: (name: WorkspaceDialogName) => void; onSearch?: (query: string) => void; onBusyAction?: (key: string) => void; }\nexport interface WorkspaceShellState { workspace?: string; conversation?: string; reconnecting?: boolean; error?: { message: string; hidden?: boolean }; busy?: { key: string; message: string; actionLabel: string } | null; }\nexport function createWorkspaceShell(options: WorkspaceShellOptions) {\n const element = document.createElement('div'); element.className = 'pui-app';\n element.innerHTML = `\n <aside class=\"pui-sidebar\" id=\"sidebar\">\n <div class=\"pui-brand\"><span data-brand-slot></span></div>\n <div class=\"pui-sidebar-section-label\">WORKSPACES <button class=\"pui-quiet-icon\" data-action=\"workspace\" aria-label=\"Manage workspaces\">${icon('plus')}</button></div>\n <label class=\"pui-history-search\">${icon('search')}<span class=\"pui-sr-only\">Search conversation titles</span><input id=\"history-search\" type=\"search\" placeholder=\"Search conversations\" autocomplete=\"off\" /></label>\n <nav id=\"history-list\" class=\"pui-history-list\" aria-label=\"Workspaces and conversations\"></nav>\n <div class=\"pui-sidebar-bottom\">\n <button class=\"pui-settings-button\" data-action=\"resources\">${icon('file')}<span>Workspace resources</span></button>\n <button class=\"pui-settings-button\" data-action=\"connections\">${icon('plug')}<span>Connections</span></button>\n <button class=\"pui-settings-button\" data-action=\"settings\">${icon('settings')}<span>Settings</span></button>\n <div id=\"connection-status\" class=\"pui-local-status\" role=\"status\" hidden><span class=\"pui-status-dot pui-reconnecting\" aria-hidden=\"true\"></span><span>Reconnecting…</span></div>\n </div>\n </aside>\n <div id=\"conversation-menu\" class=\"pui-sidebar-conversation-menu\" role=\"menu\" hidden></div>\n <div class=\"pui-sidebar-scrim\" id=\"sidebar-scrim\"></div>\n <main class=\"pui-main\">\n <header class=\"pui-topbar\">\n <button class=\"pui-quiet-icon pui-mobile-menu\" data-action=\"menu\" aria-label=\"Open sidebar\">${icon('menu')}</button>\n <div class=\"pui-breadcrumb\">${icon('folder')}<span id=\"workspace-label\">No workspace</span>${icon('chevron', 'pui-breadcrumb-chevron')}<span class=\"pui-breadcrumb-current\" id=\"conversation-label\">New conversation</span></div>\n <div class=\"pui-conversation-actions\"><button class=\"pui-quiet-icon pui-compact-action\" data-sdk=\"compact\" data-sdk-idle title=\"Compress context by summarizing older messages\" aria-label=\"Compress context\">${icon('compress')}<span>Compact</span></button><div id=\"artifacts-control\" class=\"pui-artifacts-control\" hidden><button id=\"artifacts-toggle\" type=\"button\" class=\"pui-quiet-icon pui-artifacts-toggle\" aria-label=\"Conversation files\" title=\"Conversation files\" aria-expanded=\"false\" aria-controls=\"artifacts\">${icon('file')}<span id=\"artifacts-count\" class=\"pui-artifacts-count\" aria-hidden=\"true\"></span></button><section id=\"artifacts\" class=\"pui-artifacts-panel\" aria-labelledby=\"artifacts-title\" tabindex=\"-1\" hidden></section></div></div>\n </header>\n <section id=\"conversation-find\" class=\"pui-conversation-find\" aria-label=\"Find in conversation\" hidden>\n <input type=\"search\" aria-label=\"Find in this conversation\" placeholder=\"Find in this conversation\" autocomplete=\"off\" />\n <span data-find-count role=\"status\" aria-live=\"polite\"></span>\n <button type=\"button\" class=\"pui-quiet-icon pui-find-previous\" data-find-previous aria-label=\"Previous match\" title=\"Previous match (Shift+Enter)\">${icon('down')}</button>\n <button type=\"button\" class=\"pui-quiet-icon\" data-find-next aria-label=\"Next match\" title=\"Next match (Enter)\">${icon('down')}</button>\n <button type=\"button\" class=\"pui-quiet-icon\" data-find-close aria-label=\"Close search\" title=\"Close (Esc)\">${icon('close')}</button>\n </section>\n <div class=\"pui-conversation-region\"><section id=\"chat-scroll\" class=\"pui-chat-scroll\" aria-label=\"Conversation\" tabindex=\"-1\">\n <div id=\"welcome\" class=\"pui-welcome\"></div>\n <div id=\"messages\" class=\"pui-messages\" aria-live=\"polite\" aria-relevant=\"additions text\"></div>\n </section><button id=\"back-to-latest\" type=\"button\" class=\"pui-secondary-button pui-back-to-latest\" hidden>${icon('down')}<span>Back to latest</span></button></div>\n <div class=\"pui-composer-region\">\n <div class=\"pui-composer-panels\">\n <div id=\"approval\" class=\"pui-approval-region\"></div>\n <div id=\"workspace-busy\" class=\"pui-workspace-busy\" hidden></div><div id=\"inline-error\" class=\"pui-inline-error\" role=\"alert\" hidden></div>\n <section id=\"task-failure\" class=\"pui-task-failure\" role=\"status\" hidden></section>\n <details id=\"run-status\" class=\"pui-run-status\" hidden><summary id=\"run-status-summary\"></summary><div id=\"run-status-details\"><div id=\"runtime-values\"></div><details id=\"cost-requests\" class=\"pui-cost-requests\" hidden><summary>Request breakdown</summary><div id=\"cost-ledger\"></div></details></div></details>\n <section id=\"queued-messages\" class=\"pui-queued-messages\" aria-label=\"Pending messages\" aria-live=\"polite\" hidden></section>\n </div>\n <div data-composer-slot></div>\n <p id=\"image-guidance\" class=\"pui-composer-note pui-image-guidance\" hidden></p>\n <p class=\"pui-composer-note\" id=\"permission-description\">Pith can read workspace files. Changes and commands require your approval.</p>\n </div>\n </main>\n <section id=\"completion-notices\" class=\"pui-completion-notices\" aria-label=\"Completed tasks\" aria-live=\"polite\"></section>\n <span id=\"copy-status\" class=\"pui-sr-only\" role=\"status\" aria-live=\"polite\"></span>\n <dialog id=\"model-dialog\" class=\"pui-modal pui-model-modal\" aria-labelledby=\"model-title\"><div id=\"model-content\"></div></dialog>\n <dialog id=\"settings-dialog\" class=\"pui-modal\" aria-labelledby=\"settings-title\"><div id=\"settings-content\"></div></dialog>\n <dialog id=\"workspace-dialog\" class=\"pui-modal\" aria-labelledby=\"workspace-title\"><div id=\"workspace-content\"></div></dialog>\n <dialog id=\"permissions-dialog\" class=\"pui-modal pui-permission-modal\" aria-labelledby=\"full-access-title\"><div id=\"permissions-content\"></div></dialog>\n <dialog id=\"delete-dialog\" class=\"pui-modal\" aria-labelledby=\"delete-title\"><div id=\"delete-content\"></div></dialog>\n <dialog id=\"rename-dialog\" class=\"pui-modal\" aria-labelledby=\"rename-title\"><div id=\"rename-content\"></div></dialog>\n <dialog id=\"queue-edit-dialog\" class=\"pui-modal\" aria-labelledby=\"queue-edit-title\"><div id=\"queue-edit-content\"></div></dialog>\n <dialog id=\"message-edit-dialog\" class=\"pui-modal\" aria-labelledby=\"message-edit-title\"><div id=\"message-edit-content\"></div></dialog>\n <dialog id=\"resources-dialog\" class=\"pui-modal pui-feature-modal\" aria-labelledby=\"resources-title\"><div id=\"resources-content\"></div></dialog>\n <dialog id=\"connections-dialog\" class=\"pui-modal pui-feature-modal\" aria-labelledby=\"connections-title\"><div id=\"connections-content\"></div></dialog>\n <dialog id=\"preview-dialog\" class=\"pui-modal pui-file-preview-modal\" aria-labelledby=\"preview-title\"><div id=\"preview-content\"></div></dialog>\n <dialog id=\"image-dialog\"></dialog>\n`;\n element.querySelector('[data-brand-slot]')!.replaceWith(options.brand);\n const prefix = options.prefix ?? 'pui-workspace-' + ++sequence + '-';\n const composer = createComposerView({ ...options.composer, prefix: '' }); element.querySelector('[data-composer-slot]')!.replaceWith(composer.element);\n identify(element, prefix);\n const part = <T extends HTMLElement = HTMLElement>(name: string) => element.querySelector<T>('[id=\"' + prefix + name + '\"]')!;\n let destroyed = false;\n const parts = adoptProductParts(element);\n const dialogs = new Map(Array.from(element.querySelectorAll<HTMLDialogElement>('dialog'), dialog => {\n const name = dialog.id.slice(prefix.length).replace(/-dialog$/, '') as WorkspaceDialogName;\n return [name, installDialogLifecycle(dialog, { onClose: () => options.onDialogClose?.(name) })] as const;\n }));\n const setSidebarOpen = (open: boolean) => { if (destroyed) return; part('sidebar').classList.toggle('pui-open', open); part('sidebar-scrim').classList.toggle('pui-visible', open); };\n const sidebarClick = (event: MouseEvent) => { const target = event.target as Element; if (target === part('sidebar-scrim') || target.closest('[data-action=\"menu\"]')) { setSidebarOpen(target !== part('sidebar-scrim')); event.stopPropagation(); } };\n const search = part<HTMLInputElement>('history-search'); const onSearch = () => options.onSearch?.(search.value);\n search.addEventListener('input', onSearch); element.addEventListener('click', sidebarClick);\n const busy = part('workspace-busy');\n const onBusy = (event: MouseEvent) => { if ((event.target as Element).closest('button') && busy.dataset.key) { event.stopPropagation(); options.onBusyAction?.(busy.dataset.key); } };\n busy.addEventListener('click', onBusy);\n return { element, composer, part, update(state: Readonly<WorkspaceShellState>) {\n if (destroyed) return;\n if (state.workspace !== undefined) part('workspace-label').textContent = state.workspace;\n if (state.conversation !== undefined) part('conversation-label').textContent = state.conversation;\n part('connection-status').hidden = !state.reconnecting;\n if (state.error) { part('inline-error').textContent = state.error.message; part('inline-error').hidden = !!state.error.hidden || !state.error.message; }\n if (state.busy !== undefined) {\n busy.hidden = !state.busy;\n if (state.busy) {\n if (!busy.firstChild) { busy.append(document.createElement('span'), document.createElement('button')); const button = busy.lastElementChild as HTMLButtonElement; button.type = 'button'; button.className = 'pui-text-button'; }\n busy.dataset.key = state.busy.key;\n if (busy.firstElementChild!.textContent !== state.busy.message) busy.firstElementChild!.textContent = state.busy.message;\n if (busy.lastElementChild!.textContent !== state.busy.actionLabel) busy.lastElementChild!.textContent = state.busy.actionLabel;\n }\n }\n parts.update();\n }, setSidebarOpen,\n openDialog(name: WorkspaceDialogName) { if (!destroyed) { setSidebarOpen(false); dialogs.get(name)?.open(); } },\n closeDialog(name: WorkspaceDialogName) { if (!destroyed) dialogs.get(name)?.close(); },\n isDialogOpen(name: WorkspaceDialogName) { return !destroyed && !!dialogs.get(name)?.isOpen(); },\n updateActionAvailability(unavailable: (scope: ActionScope) => boolean, root: ParentNode = element) {\n if (destroyed) return;\n for (const button of root.querySelectorAll<HTMLButtonElement>('[data-idle-action], [data-global-idle], [data-mcp-edit], [data-action=\"new-mcp\"]')) {\n const scope: ActionScope = button.hasAttribute('data-global-idle') || button.hasAttribute('data-mcp-edit') || button.dataset.action === 'new-mcp' ? { kind: 'global' } : button.dataset.idleConversation ? { kind: 'conversation', id: button.dataset.idleConversation } : button.dataset.idleWorkspace ? { kind: 'workspace', id: button.dataset.idleWorkspace } : { kind: 'active' };\n button.disabled = controlDisabled(button, unavailable(scope));\n }\n for (const link of root.querySelectorAll<HTMLAnchorElement>('a[data-download-conversation]')) link.setAttribute('aria-disabled', String(unavailable({ kind: 'conversation', id: link.dataset.downloadConversation })));\n },\n destroy() { if (destroyed) return; destroyed = true; for (const dialog of dialogs.values()) dialog.destroy(); parts.destroy(); search.removeEventListener('input', onSearch); element.removeEventListener('click', sidebarClick); busy.removeEventListener('click', onBusy); composer.destroy(); element.remove(); } };\n}\n"]}
1
+ {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"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","sourcesContent":["import { type UIBlock, type ActionResult } from './core.js';\nimport { focusableElements, icon } from './dom.js';\nimport { controlDisabled } from './core.js';\nimport { adoptProductParts, reconcileSelectOptions } from './foundations.js';\nimport { installDialogLifecycle } from './surface.js';\nimport { permissionControlElement } from './tasks/permission-element.js';\nimport { createOperation } from './operation.js';\n\nexport interface ComposerViewState {\n placeholder?: string; disabled?: boolean; readOnly?: boolean;\n action?: 'send' | 'queue' | 'stop'; actionDisabled?: boolean;\n model?: { label: string; description: string; disabled?: boolean };\n thinking?: { options: readonly { value: string; label: string }[]; value: string; disabled?: boolean };\n}\nexport interface ComposerViewOptions {\n prefix?: string;\n onSubmit?: (text: string) => void | ActionResult | Promise<void | ActionResult>;\n onStop?: () => void | ActionResult | Promise<void | ActionResult>;\n onInput?: (text: string) => void;\n onModel?: () => void;\n onAttach?: () => void;\n onImages?: (files: File[]) => void;\n onThinkingChange?: (value: string) => void;\n}\nlet sequence = 0;\nfunction identify(root: HTMLElement, prefix: string): void {\n if (!prefix) return;\n const attributes = ['id', 'for', 'aria-labelledby', 'aria-describedby', 'aria-controls', 'data-close'];\n for (const node of [root, ...root.querySelectorAll<HTMLElement>('*')]) for (const attribute of attributes) {\n const value = node.getAttribute(attribute); if (value) node.setAttribute(attribute, value.split(' ').map(part => prefix + part).join(' '));\n }\n}\nexport function createComposerView(options: ComposerViewOptions = {}) {\n const holder = document.createElement('div'); holder.innerHTML = `<form id=\"composer-form\" class=\"pui-composer\">\n <div id=\"draft-images\" class=\"pui-draft-images\" aria-label=\"Image attachments\" hidden></div>\n <input id=\"image-picker\" type=\"file\" accept=\"image/png,image/jpeg,image/gif,image/webp\" multiple hidden />\n <textarea id=\"composer-input\" rows=\"1\" placeholder=\"Ask Pith to help with your work…\" aria-label=\"Message Pith\"></textarea>\n <div class=\"pui-composer-toolbar\">\n <div class=\"pui-composer-context\">\n <button id=\"attach-images\" type=\"button\" class=\"pui-quiet-icon pui-attach-images\" data-action=\"attach-images\" aria-label=\"Attach images\" title=\"Attach images\">${icon('image')}</button>\n <span data-permission-slot></span>\n </div>\n <div class=\"pui-composer-actions\"><button id=\"composer-model\" type=\"button\" class=\"pui-composer-model\" data-action=\"model\" data-idle-action data-global-idle aria-label=\"Choose model\">Choose model</button><label class=\"pui-composer-thinking\"><span class=\"pui-sr-only\">Thinking effort</span><select id=\"composer-thinking\" aria-label=\"Thinking effort\"></select></label><button id=\"send-button\" class=\"pui-send-button\" type=\"submit\" aria-label=\"Send message\">${icon('arrow')}</button></div>\n </div>\n </form>`;\n const element = holder.firstElementChild as HTMLFormElement;\n const permission = permissionControlElement(); permission.id = 'permission-control';\n const permissionMode = permission.querySelector('select')!; permissionMode.id = 'permission-mode'; permissionMode.setAttribute('aria-describedby', 'permission-description');\n element.querySelector('[data-permission-slot]')!.replaceWith(permission);\n const input = element.querySelector<HTMLTextAreaElement>('textarea')!;\n const action = element.querySelector<HTMLButtonElement>('[type=\"submit\"]')!;\n const model = element.querySelector<HTMLButtonElement>('[data-action=\"model\"]')!;\n const thinking = element.querySelector<HTMLSelectElement>('[aria-label=\"Thinking effort\"]')!;\n const thinkingLabel = thinking.closest<HTMLLabelElement>('label')!;\n const imagePicker = element.querySelector<HTMLInputElement>('[type=\"file\"]')!;\n identify(element, options.prefix ?? 'pui-composer-' + ++sequence + '-');\n const parts = adoptProductParts(element);\n parts.control(element.querySelector<HTMLSelectElement>('[id$=\"permission-mode\"]')!);\n parts.control(thinking);\n let destroyed = false;\n let last: ComposerViewState = {}, lastAction = 'send';\n const error = document.createElement('div'); error.className = 'pui-form-error'; error.setAttribute('role','alert'); error.hidden = true; element.insertBefore(error, element.firstChild);\n const feedback = parts.feedback(error);\n const setError = (message:string) => {feedback.update({message,tone:'error'});error.hidden=!message;};\n const resize = () => { input.style.height = 'auto'; input.style.height = Math.min(input.scrollHeight, 180) + 'px'; };\n const update = (state: ComposerViewState) => {\n if (destroyed) return;\n last = state;\n parts.control(input).update({ disabled: !!state.disabled, readOnly: !!state.readOnly, ...(state.placeholder !== undefined ? { placeholder: state.placeholder } : {}) });\n if (state.action && state.action !== lastAction) { lastAction = state.action; action.type = state.action === 'stop' ? 'button' : 'submit'; action.innerHTML = icon(state.action === 'stop' ? 'stop' : 'arrow'); action.classList.toggle('pui-is-stop', state.action === 'stop'); }\n const actionLabel = lastAction === 'stop' ? 'Stop agent' : lastAction === 'queue' ? 'Queue message' : 'Send message';\n action.setAttribute('aria-label', actionLabel); action.title = actionLabel;\n parts.action(action).update({ disabled: !!(state.actionDisabled || state.disabled), pending: operation.pending });\n if (state.model) {\n parts.action(model).update({ label: state.model.label, title: state.model.description, disabled: !!state.model.disabled });\n }\n if (state.thinking) {\n const { options: choices, value, disabled } = state.thinking;\n reconcileSelectOptions(thinking, choices, value);\n thinkingLabel.hidden = choices.length < 2; parts.control(thinking).update({ disabled: !!disabled });\n }\n parts.update();\n };\n const operation = createOperation({unavailable: () => destroyed || action.disabled, onPending: () => update(last), onError: setError});\n const onInput = () => { resize(); options.onInput?.(input.value); };\n const run = (callback: (() => void | ActionResult | Promise<void | ActionResult>) | undefined, textSubmission = true) => {\n if (!callback || (textSubmission && (input.disabled || input.readOnly))) return;\n operation.run(() => {setError('');return callback();}, result => {\n if (result && !result.ok) setError(result.error);\n });\n };\n const submit = (event: SubmitEvent) => { if (options.onSubmit) { event.preventDefault(); const text = input.value; void run(() => options.onSubmit!(text)); } };\n const stop = () => { if (action.type === 'button') void run(options.onStop, false); };\n const keydown = (event: KeyboardEvent) => {\n if (options.onSubmit && event.key === 'Enter' && !event.shiftKey && !event.isComposing) {\n event.preventDefault();\n if (action.type === 'submit') element.requestSubmit();\n }\n };\n const click = (event: MouseEvent) => {\n const button = (event.target as Element).closest<HTMLButtonElement>('button');\n if (!button || button.disabled) return;\n const callback = button === model ? options.onModel : button.hasAttribute('data-action') && button.dataset.action === 'attach-images' ? options.onAttach : undefined;\n if (callback) { event.stopPropagation(); callback(); }\n };\n const chooseThinking = () => options.onThinkingChange?.(thinking.value);\n const images = () => { const files = Array.from(imagePicker.files ?? []); imagePicker.value = ''; options.onImages?.(files); };\n element.addEventListener('click', click); thinking.addEventListener('change', chooseThinking); imagePicker.addEventListener('change', images);\n input.addEventListener('input', onInput); input.addEventListener('keydown', keydown); element.addEventListener('submit', submit); action.addEventListener('click', stop);\n return { element, input, update, getValue: () => input.value,\n reset(value: string) { if (destroyed) return; operation.invalidate(); setError(''); input.value = value; update(last); resize(); }, focus: () => { if (!destroyed) input.focus(); }, resize,\n pickImages() { if (!destroyed) imagePicker.click(); },\n destroy() { if (destroyed) return; destroyed = true; operation.destroy(); parts.destroy(); input.removeEventListener('input', onInput); input.removeEventListener('keydown', keydown); element.removeEventListener('submit', submit); action.removeEventListener('click', stop); element.removeEventListener('click', click); thinking.removeEventListener('change', chooseThinking); imagePicker.removeEventListener('change', images); element.remove(); } };\n\n}\n\nexport type WorkspaceDialogName = 'model' | 'settings' | 'workspace' | 'permissions' | 'delete' | 'rename' | 'queue-edit' | 'message-edit' | 'resources' | 'connections' | 'preview' | 'image';\nexport interface ActionScope { kind: 'global' | 'conversation' | 'workspace' | 'active'; id?: string; }\nexport interface WorkspaceShellOptions { brand: Node; prefix?: string; composer?: ComposerViewOptions; onDialogClose?: (name: WorkspaceDialogName) => void; onSearch?: (query: string) => void; onBusyAction?: (key: string) => void; }\nexport interface WorkspaceShellState { workspace?: string; conversation?: string; reconnecting?: boolean; error?: { message: string; hidden?: boolean }; busy?: { key: string; message: string; actionLabel: string } | null; }\nexport function createWorkspaceShell(options: WorkspaceShellOptions) {\n const element = document.createElement('div'); element.className = 'pui-app';\n element.innerHTML = `\n <aside class=\"pui-sidebar\" id=\"sidebar\">\n <div class=\"pui-brand\"><span data-brand-slot></span></div>\n <div class=\"pui-sidebar-section-label\">WORKSPACES <button class=\"pui-quiet-icon\" data-action=\"workspace\" aria-label=\"Manage workspaces\">${icon('plus')}</button></div>\n <label class=\"pui-history-search\">${icon('search')}<span class=\"pui-sr-only\">Search conversation titles</span><input id=\"history-search\" type=\"search\" placeholder=\"Search conversations\" autocomplete=\"off\" /></label>\n <nav id=\"history-list\" class=\"pui-history-list\" aria-label=\"Workspaces and conversations\"></nav>\n <div class=\"pui-sidebar-bottom\">\n <button class=\"pui-settings-button\" data-action=\"resources\">${icon('file')}<span>Workspace resources</span></button>\n <button class=\"pui-settings-button\" data-action=\"connections\">${icon('plug')}<span>Connections</span></button>\n <button class=\"pui-settings-button\" data-action=\"settings\">${icon('settings')}<span>Settings</span></button>\n <div id=\"connection-status\" class=\"pui-local-status\" role=\"status\" hidden><span class=\"pui-status-dot pui-reconnecting\" aria-hidden=\"true\"></span><span>Reconnecting…</span></div>\n </div>\n </aside>\n <div id=\"conversation-menu\" class=\"pui-sidebar-conversation-menu\" role=\"menu\" hidden></div>\n <div class=\"pui-sidebar-scrim\" id=\"sidebar-scrim\"></div>\n <main class=\"pui-main\">\n <header class=\"pui-topbar\">\n <button class=\"pui-quiet-icon pui-mobile-menu\" data-action=\"menu\" aria-label=\"Open sidebar\">${icon('menu')}</button>\n <div class=\"pui-breadcrumb\">${icon('folder')}<span id=\"workspace-label\">No workspace</span>${icon('chevron', 'pui-breadcrumb-chevron')}<span class=\"pui-breadcrumb-current\" id=\"conversation-label\">New conversation</span></div>\n <div class=\"pui-conversation-actions\"><button class=\"pui-quiet-icon pui-compact-action\" data-sdk=\"compact\" data-sdk-idle title=\"Compress context by summarizing older messages\" aria-label=\"Compress context\">${icon('compress')}<span>Compact</span></button><div id=\"artifacts-control\" class=\"pui-artifacts-control\" hidden><button id=\"artifacts-toggle\" type=\"button\" class=\"pui-quiet-icon pui-artifacts-toggle\" aria-label=\"Conversation files\" title=\"Conversation files\" aria-expanded=\"false\" aria-controls=\"artifacts\">${icon('file')}<span id=\"artifacts-count\" class=\"pui-artifacts-count\" aria-hidden=\"true\"></span></button><section id=\"artifacts\" class=\"pui-artifacts-panel\" aria-labelledby=\"artifacts-title\" tabindex=\"-1\" hidden></section></div></div>\n </header>\n <section id=\"conversation-find\" class=\"pui-conversation-find\" aria-label=\"Find in conversation\" hidden>\n <input type=\"search\" aria-label=\"Find in this conversation\" placeholder=\"Find in this conversation\" autocomplete=\"off\" />\n <span data-find-count role=\"status\" aria-live=\"polite\"></span>\n <button type=\"button\" class=\"pui-quiet-icon pui-find-previous\" data-find-previous aria-label=\"Previous match\" title=\"Previous match (Shift+Enter)\">${icon('down')}</button>\n <button type=\"button\" class=\"pui-quiet-icon\" data-find-next aria-label=\"Next match\" title=\"Next match (Enter)\">${icon('down')}</button>\n <button type=\"button\" class=\"pui-quiet-icon\" data-find-close aria-label=\"Close search\" title=\"Close (Esc)\">${icon('close')}</button>\n </section>\n <div class=\"pui-conversation-region\"><section id=\"chat-scroll\" class=\"pui-chat-scroll\" aria-label=\"Conversation\" tabindex=\"-1\">\n <div id=\"welcome\" class=\"pui-welcome\"></div>\n <div id=\"messages\" class=\"pui-messages\" aria-live=\"polite\" aria-relevant=\"additions text\"></div>\n </section><button id=\"back-to-latest\" type=\"button\" class=\"pui-secondary-button pui-back-to-latest\" hidden>${icon('down')}<span>Back to latest</span></button></div>\n <div class=\"pui-composer-region\">\n <div class=\"pui-composer-panels\">\n <div id=\"approval\" class=\"pui-approval-region\"></div>\n <div id=\"workspace-busy\" class=\"pui-workspace-busy\" hidden></div><div id=\"inline-error\" class=\"pui-inline-error\" role=\"alert\" hidden></div>\n <section id=\"task-failure\" class=\"pui-task-failure\" role=\"status\" hidden></section>\n <details id=\"run-status\" class=\"pui-run-status\" hidden><summary id=\"run-status-summary\"></summary><div id=\"run-status-details\"><div id=\"runtime-values\"></div><details id=\"cost-requests\" class=\"pui-cost-requests\" hidden><summary>Request breakdown</summary><div id=\"cost-ledger\"></div></details></div></details>\n <section id=\"queued-messages\" class=\"pui-queued-messages\" aria-label=\"Pending messages\" aria-live=\"polite\" hidden></section>\n </div>\n <div data-composer-slot></div>\n <p id=\"image-guidance\" class=\"pui-composer-note pui-image-guidance\" hidden></p>\n <p class=\"pui-composer-note\" id=\"permission-description\">Pith can read workspace files. Changes and commands require your approval.</p>\n </div>\n </main>\n <section id=\"completion-notices\" class=\"pui-completion-notices\" aria-label=\"Completed tasks\" aria-live=\"polite\"></section>\n <span id=\"copy-status\" class=\"pui-sr-only\" role=\"status\" aria-live=\"polite\"></span>\n <dialog id=\"model-dialog\" class=\"pui-modal pui-model-modal\" aria-labelledby=\"model-title\"><div id=\"model-content\"></div></dialog>\n <dialog id=\"settings-dialog\" class=\"pui-modal\" aria-labelledby=\"settings-title\"><div id=\"settings-content\"></div></dialog>\n <dialog id=\"workspace-dialog\" class=\"pui-modal\" aria-labelledby=\"workspace-title\"><div id=\"workspace-content\"></div></dialog>\n <dialog id=\"permissions-dialog\" class=\"pui-modal pui-permission-modal\" aria-labelledby=\"full-access-title\"><div id=\"permissions-content\"></div></dialog>\n <dialog id=\"delete-dialog\" class=\"pui-modal\" aria-labelledby=\"delete-title\"><div id=\"delete-content\"></div></dialog>\n <dialog id=\"rename-dialog\" class=\"pui-modal\" aria-labelledby=\"rename-title\"><div id=\"rename-content\"></div></dialog>\n <dialog id=\"queue-edit-dialog\" class=\"pui-modal\" aria-labelledby=\"queue-edit-title\"><div id=\"queue-edit-content\"></div></dialog>\n <dialog id=\"message-edit-dialog\" class=\"pui-modal\" aria-labelledby=\"message-edit-title\"><div id=\"message-edit-content\"></div></dialog>\n <dialog id=\"resources-dialog\" class=\"pui-modal pui-feature-modal\" aria-labelledby=\"resources-title\"><div id=\"resources-content\"></div></dialog>\n <dialog id=\"connections-dialog\" class=\"pui-modal pui-feature-modal\" aria-labelledby=\"connections-title\"><div id=\"connections-content\"></div></dialog>\n <dialog id=\"preview-dialog\" class=\"pui-modal pui-file-preview-modal\" aria-labelledby=\"preview-title\"><div id=\"preview-content\"></div></dialog>\n <dialog id=\"image-dialog\"></dialog>\n`;\n element.querySelector('[data-brand-slot]')!.replaceWith(options.brand);\n const prefix = options.prefix ?? 'pui-workspace-' + ++sequence + '-';\n const composer = createComposerView({ ...options.composer, prefix: '' }); element.querySelector('[data-composer-slot]')!.replaceWith(composer.element);\n identify(element, prefix);\n const part = <T extends HTMLElement = HTMLElement>(name: string) => element.querySelector<T>('[id=\"' + prefix + name + '\"]')!;\n let destroyed = false;\n const parts = adoptProductParts(element);\n const dialogs = new Map(Array.from(element.querySelectorAll<HTMLDialogElement>('dialog'), dialog => {\n const name = dialog.id.slice(prefix.length).replace(/-dialog$/, '') as WorkspaceDialogName;\n return [name, installDialogLifecycle(dialog, { onClose: () => options.onDialogClose?.(name) })] as const;\n }));\n const sidebar = part('sidebar'), scrim = part('sidebar-scrim');\n const main = element.querySelector<HTMLElement>('.pui-main')!;\n const sidebarTrigger = element.querySelector<HTMLButtonElement>('.pui-mobile-menu')!;\n const narrow = matchMedia('(max-width: 720px)');\n let sidebarOpen = false;\n sidebarTrigger.setAttribute('aria-controls', sidebar.id);\n scrim.setAttribute('aria-hidden','true');\n const sidebarControls = () => focusableElements(sidebar);\n const syncSidebar = () => {\n if (destroyed) return;\n const open = narrow.matches && sidebarOpen;\n main.inert = open;\n sidebar.inert = narrow.matches && !open;\n sidebarTrigger.setAttribute('aria-expanded',String(sidebarOpen));\n sidebar.classList.toggle('pui-open', sidebarOpen); scrim.classList.toggle('pui-visible', sidebarOpen);\n };\n const setSidebarOpen = (open: boolean) => {\n if (destroyed) return;\n const wasOpen = sidebarOpen; sidebarOpen = open;\n if (!open && narrow.matches && sidebar.contains(document.activeElement)) {main.inert=false;sidebarTrigger.focus({preventScroll:true});}\n syncSidebar();\n if (narrow.matches && open && !wasOpen) sidebarControls()[0]?.focus({preventScroll:true});\n };\n const onBreakpoint = () => {\n if (narrow.matches && !sidebarOpen && sidebar.contains(document.activeElement)) {main.inert=false;sidebarTrigger.focus({preventScroll:true});}\n syncSidebar();\n };\n const sidebarKeydown = (event: KeyboardEvent) => {\n if (!narrow.matches || !sidebarOpen || event.defaultPrevented || element.querySelector('dialog[open]')) return;\n if (event.key === 'Escape') {event.preventDefault();event.stopPropagation();setSidebarOpen(false);return;}\n if (event.key !== 'Tab') return;\n const controls=sidebarControls(), first=controls[0],last=controls.at(-1);\n if (event.shiftKey && document.activeElement===first) {event.preventDefault();last?.focus();}\n else if (!event.shiftKey && document.activeElement===last) {event.preventDefault();first?.focus();}\n };\n const sidebarClick = (event: MouseEvent) => { const target = event.target as Element; if (target === scrim || target.closest('[data-action=\"menu\"]')) { setSidebarOpen(target !== scrim && !sidebarOpen); event.stopPropagation(); } };\n narrow.addEventListener('change',onBreakpoint); element.addEventListener('keydown',sidebarKeydown); syncSidebar();\n const search = part<HTMLInputElement>('history-search'); const onSearch = () => options.onSearch?.(search.value);\n search.addEventListener('input', onSearch); element.addEventListener('click', sidebarClick);\n const busy = part('workspace-busy');\n const onBusy = (event: MouseEvent) => { if ((event.target as Element).closest('button') && busy.dataset.key) { event.stopPropagation(); options.onBusyAction?.(busy.dataset.key); } };\n busy.addEventListener('click', onBusy);\n return { element, composer, part, update(state: Readonly<WorkspaceShellState>) {\n if (destroyed) return;\n if (state.workspace !== undefined) part('workspace-label').textContent = state.workspace;\n if (state.conversation !== undefined) part('conversation-label').textContent = state.conversation;\n part('connection-status').hidden = !state.reconnecting;\n if (state.error) { part('inline-error').textContent = state.error.message; part('inline-error').hidden = !!state.error.hidden || !state.error.message; }\n if (state.busy !== undefined) {\n busy.hidden = !state.busy;\n if (state.busy) {\n if (!busy.firstChild) { busy.append(document.createElement('span'), document.createElement('button')); const button = busy.lastElementChild as HTMLButtonElement; button.type = 'button'; button.className = 'pui-text-button'; }\n busy.dataset.key = state.busy.key;\n if (busy.firstElementChild!.textContent !== state.busy.message) busy.firstElementChild!.textContent = state.busy.message;\n if (busy.lastElementChild!.textContent !== state.busy.actionLabel) busy.lastElementChild!.textContent = state.busy.actionLabel;\n }\n }\n parts.update();\n }, setSidebarOpen,\n openDialog(name: WorkspaceDialogName) { if (!destroyed) { setSidebarOpen(false); dialogs.get(name)?.open(); } },\n closeDialog(name: WorkspaceDialogName) { if (!destroyed) dialogs.get(name)?.close(); },\n isDialogOpen(name: WorkspaceDialogName) { return !destroyed && !!dialogs.get(name)?.isOpen(); },\n updateActionAvailability(unavailable: (scope: ActionScope) => boolean, root: ParentNode = element) {\n if (destroyed) return;\n for (const button of root.querySelectorAll<HTMLButtonElement>('[data-idle-action], [data-global-idle], [data-mcp-edit], [data-action=\"new-mcp\"]')) {\n const scope: ActionScope = button.hasAttribute('data-global-idle') || button.hasAttribute('data-mcp-edit') || button.dataset.action === 'new-mcp' ? { kind: 'global' } : button.dataset.idleConversation ? { kind: 'conversation', id: button.dataset.idleConversation } : button.dataset.idleWorkspace ? { kind: 'workspace', id: button.dataset.idleWorkspace } : { kind: 'active' };\n button.disabled = controlDisabled(button, unavailable(scope));\n }\n for (const link of root.querySelectorAll<HTMLAnchorElement>('a[data-download-conversation]')) link.setAttribute('aria-disabled', String(unavailable({ kind: 'conversation', id: link.dataset.downloadConversation })));\n },\n destroy() { if (destroyed) return; destroyed = true; narrow.removeEventListener('change',onBreakpoint);element.removeEventListener('keydown',sidebarKeydown);sidebar.inert=false;main.inert=false;for (const dialog of dialogs.values()) dialog.destroy(); parts.destroy(); search.removeEventListener('input', onSearch); element.removeEventListener('click', sidebarClick); busy.removeEventListener('click', onBusy); composer.destroy(); element.remove(); } };\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pith-ui",
3
- "version": "0.1.1",
3
+ "version": "0.1.4",
4
4
  "description": "Native TypeScript building blocks with explicit behavior and a human-verifiable component showroom.",
5
5
  "type": "module",
6
6
  "license": "AGPL-3.0-only",