pith-ui 0.1.0 → 0.1.1
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/AI.md +8 -0
- package/API.md +656 -249
- package/README.md +1 -1
- package/dist/composer.d.ts.map +1 -1
- package/dist/composer.js +13 -4
- package/dist/composer.js.map +1 -1
- package/dist/content/conversation-view.d.ts +21 -4
- package/dist/content/conversation-view.d.ts.map +1 -1
- package/dist/content/conversation-view.js +38 -5
- package/dist/content/conversation-view.js.map +1 -1
- package/dist/content/image-viewer.d.ts +4 -2
- package/dist/content/image-viewer.d.ts.map +1 -1
- package/dist/content/image-viewer.js +25 -12
- package/dist/content/image-viewer.js.map +1 -1
- package/dist/content/paged-preview.d.ts.map +1 -1
- package/dist/content/paged-preview.js +6 -3
- package/dist/content/paged-preview.js.map +1 -1
- package/dist/content/welcome.d.ts.map +1 -1
- package/dist/content/welcome.js +14 -5
- package/dist/content/welcome.js.map +1 -1
- package/dist/files/panels.d.ts +6 -1
- package/dist/files/panels.d.ts.map +1 -1
- package/dist/files/panels.js +48 -7
- package/dist/files/panels.js.map +1 -1
- package/dist/files/systems.d.ts.map +1 -1
- package/dist/files/systems.js +47 -30
- package/dist/files/systems.js.map +1 -1
- package/dist/forms/actions.d.ts +7 -7
- package/dist/forms/actions.d.ts.map +1 -1
- package/dist/forms/actions.js +28 -8
- package/dist/forms/actions.js.map +1 -1
- package/dist/forms/custom-connection.d.ts +2 -1
- package/dist/forms/custom-connection.d.ts.map +1 -1
- package/dist/forms/custom-connection.js +34 -27
- package/dist/forms/custom-connection.js.map +1 -1
- package/dist/forms/dialog-frame.d.ts +2 -0
- package/dist/forms/dialog-frame.d.ts.map +1 -1
- package/dist/forms/dialog-frame.js +46 -26
- package/dist/forms/dialog-frame.js.map +1 -1
- package/dist/forms/identity.d.ts +12 -0
- package/dist/forms/identity.d.ts.map +1 -1
- package/dist/forms/identity.js +32 -0
- package/dist/forms/identity.js.map +1 -1
- package/dist/forms/model-editor.d.ts +8 -3
- package/dist/forms/model-editor.d.ts.map +1 -1
- package/dist/forms/model-editor.js +73 -62
- package/dist/forms/model-editor.js.map +1 -1
- package/dist/forms/panels.d.ts +95 -6
- package/dist/forms/panels.d.ts.map +1 -1
- package/dist/forms/panels.js +142 -27
- package/dist/forms/panels.js.map +1 -1
- package/dist/forms/provider-login.d.ts.map +1 -1
- package/dist/forms/provider-login.js +9 -7
- package/dist/forms/provider-login.js.map +1 -1
- package/dist/forms/resource-editor.d.ts +9 -5
- package/dist/forms/resource-editor.d.ts.map +1 -1
- package/dist/forms/resource-editor.js +18 -8
- package/dist/forms/resource-editor.js.map +1 -1
- package/dist/foundations.d.ts +95 -0
- package/dist/foundations.d.ts.map +1 -0
- package/dist/foundations.js +315 -0
- package/dist/foundations.js.map +1 -0
- package/dist/navigation/context-menu.d.ts +1 -0
- package/dist/navigation/context-menu.d.ts.map +1 -1
- package/dist/navigation/context-menu.js +48 -34
- package/dist/navigation/context-menu.js.map +1 -1
- package/dist/navigation/navigation.d.ts +42 -7
- package/dist/navigation/navigation.d.ts.map +1 -1
- package/dist/navigation/navigation.js +197 -14
- package/dist/navigation/navigation.js.map +1 -1
- package/dist/primitives.d.ts +3 -0
- package/dist/primitives.d.ts.map +1 -1
- package/dist/primitives.js +60 -168
- package/dist/primitives.js.map +1 -1
- package/dist/styles.css +32 -28
- package/dist/surface.d.ts +29 -0
- package/dist/surface.d.ts.map +1 -0
- package/dist/surface.js +154 -0
- package/dist/surface.js.map +1 -0
- package/dist/tasks/approval.d.ts.map +1 -1
- package/dist/tasks/approval.js +5 -2
- package/dist/tasks/approval.js.map +1 -1
- package/dist/tasks/permission.d.ts +5 -3
- package/dist/tasks/permission.d.ts.map +1 -1
- package/dist/tasks/permission.js +11 -5
- package/dist/tasks/permission.js.map +1 -1
- package/dist/workspace.d.ts +58 -4
- package/dist/workspace.d.ts.map +1 -1
- package/dist/workspace.js +120 -15
- package/dist/workspace.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../src/navigation/navigation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../src/navigation/navigation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { scopeIds } from '../forms/identity.js';
|
|
2
|
+
import { Generation, Lifetime } from '../core.js';
|
|
2
3
|
import { dialogHeading, escape, icon, uniqueId } from '../dom.js';
|
|
4
|
+
import { adoptProductParts } from '../foundations.js';
|
|
5
|
+
import { installDialogLifecycle } from '../surface.js';
|
|
3
6
|
export function createWorkspaceNavigation(initial, options = {}) {
|
|
4
7
|
const element = options.element || document.createElement('nav');
|
|
5
8
|
if (!options.element) {
|
|
@@ -9,6 +12,7 @@ export function createWorkspaceNavigation(initial, options = {}) {
|
|
|
9
12
|
const prefix = options.idPrefix ?? uniqueId('pui-nav') + '-';
|
|
10
13
|
const abort = new AbortController();
|
|
11
14
|
let destroyed = false;
|
|
15
|
+
const parts = adoptProductParts(element);
|
|
12
16
|
const workspaces = new Map();
|
|
13
17
|
const conversations = new Map();
|
|
14
18
|
const emptyWorkspace = document.createElement('button');
|
|
@@ -68,10 +72,10 @@ export function createWorkspaceNavigation(initial, options = {}) {
|
|
|
68
72
|
group.more.dataset.workspaceMenu = workspace.id;
|
|
69
73
|
group.more.setAttribute('aria-label', 'Actions for workspace ' + workspace.name);
|
|
70
74
|
group.more.setAttribute('aria-expanded', String(!!workspace.menuOpen));
|
|
71
|
-
group.more.disabled
|
|
75
|
+
parts.action(group.more).update({ disabled: !!state.disabled });
|
|
72
76
|
group.create.dataset.newWorkspace = workspace.id;
|
|
73
77
|
group.create.setAttribute('aria-label', 'New conversation in ' + workspace.name);
|
|
74
|
-
group.create.disabled
|
|
78
|
+
parts.action(group.create).update({ disabled: !!state.disabled });
|
|
75
79
|
group.children.id = prefix + 'workspace-children-' + workspace.id;
|
|
76
80
|
group.children.hidden = !workspace.expanded;
|
|
77
81
|
let rowCursor = group.children.firstElementChild;
|
|
@@ -85,8 +89,7 @@ export function createWorkspaceNavigation(initial, options = {}) {
|
|
|
85
89
|
const title = entry.title || 'Untitled conversation';
|
|
86
90
|
row.element.classList.toggle('pui-active', entry.active);
|
|
87
91
|
row.button.dataset.conversation = entry.id;
|
|
88
|
-
row.button.title
|
|
89
|
-
row.button.disabled = !!state.disabled;
|
|
92
|
+
parts.action(row.button).update({ title, disabled: !!state.disabled });
|
|
90
93
|
if (entry.active)
|
|
91
94
|
row.button.setAttribute('aria-current', 'page');
|
|
92
95
|
else
|
|
@@ -97,7 +100,7 @@ export function createWorkspaceNavigation(initial, options = {}) {
|
|
|
97
100
|
row.more.dataset.conversationMenu = entry.id;
|
|
98
101
|
row.more.setAttribute('aria-label', 'Actions for ' + title);
|
|
99
102
|
row.more.setAttribute('aria-expanded', String(!!entry.menuOpen));
|
|
100
|
-
row.more.disabled
|
|
103
|
+
parts.action(row.more).update({ disabled: !!state.disabled });
|
|
101
104
|
const signature = entry.status === row.statusSource && entry.status instanceof DocumentFragment && entry.status.childNodes.length === 0 ? row.statusSignature : statusSignature(entry.status);
|
|
102
105
|
row.statusSource = entry.status;
|
|
103
106
|
if (signature !== row.statusSignature) {
|
|
@@ -143,6 +146,7 @@ export function createWorkspaceNavigation(initial, options = {}) {
|
|
|
143
146
|
}
|
|
144
147
|
else
|
|
145
148
|
emptySearch.remove();
|
|
149
|
+
parts.update();
|
|
146
150
|
};
|
|
147
151
|
element.addEventListener('click', event => { const target = event.target.closest('button'); if (target?.disabled)
|
|
148
152
|
return; if (target?.dataset.toggleWorkspace)
|
|
@@ -150,7 +154,7 @@ export function createWorkspaceNavigation(initial, options = {}) {
|
|
|
150
154
|
options.onSelect?.(target.dataset.conversation); }, { signal: abort.signal });
|
|
151
155
|
update(initial);
|
|
152
156
|
return { element, update, destroy() { if (destroyed)
|
|
153
|
-
return; destroyed = true; abort.abort(); workspaces.clear(); conversations.clear(); if (!options.element)
|
|
157
|
+
return; destroyed = true; abort.abort(); parts.destroy(); workspaces.clear(); conversations.clear(); if (!options.element)
|
|
154
158
|
element.remove(); } };
|
|
155
159
|
}
|
|
156
160
|
export function createRenameConversation(initial, options = {}) {
|
|
@@ -161,11 +165,63 @@ export function createRenameConversation(initial, options = {}) {
|
|
|
161
165
|
const input = element.querySelector('#conversation-title');
|
|
162
166
|
const form = element.querySelector('#rename-form');
|
|
163
167
|
const error = element.querySelector('#rename-error');
|
|
164
|
-
const update = (state) => { if (state.error !== undefined)
|
|
165
|
-
error.textContent = state.error; const button = form.querySelector('button[type="submit"]'); button.disabled = !!state.disabled; };
|
|
166
|
-
update(initial);
|
|
167
168
|
scopeIds(element, options.idPrefix ?? uniqueId('pui-rename') + '-');
|
|
168
|
-
|
|
169
|
+
const parts = adoptProductParts(element);
|
|
170
|
+
const control = parts.control(input);
|
|
171
|
+
const feedback = parts.feedback(error);
|
|
172
|
+
const button = form.querySelector('button[type="submit"]');
|
|
173
|
+
const action = parts.action(button);
|
|
174
|
+
const generation = new Generation();
|
|
175
|
+
const life = new Lifetime();
|
|
176
|
+
let current = initial;
|
|
177
|
+
let targetId = initial.id;
|
|
178
|
+
let pending = false;
|
|
179
|
+
let destroyed = false;
|
|
180
|
+
const sync = () => { action.update({ disabled: !!current.disabled || !!options.unavailable?.(), pending }); feedback.update({ message: current.error || '', tone: 'error' }); };
|
|
181
|
+
const lifecycle = options.dialog ? installDialogLifecycle(options.dialog, { onOpen() { generation.invalidate(); pending = false; sync(); }, onClose() { generation.invalidate(); pending = false; sync(); } }) : undefined;
|
|
182
|
+
const update = (next) => { if (destroyed)
|
|
183
|
+
return; current = { ...next, error: next.error ?? current.error }; sync(); };
|
|
184
|
+
const reset = (next) => { if (destroyed)
|
|
185
|
+
return; generation.invalidate(); pending = false; targetId = next.id; current = next; control.reset(next.title); button.dataset.idleConversation = next.id; sync(); };
|
|
186
|
+
const close = () => { generation.invalidate(); pending = false; lifecycle?.close(); sync(); };
|
|
187
|
+
if (options.onSubmit)
|
|
188
|
+
life.listen(form, 'submit', (async (event) => {
|
|
189
|
+
event.preventDefault();
|
|
190
|
+
const title = control.getValue().trim();
|
|
191
|
+
if (destroyed || pending || current.disabled || options.unavailable?.() || !title)
|
|
192
|
+
return;
|
|
193
|
+
const seq = generation.next();
|
|
194
|
+
pending = true;
|
|
195
|
+
current = { ...current, error: '' };
|
|
196
|
+
sync();
|
|
197
|
+
let result;
|
|
198
|
+
try {
|
|
199
|
+
result = await options.onSubmit({ id: targetId, title });
|
|
200
|
+
}
|
|
201
|
+
catch (reason) {
|
|
202
|
+
result = { ok: false, error: reason instanceof Error ? reason.message : String(reason) };
|
|
203
|
+
}
|
|
204
|
+
if (!generation.current(seq) || (options.dialog && !options.dialog.open))
|
|
205
|
+
return;
|
|
206
|
+
pending = false;
|
|
207
|
+
if (result.ok) {
|
|
208
|
+
lifecycle?.close();
|
|
209
|
+
options.onSubmitted?.();
|
|
210
|
+
}
|
|
211
|
+
else
|
|
212
|
+
current = { ...current, error: result.error };
|
|
213
|
+
sync();
|
|
214
|
+
}));
|
|
215
|
+
life.listen(element, 'click', (event => { if (event.target.closest('[data-close]')) {
|
|
216
|
+
generation.invalidate();
|
|
217
|
+
pending = false;
|
|
218
|
+
options.onCancel?.();
|
|
219
|
+
lifecycle?.close();
|
|
220
|
+
} }));
|
|
221
|
+
update(initial);
|
|
222
|
+
return { element, input, form, update, read: () => ({ id: targetId, title: control.getValue() }), reset, open(next) { if (next)
|
|
223
|
+
reset(next); lifecycle?.open(); input.select(); }, close, focus() { input.select(); }, destroy() { if (destroyed)
|
|
224
|
+
return; destroyed = true; generation.destroy(); life.destroy(); lifecycle?.close(); lifecycle?.destroy(); parts.destroy(); element.remove(); } };
|
|
169
225
|
}
|
|
170
226
|
export function createWorkspacePicker(initial, options = {}) {
|
|
171
227
|
const state = initial;
|
|
@@ -176,10 +232,137 @@ export function createWorkspacePicker(initial, options = {}) {
|
|
|
176
232
|
const form = element.querySelector('#workspace-form');
|
|
177
233
|
const pickButton = element.querySelector('#pick-folder');
|
|
178
234
|
const error = element.querySelector('#workspace-error');
|
|
179
|
-
const update = (state) => { if (state.error !== undefined)
|
|
180
|
-
error.textContent = state.error; const button = form.querySelector('button[type="submit"]'); button.disabled = !!state.disabled; };
|
|
181
|
-
update(initial);
|
|
182
235
|
scopeIds(element, options.idPrefix ?? uniqueId('pui-workspace') + '-');
|
|
183
|
-
|
|
236
|
+
const list = element.querySelector('.pui-modal-workspaces');
|
|
237
|
+
const rows = new Map([...list.querySelectorAll('[data-modal-workspace]')].map(row => [row.dataset.modalWorkspace, row]));
|
|
238
|
+
const parts = adoptProductParts(element);
|
|
239
|
+
const control = parts.control(input);
|
|
240
|
+
const feedback = parts.feedback(error);
|
|
241
|
+
const submitButton = form.querySelector('button[type="submit"]');
|
|
242
|
+
const generation = new Generation();
|
|
243
|
+
const life = new Lifetime();
|
|
244
|
+
let current = initial;
|
|
245
|
+
let pending = false;
|
|
246
|
+
let destroyed = false;
|
|
247
|
+
const sync = () => { const disabled = !!current.disabled || !!options.unavailable?.(); parts.action(submitButton).update({ disabled, pending }); parts.action(pickButton).update({ disabled, pending }); for (const row of rows.values())
|
|
248
|
+
parts.action(row).update({ disabled: disabled || pending }); feedback.update({ message: current.error || '', tone: 'error' }); };
|
|
249
|
+
const lifecycle = options.dialog ? installDialogLifecycle(options.dialog, { onOpen() { generation.invalidate(); pending = false; sync(); }, onClose() { generation.invalidate(); pending = false; sync(); } }) : undefined;
|
|
250
|
+
const update = (next) => {
|
|
251
|
+
if (destroyed)
|
|
252
|
+
return;
|
|
253
|
+
current = { ...next, error: next.error ?? current.error };
|
|
254
|
+
const keep = new Set(next.workspaces.map(entry => entry.id));
|
|
255
|
+
for (const [id, row] of rows)
|
|
256
|
+
if (!keep.has(id)) {
|
|
257
|
+
row.remove();
|
|
258
|
+
rows.delete(id);
|
|
259
|
+
}
|
|
260
|
+
let cursor = list.firstElementChild;
|
|
261
|
+
for (const entry of next.workspaces) {
|
|
262
|
+
let row = rows.get(entry.id);
|
|
263
|
+
if (!row) {
|
|
264
|
+
row = document.createElement('button');
|
|
265
|
+
row.type = 'button';
|
|
266
|
+
row.className = 'pui-modal-workspace';
|
|
267
|
+
row.dataset.modalWorkspace = entry.id;
|
|
268
|
+
row.innerHTML = `${icon('folder')}<span><strong></strong><small></small></span>${icon('chevron')}`;
|
|
269
|
+
rows.set(entry.id, row);
|
|
270
|
+
}
|
|
271
|
+
const name = row.querySelector('strong');
|
|
272
|
+
const path = row.querySelector('small');
|
|
273
|
+
if (name.textContent !== entry.name)
|
|
274
|
+
name.textContent = entry.name;
|
|
275
|
+
if (path.textContent !== entry.path)
|
|
276
|
+
path.textContent = entry.path;
|
|
277
|
+
if (cursor !== row)
|
|
278
|
+
list.insertBefore(row, cursor);
|
|
279
|
+
cursor = row.nextElementSibling;
|
|
280
|
+
}
|
|
281
|
+
parts.update();
|
|
282
|
+
sync();
|
|
283
|
+
};
|
|
284
|
+
const submit = async (path, owner) => {
|
|
285
|
+
if (!options.onSubmit || destroyed || (pending && owner === undefined) || current.disabled || options.unavailable?.() || !path.trim())
|
|
286
|
+
return;
|
|
287
|
+
const seq = owner ?? generation.next();
|
|
288
|
+
pending = true;
|
|
289
|
+
current = { ...current, error: '' };
|
|
290
|
+
sync();
|
|
291
|
+
let result;
|
|
292
|
+
try {
|
|
293
|
+
result = await options.onSubmit(path.trim());
|
|
294
|
+
}
|
|
295
|
+
catch (reason) {
|
|
296
|
+
result = { ok: false, error: reason instanceof Error ? reason.message : String(reason) };
|
|
297
|
+
}
|
|
298
|
+
if (!generation.current(seq) || (options.dialog && !options.dialog.open))
|
|
299
|
+
return;
|
|
300
|
+
pending = false;
|
|
301
|
+
if (result.ok) {
|
|
302
|
+
lifecycle?.close();
|
|
303
|
+
options.onSubmitted?.();
|
|
304
|
+
}
|
|
305
|
+
else
|
|
306
|
+
current = { ...current, error: result.error };
|
|
307
|
+
sync();
|
|
308
|
+
};
|
|
309
|
+
if (options.onSubmit)
|
|
310
|
+
life.listen(form, 'submit', (event => { event.preventDefault(); void submit(control.getValue()); }));
|
|
311
|
+
if (options.onPick)
|
|
312
|
+
life.listen(pickButton, 'click', (async () => {
|
|
313
|
+
if (destroyed || pending || current.disabled || options.unavailable?.())
|
|
314
|
+
return;
|
|
315
|
+
const seq = generation.next();
|
|
316
|
+
pending = true;
|
|
317
|
+
current = { ...current, error: '' };
|
|
318
|
+
sync();
|
|
319
|
+
let result;
|
|
320
|
+
try {
|
|
321
|
+
result = await options.onPick();
|
|
322
|
+
}
|
|
323
|
+
catch (reason) {
|
|
324
|
+
result = { error: `${reason instanceof Error ? reason.message : String(reason)} You can enter the path below.` };
|
|
325
|
+
}
|
|
326
|
+
if (!generation.current(seq) || (options.dialog && !options.dialog.open))
|
|
327
|
+
return;
|
|
328
|
+
if (result.error) {
|
|
329
|
+
pending = false;
|
|
330
|
+
current = { ...current, error: result.error };
|
|
331
|
+
sync();
|
|
332
|
+
control.focus();
|
|
333
|
+
}
|
|
334
|
+
else if (result.path) {
|
|
335
|
+
control.reset(result.path);
|
|
336
|
+
if (options.onSubmit)
|
|
337
|
+
await submit(result.path, seq);
|
|
338
|
+
else {
|
|
339
|
+
pending = false;
|
|
340
|
+
sync();
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
else {
|
|
344
|
+
pending = false;
|
|
345
|
+
sync();
|
|
346
|
+
}
|
|
347
|
+
}));
|
|
348
|
+
life.listen(element, 'click', (event => {
|
|
349
|
+
const target = event.target;
|
|
350
|
+
const selection = target.closest('[data-modal-workspace]');
|
|
351
|
+
if (selection && options.onSelect) {
|
|
352
|
+
event.stopPropagation();
|
|
353
|
+
if (!pending && !current.disabled && !options.unavailable?.())
|
|
354
|
+
options.onSelect(selection.dataset.modalWorkspace);
|
|
355
|
+
}
|
|
356
|
+
if (target.closest('[data-close]')) {
|
|
357
|
+
generation.invalidate();
|
|
358
|
+
pending = false;
|
|
359
|
+
options.onCancel?.();
|
|
360
|
+
lifecycle?.close();
|
|
361
|
+
}
|
|
362
|
+
}));
|
|
363
|
+
update(initial);
|
|
364
|
+
return { element, input, form, pickButton, update, read: () => ({ path: control.getValue() }), reset(path = '') { if (destroyed)
|
|
365
|
+
return; generation.invalidate(); pending = false; current = { ...current, error: '' }; control.reset(path); sync(); }, open() { lifecycle?.open(); }, close() { generation.invalidate(); pending = false; lifecycle?.close(); sync(); }, focus: control.focus, destroy() { if (destroyed)
|
|
366
|
+
return; destroyed = true; generation.destroy(); life.destroy(); lifecycle?.close(); lifecycle?.destroy(); parts.destroy(); element.remove(); } };
|
|
184
367
|
}
|
|
185
368
|
//# sourceMappingURL=navigation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation.js","sourceRoot":"","sources":["../../src/navigation/navigation.ts"],"names":[],"mappings":"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","sourcesContent":["import {scopeIds} from '../forms/identity.js';\nimport type { UIBlock } from '../core.js';\nimport {dialogHeading, escape, icon, uniqueId} from '../dom.js';\nexport interface NavigationConversation {id: string; title?: string; active: boolean; menuOpen?: boolean; status?: Node | null}\nexport interface NavigationWorkspace {id: string; name: string; path: string; expanded: boolean; selected: boolean; menuOpen?: boolean; children: readonly NavigationConversation[]}\nexport interface WorkspaceNavigationState {groups: readonly NavigationWorkspace[]; empty: 'workspaces' | 'search' | null; disabled?: boolean}\ntype ConversationDOM = {element: HTMLElement; button: HTMLButtonElement; title: HTMLElement; more: HTMLButtonElement; status: Node[]; statusSignature: string; statusSource?: Node | null};\ntype WorkspaceDOM = {element: HTMLElement; heading: HTMLElement; toggle: HTMLButtonElement; title: HTMLElement; more: HTMLButtonElement; create: HTMLButtonElement; children: HTMLElement; empty: HTMLElement};\nexport function createWorkspaceNavigation(initial: WorkspaceNavigationState, options: {element?: HTMLElement; idPrefix?: string; onToggle?: (id: string) => void; onSelect?: (id: string) => void} = {}): UIBlock<WorkspaceNavigationState> {\n const element = options.element || document.createElement('nav');\n if (!options.element) {element.className = 'pui-history-list pui-workspace-navigation'; element.setAttribute('aria-label', 'Workspaces and conversations');}\n const prefix = options.idPrefix ?? uniqueId('pui-nav') + '-';\n const abort = new AbortController(); let destroyed = false;\n const workspaces = new Map<string, WorkspaceDOM>(); const conversations = new Map<string, ConversationDOM>();\n const emptyWorkspace = document.createElement('button'); emptyWorkspace.type = 'button'; emptyWorkspace.className = 'pui-workspace-item pui-empty-workspace'; emptyWorkspace.dataset.action = 'workspace'; emptyWorkspace.innerHTML = `${icon('folder')}<span>Add a workspace</span>`;\n const emptySearch = document.createElement('p'); emptySearch.className = 'pui-history-empty'; emptySearch.textContent = 'No matching conversations.';\n function createWorkspace(): WorkspaceDOM {\n const root = document.createElement('section'); root.className = 'pui-workspace-group';\n root.innerHTML = `<div class=\"pui-workspace-heading\"><button class=\"pui-workspace-toggle\">${icon('chevron', 'pui-workspace-chevron')}${icon('folder')}<span></span></button><button class=\"pui-quiet-icon pui-workspace-more\" aria-haspopup=\"menu\">${icon('more')}</button><button class=\"pui-quiet-icon pui-workspace-new\" title=\"New conversation\">${icon('compose')}</button></div><div class=\"pui-workspace-children\"></div>`;\n const buttons = root.querySelectorAll<HTMLButtonElement>('button'); const empty = document.createElement('p'); empty.className = 'pui-workspace-empty'; empty.textContent = 'No conversations yet';\n return {element:root,heading:root.firstElementChild as HTMLElement,toggle:buttons[0],title:buttons[0].querySelector('span')!,more:buttons[1],create:buttons[2],children:root.lastElementChild as HTMLElement,empty};\n }\n function createConversation(): ConversationDOM {\n const root = document.createElement('div'); root.className = 'pui-history-row';\n root.innerHTML = `<button class=\"pui-history-item\"><span></span></button><button class=\"pui-quiet-icon pui-history-more\" aria-haspopup=\"menu\">${icon('more')}</button>`;\n const buttons = root.querySelectorAll<HTMLButtonElement>('button'); return {element:root,button:buttons[0],title:buttons[0].querySelector('span')!,more:buttons[1],status:[],statusSignature:''};\n }\n function statusSignature(node?: Node | null): string {\n if (!node) return ''; const holder = document.createElement('div'); holder.append(node.cloneNode(true)); return holder.innerHTML;\n }\n const update = (state: Readonly<WorkspaceNavigationState>) => {\n if (destroyed) return; const currentWorkspaces = new Set<string>(); const currentConversations = new Set<string>(); let groupCursor: Element | null = element.firstElementChild;\n for (const workspace of state.groups) {\n currentWorkspaces.add(workspace.id); let group = workspaces.get(workspace.id); if (!group) {group = createWorkspace(); workspaces.set(workspace.id,group);}\n group.element.setAttribute('aria-label',workspace.name); group.heading.classList.toggle('pui-selected',workspace.selected);\n group.toggle.dataset.toggleWorkspace = workspace.id; group.toggle.setAttribute('aria-expanded',String(workspace.expanded)); group.toggle.setAttribute('aria-controls',prefix+'workspace-children-'+workspace.id); group.toggle.title = workspace.path;\n if (group.title.textContent !== workspace.name) group.title.textContent = workspace.name;\n group.more.id = prefix+'workspace-actions-'+workspace.id; group.more.dataset.workspaceMenu = workspace.id; group.more.setAttribute('aria-label','Actions for workspace '+workspace.name); group.more.setAttribute('aria-expanded',String(!!workspace.menuOpen)); group.more.disabled = !!state.disabled;\n group.create.dataset.newWorkspace = workspace.id; group.create.setAttribute('aria-label','New conversation in '+workspace.name); group.create.disabled = !!state.disabled;\n group.children.id = prefix+'workspace-children-'+workspace.id; group.children.hidden = !workspace.expanded; let rowCursor: Element | null = group.children.firstElementChild;\n for (const entry of workspace.children) {\n currentConversations.add(entry.id); let row = conversations.get(entry.id); if (!row) {row = createConversation(); conversations.set(entry.id,row);}\n const title = entry.title || 'Untitled conversation'; row.element.classList.toggle('pui-active',entry.active); row.button.dataset.conversation = entry.id; row.button.title = title; row.button.disabled = !!state.disabled;\n if (entry.active) row.button.setAttribute('aria-current','page'); else row.button.removeAttribute('aria-current'); if (row.title.textContent !== title) row.title.textContent = title;\n row.more.id = prefix+'conversation-actions-'+entry.id; row.more.dataset.conversationMenu = entry.id; row.more.setAttribute('aria-label','Actions for '+title); row.more.setAttribute('aria-expanded',String(!!entry.menuOpen)); row.more.disabled = !!state.disabled;\n const signature = entry.status === row.statusSource && entry.status instanceof DocumentFragment && entry.status.childNodes.length === 0 ? row.statusSignature : statusSignature(entry.status);\n row.statusSource = entry.status;\n if (signature !== row.statusSignature) {for (const node of row.status) node.parentNode?.removeChild(node); row.status = entry.status ? entry.status instanceof DocumentFragment ? [...entry.status.childNodes] : [entry.status] : []; row.button.append(...row.status); row.statusSignature = signature;}\n if (row.element !== rowCursor) group.children.insertBefore(row.element,rowCursor); rowCursor = row.element.nextElementSibling;\n }\n if (!workspace.children.length) {if (group.empty.parentElement !== group.children) group.children.append(group.empty);} else group.empty.remove();\n if (group.element !== groupCursor) element.insertBefore(group.element,groupCursor); groupCursor = group.element.nextElementSibling;\n }\n for (const [id,row] of conversations) if (!currentConversations.has(id)) {row.element.remove(); conversations.delete(id);}\n for (const [id,group] of workspaces) if (!currentWorkspaces.has(id)) {group.element.remove(); workspaces.delete(id);}\n if (state.empty === 'workspaces') {if (emptyWorkspace.parentElement !== element) element.append(emptyWorkspace);} else emptyWorkspace.remove();\n if (state.empty === 'search') {if (emptySearch.parentElement !== element) element.append(emptySearch);} else emptySearch.remove();\n };\n element.addEventListener('click',event => {const target = (event.target as HTMLElement).closest<HTMLButtonElement>('button'); if (target?.disabled) return; if (target?.dataset.toggleWorkspace) options.onToggle?.(target.dataset.toggleWorkspace); if (target?.dataset.conversation) options.onSelect?.(target.dataset.conversation);},{signal:abort.signal});\n update(initial); return {element,update,destroy() {if (destroyed) return; destroyed = true; abort.abort(); workspaces.clear(); conversations.clear(); if (!options.element) element.remove();}};\n}\nexport interface RenameConversationState {id: string; title: string; error?: string; disabled?: boolean}\nexport function createRenameConversation(initial: RenameConversationState, options: {idPrefix?: string} = {}): UIBlock<RenameConversationState> & {readonly input: HTMLInputElement; readonly form: HTMLFormElement} {\n const state = initial; const element = document.createElement('div'); element.className = 'pui-rename-conversation'; element.innerHTML = `${dialogHeading('Rename conversation', 'rename-title', 'rename-dialog', 'CONVERSATION')}<form id=\"rename-form\"><label class=\"pui-field-label\" for=\"conversation-title\">Title</label><input id=\"conversation-title\" name=\"title\" value=\"${escape(state.title)}\" required autocomplete=\"off\" /><div id=\"rename-error\" class=\"pui-form-error\" role=\"alert\"></div><div class=\"pui-modal-footer\"><button type=\"button\" class=\"pui-secondary-button\" data-close=\"rename-dialog\">Cancel</button><button type=\"submit\" class=\"pui-primary-button\" data-idle-action data-idle-conversation=\"${escape(state.id)}\">Save title</button></div></form>`;\n const input = element.querySelector<HTMLInputElement>('#conversation-title')!; const form = element.querySelector<HTMLFormElement>('#rename-form')!; const error = element.querySelector<HTMLElement>('#rename-error')!;\n const update = (state: Readonly<RenameConversationState>) => {if (state.error !== undefined) error.textContent = state.error; const button = form.querySelector<HTMLButtonElement>('button[type=\"submit\"]')!; button.disabled = !!state.disabled;}; update(initial); scopeIds(element, options.idPrefix ?? uniqueId('pui-rename') + '-');\n return {element, input, form, update, destroy() {element.remove();}};\n}\nexport interface WorkspacePickerState {workspaces: readonly {id: string; name: string; path: string}[]; error?: string; disabled?: boolean}\nexport function createWorkspacePicker(initial: WorkspacePickerState, options: {idPrefix?: string} = {}): UIBlock<WorkspacePickerState> & {readonly input: HTMLInputElement; readonly form: HTMLFormElement; readonly pickButton: HTMLButtonElement} {\n const state = initial; const element = document.createElement('div'); element.className = 'pui-workspace-picker'; element.innerHTML = `${dialogHeading('Workspaces', 'workspace-title', 'workspace-dialog', 'A PLACE TO WORK')}<p class=\"pui-modal-description\">Choose a local folder. Conversations belong to a workspace, so Pith knows where to read and create files.</p><div class=\"pui-modal-workspaces\">${state.workspaces.map((entry) => `<button class=\"pui-modal-workspace\" data-modal-workspace=\"${escape(entry.id)}\">${icon('folder')}<span><strong>${escape(entry.name)}</strong><small>${escape(entry.path)}</small></span>${icon('chevron')}</button>`).join('')}</div><div class=\"pui-workspace-add\"><button class=\"pui-picker-button\" id=\"pick-folder\" type=\"button\">${icon('folder')}Choose a folder…</button><div class=\"pui-path-divider\"><span>or enter a folder path</span></div><form id=\"workspace-form\"><label class=\"pui-sr-only\" for=\"workspace-path\">Absolute folder path</label><input id=\"workspace-path\" name=\"path\" placeholder=\"/Users/you/Documents/my-work\" required autocomplete=\"off\" spellcheck=\"false\" /><p class=\"pui-field-hint\">Use an existing folder on this computer. Pith will work inside it.</p><div id=\"workspace-error\" class=\"pui-form-error\" role=\"alert\"></div><div class=\"pui-modal-footer\"><button class=\"pui-secondary-button\" type=\"button\" data-close=\"workspace-dialog\">Cancel</button><button class=\"pui-primary-button\" id=\"add-workspace\" type=\"submit\">Add workspace</button></div></form></div>`;\n const input = element.querySelector<HTMLInputElement>('#workspace-path')!; const form = element.querySelector<HTMLFormElement>('#workspace-form')!; const pickButton = element.querySelector<HTMLButtonElement>('#pick-folder')!; const error = element.querySelector<HTMLElement>('#workspace-error')!;\n const update = (state: Readonly<WorkspacePickerState>) => {if (state.error !== undefined) error.textContent = state.error; const button = form.querySelector<HTMLButtonElement>('button[type=\"submit\"]')!; button.disabled = !!state.disabled;}; update(initial); scopeIds(element, options.idPrefix ?? uniqueId('pui-workspace') + '-');\n return {element, input, form, pickButton, update, destroy() {element.remove();}};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"navigation.js","sourceRoot":"","sources":["../../src/navigation/navigation.ts"],"names":[],"mappings":"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","sourcesContent":["import {scopeIds} from '../forms/identity.js';\nimport { Generation, Lifetime, type ActionResult, type UIBlock } from '../core.js';\nimport {dialogHeading, escape, icon, uniqueId} from '../dom.js';\nimport { adoptProductParts } from '../foundations.js';\nimport { installDialogLifecycle } from '../surface.js';\nexport interface NavigationConversation {id: string; title?: string; active: boolean; menuOpen?: boolean; status?: Node | null}\nexport interface NavigationWorkspace {id: string; name: string; path: string; expanded: boolean; selected: boolean; menuOpen?: boolean; children: readonly NavigationConversation[]}\nexport interface WorkspaceNavigationState {groups: readonly NavigationWorkspace[]; empty: 'workspaces' | 'search' | null; disabled?: boolean}\ntype ConversationDOM = {element: HTMLElement; button: HTMLButtonElement; title: HTMLElement; more: HTMLButtonElement; status: Node[]; statusSignature: string; statusSource?: Node | null};\ntype WorkspaceDOM = {element: HTMLElement; heading: HTMLElement; toggle: HTMLButtonElement; title: HTMLElement; more: HTMLButtonElement; create: HTMLButtonElement; children: HTMLElement; empty: HTMLElement};\nexport function createWorkspaceNavigation(initial: WorkspaceNavigationState, options: {element?: HTMLElement; idPrefix?: string; onToggle?: (id: string) => void; onSelect?: (id: string) => void} = {}): UIBlock<WorkspaceNavigationState> {\n const element = options.element || document.createElement('nav');\n if (!options.element) {element.className = 'pui-history-list pui-workspace-navigation'; element.setAttribute('aria-label', 'Workspaces and conversations');}\n const prefix = options.idPrefix ?? uniqueId('pui-nav') + '-';\n const abort = new AbortController(); let destroyed = false;\n const parts = adoptProductParts(element);\n const workspaces = new Map<string, WorkspaceDOM>(); const conversations = new Map<string, ConversationDOM>();\n const emptyWorkspace = document.createElement('button'); emptyWorkspace.type = 'button'; emptyWorkspace.className = 'pui-workspace-item pui-empty-workspace'; emptyWorkspace.dataset.action = 'workspace'; emptyWorkspace.innerHTML = `${icon('folder')}<span>Add a workspace</span>`;\n const emptySearch = document.createElement('p'); emptySearch.className = 'pui-history-empty'; emptySearch.textContent = 'No matching conversations.';\n function createWorkspace(): WorkspaceDOM {\n const root = document.createElement('section'); root.className = 'pui-workspace-group';\n root.innerHTML = `<div class=\"pui-workspace-heading\"><button class=\"pui-workspace-toggle\">${icon('chevron', 'pui-workspace-chevron')}${icon('folder')}<span></span></button><button class=\"pui-quiet-icon pui-workspace-more\" aria-haspopup=\"menu\">${icon('more')}</button><button class=\"pui-quiet-icon pui-workspace-new\" title=\"New conversation\">${icon('compose')}</button></div><div class=\"pui-workspace-children\"></div>`;\n const buttons = root.querySelectorAll<HTMLButtonElement>('button'); const empty = document.createElement('p'); empty.className = 'pui-workspace-empty'; empty.textContent = 'No conversations yet';\n return {element:root,heading:root.firstElementChild as HTMLElement,toggle:buttons[0],title:buttons[0].querySelector('span')!,more:buttons[1],create:buttons[2],children:root.lastElementChild as HTMLElement,empty};\n }\n function createConversation(): ConversationDOM {\n const root = document.createElement('div'); root.className = 'pui-history-row';\n root.innerHTML = `<button class=\"pui-history-item\"><span></span></button><button class=\"pui-quiet-icon pui-history-more\" aria-haspopup=\"menu\">${icon('more')}</button>`;\n const buttons = root.querySelectorAll<HTMLButtonElement>('button'); return {element:root,button:buttons[0],title:buttons[0].querySelector('span')!,more:buttons[1],status:[],statusSignature:''};\n }\n function statusSignature(node?: Node | null): string {\n if (!node) return ''; const holder = document.createElement('div'); holder.append(node.cloneNode(true)); return holder.innerHTML;\n }\n const update = (state: Readonly<WorkspaceNavigationState>) => {\n if (destroyed) return; const currentWorkspaces = new Set<string>(); const currentConversations = new Set<string>(); let groupCursor: Element | null = element.firstElementChild;\n for (const workspace of state.groups) {\n currentWorkspaces.add(workspace.id); let group = workspaces.get(workspace.id); if (!group) {group = createWorkspace(); workspaces.set(workspace.id,group);}\n group.element.setAttribute('aria-label',workspace.name); group.heading.classList.toggle('pui-selected',workspace.selected);\n group.toggle.dataset.toggleWorkspace = workspace.id; group.toggle.setAttribute('aria-expanded',String(workspace.expanded)); group.toggle.setAttribute('aria-controls',prefix+'workspace-children-'+workspace.id); group.toggle.title = workspace.path;\n if (group.title.textContent !== workspace.name) group.title.textContent = workspace.name;\n group.more.id = prefix+'workspace-actions-'+workspace.id; group.more.dataset.workspaceMenu = workspace.id; group.more.setAttribute('aria-label','Actions for workspace '+workspace.name); group.more.setAttribute('aria-expanded',String(!!workspace.menuOpen)); parts.action(group.more).update({disabled: !!state.disabled});\n group.create.dataset.newWorkspace = workspace.id; group.create.setAttribute('aria-label','New conversation in '+workspace.name); parts.action(group.create).update({disabled: !!state.disabled});\n group.children.id = prefix+'workspace-children-'+workspace.id; group.children.hidden = !workspace.expanded; let rowCursor: Element | null = group.children.firstElementChild;\n for (const entry of workspace.children) {\n currentConversations.add(entry.id); let row = conversations.get(entry.id); if (!row) {row = createConversation(); conversations.set(entry.id,row);}\n const title = entry.title || 'Untitled conversation'; row.element.classList.toggle('pui-active',entry.active); row.button.dataset.conversation = entry.id; parts.action(row.button).update({title, disabled: !!state.disabled});\n if (entry.active) row.button.setAttribute('aria-current','page'); else row.button.removeAttribute('aria-current'); if (row.title.textContent !== title) row.title.textContent = title;\n row.more.id = prefix+'conversation-actions-'+entry.id; row.more.dataset.conversationMenu = entry.id; row.more.setAttribute('aria-label','Actions for '+title); row.more.setAttribute('aria-expanded',String(!!entry.menuOpen)); parts.action(row.more).update({disabled: !!state.disabled});\n const signature = entry.status === row.statusSource && entry.status instanceof DocumentFragment && entry.status.childNodes.length === 0 ? row.statusSignature : statusSignature(entry.status);\n row.statusSource = entry.status;\n if (signature !== row.statusSignature) {for (const node of row.status) node.parentNode?.removeChild(node); row.status = entry.status ? entry.status instanceof DocumentFragment ? [...entry.status.childNodes] : [entry.status] : []; row.button.append(...row.status); row.statusSignature = signature;}\n if (row.element !== rowCursor) group.children.insertBefore(row.element,rowCursor); rowCursor = row.element.nextElementSibling;\n }\n if (!workspace.children.length) {if (group.empty.parentElement !== group.children) group.children.append(group.empty);} else group.empty.remove();\n if (group.element !== groupCursor) element.insertBefore(group.element,groupCursor); groupCursor = group.element.nextElementSibling;\n }\n for (const [id,row] of conversations) if (!currentConversations.has(id)) {row.element.remove(); conversations.delete(id);}\n for (const [id,group] of workspaces) if (!currentWorkspaces.has(id)) {group.element.remove(); workspaces.delete(id);}\n if (state.empty === 'workspaces') {if (emptyWorkspace.parentElement !== element) element.append(emptyWorkspace);} else emptyWorkspace.remove();\n if (state.empty === 'search') {if (emptySearch.parentElement !== element) element.append(emptySearch);} else emptySearch.remove();\n parts.update();\n };\n element.addEventListener('click',event => {const target = (event.target as HTMLElement).closest<HTMLButtonElement>('button'); if (target?.disabled) return; if (target?.dataset.toggleWorkspace) options.onToggle?.(target.dataset.toggleWorkspace); if (target?.dataset.conversation) options.onSelect?.(target.dataset.conversation);},{signal:abort.signal});\n update(initial); return {element,update,destroy() {if (destroyed) return; destroyed = true; abort.abort(); parts.destroy(); workspaces.clear(); conversations.clear(); if (!options.element) element.remove();}};\n}\nexport interface RenameConversationState {id: string; title: string; error?: string; disabled?: boolean}\nexport interface RenameConversationDraft {id: string; title: string}\nexport interface RenameConversationOptions {\n idPrefix?: string;\n dialog?: HTMLDialogElement;\n unavailable?: () => boolean;\n onSubmit?: (draft: RenameConversationDraft) => Promise<ActionResult> | ActionResult;\n onSubmitted?: () => void;\n onCancel?: () => void;\n}\nexport interface RenameConversationBlock extends UIBlock<RenameConversationState> {\n readonly input: HTMLInputElement;\n readonly form: HTMLFormElement;\n read(): RenameConversationDraft;\n reset(state: RenameConversationState): void;\n open(state?: RenameConversationState): void;\n close(): void;\n focus(): void;\n}\nexport function createRenameConversation(initial: RenameConversationState, options: RenameConversationOptions = {}): RenameConversationBlock {\n const state = initial; const element = document.createElement('div'); element.className = 'pui-rename-conversation'; element.innerHTML = `${dialogHeading('Rename conversation', 'rename-title', 'rename-dialog', 'CONVERSATION')}<form id=\"rename-form\"><label class=\"pui-field-label\" for=\"conversation-title\">Title</label><input id=\"conversation-title\" name=\"title\" value=\"${escape(state.title)}\" required autocomplete=\"off\" /><div id=\"rename-error\" class=\"pui-form-error\" role=\"alert\"></div><div class=\"pui-modal-footer\"><button type=\"button\" class=\"pui-secondary-button\" data-close=\"rename-dialog\">Cancel</button><button type=\"submit\" class=\"pui-primary-button\" data-idle-action data-idle-conversation=\"${escape(state.id)}\">Save title</button></div></form>`;\n const input = element.querySelector<HTMLInputElement>('#conversation-title')!; const form = element.querySelector<HTMLFormElement>('#rename-form')!; const error = element.querySelector<HTMLElement>('#rename-error')!;\n scopeIds(element, options.idPrefix ?? uniqueId('pui-rename') + '-');\n const parts = adoptProductParts(element); const control = parts.control(input); const feedback = parts.feedback(error);\n const button = form.querySelector<HTMLButtonElement>('button[type=\"submit\"]')!; const action = parts.action(button);\n const generation = new Generation(); const life = new Lifetime();\n let current = initial; let targetId = initial.id; let pending = false; let destroyed = false;\n const sync = () => {action.update({disabled: !!current.disabled || !!options.unavailable?.(), pending}); feedback.update({message: current.error || '', tone: 'error'});};\n const lifecycle = options.dialog ? installDialogLifecycle(options.dialog, {onOpen() {generation.invalidate(); pending = false; sync();}, onClose() {generation.invalidate(); pending = false; sync();}}) : undefined;\n const update = (next: Readonly<RenameConversationState>) => {if (destroyed) return; current = {...next, error: next.error ?? current.error}; sync();};\n const reset = (next: RenameConversationState) => {if (destroyed) return; generation.invalidate(); pending = false; targetId = next.id; current = next; control.reset(next.title); button.dataset.idleConversation = next.id; sync();};\n const close = () => {generation.invalidate(); pending = false; lifecycle?.close(); sync();};\n if (options.onSubmit) life.listen(form, 'submit', (async event => {\n event.preventDefault();\n const title = control.getValue().trim();\n if (destroyed || pending || current.disabled || options.unavailable?.() || !title) return;\n const seq = generation.next(); pending = true; current = {...current, error: ''}; sync();\n let result: ActionResult;\n try {result = await options.onSubmit!({id: targetId, title});}\n catch (reason) {result = {ok: false, error: reason instanceof Error ? reason.message : String(reason)};}\n if (!generation.current(seq) || (options.dialog && !options.dialog.open)) return;\n pending = false;\n if (result.ok) {lifecycle?.close(); options.onSubmitted?.();}\n else current = {...current, error: result.error};\n sync();\n }) as EventListener);\n life.listen(element, 'click', (event => {if ((event.target as Element).closest('[data-close]')) {generation.invalidate(); pending = false; options.onCancel?.(); lifecycle?.close();}}) as EventListener);\n update(initial);\n return {element, input, form, update, read: () => ({id: targetId, title: control.getValue()}), reset, open(next) {if (next) reset(next); lifecycle?.open(); input.select();}, close, focus() {input.select();}, destroy() {if (destroyed) return; destroyed = true; generation.destroy(); life.destroy(); lifecycle?.close(); lifecycle?.destroy(); parts.destroy(); element.remove();}};\n}\nexport interface WorkspacePickerState {workspaces: readonly {id: string; name: string; path: string}[]; error?: string; disabled?: boolean}\nexport interface WorkspacePickerOptions {\n idPrefix?: string;\n dialog?: HTMLDialogElement;\n unavailable?: () => boolean;\n onSubmit?: (path: string) => Promise<ActionResult> | ActionResult;\n onPick?: () => Promise<{path?: string; error?: string}>;\n onSelect?: (id: string) => void;\n onSubmitted?: () => void;\n onCancel?: () => void;\n}\nexport interface WorkspacePickerBlock extends UIBlock<WorkspacePickerState> {\n readonly input: HTMLInputElement;\n readonly form: HTMLFormElement;\n readonly pickButton: HTMLButtonElement;\n read(): {path: string};\n reset(path?: string): void;\n open(): void;\n close(): void;\n focus(): void;\n}\nexport function createWorkspacePicker(initial: WorkspacePickerState, options: WorkspacePickerOptions = {}): WorkspacePickerBlock {\n const state = initial; const element = document.createElement('div'); element.className = 'pui-workspace-picker'; element.innerHTML = `${dialogHeading('Workspaces', 'workspace-title', 'workspace-dialog', 'A PLACE TO WORK')}<p class=\"pui-modal-description\">Choose a local folder. Conversations belong to a workspace, so Pith knows where to read and create files.</p><div class=\"pui-modal-workspaces\">${state.workspaces.map((entry) => `<button class=\"pui-modal-workspace\" data-modal-workspace=\"${escape(entry.id)}\">${icon('folder')}<span><strong>${escape(entry.name)}</strong><small>${escape(entry.path)}</small></span>${icon('chevron')}</button>`).join('')}</div><div class=\"pui-workspace-add\"><button class=\"pui-picker-button\" id=\"pick-folder\" type=\"button\">${icon('folder')}Choose a folder…</button><div class=\"pui-path-divider\"><span>or enter a folder path</span></div><form id=\"workspace-form\"><label class=\"pui-sr-only\" for=\"workspace-path\">Absolute folder path</label><input id=\"workspace-path\" name=\"path\" placeholder=\"/Users/you/Documents/my-work\" required autocomplete=\"off\" spellcheck=\"false\" /><p class=\"pui-field-hint\">Use an existing folder on this computer. Pith will work inside it.</p><div id=\"workspace-error\" class=\"pui-form-error\" role=\"alert\"></div><div class=\"pui-modal-footer\"><button class=\"pui-secondary-button\" type=\"button\" data-close=\"workspace-dialog\">Cancel</button><button class=\"pui-primary-button\" id=\"add-workspace\" type=\"submit\">Add workspace</button></div></form></div>`;\n const input = element.querySelector<HTMLInputElement>('#workspace-path')!; const form = element.querySelector<HTMLFormElement>('#workspace-form')!; const pickButton = element.querySelector<HTMLButtonElement>('#pick-folder')!; const error = element.querySelector<HTMLElement>('#workspace-error')!;\n scopeIds(element, options.idPrefix ?? uniqueId('pui-workspace') + '-');\n const list = element.querySelector<HTMLElement>('.pui-modal-workspaces')!;\n const rows = new Map([...list.querySelectorAll<HTMLButtonElement>('[data-modal-workspace]')].map(row => [row.dataset.modalWorkspace!, row]));\n const parts = adoptProductParts(element); const control = parts.control(input); const feedback = parts.feedback(error);\n const submitButton = form.querySelector<HTMLButtonElement>('button[type=\"submit\"]')!;\n const generation = new Generation(); const life = new Lifetime();\n let current = initial; let pending = false; let destroyed = false;\n const sync = () => {const disabled = !!current.disabled || !!options.unavailable?.(); parts.action(submitButton).update({disabled, pending}); parts.action(pickButton).update({disabled, pending}); for (const row of rows.values()) parts.action(row).update({disabled: disabled || pending}); feedback.update({message: current.error || '', tone: 'error'});};\n const lifecycle = options.dialog ? installDialogLifecycle(options.dialog, {onOpen() {generation.invalidate(); pending = false; sync();}, onClose() {generation.invalidate(); pending = false; sync();}}) : undefined;\n const update = (next: Readonly<WorkspacePickerState>) => {\n if (destroyed) return; current = {...next, error: next.error ?? current.error};\n const keep = new Set(next.workspaces.map(entry => entry.id));\n for (const [id, row] of rows) if (!keep.has(id)) {row.remove(); rows.delete(id);}\n let cursor = list.firstElementChild;\n for (const entry of next.workspaces) {\n let row = rows.get(entry.id);\n if (!row) {row = document.createElement('button'); row.type = 'button'; row.className = 'pui-modal-workspace'; row.dataset.modalWorkspace = entry.id; row.innerHTML = `${icon('folder')}<span><strong></strong><small></small></span>${icon('chevron')}`; rows.set(entry.id, row);}\n const name = row.querySelector('strong')!; const path = row.querySelector('small')!;\n if (name.textContent !== entry.name) name.textContent = entry.name;\n if (path.textContent !== entry.path) path.textContent = entry.path;\n if (cursor !== row) list.insertBefore(row, cursor); cursor = row.nextElementSibling;\n }\n parts.update(); sync();\n };\n const submit = async (path: string, owner?: number): Promise<void> => {\n if (!options.onSubmit || destroyed || (pending && owner === undefined) || current.disabled || options.unavailable?.() || !path.trim()) return;\n const seq = owner ?? generation.next(); pending = true; current = {...current, error: ''}; sync();\n let result: ActionResult;\n try {result = await options.onSubmit(path.trim());}\n catch (reason) {result = {ok: false, error: reason instanceof Error ? reason.message : String(reason)};}\n if (!generation.current(seq) || (options.dialog && !options.dialog.open)) return;\n pending = false;\n if (result.ok) {lifecycle?.close(); options.onSubmitted?.();}\n else current = {...current, error: result.error};\n sync();\n };\n if (options.onSubmit) life.listen(form, 'submit', (event => {event.preventDefault(); void submit(control.getValue());}) as EventListener);\n if (options.onPick) life.listen(pickButton, 'click', (async () => {\n if (destroyed || pending || current.disabled || options.unavailable?.()) return;\n const seq = generation.next(); pending = true; current = {...current, error: ''}; sync();\n let result: {path?: string; error?: string};\n try {result = await options.onPick!();}\n catch (reason) {result = {error: `${reason instanceof Error ? reason.message : String(reason)} You can enter the path below.`};}\n if (!generation.current(seq) || (options.dialog && !options.dialog.open)) return;\n if (result.error) {pending = false; current = {...current, error: result.error}; sync(); control.focus();}\n else if (result.path) {control.reset(result.path); if (options.onSubmit) await submit(result.path, seq); else {pending = false; sync();}}\n else {pending = false; sync();}\n }) as EventListener);\n life.listen(element, 'click', (event => {\n const target = event.target as Element;\n const selection = target.closest<HTMLButtonElement>('[data-modal-workspace]');\n if (selection && options.onSelect) {event.stopPropagation(); if (!pending && !current.disabled && !options.unavailable?.()) options.onSelect(selection.dataset.modalWorkspace!);}\n if (target.closest('[data-close]')) {generation.invalidate(); pending = false; options.onCancel?.(); lifecycle?.close();}\n }) as EventListener);\n update(initial);\n return {element, input, form, pickButton, update, read: () => ({path: control.getValue()}), reset(path = '') {if (destroyed) return; generation.invalidate(); pending = false; current = {...current, error: ''}; control.reset(path); sync();}, open() {lifecycle?.open();}, close() {generation.invalidate(); pending = false; lifecycle?.close(); sync();}, focus: control.focus, destroy() {if (destroyed) return; destroyed = true; generation.destroy(); life.destroy(); lifecycle?.close(); lifecycle?.destroy(); parts.destroy(); element.remove();}};\n}\n"]}
|
package/dist/primitives.d.ts
CHANGED
|
@@ -7,6 +7,8 @@ export interface ButtonState {
|
|
|
7
7
|
pending?: boolean;
|
|
8
8
|
icon?: string;
|
|
9
9
|
title?: string;
|
|
10
|
+
/** Secondary product action, including the accepted compact application style. */
|
|
11
|
+
appearance?: 'standard' | 'secondary';
|
|
10
12
|
}
|
|
11
13
|
export interface ButtonOptions extends ButtonState {
|
|
12
14
|
type?: 'button' | 'submit' | 'reset';
|
|
@@ -264,6 +266,7 @@ export interface ConfirmBlock extends UIBlock<ConfirmState> {
|
|
|
264
266
|
readonly cancelButton: HTMLButtonElement;
|
|
265
267
|
open(state?: ConfirmState): void;
|
|
266
268
|
close(): void;
|
|
269
|
+
refreshAvailability(): void;
|
|
267
270
|
}
|
|
268
271
|
export declare function createConfirmDialog(options: ConfirmState & {
|
|
269
272
|
dialog?: HTMLDialogElement;
|
package/dist/primitives.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../src/primitives.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../src/primitives.ts"],"names":[],"mappings":"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"}
|