@getmicdrop/svelte-components 5.13.0 → 5.15.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.
- package/dist/calendar/OrderSummary/OrderSummary.svelte +67 -7
- package/dist/calendar/OrderSummary/OrderSummary.svelte.d.ts +2 -0
- package/dist/calendar/OrderSummary/OrderSummary.svelte.d.ts.map +1 -1
- package/dist/index.spec.js +1 -1
- package/dist/patterns/chat/ChatActivityNotice.svelte +41 -0
- package/dist/patterns/chat/ChatActivityNotice.svelte.d.ts +21 -0
- package/dist/patterns/chat/ChatActivityNotice.svelte.d.ts.map +1 -0
- package/dist/patterns/chat/ChatBubble.svelte +95 -0
- package/dist/patterns/chat/ChatBubble.svelte.d.ts +31 -0
- package/dist/patterns/chat/ChatBubble.svelte.d.ts.map +1 -0
- package/dist/patterns/chat/ChatContainer.svelte +46 -0
- package/dist/patterns/chat/ChatContainer.svelte.d.ts +21 -0
- package/dist/patterns/chat/ChatContainer.svelte.d.ts.map +1 -0
- package/dist/patterns/chat/ChatDateDivider.svelte +27 -0
- package/dist/patterns/chat/ChatDateDivider.svelte.d.ts +10 -0
- package/dist/patterns/chat/ChatDateDivider.svelte.d.ts.map +1 -0
- package/dist/patterns/chat/ChatInvitationBubble.svelte +37 -0
- package/dist/patterns/chat/ChatInvitationBubble.svelte.d.ts +12 -0
- package/dist/patterns/chat/ChatInvitationBubble.svelte.d.ts.map +1 -0
- package/dist/patterns/chat/ChatInvitationNotice.svelte +27 -0
- package/dist/patterns/chat/ChatInvitationNotice.svelte.d.ts +10 -0
- package/dist/patterns/chat/ChatInvitationNotice.svelte.d.ts.map +1 -0
- package/dist/patterns/chat/ChatMessageGroup.svelte +57 -0
- package/dist/patterns/chat/ChatMessageGroup.svelte.d.ts +25 -0
- package/dist/patterns/chat/ChatMessageGroup.svelte.d.ts.map +1 -0
- package/dist/patterns/chat/ChatSlotUpdate.svelte +46 -0
- package/dist/patterns/chat/ChatSlotUpdate.svelte.d.ts +16 -0
- package/dist/patterns/chat/ChatSlotUpdate.svelte.d.ts.map +1 -0
- package/dist/patterns/chat/ChatStatusBadge.svelte +91 -0
- package/dist/patterns/chat/ChatStatusBadge.svelte.d.ts +22 -0
- package/dist/patterns/chat/ChatStatusBadge.svelte.d.ts.map +1 -0
- package/dist/patterns/chat/ChatStatusTransition.svelte +64 -0
- package/dist/patterns/chat/ChatStatusTransition.svelte.d.ts +19 -0
- package/dist/patterns/chat/ChatStatusTransition.svelte.d.ts.map +1 -0
- package/dist/patterns/chat/ChatTextBubble.svelte +41 -0
- package/dist/patterns/chat/ChatTextBubble.svelte.d.ts +19 -0
- package/dist/patterns/chat/ChatTextBubble.svelte.d.ts.map +1 -0
- package/dist/patterns/chat/index.d.ts +12 -0
- package/dist/patterns/chat/index.d.ts.map +1 -0
- package/dist/patterns/chat/index.js +22 -0
- package/dist/patterns/index.d.ts +1 -0
- package/dist/patterns/index.js +3 -0
- package/dist/primitives/Button/Button.spec.js +8 -6
- package/dist/primitives/Input/Input.svelte +1 -1
- package/dist/recipes/ImageUploader/ImageUploader.svelte +1 -2
- package/dist/tokens/__tests__/sizing.test.js +5 -7
- package/dist/tokens/sizing.d.ts +20 -19
- package/dist/tokens/sizing.d.ts.map +1 -1
- package/dist/tokens/sizing.js +20 -19
- package/package.json +1 -1
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
/**
|
|
3
|
+
* ChatSlotUpdate - Slot/role change display
|
|
4
|
+
*
|
|
5
|
+
* Shows "{fromValue} → {toValue}" for role or slot changes.
|
|
6
|
+
*/
|
|
7
|
+
import { classNames } from '../../utils/utils.js';
|
|
8
|
+
|
|
9
|
+
interface Props {
|
|
10
|
+
/** Original value */
|
|
11
|
+
fromValue: string;
|
|
12
|
+
/** New value */
|
|
13
|
+
toValue: string;
|
|
14
|
+
/** Style variant - bubble (in message context) or inline (in notice) */
|
|
15
|
+
variant?: 'bubble' | 'inline';
|
|
16
|
+
/** Whether this is outbound (right side) */
|
|
17
|
+
outbound?: boolean;
|
|
18
|
+
/** Additional CSS classes */
|
|
19
|
+
className?: string;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
let {
|
|
23
|
+
fromValue,
|
|
24
|
+
toValue,
|
|
25
|
+
variant = 'bubble',
|
|
26
|
+
outbound = false,
|
|
27
|
+
className = '',
|
|
28
|
+
}: Props = $props();
|
|
29
|
+
|
|
30
|
+
let classes = $derived(
|
|
31
|
+
variant === 'bubble'
|
|
32
|
+
? classNames(
|
|
33
|
+
'px-4 py-2.5 rounded-2xl text-sm bg-gray-100 dark:bg-gray-800 text-gray-600 dark:text-gray-400',
|
|
34
|
+
outbound ? 'rounded-br-sm' : 'rounded-bl-sm',
|
|
35
|
+
className
|
|
36
|
+
)
|
|
37
|
+
: classNames(
|
|
38
|
+
'text-xs font-medium text-gray-500 dark:text-gray-400',
|
|
39
|
+
className
|
|
40
|
+
)
|
|
41
|
+
);
|
|
42
|
+
</script>
|
|
43
|
+
|
|
44
|
+
<span class={classes}>
|
|
45
|
+
{fromValue} → {toValue}
|
|
46
|
+
</span>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
interface Props {
|
|
2
|
+
/** Original value */
|
|
3
|
+
fromValue: string;
|
|
4
|
+
/** New value */
|
|
5
|
+
toValue: string;
|
|
6
|
+
/** Style variant - bubble (in message context) or inline (in notice) */
|
|
7
|
+
variant?: 'bubble' | 'inline';
|
|
8
|
+
/** Whether this is outbound (right side) */
|
|
9
|
+
outbound?: boolean;
|
|
10
|
+
/** Additional CSS classes */
|
|
11
|
+
className?: string;
|
|
12
|
+
}
|
|
13
|
+
declare const ChatSlotUpdate: import("svelte").Component<Props, {}, "">;
|
|
14
|
+
type ChatSlotUpdate = ReturnType<typeof ChatSlotUpdate>;
|
|
15
|
+
export default ChatSlotUpdate;
|
|
16
|
+
//# sourceMappingURL=ChatSlotUpdate.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatSlotUpdate.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/patterns/chat/ChatSlotUpdate.svelte.ts"],"names":[],"mappings":"AAWE,UAAU,KAAK;IACb,qBAAqB;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,OAAO,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC9B,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAkCH,QAAA,MAAM,cAAc,2CAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
/**
|
|
3
|
+
* ChatStatusBadge - Status indicator for chat activity feeds
|
|
4
|
+
*
|
|
5
|
+
* Displays status changes (Confirmed, Declined, Invited, etc.) with
|
|
6
|
+
* appropriate colors and icons in a pill/badge format.
|
|
7
|
+
*/
|
|
8
|
+
import type { Snippet, Component } from 'svelte';
|
|
9
|
+
import { classNames } from '../../utils/utils.js';
|
|
10
|
+
import CheckmarkFilled from 'carbon-icons-svelte/lib/CheckmarkFilled.svelte';
|
|
11
|
+
import CloseFilled from 'carbon-icons-svelte/lib/CloseFilled.svelte';
|
|
12
|
+
import SendAltFilled from 'carbon-icons-svelte/lib/SendAltFilled.svelte';
|
|
13
|
+
|
|
14
|
+
type StatusType = 'confirmed' | 'declined' | 'canceled' | 'invited' | 'pending' | string;
|
|
15
|
+
|
|
16
|
+
interface Props {
|
|
17
|
+
/** Status value */
|
|
18
|
+
status: StatusType;
|
|
19
|
+
/** Show as outbound style (right-aligned context) */
|
|
20
|
+
outbound?: boolean;
|
|
21
|
+
/** Additional CSS classes */
|
|
22
|
+
className?: string;
|
|
23
|
+
/** Optional custom icon */
|
|
24
|
+
icon?: Snippet;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
let {
|
|
28
|
+
status,
|
|
29
|
+
outbound = false,
|
|
30
|
+
className = '',
|
|
31
|
+
icon,
|
|
32
|
+
}: Props = $props();
|
|
33
|
+
|
|
34
|
+
interface StatusStyle {
|
|
35
|
+
textColor: string;
|
|
36
|
+
bgColor: string;
|
|
37
|
+
icon: Component<{ class?: string }> | null;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function getStatusStyle(s: string): StatusStyle {
|
|
41
|
+
switch (s?.toLowerCase()) {
|
|
42
|
+
case 'confirmed':
|
|
43
|
+
return {
|
|
44
|
+
textColor: 'text-green-600',
|
|
45
|
+
bgColor: 'bg-green-50 dark:bg-green-900/20',
|
|
46
|
+
icon: CheckmarkFilled,
|
|
47
|
+
};
|
|
48
|
+
case 'declined':
|
|
49
|
+
case 'canceled':
|
|
50
|
+
return {
|
|
51
|
+
textColor: 'text-red-600',
|
|
52
|
+
bgColor: 'bg-red-50 dark:bg-red-900/20',
|
|
53
|
+
icon: CloseFilled,
|
|
54
|
+
};
|
|
55
|
+
case 'invited':
|
|
56
|
+
return {
|
|
57
|
+
textColor: 'text-blue-600',
|
|
58
|
+
bgColor: 'bg-blue-50 dark:bg-blue-900/20',
|
|
59
|
+
icon: SendAltFilled,
|
|
60
|
+
};
|
|
61
|
+
default:
|
|
62
|
+
return {
|
|
63
|
+
textColor: 'text-gray-600',
|
|
64
|
+
bgColor: 'bg-gray-100 dark:bg-gray-800',
|
|
65
|
+
icon: null,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
let style = $derived(getStatusStyle(status));
|
|
71
|
+
|
|
72
|
+
let badgeClasses = $derived(
|
|
73
|
+
classNames(
|
|
74
|
+
'px-4 py-2.5 rounded-2xl text-sm font-medium flex items-center gap-1.5',
|
|
75
|
+
style.bgColor,
|
|
76
|
+
style.textColor,
|
|
77
|
+
outbound ? 'rounded-br-sm' : 'rounded-bl-sm',
|
|
78
|
+
className
|
|
79
|
+
)
|
|
80
|
+
);
|
|
81
|
+
</script>
|
|
82
|
+
|
|
83
|
+
<div class={badgeClasses}>
|
|
84
|
+
{#if icon}
|
|
85
|
+
{@render icon()}
|
|
86
|
+
{:else if style.icon}
|
|
87
|
+
{@const IconComponent = style.icon}
|
|
88
|
+
<IconComponent class="w-4 h-4" />
|
|
89
|
+
{/if}
|
|
90
|
+
<span class="capitalize">{status}</span>
|
|
91
|
+
</div>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ChatStatusBadge - Status indicator for chat activity feeds
|
|
3
|
+
*
|
|
4
|
+
* Displays status changes (Confirmed, Declined, Invited, etc.) with
|
|
5
|
+
* appropriate colors and icons in a pill/badge format.
|
|
6
|
+
*/
|
|
7
|
+
import type { Snippet, Component } from 'svelte';
|
|
8
|
+
type StatusType = 'confirmed' | 'declined' | 'canceled' | 'invited' | 'pending' | string;
|
|
9
|
+
interface Props {
|
|
10
|
+
/** Status value */
|
|
11
|
+
status: StatusType;
|
|
12
|
+
/** Show as outbound style (right-aligned context) */
|
|
13
|
+
outbound?: boolean;
|
|
14
|
+
/** Additional CSS classes */
|
|
15
|
+
className?: string;
|
|
16
|
+
/** Optional custom icon */
|
|
17
|
+
icon?: Snippet;
|
|
18
|
+
}
|
|
19
|
+
declare const ChatStatusBadge: Component<Props, {}, "">;
|
|
20
|
+
type ChatStatusBadge = ReturnType<typeof ChatStatusBadge>;
|
|
21
|
+
export default ChatStatusBadge;
|
|
22
|
+
//# sourceMappingURL=ChatStatusBadge.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatStatusBadge.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/patterns/chat/ChatStatusBadge.svelte.ts"],"names":[],"mappings":"AAGA;;;;;KAKK;AACL,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAO/C,KAAK,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAEzF,UAAU,KAAK;IACb,mBAAmB;IACnB,MAAM,EAAE,UAAU,CAAC;IACnB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAgFH,QAAA,MAAM,eAAe,0BAAwC,CAAC;AAC9D,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1D,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
/**
|
|
3
|
+
* ChatStatusTransition - Status change display with icons
|
|
4
|
+
*
|
|
5
|
+
* Shows "{fromStatus} → {toStatus}" with colored icons for each status.
|
|
6
|
+
* Used in activity notices to show silent status changes.
|
|
7
|
+
*/
|
|
8
|
+
import type { Component } from 'svelte';
|
|
9
|
+
import { classNames } from '../../utils/utils.js';
|
|
10
|
+
import CheckmarkFilled from 'carbon-icons-svelte/lib/CheckmarkFilled.svelte';
|
|
11
|
+
import CloseFilled from 'carbon-icons-svelte/lib/CloseFilled.svelte';
|
|
12
|
+
import SendAltFilled from 'carbon-icons-svelte/lib/SendAltFilled.svelte';
|
|
13
|
+
|
|
14
|
+
interface Props {
|
|
15
|
+
/** Original status */
|
|
16
|
+
fromStatus: string;
|
|
17
|
+
/** New status */
|
|
18
|
+
toStatus: string;
|
|
19
|
+
/** Additional CSS classes */
|
|
20
|
+
className?: string;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
let {
|
|
24
|
+
fromStatus,
|
|
25
|
+
toStatus,
|
|
26
|
+
className = '',
|
|
27
|
+
}: Props = $props();
|
|
28
|
+
|
|
29
|
+
interface StatusStyle {
|
|
30
|
+
color: string;
|
|
31
|
+
icon: Component<{ class?: string }> | null;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function getStatusStyle(status: string): StatusStyle {
|
|
35
|
+
switch (status?.toLowerCase()) {
|
|
36
|
+
case 'confirmed':
|
|
37
|
+
return { color: 'text-green-600', icon: CheckmarkFilled };
|
|
38
|
+
case 'declined':
|
|
39
|
+
case 'canceled':
|
|
40
|
+
return { color: 'text-red-600', icon: CloseFilled };
|
|
41
|
+
case 'invited':
|
|
42
|
+
return { color: 'text-blue-600', icon: SendAltFilled };
|
|
43
|
+
default:
|
|
44
|
+
return { color: 'text-gray-600', icon: null };
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
let fromStyle = $derived(getStatusStyle(fromStatus));
|
|
49
|
+
let toStyle = $derived(getStatusStyle(toStatus));
|
|
50
|
+
</script>
|
|
51
|
+
|
|
52
|
+
<span class={classNames('text-xs font-medium flex items-center gap-1', className)}>
|
|
53
|
+
{#if fromStyle.icon}
|
|
54
|
+
{@const FromIcon = fromStyle.icon}
|
|
55
|
+
<FromIcon class="w-3 h-3 {fromStyle.color}" />
|
|
56
|
+
{/if}
|
|
57
|
+
<span class={fromStyle.color}>{fromStatus}</span>
|
|
58
|
+
<span class="text-gray-400 mx-1">→</span>
|
|
59
|
+
{#if toStyle.icon}
|
|
60
|
+
{@const ToIcon = toStyle.icon}
|
|
61
|
+
<ToIcon class="w-3 h-3 {toStyle.color}" />
|
|
62
|
+
{/if}
|
|
63
|
+
<span class={toStyle.color}>{toStatus}</span>
|
|
64
|
+
</span>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ChatStatusTransition - Status change display with icons
|
|
3
|
+
*
|
|
4
|
+
* Shows "{fromStatus} → {toStatus}" with colored icons for each status.
|
|
5
|
+
* Used in activity notices to show silent status changes.
|
|
6
|
+
*/
|
|
7
|
+
import type { Component } from 'svelte';
|
|
8
|
+
interface Props {
|
|
9
|
+
/** Original status */
|
|
10
|
+
fromStatus: string;
|
|
11
|
+
/** New status */
|
|
12
|
+
toStatus: string;
|
|
13
|
+
/** Additional CSS classes */
|
|
14
|
+
className?: string;
|
|
15
|
+
}
|
|
16
|
+
declare const ChatStatusTransition: Component<Props, {}, "">;
|
|
17
|
+
type ChatStatusTransition = ReturnType<typeof ChatStatusTransition>;
|
|
18
|
+
export default ChatStatusTransition;
|
|
19
|
+
//# sourceMappingURL=ChatStatusTransition.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatStatusTransition.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/patterns/chat/ChatStatusTransition.svelte.ts"],"names":[],"mappings":"AAGA;;;;;KAKK;AACL,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAOtC,UAAU,KAAK;IACb,sBAAsB;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAwDH,QAAA,MAAM,oBAAoB,0BAAwC,CAAC;AACnE,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACpE,eAAe,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
/**
|
|
3
|
+
* ChatTextBubble - Simple text bubble without the full ChatBubble wrapper
|
|
4
|
+
*
|
|
5
|
+
* Just the bubble itself, for use within ChatMessageGroup or other contexts
|
|
6
|
+
* where you don't need avatar/timestamp handling.
|
|
7
|
+
*/
|
|
8
|
+
import type { Snippet } from 'svelte';
|
|
9
|
+
import { classNames } from '../../utils/utils.js';
|
|
10
|
+
|
|
11
|
+
interface Props {
|
|
12
|
+
/** Direction - inbound (gray) or outbound (blue) */
|
|
13
|
+
direction?: 'inbound' | 'outbound';
|
|
14
|
+
/** Additional CSS classes */
|
|
15
|
+
className?: string;
|
|
16
|
+
/** Content */
|
|
17
|
+
children?: Snippet;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
let {
|
|
21
|
+
direction = 'inbound',
|
|
22
|
+
className = '',
|
|
23
|
+
children,
|
|
24
|
+
}: Props = $props();
|
|
25
|
+
|
|
26
|
+
let isOutbound = $derived(direction === 'outbound');
|
|
27
|
+
|
|
28
|
+
let bubbleClasses = $derived(
|
|
29
|
+
classNames(
|
|
30
|
+
'px-4 py-2.5 rounded-2xl text-sm',
|
|
31
|
+
isOutbound
|
|
32
|
+
? 'bg-blue-600 text-white rounded-br-sm'
|
|
33
|
+
: 'bg-gray-100 dark:bg-gray-800 text-gray-900 dark:text-white rounded-bl-sm',
|
|
34
|
+
className
|
|
35
|
+
)
|
|
36
|
+
);
|
|
37
|
+
</script>
|
|
38
|
+
|
|
39
|
+
<div class={bubbleClasses}>
|
|
40
|
+
{@render children?.()}
|
|
41
|
+
</div>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ChatTextBubble - Simple text bubble without the full ChatBubble wrapper
|
|
3
|
+
*
|
|
4
|
+
* Just the bubble itself, for use within ChatMessageGroup or other contexts
|
|
5
|
+
* where you don't need avatar/timestamp handling.
|
|
6
|
+
*/
|
|
7
|
+
import type { Snippet } from 'svelte';
|
|
8
|
+
interface Props {
|
|
9
|
+
/** Direction - inbound (gray) or outbound (blue) */
|
|
10
|
+
direction?: 'inbound' | 'outbound';
|
|
11
|
+
/** Additional CSS classes */
|
|
12
|
+
className?: string;
|
|
13
|
+
/** Content */
|
|
14
|
+
children?: Snippet;
|
|
15
|
+
}
|
|
16
|
+
declare const ChatTextBubble: import("svelte").Component<Props, {}, "">;
|
|
17
|
+
type ChatTextBubble = ReturnType<typeof ChatTextBubble>;
|
|
18
|
+
export default ChatTextBubble;
|
|
19
|
+
//# sourceMappingURL=ChatTextBubble.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatTextBubble.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/patterns/chat/ChatTextBubble.svelte.ts"],"names":[],"mappings":"AAGA;;;;;KAKK;AACL,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAIpC,UAAU,KAAK;IACb,oDAAoD;IACpD,SAAS,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;IACnC,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAgCH,QAAA,MAAM,cAAc,2CAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { default as ChatContainer } from "./ChatContainer.svelte";
|
|
2
|
+
export { default as ChatMessageGroup } from "./ChatMessageGroup.svelte";
|
|
3
|
+
export { default as ChatBubble } from "./ChatBubble.svelte";
|
|
4
|
+
export { default as ChatTextBubble } from "./ChatTextBubble.svelte";
|
|
5
|
+
export { default as ChatInvitationBubble } from "./ChatInvitationBubble.svelte";
|
|
6
|
+
export { default as ChatStatusBadge } from "./ChatStatusBadge.svelte";
|
|
7
|
+
export { default as ChatStatusTransition } from "./ChatStatusTransition.svelte";
|
|
8
|
+
export { default as ChatSlotUpdate } from "./ChatSlotUpdate.svelte";
|
|
9
|
+
export { default as ChatDateDivider } from "./ChatDateDivider.svelte";
|
|
10
|
+
export { default as ChatActivityNotice } from "./ChatActivityNotice.svelte";
|
|
11
|
+
export { default as ChatInvitationNotice } from "./ChatInvitationNotice.svelte";
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/patterns/chat/index.js"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// CHAT PATTERNS - Chat interface components
|
|
3
|
+
// =============================================================================
|
|
4
|
+
|
|
5
|
+
// Core layout
|
|
6
|
+
export { default as ChatContainer } from './ChatContainer.svelte';
|
|
7
|
+
export { default as ChatMessageGroup } from './ChatMessageGroup.svelte';
|
|
8
|
+
|
|
9
|
+
// Message bubbles
|
|
10
|
+
export { default as ChatBubble } from './ChatBubble.svelte';
|
|
11
|
+
export { default as ChatTextBubble } from './ChatTextBubble.svelte';
|
|
12
|
+
export { default as ChatInvitationBubble } from './ChatInvitationBubble.svelte';
|
|
13
|
+
|
|
14
|
+
// Status displays
|
|
15
|
+
export { default as ChatStatusBadge } from './ChatStatusBadge.svelte';
|
|
16
|
+
export { default as ChatStatusTransition } from './ChatStatusTransition.svelte';
|
|
17
|
+
export { default as ChatSlotUpdate } from './ChatSlotUpdate.svelte';
|
|
18
|
+
|
|
19
|
+
// Dividers and notices
|
|
20
|
+
export { default as ChatDateDivider } from './ChatDateDivider.svelte';
|
|
21
|
+
export { default as ChatActivityNotice } from './ChatActivityNotice.svelte';
|
|
22
|
+
export { default as ChatInvitationNotice } from './ChatInvitationNotice.svelte';
|
package/dist/patterns/index.d.ts
CHANGED
package/dist/patterns/index.js
CHANGED
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
// PATTERNS - Layout & flow components (Layer 3)
|
|
3
3
|
// =============================================================================
|
|
4
4
|
|
|
5
|
+
// Chat - re-export from chat/index.js
|
|
6
|
+
export * from './chat/index.js';
|
|
7
|
+
|
|
5
8
|
// Forms - re-export from forms/index.js
|
|
6
9
|
export * from './forms/index.js';
|
|
7
10
|
|
|
@@ -103,54 +103,56 @@ describe('Button Sizes', () => {
|
|
|
103
103
|
test('Full width size', () => {
|
|
104
104
|
const { button } = setupTest({ size: 'full' });
|
|
105
105
|
expect(button).toHaveClass('w-full');
|
|
106
|
+
expect(button).toHaveClass('h-11');
|
|
106
107
|
expect(button).toHaveClass('px-5');
|
|
107
|
-
expect(button).toHaveClass('py-3');
|
|
108
108
|
});
|
|
109
109
|
|
|
110
110
|
test('Full width on mobile, auto on desktop', () => {
|
|
111
111
|
const { button } = setupTest({ size: 'full-md-auto' });
|
|
112
112
|
expect(button).toHaveClass('w-full');
|
|
113
|
+
expect(button).toHaveClass('h-11');
|
|
113
114
|
expect(button).toHaveClass('md:w-auto');
|
|
114
115
|
});
|
|
115
116
|
|
|
116
117
|
test('XL size', () => {
|
|
117
118
|
const { button } = setupTest({ size: 'xl' });
|
|
119
|
+
expect(button).toHaveClass('h-12');
|
|
118
120
|
expect(button).toHaveClass('px-6');
|
|
119
|
-
expect(button).toHaveClass('py-3.5');
|
|
120
121
|
expect(button).toHaveClass('text-sm');
|
|
121
122
|
});
|
|
122
123
|
|
|
123
124
|
test('Large size', () => {
|
|
124
125
|
const { button } = setupTest({ size: 'lg' });
|
|
126
|
+
expect(button).toHaveClass('h-11');
|
|
125
127
|
expect(button).toHaveClass('px-5');
|
|
126
|
-
expect(button).toHaveClass('py-3');
|
|
127
128
|
expect(button).toHaveClass('text-sm');
|
|
128
129
|
});
|
|
129
130
|
|
|
130
131
|
test('Medium size (default)', () => {
|
|
131
132
|
const { button } = setupTest({ size: 'md' });
|
|
133
|
+
expect(button).toHaveClass('h-10');
|
|
132
134
|
expect(button).toHaveClass('px-4');
|
|
133
|
-
expect(button).toHaveClass('py-2.5');
|
|
134
135
|
expect(button).toHaveClass('text-sm');
|
|
135
136
|
});
|
|
136
137
|
|
|
137
138
|
test('Small size', () => {
|
|
138
139
|
const { button } = setupTest({ size: 'sm' });
|
|
140
|
+
expect(button).toHaveClass('h-9');
|
|
139
141
|
expect(button).toHaveClass('px-3');
|
|
140
|
-
expect(button).toHaveClass('py-2');
|
|
141
142
|
expect(button).toHaveClass('text-sm');
|
|
142
143
|
});
|
|
143
144
|
|
|
144
145
|
test('Extra small size', () => {
|
|
145
146
|
const { button } = setupTest({ size: 'xs' });
|
|
147
|
+
expect(button).toHaveClass('h-8');
|
|
146
148
|
expect(button).toHaveClass('px-3');
|
|
147
|
-
expect(button).toHaveClass('py-1.5');
|
|
148
149
|
expect(button).toHaveClass('text-xs');
|
|
149
150
|
});
|
|
150
151
|
|
|
151
152
|
test('Half width size', () => {
|
|
152
153
|
const { button } = setupTest({ size: 'half' });
|
|
153
154
|
expect(button).toHaveClass('w-1/2');
|
|
155
|
+
expect(button).toHaveClass('h-10');
|
|
154
156
|
});
|
|
155
157
|
});
|
|
156
158
|
|
|
@@ -342,7 +342,7 @@
|
|
|
342
342
|
{:else}
|
|
343
343
|
<div class="relative flex items-center w-full">
|
|
344
344
|
{#if leftIcon}
|
|
345
|
-
<div class="absolute left-3
|
|
345
|
+
<div class="absolute left-3 inset-y-0 flex items-center text-gray-400 z-10 pointer-events-none">
|
|
346
346
|
{@render leftIcon()}
|
|
347
347
|
</div>
|
|
348
348
|
{/if}
|
|
@@ -627,7 +627,7 @@
|
|
|
627
627
|
{:else}
|
|
628
628
|
<!-- Empty dropzone with direct drag-drop support -->
|
|
629
629
|
<div
|
|
630
|
-
class="{shapeAspects[shape]} filepond-wrapper-single {shape === 'wide' ? 'filepond-wide' : ''}
|
|
630
|
+
class="{shapeAspects[shape]} filepond-wrapper-single rounded-xl {shape === 'wide' ? 'filepond-wide' : ''}
|
|
631
631
|
{isDropzoneDragOver ? 'dropzone-drag-over' : ''}"
|
|
632
632
|
role="button"
|
|
633
633
|
tabindex="0"
|
|
@@ -883,7 +883,6 @@
|
|
|
883
883
|
/* Single mode dropzone styling */
|
|
884
884
|
.filepond-wrapper-single {
|
|
885
885
|
border: 2px dashed rgb(209 213 219); /* gray-300 */
|
|
886
|
-
border-radius: 0.75rem; /* rounded-xl */
|
|
887
886
|
background-color: rgb(249 250 251); /* gray-50 */
|
|
888
887
|
transition-property: color, background-color, border-color;
|
|
889
888
|
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
@@ -22,9 +22,8 @@ describe('sizing tokens', () => {
|
|
|
22
22
|
expect(formInputSizes.md).toContain('h-10');
|
|
23
23
|
expect(formInputSizes.lg).toContain('h-12');
|
|
24
24
|
});
|
|
25
|
-
it('includes padding and text size classes', () => {
|
|
25
|
+
it('includes horizontal padding and text size classes', () => {
|
|
26
26
|
for (const size of Object.values(formInputSizes)) {
|
|
27
|
-
expect(size).toMatch(/py-\d/);
|
|
28
27
|
expect(size).toMatch(/px-\d/);
|
|
29
28
|
expect(size).toMatch(/text-(sm|base)/);
|
|
30
29
|
}
|
|
@@ -39,14 +38,13 @@ describe('sizing tokens', () => {
|
|
|
39
38
|
expect(formControlSizes).toHaveProperty('md');
|
|
40
39
|
expect(formControlSizes).toHaveProperty('lg');
|
|
41
40
|
});
|
|
42
|
-
it('
|
|
41
|
+
it('includes explicit height classes for toolbar alignment', () => {
|
|
43
42
|
for (const size of Object.values(formControlSizes)) {
|
|
44
|
-
expect(size).
|
|
43
|
+
expect(size).toMatch(/h-\d+/);
|
|
45
44
|
}
|
|
46
45
|
});
|
|
47
46
|
it('includes padding and text size classes', () => {
|
|
48
47
|
for (const size of Object.values(formControlSizes)) {
|
|
49
|
-
expect(size).toMatch(/py-\d/);
|
|
50
48
|
expect(size).toMatch(/px-\d/);
|
|
51
49
|
expect(size).toMatch(/text-(sm|base)/);
|
|
52
50
|
}
|
|
@@ -170,11 +168,11 @@ describe('sizing tokens', () => {
|
|
|
170
168
|
expect(buttonSizes).toHaveProperty('full-md-auto');
|
|
171
169
|
expect(buttonSizes).toHaveProperty('half');
|
|
172
170
|
});
|
|
173
|
-
it('standard sizes include padding and text sizing', () => {
|
|
171
|
+
it('standard sizes include explicit height, padding and text sizing', () => {
|
|
174
172
|
const standardSizes = ['xs', 'sm', 'md', 'lg', 'xl'];
|
|
175
173
|
for (const size of standardSizes) {
|
|
174
|
+
expect(buttonSizes[size]).toMatch(/h-\d+/);
|
|
176
175
|
expect(buttonSizes[size]).toMatch(/px-\d/);
|
|
177
|
-
expect(buttonSizes[size]).toMatch(/py-\d/);
|
|
178
176
|
expect(buttonSizes[size]).toMatch(/text-(xs|sm)/);
|
|
179
177
|
}
|
|
180
178
|
});
|
package/dist/tokens/sizing.d.ts
CHANGED
|
@@ -6,21 +6,21 @@
|
|
|
6
6
|
*/
|
|
7
7
|
/**
|
|
8
8
|
* Form input sizes - for Input component with fixed heights
|
|
9
|
-
*
|
|
9
|
+
* Uses explicit heights for consistent toolbar alignment.
|
|
10
10
|
*/
|
|
11
11
|
export declare const formInputSizes: {
|
|
12
|
-
readonly sm: "
|
|
13
|
-
readonly md: "
|
|
14
|
-
readonly lg: "
|
|
12
|
+
readonly sm: "h-9 px-3 text-sm";
|
|
13
|
+
readonly md: "h-10 px-4 text-sm";
|
|
14
|
+
readonly lg: "h-12 px-4 text-base";
|
|
15
15
|
};
|
|
16
16
|
/**
|
|
17
|
-
* Form control sizes - for Select and other form controls
|
|
18
|
-
*
|
|
17
|
+
* Form control sizes - for Select and other form controls
|
|
18
|
+
* Uses explicit heights to match buttons and inputs for toolbar alignment.
|
|
19
19
|
*/
|
|
20
20
|
export declare const formControlSizes: {
|
|
21
|
-
readonly sm: "
|
|
22
|
-
readonly md: "
|
|
23
|
-
readonly lg: "
|
|
21
|
+
readonly sm: "h-9 px-3 text-sm";
|
|
22
|
+
readonly md: "h-10 px-4 text-sm";
|
|
23
|
+
readonly lg: "h-12 px-4 text-base";
|
|
24
24
|
};
|
|
25
25
|
export type FormInputSize = keyof typeof formInputSizes;
|
|
26
26
|
export type FormControlSize = keyof typeof formControlSizes;
|
|
@@ -63,18 +63,19 @@ export declare const skeletonSizes: {
|
|
|
63
63
|
};
|
|
64
64
|
export type SkeletonSize = keyof typeof skeletonSizes;
|
|
65
65
|
/**
|
|
66
|
-
* Standard button sizes - padding and
|
|
66
|
+
* Standard button sizes - padding, text sizing, and explicit heights for consistency.
|
|
67
|
+
* All toolbar elements (buttons, inputs, selects) should align at the same height.
|
|
67
68
|
*/
|
|
68
69
|
export declare const buttonSizes: {
|
|
69
|
-
readonly xs: "px-3
|
|
70
|
-
readonly sm: "px-3
|
|
71
|
-
readonly md: "px-4
|
|
72
|
-
readonly lg: "px-5
|
|
73
|
-
readonly xl: "px-6
|
|
74
|
-
readonly 'xl-medium': "w-full px-6
|
|
75
|
-
readonly full: "w-full px-5
|
|
76
|
-
readonly 'full-md-auto': "w-full px-5
|
|
77
|
-
readonly half: "w-1/2 px-4
|
|
70
|
+
readonly xs: "h-8 px-3 text-xs";
|
|
71
|
+
readonly sm: "h-9 px-3 text-sm";
|
|
72
|
+
readonly md: "h-10 px-4 text-sm";
|
|
73
|
+
readonly lg: "h-11 px-5 text-sm";
|
|
74
|
+
readonly xl: "h-12 px-6 text-sm";
|
|
75
|
+
readonly 'xl-medium': "w-full h-12 px-6 text-sm";
|
|
76
|
+
readonly full: "w-full h-11 px-5 text-sm";
|
|
77
|
+
readonly 'full-md-auto': "w-full h-11 px-5 text-sm md:w-auto";
|
|
78
|
+
readonly half: "w-1/2 h-10 px-4 text-sm";
|
|
78
79
|
readonly landing: "h-12 sm:h-14 px-6 sm:px-8 text-base sm:text-lg";
|
|
79
80
|
};
|
|
80
81
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sizing.d.ts","sourceRoot":"","sources":["../../src/lib/tokens/sizing.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;;GAGG;AACH,eAAO,MAAM,cAAc;;;;CAIjB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,gBAAgB;;;;CAInB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,cAAc,CAAC;AACxD,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,gBAAgB,CAAC;AAM5D;;;GAGG;AACH,eAAO,MAAM,SAAS;;;;;;CAMZ,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,SAAS,CAAC;AAM9C;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;CAKb,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,UAAU,CAItE,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,UAAU,CAAC;AAChD,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAM3D;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;CAMhB,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,MAAM,OAAO,aAAa,CAAC;AAMtD
|
|
1
|
+
{"version":3,"file":"sizing.d.ts","sourceRoot":"","sources":["../../src/lib/tokens/sizing.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;;GAGG;AACH,eAAO,MAAM,cAAc;;;;CAIjB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,gBAAgB;;;;CAInB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,cAAc,CAAC;AACxD,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,gBAAgB,CAAC;AAM5D;;;GAGG;AACH,eAAO,MAAM,SAAS;;;;;;CAMZ,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,SAAS,CAAC;AAM9C;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;CAKb,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,UAAU,CAItE,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,UAAU,CAAC;AAChD,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAM3D;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;CAMhB,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,MAAM,OAAO,aAAa,CAAC;AAMtD;;;GAGG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;CAYd,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;CAKlB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;CAIpB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;CAKtB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,eAAe;;;;CAIlB,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,WAAW,CAAC;AAClD,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,eAAe,CAAC;AAC1D,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,iBAAiB,CAAC;AAC9D,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,mBAAmB,CAAC;AAClE,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,eAAe,CAAC"}
|