@joewinke/jatui 0.1.22 → 0.1.24

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 (124) hide show
  1. package/CLAUDE.md +244 -0
  2. package/package.json +23 -10
  3. package/src/lib/actions/collapse.ts +0 -134
  4. package/src/lib/actions/railNav.ts +0 -473
  5. package/src/lib/components/AnnotationLayer.svelte +0 -108
  6. package/src/lib/components/AnnotationPanel.svelte +0 -319
  7. package/src/lib/components/AudioWaveform.svelte +0 -698
  8. package/src/lib/components/AvailabilityModal.svelte +0 -177
  9. package/src/lib/components/AvatarUpload.svelte +0 -234
  10. package/src/lib/components/Badge.svelte +0 -38
  11. package/src/lib/components/BookingForm.svelte +0 -278
  12. package/src/lib/components/BurndownChart.svelte +0 -778
  13. package/src/lib/components/Button.svelte +0 -81
  14. package/src/lib/components/CalendarPicker.svelte +0 -284
  15. package/src/lib/components/Card.svelte +0 -67
  16. package/src/lib/components/CharacterCounter.svelte +0 -82
  17. package/src/lib/components/ChipInput.svelte +0 -609
  18. package/src/lib/components/Collapse.svelte +0 -82
  19. package/src/lib/components/ColorSelector.svelte +0 -167
  20. package/src/lib/components/CommentThread.svelte +0 -773
  21. package/src/lib/components/ConfirmDialog.svelte +0 -348
  22. package/src/lib/components/ConfirmModal.svelte +0 -142
  23. package/src/lib/components/ContextMenu.svelte +0 -188
  24. package/src/lib/components/CountdownTimer.svelte +0 -94
  25. package/src/lib/components/DateRangePicker.svelte +0 -194
  26. package/src/lib/components/Drawer.svelte +0 -143
  27. package/src/lib/components/EmojiPicker.svelte +0 -159
  28. package/src/lib/components/EntityPreviewCard.svelte +0 -104
  29. package/src/lib/components/FileDropzone.svelte +0 -493
  30. package/src/lib/components/FilePicker.svelte +0 -488
  31. package/src/lib/components/FileThumbnail.svelte +0 -80
  32. package/src/lib/components/FilterDropdown.svelte +0 -203
  33. package/src/lib/components/FloatingActionBar.svelte +0 -354
  34. package/src/lib/components/GPSTracker.svelte +0 -202
  35. package/src/lib/components/HunkDiffView.svelte +0 -348
  36. package/src/lib/components/ImageLightbox.svelte +0 -274
  37. package/src/lib/components/ImageUpload.svelte +0 -147
  38. package/src/lib/components/InlineEdit.svelte +0 -291
  39. package/src/lib/components/InputDialog.svelte +0 -327
  40. package/src/lib/components/KeyboardShortcutsOverlay.svelte +0 -296
  41. package/src/lib/components/LazyImage.svelte +0 -123
  42. package/src/lib/components/LinkShortener.svelte +0 -274
  43. package/src/lib/components/LoadingSpinner.svelte +0 -106
  44. package/src/lib/components/LocationMap.svelte +0 -186
  45. package/src/lib/components/MapView.svelte +0 -341
  46. package/src/lib/components/MarkupEditor.svelte +0 -485
  47. package/src/lib/components/MarkupOverlay.svelte +0 -55
  48. package/src/lib/components/MediaWorkbench.svelte +0 -871
  49. package/src/lib/components/MilestoneCard.svelte +0 -98
  50. package/src/lib/components/MilestoneTimeline.svelte +0 -91
  51. package/src/lib/components/Modal.svelte +0 -244
  52. package/src/lib/components/PDFViewer.svelte +0 -105
  53. package/src/lib/components/PdfThumbnail.svelte +0 -63
  54. package/src/lib/components/PhoneInput.svelte +0 -212
  55. package/src/lib/components/ResizableDivider.svelte +0 -307
  56. package/src/lib/components/ResizablePanel.svelte +0 -305
  57. package/src/lib/components/SearchDropdown.svelte +0 -421
  58. package/src/lib/components/SelectInput.svelte +0 -237
  59. package/src/lib/components/SidebarUserFooter.svelte +0 -34
  60. package/src/lib/components/SignaturePad.svelte +0 -175
  61. package/src/lib/components/SmartImageEditor.svelte +0 -720
  62. package/src/lib/components/SortDropdown.svelte +0 -156
  63. package/src/lib/components/Sparkline.svelte +0 -116
  64. package/src/lib/components/SpeechForm.svelte +0 -114
  65. package/src/lib/components/StatusBadge.svelte +0 -157
  66. package/src/lib/components/TaskTypeIcon.svelte +0 -54
  67. package/src/lib/components/TextArea.svelte +0 -162
  68. package/src/lib/components/TextInput.svelte +0 -131
  69. package/src/lib/components/ThemeSelector.svelte +0 -206
  70. package/src/lib/components/TimeSlotPicker.svelte +0 -162
  71. package/src/lib/components/UserAvatar.svelte +0 -72
  72. package/src/lib/components/VariablePicker.svelte +0 -170
  73. package/src/lib/components/VoicePlayer.svelte +0 -422
  74. package/src/lib/components/linked-columns/LinkedColumns.svelte +0 -526
  75. package/src/lib/components/markup.ts +0 -287
  76. package/src/lib/components/messaging/Avatar.svelte +0 -81
  77. package/src/lib/components/messaging/ChannelInfoModal.svelte +0 -163
  78. package/src/lib/components/messaging/ChannelList.svelte +0 -107
  79. package/src/lib/components/messaging/ChannelMemberAvatarStack.svelte +0 -69
  80. package/src/lib/components/messaging/ChannelMembersModal.svelte +0 -182
  81. package/src/lib/components/messaging/CreateChannelModal.svelte +0 -190
  82. package/src/lib/components/messaging/DirectMessageList.svelte +0 -145
  83. package/src/lib/components/messaging/EmojiSelector.svelte +0 -261
  84. package/src/lib/components/messaging/MentionAutocomplete.svelte +0 -193
  85. package/src/lib/components/messaging/MessageAttachment.svelte +0 -273
  86. package/src/lib/components/messaging/MessageAttachmentUpload.svelte +0 -243
  87. package/src/lib/components/messaging/MessageInput.svelte +0 -452
  88. package/src/lib/components/messaging/MessageItem.svelte +0 -341
  89. package/src/lib/components/messaging/MessageThread.svelte +0 -306
  90. package/src/lib/components/messaging/NotificationSettingsModal.svelte +0 -234
  91. package/src/lib/components/messaging/QuotedMessageDisplay.svelte +0 -123
  92. package/src/lib/components/messaging/StartDMModal.svelte +0 -100
  93. package/src/lib/components/messaging/ThreadPanel.svelte +0 -153
  94. package/src/lib/components/pipeline/DESIGN.md +0 -361
  95. package/src/lib/components/pipeline/Pipeline.svelte +0 -391
  96. package/src/lib/components/pipeline/PipelineCard.svelte +0 -94
  97. package/src/lib/components/pipeline/PipelineColumn.svelte +0 -163
  98. package/src/lib/components/replay/ChapterTimeline.svelte +0 -326
  99. package/src/lib/components/session-nav/transcriptModel.ts +0 -352
  100. package/src/lib/data/emojis.ts +0 -1208
  101. package/src/lib/index.ts +0 -405
  102. package/src/lib/stores/confirmDialog.svelte.ts +0 -48
  103. package/src/lib/stores/inputDialog.svelte.ts +0 -51
  104. package/src/lib/styles/rail.css +0 -63
  105. package/src/lib/types/annotation.ts +0 -38
  106. package/src/lib/types/booking.ts +0 -143
  107. package/src/lib/types/comments.ts +0 -97
  108. package/src/lib/types/entityPreview.ts +0 -45
  109. package/src/lib/types/filePicker.ts +0 -16
  110. package/src/lib/types/googleMaps.d.ts +0 -51
  111. package/src/lib/types/maps.ts +0 -43
  112. package/src/lib/types/messaging.ts +0 -459
  113. package/src/lib/types/milestone.ts +0 -22
  114. package/src/lib/types/pipeline.ts +0 -150
  115. package/src/lib/types/smartImageEditor.ts +0 -39
  116. package/src/lib/types/templateVars.ts +0 -36
  117. package/src/lib/utils/currency.ts +0 -20
  118. package/src/lib/utils/daisyuiColors.ts +0 -243
  119. package/src/lib/utils/dateFormatters.ts +0 -196
  120. package/src/lib/utils/googleMapsLoader.ts +0 -84
  121. package/src/lib/utils/mentionParser.ts +0 -188
  122. package/src/lib/utils/phone.ts +0 -80
  123. package/src/lib/utils/phoneFormat.ts +0 -74
  124. package/src/lib/utils/taskUtils.ts +0 -75
@@ -1,143 +0,0 @@
1
- // Booking System Types
2
- // Generic types for scheduling/booking UI components
3
-
4
- export type LocationType = 'remote' | 'phone' | 'in_person';
5
- export type BookingStatus = 'pending' | 'confirmed' | 'cancelled' | 'completed' | 'no_show';
6
- export type OverrideType = 'unavailable' | 'custom_hours';
7
-
8
- export interface Host {
9
- id: string;
10
- name: string;
11
- email: string;
12
- timezone: string;
13
- avatar_url?: string;
14
- bio?: string;
15
- notify_on_new_booking?: boolean;
16
- notify_on_cancellation?: boolean;
17
- notify_on_reschedule?: boolean;
18
- created_at: string;
19
- updated_at: string;
20
- }
21
-
22
- export interface EventType {
23
- id: string;
24
- host_id: string;
25
- title: string;
26
- slug: string;
27
- description?: string;
28
- duration_minutes: number;
29
- location_type: LocationType;
30
- location_details?: string;
31
- color: string;
32
- is_active: boolean;
33
- buffer_before_minutes: number;
34
- buffer_after_minutes: number;
35
- min_notice_hours: number;
36
- max_days_in_advance: number;
37
- confirmation_redirect_url?: string;
38
- booking_instructions?: string;
39
- created_at: string;
40
- updated_at: string;
41
- host?: Host;
42
- }
43
-
44
- export interface WeeklyAvailability {
45
- id: string;
46
- host_id: string;
47
- day_of_week: number; // 0 = Sunday, 1 = Monday, etc.
48
- start_time: string; // HH:MM:SS format
49
- end_time: string;
50
- event_type_id?: string;
51
- is_active: boolean;
52
- created_at: string;
53
- }
54
-
55
- export interface DateOverride {
56
- id: string;
57
- host_id: string;
58
- override_date: string; // YYYY-MM-DD
59
- override_type: OverrideType;
60
- start_time?: string;
61
- end_time?: string;
62
- reason?: string;
63
- created_at: string;
64
- }
65
-
66
- export interface Booking {
67
- id: string;
68
- event_type_id: string;
69
- host_id: string;
70
- guest_name: string;
71
- guest_email: string;
72
- guest_phone?: string;
73
- guest_notes?: string;
74
- start_time: string;
75
- end_time: string;
76
- timezone: string;
77
- status: BookingStatus;
78
- cancelled_at?: string;
79
- cancellation_reason?: string;
80
- meeting_url?: string;
81
- location_details?: string;
82
- confirmation_sent_at?: string;
83
- reminder_sent_at?: string;
84
- created_at: string;
85
- updated_at: string;
86
- event_type?: EventType;
87
- host?: Host;
88
- attendees?: BookingAttendee[];
89
- }
90
-
91
- export interface BookingAttendee {
92
- id: string;
93
- booking_id: string;
94
- name: string;
95
- email: string;
96
- created_at: string;
97
- }
98
-
99
- export interface TimeSlot {
100
- start: Date;
101
- end: Date;
102
- available: boolean;
103
- }
104
-
105
- export interface BookingFormData {
106
- guest_name: string;
107
- guest_email: string;
108
- guest_phone?: string;
109
- guest_notes?: string;
110
- timezone: string;
111
- start_time: string;
112
- attendees?: { name: string; email: string }[];
113
- }
114
-
115
- export interface AvailabilityCounts {
116
- [dateStr: string]: { available: number; total: number };
117
- }
118
-
119
- // Day of week helpers
120
- export const DAYS_OF_WEEK = [
121
- 'Sunday',
122
- 'Monday',
123
- 'Tuesday',
124
- 'Wednesday',
125
- 'Thursday',
126
- 'Friday',
127
- 'Saturday'
128
- ] as const;
129
-
130
- export const DAYS_SHORT = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'] as const;
131
-
132
- // Location type display
133
- export const LOCATION_LABELS: Record<LocationType, string> = {
134
- remote: 'Video Call',
135
- phone: 'Phone Call',
136
- in_person: 'In Person'
137
- };
138
-
139
- export const LOCATION_ICONS: Record<LocationType, string> = {
140
- remote: 'video',
141
- phone: 'phone',
142
- in_person: 'map-pin'
143
- };
@@ -1,97 +0,0 @@
1
- // Threaded Comments Types
2
- // Generic types for the CommentThread UI component — no framework or backend
3
- // dependencies. Mirrors the JST `$lib/types/comments` projection so the
4
- // component is a drop-in for any app whose server speaks the same shape.
5
- //
6
- // Threading is ONE level deep on the data side: a comment is either
7
- // top-level (`parent_id === null`) or a single-level reply. The UI renders
8
- // this as two visual levels (a comment and its replies).
9
-
10
- /** Entity kinds a comment thread can hang off — mirrors the host DB CHECK. */
11
- export type CommentEntityType =
12
- | 'project'
13
- | 'invoice'
14
- | 'contract'
15
- | 'asset'
16
- | 'task'
17
- | 'form_submission'
18
- | 'milestone'
19
- | 'contract_term'
20
-
21
- export const COMMENT_ENTITY_TYPES: readonly CommentEntityType[] = [
22
- 'project',
23
- 'invoice',
24
- 'contract',
25
- 'asset',
26
- 'task',
27
- 'form_submission',
28
- 'milestone',
29
- 'contract_term'
30
- ] as const
31
-
32
- /** Internal = staff-only. Client = also visible in the customer portal. */
33
- export type CommentVisibility = 'internal' | 'client'
34
-
35
- export const COMMENT_VISIBILITIES: readonly CommentVisibility[] = [
36
- 'internal',
37
- 'client'
38
- ] as const
39
-
40
- export interface Comment {
41
- id: string
42
- team_id: string
43
- entity_type: CommentEntityType
44
- entity_id: string
45
- author_id: string
46
- /** Joined author display name (null if the profile is gone). */
47
- author_name: string | null
48
- /** Joined author avatar URL. */
49
- author_avatar_url: string | null
50
- body: string
51
- /** null = top-level; otherwise the id of the top-level comment it replies to. */
52
- parent_id: string | null
53
- visibility: CommentVisibility
54
- /** Set the first time the body is edited. */
55
- edited_at: string | null
56
- /** Set on soft-delete; body is replaced with "[deleted]". */
57
- deleted_at: string | null
58
- created_at: string
59
- /** Number of replies (top-level rows only; always 0 for replies). */
60
- reply_count: number
61
- /**
62
- * Replies are loaded on demand; this is [] in the paginated top-level
63
- * listing and populated by the component when a thread is expanded.
64
- */
65
- replies: Comment[]
66
- }
67
-
68
- export interface CommentCreateInput {
69
- entityType: CommentEntityType
70
- entityId: string
71
- body: string
72
- /** When set, this comment is a reply to the given TOP-LEVEL comment. */
73
- parentId?: string | null
74
- /** Defaults to "internal". Clamped to the parent's visibility for replies. */
75
- visibility?: CommentVisibility
76
- }
77
-
78
- /**
79
- * Transport-agnostic data layer for `<CommentThread>`. The consuming app
80
- * wires these to a server load / form action / fetch endpoint. The
81
- * component never imports server code or knows how data is fetched.
82
- */
83
- export interface CommentCallbacks {
84
- /** Persist a new comment (top-level or reply) and return the created row. */
85
- submitComment: (input: CommentCreateInput) => Promise<Comment>
86
- /** Edit an existing comment body; returns the updated row. */
87
- editComment: (id: string, body: string) => Promise<Comment>
88
- /** Soft-delete a comment. The row stays so replies remain anchored. */
89
- deleteComment: (id: string) => Promise<void>
90
- /** Fetch the replies for a top-level comment (oldest-first). */
91
- loadReplies: (parentId: string) => Promise<Comment[]>
92
- /**
93
- * Optional: fetch the next page of top-level comments. When omitted, the
94
- * "Load more" affordance is hidden.
95
- */
96
- loadMore?: (offset: number) => Promise<{ comments: Comment[]; total: number }>
97
- }
@@ -1,45 +0,0 @@
1
- /**
2
- * Entity preview card — the uniform shape an EntityPreviewCard renders and that
3
- * a server-side resolver returns for any domain entity. One shape for every
4
- * entity type so the card and hover-action stay generic and the same card backs
5
- * hover-previews, @-mention unfurls, and link previews.
6
- *
7
- * Pure types — safe to import from both server (the resolver) and client (the
8
- * card + action).
9
- */
10
-
11
- /** A small labelled stat shown in the card's footer grid (e.g. "Submissions" → 42). */
12
- export interface EntityPreviewStat {
13
- label: string
14
- value: string | number
15
- }
16
-
17
- /** A coloured pill (status, type, …). `tone` maps to a DaisyUI semantic token. */
18
- export interface EntityPreviewBadge {
19
- label: string
20
- tone?: "neutral" | "primary" | "info" | "success" | "warning" | "error"
21
- }
22
-
23
- export interface EntityPreviewData {
24
- /** Canonical entity type slug (e.g. "base", "vendor", "form", "task"). */
25
- type: string
26
- id: string
27
- /** Human label for the type, shown as the card's kicker (e.g. "Knowledge base"). */
28
- typeLabel: string
29
- /** Main title. */
30
- title: string
31
- /** Optional one-line subtitle under the title (e.g. a vendor's company). */
32
- subtitle?: string | null
33
- /** Optional longer summary / description (clamped in the card). */
34
- summary?: string | null
35
- /** og:image / avatar / thumbnail URL, when the entity has one. */
36
- imageUrl?: string | null
37
- /** A short emoji/text glyph fallback when there's no image. */
38
- icon?: string | null
39
- /** Up to ~4 labelled stats. */
40
- stats?: EntityPreviewStat[]
41
- /** Up to ~3 status/type pills. */
42
- badges?: EntityPreviewBadge[]
43
- /** The admin detail route for the entity (the card links here). */
44
- href?: string | null
45
- }
@@ -1,16 +0,0 @@
1
- export interface FilePickerFile {
2
- id: string
3
- name: string
4
- created_at: string
5
- updated_at: string
6
- metadata: Record<string, any>
7
- scope: "personal" | "team"
8
- /** Publicly accessible URL (no auth required). When present, used instead of the /api/files proxy URL. */
9
- publicUrl?: string
10
- }
11
-
12
- export interface FilePickerSelection {
13
- file: FilePickerFile
14
- url: string
15
- downloadUrl: string
16
- }
@@ -1,51 +0,0 @@
1
- /**
2
- * Minimal ambient declarations for Google Maps JS API loaded at runtime.
3
- * Prevents "Property 'google' does not exist on Window" TS errors.
4
- * Components using the Google Maps API operate with `any` for advanced
5
- * marker types until @types/google.maps is added as a dev dependency.
6
- */
7
-
8
- declare namespace google {
9
- namespace maps {
10
- class Map {
11
- constructor(el: HTMLElement, options: object);
12
- fitBounds(bounds: any): void;
13
- getZoom(): number | undefined;
14
- setZoom(zoom: number): void;
15
- setCenter(center: object): void;
16
- }
17
- class InfoWindow {
18
- constructor(options: object);
19
- open(map: any, marker: any): void;
20
- }
21
- class Circle {
22
- constructor(options: object);
23
- setMap(map: any): void;
24
- }
25
- class LatLngBounds {
26
- extend(position: object): void;
27
- }
28
- const MapTypeId: { ROADMAP: string };
29
- const event: {
30
- addListener(instance: any, event: string, fn: () => void): any;
31
- removeListener(listener: any): void;
32
- clearInstanceListeners(instance: any): void;
33
- };
34
- namespace marker {
35
- class AdvancedMarkerElement {
36
- constructor(options: object);
37
- map: any;
38
- position: any;
39
- addListener(event: string, fn: () => void): void;
40
- }
41
- }
42
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
43
- const places: any;
44
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
45
- const geometry: any;
46
- }
47
- }
48
-
49
- interface Window {
50
- google?: typeof google;
51
- }
@@ -1,43 +0,0 @@
1
- /**
2
- * Types for MapView, LocationMap, and GPSTracker components.
3
- */
4
-
5
- export interface MapJob {
6
- id: string;
7
- status: string;
8
- type?: string;
9
- priority?: string;
10
- description?: string;
11
- scheduled_at?: string;
12
- customer?: {
13
- name?: string;
14
- phone?: string;
15
- };
16
- location?: {
17
- address?: string;
18
- latitude?: number;
19
- longitude?: number;
20
- };
21
- }
22
-
23
- export interface MapAgent {
24
- id: string;
25
- name: string;
26
- email?: string;
27
- avatarUrl?: string;
28
- status?: string;
29
- capacity?: string;
30
- specializations?: string[];
31
- vehicle?: { name?: string };
32
- /** Most recent GPS fix */
33
- location?: {
34
- latitude?: number;
35
- longitude?: number;
36
- age_seconds?: number;
37
- };
38
- /** Active dispatches used as fallback location */
39
- dispatches?: Array<{
40
- job_id: string;
41
- status: string;
42
- }>;
43
- }