@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.
- package/README.md +123 -0
- package/package.json +3 -1
- package/src/lib/actions/railNav.ts +473 -0
- package/src/lib/components/AnnotationLayer.svelte +108 -0
- package/src/lib/components/AnnotationPanel.svelte +319 -0
- package/src/lib/components/AudioWaveform.svelte +9 -5
- package/src/lib/components/AvailabilityModal.svelte +7 -3
- package/src/lib/components/AvatarUpload.svelte +27 -4
- package/src/lib/components/BookingForm.svelte +11 -9
- package/src/lib/components/BurndownChart.svelte +778 -0
- package/src/lib/components/Button.svelte +10 -1
- package/src/lib/components/CalendarPicker.svelte +3 -3
- package/src/lib/components/Card.svelte +2 -2
- package/src/lib/components/ChipInput.svelte +21 -15
- package/src/lib/components/ColorSelector.svelte +17 -13
- package/src/lib/components/CommentThread.svelte +773 -0
- package/src/lib/components/ConfirmDialog.svelte +348 -0
- package/src/lib/components/ConfirmModal.svelte +78 -11
- package/src/lib/components/ContextMenu.svelte +188 -0
- package/src/lib/components/CountdownTimer.svelte +1 -1
- package/src/lib/components/DateRangePicker.svelte +6 -4
- package/src/lib/components/Drawer.svelte +36 -3
- package/src/lib/components/EntityPreviewCard.svelte +104 -0
- package/src/lib/components/FileDropzone.svelte +493 -0
- package/src/lib/components/FilePicker.svelte +83 -14
- package/src/lib/components/FileThumbnail.svelte +80 -0
- package/src/lib/components/FilterDropdown.svelte +11 -11
- package/src/lib/components/HunkDiffView.svelte +348 -0
- package/src/lib/components/ImageLightbox.svelte +274 -0
- package/src/lib/components/ImageUpload.svelte +58 -9
- package/src/lib/components/InlineEdit.svelte +15 -9
- package/src/lib/components/InputDialog.svelte +327 -0
- package/src/lib/components/LazyImage.svelte +1 -0
- package/src/lib/components/LinkShortener.svelte +1 -1
- package/src/lib/components/LoadingSpinner.svelte +6 -2
- package/src/lib/components/MarkupEditor.svelte +485 -0
- package/src/lib/components/MarkupOverlay.svelte +55 -0
- package/src/lib/components/MediaWorkbench.svelte +871 -0
- package/src/lib/components/MilestoneCard.svelte +1 -1
- package/src/lib/components/MilestoneTimeline.svelte +1 -1
- package/src/lib/components/Modal.svelte +39 -4
- package/src/lib/components/PDFViewer.svelte +105 -0
- package/src/lib/components/PdfThumbnail.svelte +3 -1
- package/src/lib/components/PhoneInput.svelte +183 -63
- package/src/lib/components/ResizablePanel.svelte +4 -4
- package/src/lib/components/SearchDropdown.svelte +26 -13
- package/src/lib/components/SelectInput.svelte +26 -4
- package/src/lib/components/SidebarUserFooter.svelte +1 -1
- package/src/lib/components/SignaturePad.svelte +8 -4
- package/src/lib/components/SmartImageEditor.svelte +720 -0
- package/src/lib/components/SortDropdown.svelte +9 -3
- package/src/lib/components/Sparkline.svelte +9 -0
- package/src/lib/components/StatusBadge.svelte +20 -18
- package/src/lib/components/TextArea.svelte +24 -5
- package/src/lib/components/TextInput.svelte +29 -6
- package/src/lib/components/ThemeSelector.svelte +15 -4
- package/src/lib/components/TimeSlotPicker.svelte +7 -7
- package/src/lib/components/UserAvatar.svelte +14 -1
- package/src/lib/components/VariablePicker.svelte +170 -0
- package/src/lib/components/VoicePlayer.svelte +4 -3
- package/src/lib/components/markup.ts +287 -0
- package/src/lib/components/messaging/ChannelInfoModal.svelte +9 -9
- package/src/lib/components/messaging/ChannelList.svelte +1 -1
- package/src/lib/components/messaging/ChannelMembersModal.svelte +1 -1
- package/src/lib/components/messaging/CreateChannelModal.svelte +1 -1
- package/src/lib/components/messaging/DirectMessageList.svelte +1 -1
- package/src/lib/components/messaging/EmojiSelector.svelte +2 -1
- package/src/lib/components/messaging/MentionAutocomplete.svelte +1 -1
- package/src/lib/components/messaging/MessageAttachment.svelte +3 -3
- package/src/lib/components/messaging/MessageAttachmentUpload.svelte +3 -3
- package/src/lib/components/messaging/MessageInput.svelte +1 -1
- package/src/lib/components/messaging/MessageItem.svelte +6 -3
- package/src/lib/components/messaging/NotificationSettingsModal.svelte +1 -1
- package/src/lib/components/messaging/QuotedMessageDisplay.svelte +6 -1
- package/src/lib/components/messaging/StartDMModal.svelte +1 -1
- package/src/lib/components/pipeline/Pipeline.svelte +4 -4
- package/src/lib/components/pipeline/PipelineCard.svelte +1 -1
- package/src/lib/components/pipeline/PipelineColumn.svelte +8 -3
- package/src/lib/index.ts +105 -1
- package/src/lib/stores/confirmDialog.svelte.ts +48 -0
- package/src/lib/stores/inputDialog.svelte.ts +51 -0
- package/src/lib/styles/rail.css +63 -0
- package/src/lib/types/annotation.ts +38 -0
- package/src/lib/types/comments.ts +97 -0
- package/src/lib/types/entityPreview.ts +45 -0
- package/src/lib/types/filePicker.ts +2 -0
- package/src/lib/types/smartImageEditor.ts +39 -0
- package/src/lib/types/templateVars.ts +36 -0
- package/src/lib/utils/dateFormatters.ts +12 -10
- package/src/lib/utils/phone.ts +80 -0
- 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
|
|
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="
|
|
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="
|
|
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="
|
|
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-
|
|
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 = '
|
|
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
|
-
|
|
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="
|
|
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}
|