@design.estate/dees-catalog 12.4.0 → 13.0.0

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 (75) hide show
  1. package/dist_bundle/bundle.js +2603 -1201
  2. package/dist_bundle/bundle.js.map +1 -1
  3. package/dist_ts_web/00_commitinfo_data.js +3 -3
  4. package/dist_ts_web/elements/00group-chart/dees-chart-area/component.d.ts +26 -16
  5. package/dist_ts_web/elements/00group-chart/dees-chart-area/component.js +161 -72
  6. package/dist_ts_web/elements/00group-chart/dees-chart-area/realtime-updates.d.ts +2 -1
  7. package/dist_ts_web/elements/00group-chart/dees-chart-area/realtime-updates.js +3 -2
  8. package/dist_ts_web/elements/00group-chart/dees-chart-area/template.js +4 -3
  9. package/dist_ts_web/elements/00group-input/dees-input-dropdown/dees-input-dropdown-popup.d.ts +13 -0
  10. package/dist_ts_web/elements/00group-input/dees-input-dropdown/dees-input-dropdown-popup.js +76 -7
  11. package/dist_ts_web/elements/00group-input/dees-input-reference/dees-input-reference.d.ts +42 -0
  12. package/dist_ts_web/elements/00group-input/dees-input-reference/dees-input-reference.demo.d.ts +1 -0
  13. package/dist_ts_web/elements/00group-input/dees-input-reference/dees-input-reference.demo.js +8 -0
  14. package/dist_ts_web/elements/00group-input/dees-input-reference/dees-input-reference.js +347 -0
  15. package/dist_ts_web/elements/00group-input/dees-input-reference/document.d.ts +5 -0
  16. package/dist_ts_web/elements/00group-input/dees-input-reference/document.js +45 -0
  17. package/dist_ts_web/elements/00group-input/dees-input-reference/index.d.ts +2 -0
  18. package/dist_ts_web/elements/00group-input/dees-input-reference/index.js +3 -0
  19. package/dist_ts_web/elements/00group-input/dees-input-reference/interfaces.d.ts +16 -0
  20. package/dist_ts_web/elements/00group-input/dees-input-reference/interfaces.js +2 -0
  21. package/dist_ts_web/elements/00group-input/index.d.ts +1 -0
  22. package/dist_ts_web/elements/00group-input/index.js +2 -1
  23. package/dist_ts_web/elements/00group-kanban/dees-kanban/dees-kanban.d.ts +58 -0
  24. package/dist_ts_web/elements/00group-kanban/dees-kanban/dees-kanban.demo.d.ts +1 -0
  25. package/dist_ts_web/elements/00group-kanban/dees-kanban/dees-kanban.demo.js +9 -0
  26. package/dist_ts_web/elements/00group-kanban/dees-kanban/dees-kanban.js +536 -0
  27. package/dist_ts_web/elements/00group-kanban/dees-kanban-card/dees-kanban-card.d.ts +20 -0
  28. package/dist_ts_web/elements/00group-kanban/dees-kanban-card/dees-kanban-card.js +157 -0
  29. package/dist_ts_web/elements/00group-kanban/dees-kanban-column/dees-kanban-column.d.ts +23 -0
  30. package/dist_ts_web/elements/00group-kanban/dees-kanban-column/dees-kanban-column.js +192 -0
  31. package/dist_ts_web/elements/00group-kanban/dees-kanban-discussion/dees-kanban-discussion.d.ts +24 -0
  32. package/dist_ts_web/elements/00group-kanban/dees-kanban-discussion/dees-kanban-discussion.js +211 -0
  33. package/dist_ts_web/elements/00group-kanban/dees-kanban-ticket-detail/dees-kanban-ticket-detail.d.ts +35 -0
  34. package/dist_ts_web/elements/00group-kanban/dees-kanban-ticket-detail/dees-kanban-ticket-detail.js +269 -0
  35. package/dist_ts_web/elements/00group-kanban/index.d.ts +6 -0
  36. package/dist_ts_web/elements/00group-kanban/index.js +7 -0
  37. package/dist_ts_web/elements/00group-kanban/interfaces.d.ts +84 -0
  38. package/dist_ts_web/elements/00group-kanban/interfaces.js +2 -0
  39. package/dist_ts_web/elements/00group-kanban/kanban.demodata.d.ts +7 -0
  40. package/dist_ts_web/elements/00group-kanban/kanban.demodata.js +60 -0
  41. package/dist_ts_web/elements/00group-kanban/kanban.helpers.d.ts +6 -0
  42. package/dist_ts_web/elements/00group-kanban/kanban.helpers.js +11 -0
  43. package/dist_ts_web/elements/00group-kanban/kanban.styles.d.ts +1 -0
  44. package/dist_ts_web/elements/00group-kanban/kanban.styles.js +18 -0
  45. package/dist_ts_web/elements/index.d.ts +1 -0
  46. package/dist_ts_web/elements/index.js +2 -1
  47. package/dist_ts_web/services/DeesServiceLibLoader.d.ts +1 -0
  48. package/dist_ts_web/services/DeesServiceLibLoader.js +2 -1
  49. package/package.json +1 -1
  50. package/readme.md +165 -1
  51. package/scripts/check-packed-consumer.mjs +1 -1
  52. package/ts_web/00_commitinfo_data.ts +3 -3
  53. package/ts_web/elements/00group-chart/dees-chart-area/component.ts +195 -79
  54. package/ts_web/elements/00group-chart/dees-chart-area/realtime-updates.ts +4 -2
  55. package/ts_web/elements/00group-chart/dees-chart-area/template.ts +3 -2
  56. package/ts_web/elements/00group-input/dees-input-dropdown/dees-input-dropdown-popup.ts +40 -5
  57. package/ts_web/elements/00group-input/dees-input-reference/dees-input-reference.demo.ts +9 -0
  58. package/ts_web/elements/00group-input/dees-input-reference/dees-input-reference.ts +221 -0
  59. package/ts_web/elements/00group-input/dees-input-reference/document.ts +38 -0
  60. package/ts_web/elements/00group-input/dees-input-reference/index.ts +2 -0
  61. package/ts_web/elements/00group-input/dees-input-reference/interfaces.ts +8 -0
  62. package/ts_web/elements/00group-input/index.ts +1 -0
  63. package/ts_web/elements/00group-kanban/dees-kanban/dees-kanban.demo.ts +9 -0
  64. package/ts_web/elements/00group-kanban/dees-kanban/dees-kanban.ts +315 -0
  65. package/ts_web/elements/00group-kanban/dees-kanban-card/dees-kanban-card.ts +58 -0
  66. package/ts_web/elements/00group-kanban/dees-kanban-column/dees-kanban-column.ts +60 -0
  67. package/ts_web/elements/00group-kanban/dees-kanban-discussion/dees-kanban-discussion.ts +81 -0
  68. package/ts_web/elements/00group-kanban/dees-kanban-ticket-detail/dees-kanban-ticket-detail.ts +114 -0
  69. package/ts_web/elements/00group-kanban/index.ts +6 -0
  70. package/ts_web/elements/00group-kanban/interfaces.ts +67 -0
  71. package/ts_web/elements/00group-kanban/kanban.demodata.ts +56 -0
  72. package/ts_web/elements/00group-kanban/kanban.helpers.ts +13 -0
  73. package/ts_web/elements/00group-kanban/kanban.styles.ts +18 -0
  74. package/ts_web/elements/index.ts +1 -0
  75. package/ts_web/services/DeesServiceLibLoader.ts +2 -0
@@ -0,0 +1,84 @@
1
+ import type { TReferenceContent } from '../00group-input/dees-input-reference/interfaces.js';
2
+ export type TKanbanTicketKind = 'epic' | 'task' | 'subtask';
3
+ export type TKanbanPriority = 'none' | 'low' | 'normal' | 'high' | 'urgent';
4
+ export interface IKanbanPerson {
5
+ id: string;
6
+ name: string;
7
+ }
8
+ export interface IKanbanColumn {
9
+ id: string;
10
+ title: string; /** Marks completed subtasks. */
11
+ done?: boolean;
12
+ }
13
+ export interface IKanbanTicket {
14
+ id: string;
15
+ key: string;
16
+ kind: TKanbanTicketKind;
17
+ title: string;
18
+ description?: string;
19
+ /** Task -> epic, subtask -> task. Epics have no parent. */
20
+ parentId?: string;
21
+ columnId: string;
22
+ order: number;
23
+ priority?: TKanbanPriority;
24
+ assignee?: IKanbanPerson;
25
+ labels?: string[];
26
+ /** UI capabilities; the provider must enforce authorization independently. */
27
+ permissions?: {
28
+ edit?: boolean;
29
+ move?: boolean;
30
+ comment?: boolean;
31
+ createChild?: boolean;
32
+ };
33
+ }
34
+ export interface IKanbanComment {
35
+ id: string;
36
+ ticketId: string;
37
+ author: IKanbanPerson;
38
+ /** ISO 8601 timestamp. */
39
+ createdAt: string;
40
+ body: TReferenceContent;
41
+ }
42
+ export interface IKanbanTicketChanges {
43
+ title?: string;
44
+ description?: string;
45
+ priority?: TKanbanPriority;
46
+ assignee?: IKanbanPerson | null;
47
+ parentId?: string | null;
48
+ }
49
+ export interface IKanbanTicketDraft {
50
+ title: string;
51
+ description: string;
52
+ priority: TKanbanPriority;
53
+ assigneeId: string;
54
+ parentId: string;
55
+ }
56
+ export interface IKanbanMove {
57
+ ticketId: string;
58
+ columnId: string;
59
+ /** Omitted means append. Provider assigns ordering atomically with the move. */
60
+ beforeTicketId?: string;
61
+ }
62
+ export interface IKanbanCreate {
63
+ kind: TKanbanTicketKind;
64
+ title: string;
65
+ columnId: string;
66
+ parentId?: string;
67
+ }
68
+ /** Missing mutation callbacks make the corresponding controls read-only. AbortSignals cancel obsolete reads. */
69
+ export interface IKanbanProvider {
70
+ getTicket?: (id: string, signal: AbortSignal) => Promise<IKanbanTicket>;
71
+ searchTickets?: (query: string, signal: AbortSignal) => Promise<IKanbanTicket[]>;
72
+ loadComments?: (ticketId: string, signal: AbortSignal) => Promise<IKanbanComment[]>;
73
+ addComment?: (input: {
74
+ ticketId: string;
75
+ body: TReferenceContent;
76
+ }) => Promise<IKanbanComment>;
77
+ updateTicket?: (input: {
78
+ ticketId: string;
79
+ changes: IKanbanTicketChanges;
80
+ }) => Promise<IKanbanTicket>;
81
+ /** Return all records whose order or column changed. */
82
+ moveTicket?: (input: IKanbanMove) => Promise<IKanbanTicket[]>;
83
+ createTicket?: (input: IKanbanCreate) => Promise<IKanbanTicket>;
84
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWthbmJhbi9pbnRlcmZhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
@@ -0,0 +1,7 @@
1
+ import type { IKanbanColumn, IKanbanPerson, IKanbanProvider, IKanbanTicket } from './interfaces.js';
2
+ export declare const kanbanDemoPeople: IKanbanPerson[];
3
+ export declare const kanbanDemoColumns: IKanbanColumn[];
4
+ export declare const createKanbanDemo: () => {
5
+ tickets: IKanbanTicket[];
6
+ provider: IKanbanProvider;
7
+ };
@@ -0,0 +1,60 @@
1
+ export const kanbanDemoPeople = [{ id: 'mara', name: 'Mara Chen' }, { id: 'jonas', name: 'Jonas Berg' }, { id: 'alex', name: 'Alex Rivera' }];
2
+ export const kanbanDemoColumns = [{ id: 'backlog', title: 'Backlog' }, { id: 'progress', title: 'In progress' }, { id: 'review', title: 'In review' }, { id: 'done', title: 'Done', done: true }];
3
+ export const createKanbanDemo = () => {
4
+ let tickets = [
5
+ { id: 'epic-1', key: 'CAT-100', kind: 'epic', title: 'A calmer workspace', description: 'Make daily work feel focused, connected and easy to navigate.', columnId: 'progress', order: 0 },
6
+ { id: 'epic-2', key: 'CAT-200', kind: 'epic', title: 'Built for teams', description: 'Keep everyone close to the work and the decisions behind it.', columnId: 'progress', order: 1 },
7
+ { id: 'task-1', key: 'CAT-101', kind: 'task', title: 'Design the project overview', description: 'Give each project a clear home. Surface the next action, recent activity and open questions.', parentId: 'epic-1', columnId: 'backlog', order: 0, priority: 'normal', assignee: kanbanDemoPeople[0], labels: ['Design'] },
8
+ { id: 'task-2', key: 'CAT-102', kind: 'task', title: 'Connect related tickets', description: 'Type #_ in a comment to search for another ticket. Keep the reference connected when its title changes.', parentId: 'epic-2', columnId: 'progress', order: 0, priority: 'high', assignee: kanbanDemoPeople[1], labels: ['Collaboration'] },
9
+ { id: 'task-3', key: 'CAT-103', kind: 'task', title: 'Make every action keyboard accessible', description: 'Support focus, selection, navigation and moving tickets without a mouse.', parentId: 'epic-1', columnId: 'progress', order: 1, priority: 'normal', assignee: kanbanDemoPeople[2], labels: ['Accessibility'] },
10
+ { id: 'task-4', key: 'CAT-104', kind: 'task', title: 'Review the ticket detail experience', description: 'Check hierarchy navigation, discussion drafts and small-screen layouts.', parentId: 'epic-2', columnId: 'review', order: 0, priority: 'low', assignee: kanbanDemoPeople[0] },
11
+ { id: 'task-5', key: 'CAT-105', kind: 'task', title: 'Unify status and priority styles', description: 'Use shared catalog tokens in light and dark themes.', parentId: 'epic-1', columnId: 'done', order: 0, assignee: kanbanDemoPeople[2], labels: ['Foundations'] },
12
+ { id: 'sub-1', key: 'CAT-106', kind: 'subtask', title: 'Anchor search to the cursor', parentId: 'task-2', columnId: 'done', order: 0, assignee: kanbanDemoPeople[1] },
13
+ { id: 'sub-2', key: 'CAT-107', kind: 'subtask', title: 'Restore focus after selection', parentId: 'task-2', columnId: 'progress', order: 1, assignee: kanbanDemoPeople[1] },
14
+ { id: 'sub-3', key: 'CAT-108', kind: 'subtask', title: 'Check arrow-key navigation', parentId: 'task-3', columnId: 'done', order: 0, assignee: kanbanDemoPeople[2] },
15
+ ];
16
+ let comments = [
17
+ { id: 'comment-1', ticketId: 'task-2', author: kanbanDemoPeople[0], createdAt: '2026-09-18T09:30:00Z', body: [{ type: 'text', text: 'The picker should feel like part of the conversation. Can we check this together with ' }, { type: 'reference', id: 'task-3', label: '#CAT-103 Keyboard accessibility' }, { type: 'text', text: '?' }] },
18
+ { id: 'comment-2', ticketId: 'task-2', author: kanbanDemoPeople[1], createdAt: '2026-09-18T09:42:00Z', body: [{ type: 'text', text: 'Yes. Search receives focus immediately, and choosing a ticket returns you to exactly where you were writing.' }] },
19
+ ];
20
+ let nextKey = 300;
21
+ // Demo-only in-memory provider. Applications persist through their own authorized APIs.
22
+ const provider = {
23
+ getTicket: async (id) => {
24
+ const ticket = tickets.find(item => item.id === id);
25
+ if (!ticket)
26
+ throw new Error('Ticket not found.');
27
+ return ticket;
28
+ },
29
+ searchTickets: async (query) => tickets.filter(ticket => `${ticket.key} ${ticket.title}`.toLowerCase().includes(query.toLowerCase())),
30
+ loadComments: async (id) => comments.filter(comment => comment.ticketId === id),
31
+ addComment: async (input) => {
32
+ const comment = { ...input, id: crypto.randomUUID(), author: kanbanDemoPeople[0], createdAt: new Date().toISOString() };
33
+ comments = [...comments, comment];
34
+ return comment;
35
+ },
36
+ updateTicket: async ({ ticketId, changes }) => {
37
+ const previous = tickets.find(ticket => ticket.id === ticketId);
38
+ const ticket = { ...previous, ...changes, assignee: changes.assignee === null ? undefined : changes.assignee ?? previous.assignee,
39
+ parentId: changes.parentId === null ? undefined : changes.parentId ?? previous.parentId };
40
+ tickets = tickets.map(item => item.id === ticketId ? ticket : item);
41
+ return ticket;
42
+ },
43
+ moveTicket: async ({ ticketId, columnId, beforeTicketId }) => {
44
+ const ticket = tickets.find(item => item.id === ticketId);
45
+ const destination = tickets.filter(item => item.id !== ticketId && item.columnId === columnId && item.kind === ticket.kind).sort((a, b) => a.order - b.order);
46
+ const index = beforeTicketId ? destination.findIndex(item => item.id === beforeTicketId) : destination.length;
47
+ destination.splice(index < 0 ? destination.length : index, 0, { ...ticket, columnId });
48
+ const changed = destination.map((item, order) => ({ ...item, order }));
49
+ tickets = tickets.map(item => changed.find(record => record.id === item.id) ?? item);
50
+ return changed;
51
+ },
52
+ createTicket: async (input) => {
53
+ const ticket = { ...input, id: crypto.randomUUID(), key: `CAT-${nextKey++}`, order: tickets.length };
54
+ tickets = [...tickets, ticket];
55
+ return ticket;
56
+ },
57
+ };
58
+ return { tickets, provider };
59
+ };
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2FuYmFuLmRlbW9kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAta2FuYmFuL2thbmJhbi5kZW1vZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBb0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDO0FBQy9KLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFvQixDQUFDLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ25OLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLEdBQTRELEVBQUU7SUFDNUYsSUFBSSxPQUFPLEdBQW9CO1FBQzdCLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFLFdBQVcsRUFBRSwrREFBK0QsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7UUFDekwsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFB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QUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLFFBQVE7Z0JBQzlJLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM1RixPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQUMsT0FBTyxNQUFNLENBQUM7UUFDckYsQ0FBQztRQUNELFVBQVUsRUFBRSxLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUU7WUFDM0QsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFFLENBQUM7WUFDM0QsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlKLE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFDOUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUN2RixNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN2RSxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztZQUFDLE9BQU8sT0FBTyxDQUFDO1FBQ3ZHLENBQUM7UUFDRCxZQUFZLEVBQUUsS0FBSyxFQUFDLEtBQUssRUFBQyxFQUFFO1lBQzFCLE1BQU0sTUFBTSxHQUFrQixFQUFFLEdBQUcsS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8sT0FBTyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3BILE9BQU8sR0FBRyxDQUFDLEdBQUcsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQUMsT0FBTyxNQUFNLENBQUM7UUFDaEQsQ0FBQztLQUNGLENBQUM7SUFDRixPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxDQUFDO0FBQy9CLENBQUMsQ0FBQyJ9
@@ -0,0 +1,6 @@
1
+ import type { IKanbanTicket, IKanbanTicketDraft } from './interfaces.js';
2
+ export declare const sortKanbanTickets: (tickets: readonly IKanbanTicket[]) => IKanbanTicket[];
3
+ export declare const ticketLabel: (ticket: IKanbanTicket) => string;
4
+ export declare const ticketDraft: (ticket: IKanbanTicket) => IKanbanTicketDraft;
5
+ export declare const kanbanEvent: <T>(owner: HTMLElement, name: string, detail: T) => void;
6
+ export declare const kanbanError: (error: unknown) => string;
@@ -0,0 +1,11 @@
1
+ export const sortKanbanTickets = (tickets) => [...tickets].sort((a, b) => a.order - b.order || a.id.localeCompare(b.id));
2
+ export const ticketLabel = (ticket) => `#${ticket.key} ${ticket.title}`;
3
+ export const ticketDraft = (ticket) => ({
4
+ title: ticket.title, description: ticket.description ?? '', priority: ticket.priority ?? 'none',
5
+ assigneeId: ticket.assignee?.id ?? '', parentId: ticket.parentId ?? '',
6
+ });
7
+ export const kanbanEvent = (owner, name, detail) => {
8
+ owner.dispatchEvent(new CustomEvent(name, { detail, bubbles: true, composed: true }));
9
+ };
10
+ export const kanbanError = (error) => error instanceof Error ? error.message : String(error);
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2FuYmFuLmhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90c193ZWIvZWxlbWVudHMvMDBncm91cC1rYW5iYW4va2FuYmFuLmhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxPQUFpQyxFQUFtQixFQUFFLENBQ3RGLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0UsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBcUIsRUFBVSxFQUFFLENBQUMsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMvRixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxNQUFxQixFQUFzQixFQUFFLENBQUMsQ0FBQztJQUN6RSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVcsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTTtJQUMvRixVQUFVLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxJQUFJLEVBQUU7Q0FDdkUsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUksS0FBa0IsRUFBRSxJQUFZLEVBQUUsTUFBUyxFQUFRLEVBQUU7SUFDbEYsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3hGLENBQUMsQ0FBQztBQUNGLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQWMsRUFBVSxFQUFFLENBQUMsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDIn0=
@@ -0,0 +1 @@
1
+ export declare const kanbanStyles: import("@design.estate/dees-element").CSSResult[];
@@ -0,0 +1,18 @@
1
+ import { css, cssManager } from '@design.estate/dees-element';
2
+ import { themeDefaultStyles } from '../00theme.js';
3
+ export const kanbanStyles = [themeDefaultStyles, cssManager.defaultStyles, css `
4
+ :host { display: block; min-width: 0; font-family: var(--dees-font-family); color: var(--dees-color-text-primary); font-size: var(--dees-font-body-size); }
5
+ * { box-sizing: border-box; }
6
+ h2, h3, p { margin: 0; }
7
+ .muted { color: var(--dees-color-text-secondary); }
8
+ .caption { font-size: var(--dees-font-footnote-size); color: var(--dees-color-text-secondary); }
9
+ .error { color: var(--dees-color-text-error); padding: 10px 0; font-size: var(--dees-font-footnote-size); }
10
+ .empty { padding: 24px 12px; text-align: center; color: var(--dees-color-text-secondary); font-size: var(--dees-font-footnote-size); }
11
+ .row { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
12
+ .spacer { flex: 1; }
13
+ button.link { border: 0; background: transparent; font: inherit; color: var(--dees-color-link); padding: 2px 0; text-align: left; cursor: pointer; overflow-wrap: anywhere; }
14
+ button:focus-visible, summary:focus-visible { outline: 2px solid var(--dees-color-focus-ring); outline-offset: 3px; border-radius: var(--dees-radius-sm); }
15
+ dees-icon { font-size: 16px; }
16
+ .badge { display: inline-flex; align-items: center; gap: 4px; background: var(--dees-color-badge-default-bg); padding: 3px 7px; border-radius: var(--dees-radius-sm); font-size: var(--dees-font-caption1-size); color: var(--dees-color-text-secondary); }
17
+ `];
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2FuYmFuLnN0eWxlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWthbmJhbi9rYW5iYW4uc3R5bGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLGtCQUFrQixFQUFFLFVBQVUsQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFBOzs7Ozs7Ozs7Ozs7OztDQWM3RSxDQUFDLENBQUMifQ==
@@ -8,6 +8,7 @@ export * from './00group-dataview/index.js';
8
8
  export * from './00group-feedback/index.js';
9
9
  export * from './00group-form/index.js';
10
10
  export * from './00group-harness/index.js';
11
+ export * from './00group-kanban/index.js';
11
12
  export * from './00group-input/index.js';
12
13
  export * from './00group-layout/index.js';
13
14
  export * from './00group-media/index.js';
@@ -9,6 +9,7 @@ export * from './00group-dataview/index.js';
9
9
  export * from './00group-feedback/index.js';
10
10
  export * from './00group-form/index.js';
11
11
  export * from './00group-harness/index.js';
12
+ export * from './00group-kanban/index.js';
12
13
  export * from './00group-input/index.js';
13
14
  export * from './00group-layout/index.js';
14
15
  export * from './00group-media/index.js';
@@ -17,4 +18,4 @@ export * from './00group-runtime/index.js';
17
18
  export * from './00group-simple/index.js';
18
19
  export * from './00group-utility/index.js';
19
20
  export * from './00group-workspace/index.js';
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c193ZWIvZWxlbWVudHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGNBQWMsQ0FBQztBQUU3QixtQkFBbUI7QUFDbkIsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsOEJBQThCLENBQUMifQ==
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c193ZWIvZWxlbWVudHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGNBQWMsQ0FBQztBQUU3QixtQkFBbUI7QUFDbkIsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyw4QkFBOEIsQ0FBQyJ9
@@ -95,6 +95,7 @@ export interface IEchartsBundle {
95
95
  */
96
96
  export interface ITiptapBundle {
97
97
  Editor: typeof Editor;
98
+ Node: typeof import('@tiptap/core').Node;
98
99
  StarterKit: {
99
100
  configure: (options?: Partial<StarterKitOptions>) => any;
100
101
  };
@@ -283,6 +283,7 @@ export class DeesServiceLibLoader {
283
283
  ]);
284
284
  this.tiptapLib = {
285
285
  Editor: coreModule.Editor,
286
+ Node: coreModule.Node,
286
287
  StarterKit: starterKitModule.default || starterKitModule.StarterKit,
287
288
  Underline: underlineModule.default || underlineModule.Underline,
288
289
  TextAlign: textAlignModule.default || textAlignModule.TextAlign,
@@ -333,4 +334,4 @@ export class DeesServiceLibLoader {
333
334
  }
334
335
  }
335
336
  }
336
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVlc1NlcnZpY2VMaWJMb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c193ZWIvc2VydmljZXMvRGVlc1NlcnZpY2VMaWJMb2FkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUE4R3ZEOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILHVFQUF1RTtBQUN2RSxzRUFBc0U7QUFDdEUsOEVBQThFO0FBQzlFLE1BQU0sc0JBQXNCLEdBQUc7Ozs7O0NBSzlCLENBQUM7QUFFRixNQUFNLE9BQU8sb0JBQW9CO0lBQ3ZCLE1BQU0sQ0FBQyxRQUFRLENBQXVCO0lBRTlDLDRCQUE0QjtJQUNwQixRQUFRLEdBQXdCLElBQUksQ0FBQztJQUNyQyxnQkFBZ0IsR0FBZ0MsSUFBSSxDQUFDO0lBQ3JELG1CQUFtQixHQUFtQyxJQUFJLENBQUM7SUFDM0QsY0FBYyxHQUFtQixJQUFJLENBQUM7SUFDdEMsb0JBQW9CLEdBQW9DLElBQUksQ0FBQztJQUM3RCxVQUFVLEdBQTBCLElBQUksQ0FBQztJQUN6QyxTQUFTLEdBQXlCLElBQUksQ0FBQztJQUUvQyx5REFBeUQ7SUFDakQsbUJBQW1CLEdBQWlDLElBQUksQ0FBQztJQUN6RCwyQkFBMkIsR0FBeUMsSUFBSSxDQUFDO0lBQ3pFLDhCQUE4QixHQUE0QyxJQUFJLENBQUM7SUFDL0UseUJBQXlCLEdBQTRCLElBQUksQ0FBQztJQUMxRCwrQkFBK0IsR0FBNkMsSUFBSSxDQUFDO0lBQ2pGLHFCQUFxQixHQUFtQyxJQUFJLENBQUM7SUFDN0Qsb0JBQW9CLEdBQWtDLElBQUksQ0FBQztJQUVuRSxnQkFBdUIsQ0FBQztJQUV4Qjs7T0FFRztJQUNJLE1BQU0sQ0FBQyxXQUFXO1FBQ3ZCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQyxvQkFBb0IsQ0FBQyxRQUFRLEdBQUcsSUFBSSxvQkFBb0Is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
337
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVlc1NlcnZpY2VMaWJMb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c193ZWIvc2VydmljZXMvRGVlc1NlcnZpY2VMaWJMb2FkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUErR3ZEOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILHVFQUF1RTtBQUN2RSxzRUFBc0U7QUFDdEUsOEVBQThFO0FBQzlFLE1BQU0sc0JBQXNCLEdBQUc7Ozs7O0NBSzlCLENBQUM7QUFFRixNQUFNLE9BQU8sb0JBQW9CO0lBQ3ZCLE1BQU0sQ0FBQyxRQUFRLENBQXVCO0lBRTlDLDRCQUE0QjtJQUNwQixRQUFRLEdBQXdCLElBQUksQ0FBQztJQUNyQyxnQkFBZ0IsR0FBZ0MsSUFBSSxDQUFDO0lBQ3JELG1CQUFtQixHQUFtQyxJQUFJLENBQUM7SUFDM0QsY0FBYyxHQUFtQixJQUFJLENBQUM7SUFDdEMsb0JBQW9CLEdBQW9DLElBQUksQ0FBQztJQUM3RCxVQUFVLEdBQTBCLElBQUksQ0FBQztJQUN6QyxTQUFTLEdBQXlCLElBQUksQ0FBQztJQUUvQyx5REFBeUQ7SUFDakQsbUJBQW1CLEdBQWlDLElBQUksQ0FBQztJQUN6RCwyQkFBMkIsR0FBeUMsSUFBSSxDQUFDO0lBQ3pFLDhCQUE4QixHQUE0QyxJQUFJLENBQUM7SUFDL0UseUJBQXlCLEdBQTRCLElBQUksQ0FBQztJQUMxRCwrQkFBK0IsR0FBNkMsSUFBSSxDQUFDO0lBQ2pGLHFCQUFxQixHQUFtQyxJQUFJLENBQUM7SUFDN0Qsb0JBQW9CLEdBQWtDLElBQUksQ0FBQztJQUVuRSxnQkFBdUIsQ0FBQztJQUV4Qjs7T0FFRztJQUNJLE1BQU0sQ0FBQyxXQUFXO1FBQ3ZCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQyxvQkFBb0IsQ0FBQyxRQUFRLEdBQUcsSUFBSSxvQkFBb0Is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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@design.estate/dees-catalog",
3
- "version": "12.4.0",
3
+ "version": "13.0.0",
4
4
  "private": false,
5
5
  "description": "A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript.",
6
6
  "main": "dist_ts_web/index.js",
package/readme.md CHANGED
@@ -32,6 +32,8 @@ switcher**, **view-toggle**, and **single-selection toggle** all lead to
32
32
  | See components composed into one working application | [Integrated App UI demo](#integrated-app-ui-demo) | Shared state, layout presets, navigation, service tabs, charts, files, settings and activity. Start here before assembling a shell. |
33
33
  | Collect and submit form values | [`dees-form`](#deesform), [`dees-form-submit`](#deesformsubmit) | Give each input a stable `key`; use the form's collection and validation flow. |
34
34
  | Edit multiline plain text | [`dees-input-textarea`](#deesinputtextarea) | Notes and descriptions as strings, with validation and form reset; no rich-text editor. |
35
+ | Track epics, tasks and subtasks across workflow columns | [`dees-kanban`](#deeskanban) | Board, ordering, ticket detail, discussion and stable ticket references. |
36
+ | Compose comments with searchable inline references | [`dees-input-reference`](#deesinputreference) | Typing `#_` opens a searchable picker at the caret; the value contains text and stable reference IDs. |
35
37
  | Search, filter, sort, edit and act on records | [`dees-table`](#deestable) | Use its columns, selection and data actions before building a table toolbar or row-action layer. |
36
38
  | Show metrics, health and operational context | [`dees-statsgrid`](#deesstatsgrid), [`dees-dataview-statusobject`](#deesdataviewstatusobject) | Metric tiles versus structured status details and actions. |
37
39
  | Plot a time series, compare categories, show proportions, capacity or profiles | [Chart components](#visualization-components) | Area, bar, donut, gauge and radar have distinct data contracts. |
@@ -198,6 +200,7 @@ task guide and examples deliberately; the generated table does not replace them.
198
200
  | `dees-input-profilepicture` | input | [DeesInputProfilePicture](#deesinputprofilepicture) | [Source](ts_web/elements/00group-input/profilepicture/dees-input-profilepicture.ts) |
199
201
  | `dees-input-quantityselector` | input | [DeesInputQuantitySelector](#deesinputquantityselector) | [Source](ts_web/elements/00group-input/dees-input-quantityselector/dees-input-quantityselector.ts) |
200
202
  | `dees-input-radiogroup` | input | [DeesInputRadiogroup](#deesinputradiogroup) | [Source](ts_web/elements/00group-input/dees-input-radiogroup/dees-input-radiogroup.ts) |
203
+ | `dees-input-reference` | input | [DeesInputReference](#deesinputreference) | [Source](ts_web/elements/00group-input/dees-input-reference/dees-input-reference.ts) |
201
204
  | `dees-input-richtext` | input | [DeesInputRichtext](#deesinputrichtext) | [Source](ts_web/elements/00group-input/dees-input-richtext/component.ts) |
202
205
  | `dees-input-tags` | input | [DeesInputTags](#deesinputtags) | [Source](ts_web/elements/00group-input/dees-input-tags/dees-input-tags.ts) |
203
206
  | `dees-input-text` | input | [DeesInputText](#deesinputtext) | [Source](ts_web/elements/00group-input/dees-input-text/dees-input-text.ts) |
@@ -205,6 +208,11 @@ task guide and examples deliberately; the generated table does not replace them.
205
208
  | `dees-input-toggle` | input | [DeesInputToggle](#deesinputtoggle) | [Source](ts_web/elements/00group-input/dees-input-toggle/dees-input-toggle.ts) |
206
209
  | `dees-input-typelist` | input | [DeesInputTypelist](#deesinputtypelist) | [Source](ts_web/elements/00group-input/dees-input-typelist/dees-input-typelist.ts) |
207
210
  | `dees-input-wysiwyg` | input | [DeesInputWysiwyg](#deesinputwysiwyg) | [Source](ts_web/elements/00group-input/dees-input-wysiwyg/dees-input-wysiwyg.ts) |
211
+ | `dees-kanban` | kanban | [DeesKanban](#deeskanban) | [Source](ts_web/elements/00group-kanban/dees-kanban/dees-kanban.ts) |
212
+ | `dees-kanban-card` | kanban | [DeesKanbanCard](#deeskanbancard) | [Source](ts_web/elements/00group-kanban/dees-kanban-card/dees-kanban-card.ts) |
213
+ | `dees-kanban-column` | kanban | [DeesKanbanColumn](#deeskanbancolumn) | [Source](ts_web/elements/00group-kanban/dees-kanban-column/dees-kanban-column.ts) |
214
+ | `dees-kanban-discussion` | kanban | [DeesKanbanDiscussion](#deeskanbandiscussion) | [Source](ts_web/elements/00group-kanban/dees-kanban-discussion/dees-kanban-discussion.ts) |
215
+ | `dees-kanban-ticket-detail` | kanban | [DeesKanbanTicketDetail](#deeskanbanticketdetail) | [Source](ts_web/elements/00group-kanban/dees-kanban-ticket-detail/dees-kanban-ticket-detail.ts) |
208
216
  | `dees-label` | layout | [DeesLabel](#deeslabel) | [Source](ts_web/elements/00group-layout/dees-label/dees-label.ts) |
209
217
  | `dees-mobilenavigation` | appui | — | [Source](ts_web/elements/00group-appui/dees-mobilenavigation/dees-mobilenavigation.ts) |
210
218
  | `dees-modal` | overlay | [DeesModal](#deesmodal) | [Source](ts_web/elements/00group-overlay/dees-modal/dees-modal.ts) |
@@ -2144,6 +2152,16 @@ bubbling `range-change` event carries `{ from, to }` as Unix epoch
2144
2152
  milliseconds. Apply that range back through `selectedRange` to keep the
2145
2153
  selection visible; set it to `null` to clear the overlay.
2146
2154
 
2155
+ Use `y: null` for an unavailable reading. Its timestamp remains on the time
2156
+ axis, and the area line visibly stops until the next numeric reading. Supply
2157
+ one null point for each missing sampling interval when the width of an outage
2158
+ should reflect its duration. The chart keeps one legend entry per named input
2159
+ series. Legend statistics omit null readings; `latest` is unavailable when the
2160
+ newest reading is null, while `min`, `max`, and `avg` describe available
2161
+ readings in the selected window. An unavailable statistic is displayed as `—`.
2162
+ With `realtimeMode=true` and `rollingWindow=3_600_000`, the time axis follows
2163
+ the last hour even while the latest reading is unavailable.
2164
+
2147
2165
  ```typescript
2148
2166
  <dees-chart-area
2149
2167
  label="System Usage"
@@ -2154,7 +2172,7 @@ selection visible; set it to `null` to clear the overlay.
2154
2172
  name: 'CPU',
2155
2173
  data: [
2156
2174
  { x: '2025-01-15T03:00:00', y: 25 },
2157
- { x: '2025-01-15T07:00:00', y: 30 },
2175
+ { x: '2025-01-15T07:00:00', y: null }, // unavailable
2158
2176
  { x: '2025-01-15T11:00:00', y: 20 }
2159
2177
  ]
2160
2178
  }
@@ -2578,6 +2596,152 @@ IDE-style bottom status bar for the workspace.
2578
2596
 
2579
2597
  ---
2580
2598
 
2599
+ ### Kanban Components
2600
+
2601
+ #### DeesKanban
2602
+
2603
+ `dees-kanban` assembles the Kanban family: configurable workflow columns, task
2604
+ cards, epic filtering, search, expandable subtask progress, and ticket detail in
2605
+ `dees-modal`. The **Kanban** catalog demo includes a working in-memory provider.
2606
+
2607
+ ```typescript
2608
+ import '@design.estate/dees-catalog';
2609
+ import type { IKanbanProvider, IKanbanTicket } from '@design.estate/dees-catalog';
2610
+
2611
+ const board = document.createElement('dees-kanban');
2612
+ board.heading = 'Product workspace';
2613
+ board.columns = [
2614
+ { id: 'todo', title: 'To do' },
2615
+ { id: 'doing', title: 'In progress' },
2616
+ { id: 'done', title: 'Done', done: true },
2617
+ ];
2618
+ board.tickets = [
2619
+ { id: 'epic-1', key: 'APP-1', kind: 'epic', title: 'Team workspace', columnId: 'doing', order: 0 },
2620
+ { id: 'task-1', key: 'APP-2', kind: 'task', title: 'Ticket search', parentId: 'epic-1', columnId: 'todo', order: 0 },
2621
+ { id: 'subtask-1', key: 'APP-3', kind: 'subtask', title: 'Keyboard selection', parentId: 'task-1', columnId: 'todo', order: 0 },
2622
+ ] satisfies IKanbanTicket[];
2623
+ document.body.append(board);
2624
+ ```
2625
+
2626
+ Set `.provider` to an `IKanbanProvider` backed by the application's authorized
2627
+ API. Omitted mutation callbacks make those actions read-only. The catalog does
2628
+ not store application data or implement authorization. Ticket `permissions`
2629
+ can disable individual edit, move, comment and create-child actions; the server
2630
+ must enforce the same permissions.
2631
+
2632
+ | Provider callback | Input | Result |
2633
+ | --- | --- | --- |
2634
+ | `getTicket` | `(id, signal)` | Full `IKanbanTicket`, including tickets outside the current board |
2635
+ | `searchTickets` | `(query, signal)` | Tickets matching key or title; omitted uses the supplied board tickets |
2636
+ | `loadComments` | `(ticketId, signal)` | `IKanbanComment[]` for that ticket |
2637
+ | `addComment` | `{ ticketId, body }` | Saved `IKanbanComment` with stable ID, author and ISO timestamp |
2638
+ | `updateTicket` | `{ ticketId, changes }` | Saved `IKanbanTicket`; nullable assignee/parent clears that field |
2639
+ | `moveTicket` | `{ ticketId, columnId, beforeTicketId? }` | All `IKanbanTicket` records whose order/column changed |
2640
+ | `createTicket` | `{ kind, title, columnId, parentId? }` | Created `IKanbanTicket` |
2641
+
2642
+ Provider reads receive an `AbortSignal`; obsolete reads cannot overwrite a newer
2643
+ selection. Reject mutations with an `Error` to show the failure and preserve the
2644
+ draft. Successful callbacks supply authoritative records to the component.
2645
+ Moves are awaited before changing the board; the provider must assign ordering
2646
+ atomically. Omitting `beforeTicketId` appends. Cards support drag-and-drop and a
2647
+ keyboard-accessible Move menu with within-column ordering and column selection.
2648
+
2649
+ Hierarchy is independent of workflow: tasks optionally belong to epics, and
2650
+ subtasks belong to tasks. Each ticket has its own `columnId`; moving a parent
2651
+ does not move its children. Column array order controls board order, and `done`
2652
+ identifies completed subtasks. Configure columns by supplying a new `.columns`
2653
+ array. Supply `.people` for the assignee picker, `.loading` for loading feedback,
2654
+ and `.error` for a host-side board loading failure. Supply new `.tickets` arrays
2655
+ for external updates.
2656
+
2657
+ Public methods and events:
2658
+
2659
+ - `openTicket(id)` opens a ticket. Linked-ticket navigation has Back history and
2660
+ preserves comment and field drafts per ticket for the board instance's lifetime.
2661
+ - `moveTicket(input)` invokes the same permission-aware move path as the UI.
2662
+ - `refreshComments(ticketId?)` reloads discussion; `setComments(ticketId, comments)`
2663
+ accepts authoritative realtime snapshots without introducing transport coupling.
2664
+ - `kanban-change`: `detail.tickets` contains saved/created/moved records to merge
2665
+ into the host's state.
2666
+ - `kanban-ticket-opened`: `detail.ticketId` identifies the selected ticket.
2667
+ - `kanban-comment-saved`: `detail.comment` contains the saved comment.
2668
+ - `kanban-error`: `detail.error` and `detail.message` report failed operations.
2669
+
2670
+ #### DeesKanbanColumn
2671
+
2672
+ `dees-kanban-column` accepts `.column`, `.tickets`, `.allTickets`, `.columns`,
2673
+ `.movable`, `.canCreate`, `.pendingTicketId` and `.draggingTicketId`. It composes
2674
+ cards and emits `kanban-ticket-move` with the destination and insertion target.
2675
+ Use it through `dees-kanban` for provider handling and board-local drag ownership.
2676
+
2677
+ #### DeesKanbanCard
2678
+
2679
+ `dees-kanban-card` accepts `.ticket`, `.epic`, `.subtasks`, `.columns`, `.movable`
2680
+ and `.pending`. It displays priority, assignee, labels and completion counts.
2681
+ `kanban-ticket-open` identifies a requested ticket, and `kanban-move-menu` carries
2682
+ the ticket ID and anchor element. Secondary cards remain usable independently.
2683
+
2684
+ #### DeesKanbanTicketDetail
2685
+
2686
+ `dees-kanban-ticket-detail` is the reusable detail content, composed into the
2687
+ board's modal. It displays the parent, child tickets, description, fields and
2688
+ discussion. It accepts `.ticket`, `.tickets`, `.columns`, `.people`, `.provider`,
2689
+ `.draft`, `.comments` and `.commentDraft`. It emits `kanban-ticket-save` and
2690
+ `kanban-ticket-draft` intents; `dees-kanban` owns persistence, navigation and draft
2691
+ caching. `finishEditing()` returns to the saved view after a successful update.
2692
+
2693
+ #### DeesKanbanDiscussion
2694
+
2695
+ `dees-kanban-discussion` renders chronological comments and a reference composer.
2696
+ Provide `.ticketId`, `.comments`, `.draft`, `.searchTickets`, `.addComment`,
2697
+ `.loading`, `.error` and `.readOnly`. `submit()` awaits the save callback; errors
2698
+ leave the draft intact. Ctrl/⌘ Enter submits; Enter inserts a newline.
2699
+ Standalone consumers handle `kanban-comment-draft` (`ticketId`, `body`),
2700
+ `kanban-comment-added` (`comment`, `submittedBody`), `kanban-ticket-open` and
2701
+ `kanban-comments-refresh`. The assembled board handles these events itself.
2702
+
2703
+ #### DeesInputReference
2704
+
2705
+ `dees-input-reference` is a reusable editor for chat and discussion. `.value` is
2706
+ `TReferenceContent`, an array of `{ type: 'text', text }` and
2707
+ `{ type: 'reference', id, label }`. Labels are display snapshots; IDs remain the
2708
+ lookup keys when a ticket is renamed. Newlines are preserved as text. Content is
2709
+ rendered safely as text and reference nodes, without accepting arbitrary HTML.
2710
+
2711
+ ```typescript
2712
+ const composer = document.createElement('dees-input-reference');
2713
+ composer.documentKey = 'ticket-42';
2714
+ composer.value = [
2715
+ { type: 'text', text: 'Related to ' },
2716
+ { type: 'reference', id: 'ticket-17', label: '#APP-17 Keyboard navigation' },
2717
+ ];
2718
+ composer.searchReferences = async (query, signal) => {
2719
+ // Replace with your authorized search API; honor signal when making requests.
2720
+ return [{ id: 'ticket-17', label: '#APP-17 Keyboard navigation' }]
2721
+ .filter(item => item.label.toLowerCase().includes(query.toLowerCase()));
2722
+ };
2723
+ document.body.append(composer);
2724
+ await composer.ready();
2725
+ composer.focus();
2726
+ ```
2727
+
2728
+ Typing `#_` opens a dropdown at the caret and immediately focuses its search.
2729
+ Arrow keys navigate, Enter inserts the selected atomic reference plus a space,
2730
+ and Escape dismisses while preserving typed text. Selection returns focus to
2731
+ the editor. The picker belongs to its containing modal, handles viewport edges,
2732
+ and cancels obsolete searches. References participate in editor undo and clipboard
2733
+ operations. Changing `.documentKey` resets history so undo cannot cross tickets.
2734
+
2735
+ Set `.trigger`, `.label`, `.placeholder`, `.searchLabel` and `.disabled` as needed.
2736
+ `reference-input` emits `{ value }`, `reference-open` emits `{ id, label }`, and
2737
+ `reference-submit` requests submission on Ctrl/⌘ Enter. `referenceText(value)`
2738
+ returns a plain-text representation. No callback means no reference picker.
2739
+
2740
+ The shared `DeesInputDropdownPopup` also accepts `.searchOptions(query, signal)`
2741
+ for asynchronous searches and `.searchLabel` for accessible search labeling.
2742
+ Remote results are authoritative; failures and loading states replace stale
2743
+ options. Existing local dropdown filtering is unchanged.
2744
+
2581
2745
  ### Agentic Chat Components 🤖
2582
2746
 
2583
2747
  The `00group-harness` family renders what an agent harness produces — streaming messages, reasoning, tool calls, MCP content, permission prompts — behind one normalized data contract (`IHarnessMessage`, `IHarnessToolCall`, `IHarnessPermissionRequest`, `IHarnessSessionMeta`, `IHarnessStatus`). Consumers adapt their wire format to these interfaces and feed the components; all events are `harness-*` CustomEvents (bubbles + composed).
@@ -30,7 +30,7 @@ writeFileSync(join(consumer, 'package.json'), JSON.stringify({
30
30
  }, null, 2));
31
31
  writeFileSync(join(consumer, 'pnpm-workspace.yaml'), 'packages:\n - "."\n');
32
32
  // Run the same regressions against installed JavaScript, not sources.
33
- const browserTests = ['table-construction', 'datepicker-validation', 'textarea', 'composer-attachments'];
33
+ const browserTests = ['table-construction', 'datepicker-validation', 'textarea', 'composer-attachments', 'kanban'];
34
34
  for (const name of browserTests) {
35
35
  const browserTest = readFileSync(join(root, `test/test.${name}.browser.ts`), 'utf8')
36
36
  .replaceAll('../ts_web/', '@design.estate/dees-catalog/dist_ts_web/');
@@ -2,7 +2,7 @@
2
2
  * autocreated commitinfo by @push.rocks/commitinfo
3
3
  */
4
4
  export const commitinfo = {
5
- name: "@design.estate/dees-catalog",
6
- version: "12.4.0",
7
- description: "A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript."
5
+ name: '@design.estate/dees-catalog',
6
+ version: '13.0.0',
7
+ description: 'A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript.'
8
8
  }