@joewinke/jatui 0.1.10 → 0.1.19

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 (91) hide show
  1. package/README.md +123 -0
  2. package/package.json +3 -1
  3. package/src/lib/actions/railNav.ts +473 -0
  4. package/src/lib/components/AnnotationLayer.svelte +108 -0
  5. package/src/lib/components/AnnotationPanel.svelte +319 -0
  6. package/src/lib/components/AudioWaveform.svelte +9 -5
  7. package/src/lib/components/AvailabilityModal.svelte +7 -3
  8. package/src/lib/components/AvatarUpload.svelte +27 -4
  9. package/src/lib/components/BookingForm.svelte +11 -9
  10. package/src/lib/components/BurndownChart.svelte +778 -0
  11. package/src/lib/components/Button.svelte +10 -1
  12. package/src/lib/components/CalendarPicker.svelte +3 -3
  13. package/src/lib/components/Card.svelte +2 -2
  14. package/src/lib/components/ChipInput.svelte +21 -15
  15. package/src/lib/components/ColorSelector.svelte +17 -13
  16. package/src/lib/components/CommentThread.svelte +773 -0
  17. package/src/lib/components/ConfirmDialog.svelte +348 -0
  18. package/src/lib/components/ConfirmModal.svelte +78 -11
  19. package/src/lib/components/ContextMenu.svelte +188 -0
  20. package/src/lib/components/CountdownTimer.svelte +1 -1
  21. package/src/lib/components/DateRangePicker.svelte +6 -4
  22. package/src/lib/components/Drawer.svelte +36 -3
  23. package/src/lib/components/EntityPreviewCard.svelte +104 -0
  24. package/src/lib/components/FileDropzone.svelte +493 -0
  25. package/src/lib/components/FilePicker.svelte +83 -14
  26. package/src/lib/components/FileThumbnail.svelte +80 -0
  27. package/src/lib/components/FilterDropdown.svelte +11 -11
  28. package/src/lib/components/HunkDiffView.svelte +348 -0
  29. package/src/lib/components/ImageLightbox.svelte +274 -0
  30. package/src/lib/components/ImageUpload.svelte +58 -9
  31. package/src/lib/components/InlineEdit.svelte +15 -9
  32. package/src/lib/components/InputDialog.svelte +327 -0
  33. package/src/lib/components/LazyImage.svelte +1 -0
  34. package/src/lib/components/LinkShortener.svelte +1 -1
  35. package/src/lib/components/LoadingSpinner.svelte +6 -2
  36. package/src/lib/components/MarkupEditor.svelte +485 -0
  37. package/src/lib/components/MarkupOverlay.svelte +55 -0
  38. package/src/lib/components/MediaWorkbench.svelte +871 -0
  39. package/src/lib/components/MilestoneCard.svelte +1 -1
  40. package/src/lib/components/MilestoneTimeline.svelte +1 -1
  41. package/src/lib/components/Modal.svelte +39 -4
  42. package/src/lib/components/PDFViewer.svelte +105 -0
  43. package/src/lib/components/PdfThumbnail.svelte +3 -1
  44. package/src/lib/components/PhoneInput.svelte +183 -63
  45. package/src/lib/components/ResizablePanel.svelte +4 -4
  46. package/src/lib/components/SearchDropdown.svelte +26 -13
  47. package/src/lib/components/SelectInput.svelte +26 -4
  48. package/src/lib/components/SidebarUserFooter.svelte +1 -1
  49. package/src/lib/components/SignaturePad.svelte +8 -4
  50. package/src/lib/components/SmartImageEditor.svelte +720 -0
  51. package/src/lib/components/SortDropdown.svelte +9 -3
  52. package/src/lib/components/Sparkline.svelte +9 -0
  53. package/src/lib/components/StatusBadge.svelte +20 -18
  54. package/src/lib/components/TextArea.svelte +24 -5
  55. package/src/lib/components/TextInput.svelte +29 -6
  56. package/src/lib/components/ThemeSelector.svelte +15 -4
  57. package/src/lib/components/TimeSlotPicker.svelte +7 -7
  58. package/src/lib/components/UserAvatar.svelte +14 -1
  59. package/src/lib/components/VariablePicker.svelte +170 -0
  60. package/src/lib/components/VoicePlayer.svelte +4 -3
  61. package/src/lib/components/markup.ts +287 -0
  62. package/src/lib/components/messaging/ChannelInfoModal.svelte +9 -9
  63. package/src/lib/components/messaging/ChannelList.svelte +1 -1
  64. package/src/lib/components/messaging/ChannelMembersModal.svelte +1 -1
  65. package/src/lib/components/messaging/CreateChannelModal.svelte +1 -1
  66. package/src/lib/components/messaging/DirectMessageList.svelte +1 -1
  67. package/src/lib/components/messaging/EmojiSelector.svelte +2 -1
  68. package/src/lib/components/messaging/MentionAutocomplete.svelte +1 -1
  69. package/src/lib/components/messaging/MessageAttachment.svelte +3 -3
  70. package/src/lib/components/messaging/MessageAttachmentUpload.svelte +3 -3
  71. package/src/lib/components/messaging/MessageInput.svelte +1 -1
  72. package/src/lib/components/messaging/MessageItem.svelte +6 -3
  73. package/src/lib/components/messaging/NotificationSettingsModal.svelte +1 -1
  74. package/src/lib/components/messaging/QuotedMessageDisplay.svelte +6 -1
  75. package/src/lib/components/messaging/StartDMModal.svelte +1 -1
  76. package/src/lib/components/pipeline/Pipeline.svelte +4 -4
  77. package/src/lib/components/pipeline/PipelineCard.svelte +1 -1
  78. package/src/lib/components/pipeline/PipelineColumn.svelte +8 -3
  79. package/src/lib/index.ts +105 -1
  80. package/src/lib/stores/confirmDialog.svelte.ts +48 -0
  81. package/src/lib/stores/inputDialog.svelte.ts +51 -0
  82. package/src/lib/styles/rail.css +63 -0
  83. package/src/lib/types/annotation.ts +38 -0
  84. package/src/lib/types/comments.ts +97 -0
  85. package/src/lib/types/entityPreview.ts +45 -0
  86. package/src/lib/types/filePicker.ts +2 -0
  87. package/src/lib/types/smartImageEditor.ts +39 -0
  88. package/src/lib/types/templateVars.ts +36 -0
  89. package/src/lib/utils/dateFormatters.ts +12 -10
  90. package/src/lib/utils/phone.ts +80 -0
  91. package/src/lib/utils/taskUtils.ts +21 -7
@@ -115,11 +115,33 @@
115
115
  document.addEventListener('click', handleClickOutside);
116
116
  return () => document.removeEventListener('click', handleClickOutside);
117
117
  });
118
+
119
+ // Error-state shake (transitions.dev). Shakes the whole control wrapper when
120
+ // `error` becomes set. See TextInput for the rationale.
121
+ let hadError = false;
122
+ $effect(() => {
123
+ const hasError = !!error;
124
+ if (hasError && !hadError && selectElement) {
125
+ const reduce =
126
+ typeof window !== 'undefined' &&
127
+ window.matchMedia?.('(prefers-reduced-motion: reduce)').matches;
128
+ if (!reduce) {
129
+ selectElement.classList.remove('t-input-shake');
130
+ void selectElement.offsetWidth;
131
+ selectElement.classList.add('t-input-shake');
132
+ }
133
+ }
134
+ hadError = hasError;
135
+ });
118
136
  </script>
119
137
 
120
- <div class="form-control w-full" bind:this={selectElement}>
138
+ <div
139
+ class="form-control w-full"
140
+ bind:this={selectElement}
141
+ onanimationend={() => selectElement?.classList.remove('t-input-shake')}
142
+ >
121
143
  <label for={id} class="label">
122
- <span class="label-text font-medium">
144
+ <span class="text-[0.8125rem] font-medium text-base-content/85">
123
145
  {label}
124
146
  {#if required}
125
147
  <span class="text-error ml-1">*</span>
@@ -205,11 +227,11 @@
205
227
 
206
228
  {#if error}
207
229
  <div class="label">
208
- <span id="{id}-error" class="label-text-alt text-error" role="alert">{error}</span>
230
+ <span id="{id}-error" class="text-[0.8125rem] text-error" role="alert">{error}</span>
209
231
  </div>
210
232
  {:else if helpText}
211
233
  <div class="label">
212
- <span id="{id}-help" class="label-text-alt text-base-content/70">{helpText}</span>
234
+ <span id="{id}-help" class="text-[0.8125rem] text-base-content/45">{helpText}</span>
213
235
  </div>
214
236
  {/if}
215
237
  </div>
@@ -28,7 +28,7 @@
28
28
  <div class="flex items-center gap-2 px-2 py-1">
29
29
  <a href={accountHref} class="flex items-center gap-2 flex-1 min-w-0" title="Account settings">
30
30
  <UserAvatar name={profile?.full_name} email={user?.email} avatarUrl={profile?.avatar_url} size="sm" />
31
- <span class="truncate text-sm">{displayName}</span>
31
+ <span class="truncate text-[0.9375rem]">{displayName}</span>
32
32
  </a>
33
33
  <a href={signOutHref} class="btn btn-ghost btn-xs shrink-0">Sign out</a>
34
34
  </div>
@@ -12,7 +12,7 @@
12
12
  onSignatureChange,
13
13
  width = 400,
14
14
  height = 150,
15
- strokeColor = '#000',
15
+ strokeColor = '',
16
16
  strokeWidth = 2,
17
17
  label = 'Signature',
18
18
  required = false,
@@ -41,7 +41,10 @@
41
41
  const ctx = canvas.getContext('2d');
42
42
  if (!ctx) return;
43
43
 
44
- ctx.strokeStyle = strokeColor;
44
+ const resolvedStroke = strokeColor ||
45
+ getComputedStyle(canvas).getPropertyValue('--color-base-content').trim() ||
46
+ 'oklch(0.21 0 0)';
47
+ ctx.strokeStyle = resolvedStroke;
45
48
  ctx.lineWidth = strokeWidth;
46
49
  ctx.lineCap = 'round';
47
50
  ctx.lineJoin = 'round';
@@ -73,7 +76,7 @@
73
76
  }
74
77
 
75
78
  function draw(e: MouseEvent | TouchEvent) {
76
- if (!isDrawing) return;
79
+ if (!isDrawing || !ctx) return;
77
80
  e.preventDefault();
78
81
 
79
82
  const coords = getCoordinates(e);
@@ -148,7 +151,8 @@
148
151
  </div>
149
152
  {/if}
150
153
 
151
- <div class="border-2 border-base-300 rounded-lg bg-white overflow-hidden relative">
154
+ <div class="rounded-lg bg-base-100 overflow-hidden relative transition-all duration-300
155
+ {hasDrawn ? 'border-2 border-success/60' : 'border-2 border-base-300'}">
152
156
  <canvas
153
157
  bind:this={canvas}
154
158
  {width}