@invopop/popui 0.1.70 → 0.1.72

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.
@@ -0,0 +1,35 @@
1
+ <script lang="ts">
2
+ import { TooltipAutoHide, TooltipContent, TooltipTrigger } from './tooltip'
3
+ import type { AvatarIconProps } from './types.js'
4
+
5
+ let { name, showMask = false, size = 'md', tooltipContent, children }: AvatarIconProps = $props()
6
+
7
+ const masks = {
8
+ md: `url("data:image/svg+xml,%3Csvg width='26' height='28' viewBox='0 0 26 28' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M18.4004 0C21.7603 9.85818e-10 23.4402 0.000417824 24.7236 0.654297C25.1531 0.873098 25.552 1.14144 25.9131 1.45215C25.5579 1.90591 25.2449 2.39516 24.9805 2.91406C23.9996 4.83925 24 7.36007 24 12.4004V15.5996C24 20.6399 23.9996 23.1608 24.9805 25.0859C25.2447 25.6046 25.5581 26.0933 25.9131 26.5469C25.5519 26.8578 25.1532 27.1268 24.7236 27.3457C23.4402 27.9996 21.7603 28 18.4004 28H9.59961C6.23965 28 4.55977 27.9996 3.27637 27.3457C2.14739 26.7705 1.22954 25.8526 0.654297 24.7236C0.00041777 23.4402 9.8162e-10 21.7603 0 18.4004V9.59961C9.88222e-10 6.23965 0.000417662 4.55977 0.654297 3.27637C1.22954 2.14739 2.14739 1.22954 3.27637 0.654297C4.55977 0.000417608 6.23965 9.84018e-10 9.59961 0H18.4004Z' fill='white'/%3E%3C/svg%3E")`,
9
+ sm: `url("data:image/svg+xml,%3Csvg width='23' height='24' viewBox='0 0 23 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M17.5996 1.63272e-09C19.8398 1.63272e-09 20.9608 -0.000427061 21.8164 0.435547C21.9034 0.479874 21.9882 0.527831 22.0713 0.578125C21.9172 0.80011 21.778 1.03354 21.6543 1.27637C21.0004 2.55977 21 4.23965 21 7.59961V16.4004C21 19.7603 21.0004 21.4402 21.6543 22.7236C21.7779 22.9662 21.9174 23.1991 22.0713 23.4209C21.9881 23.4713 21.9035 23.52 21.8164 23.5645C20.9608 24.0004 19.8398 24 17.5996 24H6.40039C4.16018 24 3.03924 24.0004 2.18359 23.5645C1.43109 23.181 0.819016 22.5689 0.435547 21.8164C-0.000427061 20.9608 1.63272e-09 19.8398 1.63272e-09 17.5996V6.40039C1.63272e-09 4.16018 -0.000427061 3.03924 0.435547 2.18359C0.819016 1.43109 1.43109 0.819016 2.18359 0.435547C3.03924 -0.000427061 4.16018 1.63272e-09 6.40039 1.63272e-09H17.5996Z' fill='white'/%3E%3C/svg%3E")`
10
+ }
11
+ </script>
12
+
13
+ <TooltipAutoHide>
14
+ <TooltipTrigger class="shrink-0">
15
+ <div
16
+ style={showMask
17
+ ? `mask-image: ${masks[size]};
18
+ mask-size: 100% 100%;
19
+ mask-repeat: no-repeat;
20
+ -webkit-mask-image: ${masks[size]};
21
+ -webkit-mask-size: 100% 100%;
22
+ -webkit-mask-repeat: no-repeat;`
23
+ : ''}
24
+ >
25
+ {@render children()}
26
+ </div>
27
+ </TooltipTrigger>
28
+ <TooltipContent>
29
+ {#if tooltipContent}
30
+ {@render tooltipContent()}
31
+ {:else if name}
32
+ {name}
33
+ {/if}
34
+ </TooltipContent>
35
+ </TooltipAutoHide>
@@ -0,0 +1,4 @@
1
+ import type { AvatarIconProps } from './types.js';
2
+ declare const AvatarIcon: import("svelte").Component<AvatarIconProps, {}, "">;
3
+ type AvatarIcon = ReturnType<typeof AvatarIcon>;
4
+ export default AvatarIcon;
@@ -0,0 +1,59 @@
1
+ <script lang="ts">
2
+ import { Icon } from '@steeze-ui/svelte-icon'
3
+ import clsx from 'clsx'
4
+ import { TooltipProvider } from './tooltip'
5
+ import AvatarIcon from './AvatarIcon.svelte'
6
+ import type { AvatarStackProps } from './types.js'
7
+ import { cn } from './utils.js'
8
+
9
+ let { icons = [], size = 'md', class: className }: AvatarStackProps = $props()
10
+
11
+ let maxItems = $derived(icons.length > 5 ? 4 : 5)
12
+ let mainIcons = $derived(icons.slice(0, maxItems))
13
+ let restIcons = $derived(icons.slice(maxItems, icons.length))
14
+ </script>
15
+
16
+ {#snippet restTooltip()}
17
+ {#each restIcons as restIcon}
18
+ <div>{restIcon.name}</div>
19
+ {/each}
20
+ {/snippet}
21
+
22
+ <TooltipProvider>
23
+ <div class={cn('flex flex-col space-y-2 sm:flex-row sm:flex-nowrap sm:space-y-0 items-center', className)}>
24
+ {#each mainIcons as icon, i (i)}
25
+ <AvatarIcon
26
+ name={icon.name}
27
+ {size}
28
+ showMask={i < mainIcons.length - 1 || restIcons.length > 0}
29
+ >
30
+ <div
31
+ data-avatar-stack-item
32
+ class={clsx(
33
+ 'flex items-center bg-background-default-secondary text-icon shrink-0',
34
+ size === 'sm' ? 'p-1 rounded' : 'p-1.5 rounded-md'
35
+ )}
36
+ >
37
+ {#if icon.icon}
38
+ <Icon src={icon.icon} class="size-4 shrink-0" />
39
+ {:else if icon.url}
40
+ <img src={icon.url} alt={icon.name} class="size-4 shrink-0" />
41
+ {/if}
42
+ </div>
43
+ </AvatarIcon>
44
+ {/each}
45
+ {#if restIcons.length}
46
+ <AvatarIcon {size} tooltipContent={restTooltip}>
47
+ <div
48
+ data-avatar-stack-overflow
49
+ class={clsx(
50
+ 'flex items-center justify-center text-icon font-medium text-sm shrink-0 bg-background-default-secondary',
51
+ size === 'sm' ? 'size-6 rounded' : 'size-7 rounded-md'
52
+ )}
53
+ >
54
+ +{restIcons.length}
55
+ </div>
56
+ </AvatarIcon>
57
+ {/if}
58
+ </div>
59
+ </TooltipProvider>
@@ -0,0 +1,4 @@
1
+ import type { AvatarStackProps } from './types.js';
2
+ declare const AvatarStack: import("svelte").Component<AvatarStackProps, {}, "">;
3
+ type AvatarStack = ReturnType<typeof AvatarStack>;
4
+ export default AvatarStack;
@@ -13,6 +13,7 @@
13
13
  matchParentWidth = false,
14
14
  usePortal = true,
15
15
  strategy: strategyProp,
16
+ disabled = false,
16
17
  class: className = '',
17
18
  trigger,
18
19
  children,
@@ -91,7 +92,8 @@
91
92
 
92
93
  <div class="flex {className}" class:w-full={fullWidth} role="menu">
93
94
  <button
94
- class="cursor-pointer text-left w-full min-w-0 outline-none"
95
+ class="cursor-pointer disabled:cursor-default text-left w-full min-w-0 outline-none"
96
+ {disabled}
95
97
  use:floatingRef
96
98
  {...rest}
97
99
  onclick={handleClick}
@@ -90,8 +90,7 @@
90
90
  : clsx('border backdrop-blur-sm backdrop-filter dropdown-select', {
91
91
  'border-border-selected-bold shadow-active': isOpen,
92
92
  'border-border-default-secondary hover:border-border-default-secondary-hover': !isOpen
93
- }),
94
- className
93
+ })
95
94
  )
96
95
  )
97
96
 
@@ -146,7 +145,7 @@
146
145
  {strategy}
147
146
  {disabled}
148
147
  bind:this={selectDropdown}
149
- class={fullWidth || isStacked ? '' : widthClass}
148
+ class={cn(fullWidth || isStacked ? '' : widthClass, className)}
150
149
  >
151
150
  {#snippet trigger()}
152
151
  <div data-dropdown-select-trigger class={styles}>
@@ -25,6 +25,7 @@
25
25
  onclick,
26
26
  onfocus,
27
27
  onblur,
28
+ class: className = '',
28
29
  ...rest
29
30
  }: InputSearchProps = $props()
30
31
 
@@ -66,8 +67,9 @@
66
67
  })
67
68
  </script>
68
69
 
69
- <div class="relative flex items-center">
70
+ <div data-input-search class="relative flex items-center {className}">
70
71
  <input
72
+ data-input-search-input
71
73
  bind:this={input}
72
74
  bind:value
73
75
  type="text"
package/dist/index.d.ts CHANGED
@@ -51,8 +51,8 @@ import { SkeletonAvatar } from './skeleton';
51
51
  import { SkeletonCard } from './skeleton';
52
52
  import { SkeletonList } from './skeleton';
53
53
  import StatusLabel from './StatusLabel.svelte';
54
- import StepIcon from './StepIcon.svelte';
55
- import StepIconList from './StepIconList.svelte';
54
+ import AvatarIcon from './AvatarIcon.svelte';
55
+ import AvatarStack from './AvatarStack.svelte';
56
56
  import { Table } from './table';
57
57
  import { TableBody } from './table';
58
58
  import { TableCaption } from './table';
@@ -87,4 +87,4 @@ import { FlexRender } from './data-table';
87
87
  import { createSvelteTable } from './data-table';
88
88
  import { renderComponent } from './data-table';
89
89
  import { renderSnippet } from './data-table';
90
- export { Accordion, AlertDialog, BaseButton, BaseCard, BaseCounter, BaseDropdown, BaseFlag, BaseTableActions, Breadcrumbs, ButtonFile, ButtonSearch, ButtonUuidCopy, CardCheckbox, CardRelation, CompanySelector, CounterWidget, DataListItem, DatePicker, DrawerContext, DrawerContextItem, DrawerContextSeparator, DropdownSelect, DropdownSelectGroup, EmptyState, FeedEvents, FeedIconEvent, FeedIconStatus, FeedItem, FeedItemDetail, FeedViewer, GlobalSearch, InputCheckbox, InputError, InputLabel, InputRadio, InputSearch, InputSelect, InputText, InputTextarea, InputToggle, MenuItem, MenuItemCollapsible, Notification, ProfileAvatar, ProgressBar, ProgressBarCircle, SeparatorHorizontal, ShortcutWrapper, Skeleton, SkeletonAvatar, SkeletonCard, SkeletonList, StatusLabel, StepIcon, StepIconList, Table, TableBody, TableCaption, TableFooter, TableHeader, TableRow, TableHead, TableCell, Tabs, TabsContent, TabsList, TabsTrigger, TagBeta, TagProgress, TagSearch, TagStatus, TitleMain, TitleSection, Toaster, Tooltip, TooltipContent, TooltipTrigger, TooltipAutoHide, resolveIcon, getCountryName, getStatusType, buttonVariants, DataTable, DataTableToolbar, DataTableViewOptions, FlexRender, createSvelteTable, renderComponent, renderSnippet };
90
+ export { Accordion, AlertDialog, BaseButton, BaseCard, BaseCounter, BaseDropdown, BaseFlag, BaseTableActions, Breadcrumbs, ButtonFile, ButtonSearch, ButtonUuidCopy, CardCheckbox, CardRelation, CompanySelector, CounterWidget, DataListItem, DatePicker, DrawerContext, DrawerContextItem, DrawerContextSeparator, DropdownSelect, DropdownSelectGroup, EmptyState, FeedEvents, FeedIconEvent, FeedIconStatus, FeedItem, FeedItemDetail, FeedViewer, GlobalSearch, InputCheckbox, InputError, InputLabel, InputRadio, InputSearch, InputSelect, InputText, InputTextarea, InputToggle, MenuItem, MenuItemCollapsible, Notification, ProfileAvatar, ProgressBar, ProgressBarCircle, SeparatorHorizontal, ShortcutWrapper, Skeleton, SkeletonAvatar, SkeletonCard, SkeletonList, StatusLabel, AvatarIcon, AvatarStack, Table, TableBody, TableCaption, TableFooter, TableHeader, TableRow, TableHead, TableCell, Tabs, TabsContent, TabsList, TabsTrigger, TagBeta, TagProgress, TagSearch, TagStatus, TitleMain, TitleSection, Toaster, Tooltip, TooltipContent, TooltipTrigger, TooltipAutoHide, resolveIcon, getCountryName, getStatusType, buttonVariants, DataTable, DataTableToolbar, DataTableViewOptions, FlexRender, createSvelteTable, renderComponent, renderSnippet };
package/dist/index.js CHANGED
@@ -48,8 +48,8 @@ import SeparatorHorizontal from './SeparatorHorizontal.svelte'
48
48
  import ShortcutWrapper from './ShortcutWrapper.svelte'
49
49
  import { Skeleton, SkeletonAvatar, SkeletonCard, SkeletonList } from './skeleton'
50
50
  import StatusLabel from './StatusLabel.svelte'
51
- import StepIcon from './StepIcon.svelte'
52
- import StepIconList from './StepIconList.svelte'
51
+ import AvatarIcon from './AvatarIcon.svelte'
52
+ import AvatarStack from './AvatarStack.svelte'
53
53
  import {
54
54
  Table,
55
55
  TableHeader,
@@ -135,8 +135,8 @@ export {
135
135
  SkeletonCard,
136
136
  SkeletonList,
137
137
  StatusLabel,
138
- StepIcon,
139
- StepIconList,
138
+ AvatarIcon,
139
+ AvatarStack,
140
140
  Table,
141
141
  TableBody,
142
142
  TableCaption,
package/dist/types.d.ts CHANGED
@@ -135,9 +135,10 @@ export type Breadcrumb = {
135
135
  country?: string;
136
136
  copiable?: boolean;
137
137
  };
138
- export type StepIcon = {
138
+ export type AvatarIcon = {
139
139
  name: string;
140
- url: string;
140
+ url?: string;
141
+ icon?: IconSource;
141
142
  };
142
143
  export interface AccordionProps {
143
144
  label: string;
@@ -223,6 +224,7 @@ export interface BaseDropdownProps {
223
224
  matchParentWidth?: boolean;
224
225
  usePortal?: boolean;
225
226
  strategy?: 'absolute' | 'fixed';
227
+ disabled?: boolean;
226
228
  trigger?: Snippet;
227
229
  children?: Snippet;
228
230
  [key: string]: any;
@@ -564,13 +566,15 @@ export interface StatusLabelProps {
564
566
  status: FeedItemStatus;
565
567
  label?: string;
566
568
  }
567
- export interface StepIconListProps {
568
- icons?: StepIcon[];
569
- [key: string]: any;
569
+ export interface AvatarStackProps {
570
+ icons?: AvatarIcon[];
571
+ size?: 'sm' | 'md';
572
+ class?: string;
570
573
  }
571
- export interface StepIconProps {
574
+ export interface AvatarIconProps {
572
575
  name?: string;
573
576
  showMask?: boolean;
577
+ size?: 'sm' | 'md';
574
578
  tooltipContent?: Snippet;
575
579
  children: Snippet;
576
580
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@invopop/popui",
3
3
  "license": "MIT",
4
- "version": "0.1.70",
4
+ "version": "0.1.72",
5
5
  "repository": {
6
6
  "url": "https://github.com/invopop/popui"
7
7
  },
@@ -1,35 +0,0 @@
1
- <script lang="ts">
2
- import { TooltipAutoHide, TooltipContent, TooltipTrigger } from './tooltip'
3
- import type { StepIconProps } from './types.js'
4
-
5
- let {
6
- name,
7
- showMask = false,
8
- tooltipContent,
9
- children
10
- }: StepIconProps = $props()
11
- </script>
12
-
13
- <TooltipAutoHide>
14
- <TooltipTrigger class="shrink-0">
15
- <div
16
- style={showMask
17
- ? `mask-image: url("data:image/svg+xml,%3Csvg width='26' height='28' viewBox='0 0 26 28' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M18.4004 0C21.7603 9.85818e-10 23.4402 0.000417824 24.7236 0.654297C25.1531 0.873098 25.552 1.14144 25.9131 1.45215C25.5579 1.90591 25.2449 2.39516 24.9805 2.91406C23.9996 4.83925 24 7.36007 24 12.4004V15.5996C24 20.6399 23.9996 23.1608 24.9805 25.0859C25.2447 25.6046 25.5581 26.0933 25.9131 26.5469C25.5519 26.8578 25.1532 27.1268 24.7236 27.3457C23.4402 27.9996 21.7603 28 18.4004 28H9.59961C6.23965 28 4.55977 27.9996 3.27637 27.3457C2.14739 26.7705 1.22954 25.8526 0.654297 24.7236C0.00041777 23.4402 9.8162e-10 21.7603 0 18.4004V9.59961C9.88222e-10 6.23965 0.000417662 4.55977 0.654297 3.27637C1.22954 2.14739 2.14739 1.22954 3.27637 0.654297C4.55977 0.000417608 6.23965 9.84018e-10 9.59961 0H18.4004Z' fill='white'/%3E%3C/svg%3E");
18
- mask-size: 100% 100%;
19
- mask-repeat: no-repeat;
20
- -webkit-mask-image: url("data:image/svg+xml,%3Csvg width='26' height='28' viewBox='0 0 26 28' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M18.4004 0C21.7603 9.85818e-10 23.4402 0.000417824 24.7236 0.654297C25.1531 0.873098 25.552 1.14144 25.9131 1.45215C25.5579 1.90591 25.2449 2.39516 24.9805 2.91406C23.9996 4.83925 24 7.36007 24 12.4004V15.5996C24 20.6399 23.9996 23.1608 24.9805 25.0859C25.2447 25.6046 25.5581 26.0933 25.9131 26.5469C25.5519 26.8578 25.1532 27.1268 24.7236 27.3457C23.4402 27.9996 21.7603 28 18.4004 28H9.59961C6.23965 28 4.55977 27.9996 3.27637 27.3457C2.14739 26.7705 1.22954 25.8526 0.654297 24.7236C0.00041777 23.4402 9.8162e-10 21.7603 0 18.4004V9.59961C9.88222e-10 6.23965 0.000417662 4.55977 0.654297 3.27637C1.22954 2.14739 2.14739 1.22954 3.27637 0.654297C4.55977 0.000417608 6.23965 9.84018e-10 9.59961 0H18.4004Z' fill='white'/%3E%3C/svg%3E");
21
- -webkit-mask-size: 100% 100%;
22
- -webkit-mask-repeat: no-repeat;`
23
- : ''}
24
- >
25
- {@render children()}
26
- </div>
27
- </TooltipTrigger>
28
- <TooltipContent>
29
- {#if tooltipContent}
30
- {@render tooltipContent()}
31
- {:else if name}
32
- {name}
33
- {/if}
34
- </TooltipContent>
35
- </TooltipAutoHide>
@@ -1,4 +0,0 @@
1
- import type { StepIconProps } from './types.js';
2
- declare const StepIcon: import("svelte").Component<StepIconProps, {}, "">;
3
- type StepIcon = ReturnType<typeof StepIcon>;
4
- export default StepIcon;
@@ -1,43 +0,0 @@
1
- <script lang="ts">
2
- import { TooltipProvider } from './tooltip'
3
- import StepIcon from './StepIcon.svelte'
4
- import type { StepIconListProps } from './types.js'
5
-
6
- let { icons = [] }: StepIconListProps = $props()
7
-
8
- let maxItems = $derived(icons.length > 6 ? 5 : 6)
9
- let mainIcons = $derived(icons.slice(0, maxItems))
10
- let restIcons = $derived(icons.slice(maxItems, icons.length))
11
- </script>
12
-
13
- {#snippet restTooltip()}
14
- {#each restIcons as restIcon}
15
- <div>{restIcon.name}</div>
16
- {/each}
17
- {/snippet}
18
-
19
- <TooltipProvider>
20
- <div class="flex flex-col space-y-2 sm:flex-row sm:flex-nowrap sm:space-y-0 items-center">
21
- {#each mainIcons as icon, i (i)}
22
- <StepIcon name={icon.name} showMask={i < mainIcons.length - 1 || restIcons.length > 0}>
23
- <div
24
- class="p-1.5 rounded-md flex items-center space-x-1 bg-background-default-secondary text-icon shrink-0 {i >
25
- 0
26
- ? 'ml-[-2px]'
27
- : ''}"
28
- >
29
- <img src={icon.url} alt={icon.name} class="size-4 shrink-0" />
30
- </div>
31
- </StepIcon>
32
- {/each}
33
- {#if restIcons.length}
34
- <StepIcon tooltipContent={restTooltip}>
35
- <div
36
- class="flex items-center justify-center text-icon font-medium text-sm size-7 shrink-0 rounded-md bg-background-default-secondary ml-[-1px]"
37
- >
38
- +{restIcons.length}
39
- </div>
40
- </StepIcon>
41
- {/if}
42
- </div>
43
- </TooltipProvider>
@@ -1,4 +0,0 @@
1
- import type { StepIconListProps } from './types.js';
2
- declare const StepIconList: import("svelte").Component<StepIconListProps, {}, "">;
3
- type StepIconList = ReturnType<typeof StepIconList>;
4
- export default StepIconList;