@invopop/popui 0.1.8 → 0.1.10

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.
@@ -41,8 +41,8 @@
41
41
  { 'px-2': !big && children && !icon },
42
42
  { 'pl-2 pr-2.5': big && children && icon && iconPosition === 'left' },
43
43
  { 'pl-2.5 pr-2': big && children && icon && iconPosition === 'right' },
44
- { 'pl-1.5 pr-2': !small && !big && children && icon && iconPosition === 'left' },
45
- { 'pl-2 pr-1.5': !small && !big && children && icon && iconPosition === 'right' },
44
+ { 'pl-1.5 pr-2': !big && children && icon && iconPosition === 'left' },
45
+ { 'pl-2 pr-1.5': !big && children && icon && iconPosition === 'right' },
46
46
  { 'py-1.5': big && children },
47
47
  { 'py-1': !big && children },
48
48
  { 'text-white': ['primary', 'danger', 'dark', 'warning'].includes(variant) },
@@ -127,7 +127,10 @@
127
127
  return
128
128
  }
129
129
 
130
- selectionMode = 'keyboard'
130
+ // Only set keyboard mode if it's not just the Shift key alone
131
+ if (event.key !== 'Shift') {
132
+ selectionMode = 'keyboard'
133
+ }
131
134
 
132
135
  if (event.key === 'Escape' || event.key === 'Esc') {
133
136
  event.preventDefault()
@@ -4,13 +4,12 @@
4
4
  import FeedIconStatus from './FeedIconStatus.svelte'
5
5
  import BaseFlag from './BaseFlag.svelte'
6
6
  import { getCountryName } from './helpers.js'
7
- import UuidCopy from './UuidCopy.svelte'
8
7
  import { Icon } from '@steeze-ui/svelte-icon'
8
+ import ButtonUuidCopy from './ButtonUuidCopy.svelte'
9
9
 
10
10
  let {
11
11
  field,
12
12
  data = '',
13
- isMobile = false,
14
13
  badge = null,
15
14
  status = null,
16
15
  icons = null,
@@ -29,16 +28,7 @@
29
28
  <span>{getCountryName(String(data))}</span>
30
29
  </span>
31
30
  {:else if field.copy && data}
32
- <UuidCopy
33
- rightAlign={isMobile ? false : field.rightAlign}
34
- uuid={String(data)}
35
- prefixLength={4}
36
- suffixLength={4}
37
- full
38
- compact
39
- dark={isMobile}
40
- {onCopied}
41
- />
31
+ <ButtonUuidCopy uuid={String(data)} full oncopied={onCopied} />
42
32
  {:else}
43
33
  <span class="hidden md:inline">{data}</span>
44
34
  <span class="md:hidden">{data ? data : badge || status ? '' : '-'}</span>
@@ -54,7 +44,7 @@
54
44
  </span>
55
45
  {/if}
56
46
  {#if icons}
57
- <span class:ml-2={!!data} class="flex items-center gap-1 flex-shrink-0">
47
+ <span class:ml-2={!!data} class="flex items-center gap-1 shrink-0">
58
48
  {#each icons as icon}
59
49
  <div class="border border-neutral-200 rounded-md p-px">
60
50
  {#if typeof icon === 'string'}
@@ -1,16 +1,15 @@
1
1
  <script lang="ts">
2
2
  import type { DrawerContextProps, DrawerOption } from './types.ts'
3
3
  import DrawerContextItem from './DrawerContextItem.svelte'
4
- import InputSearch from './InputSearch.svelte'
5
4
  import DrawerContextSeparator from './DrawerContextSeparator.svelte'
6
5
 
7
6
  let {
8
7
  items = $bindable([]),
9
8
  multiple = false,
10
- searchable = false,
11
9
  widthClass = 'w-60',
12
10
  onclick,
13
- onselect
11
+ onselect,
12
+ children
14
13
  }: DrawerContextProps = $props()
15
14
 
16
15
  let selectedItems = $derived(items.filter((i) => i.selected))
@@ -27,13 +26,9 @@
27
26
  </script>
28
27
 
29
28
  <div
30
- class="{widthClass} border border-neutral-200 py-1 rounded-md shadow-lg space-y-0.5 bg-white max-h-80 overflow-y-auto"
29
+ class="{widthClass} border border-neutral-200 py-0.5 rounded-2xl shadow-lg space-y-0.5 bg-white max-h-80 overflow-y-auto"
31
30
  >
32
- {#if searchable}
33
- <div class="px-2 mt-2 mb-1">
34
- <InputSearch placeholder="Search" />
35
- </div>
36
- {/if}
31
+ {@render children?.()}
37
32
  <ul class="space-y-0.5 max-h-80 overflow-y-auto">
38
33
  {#each items as item}
39
34
  {#if item.separator}
@@ -90,9 +90,9 @@
90
90
  {#if item.country}
91
91
  <span class="flex space-x-1 items-center">
92
92
  <BaseFlag country={item.country} width={10} />
93
- <span class="text-sm text-neutral-500 tracking-normal"
94
- >{getCountryName(item.country)}</span
95
- >
93
+ <span class="text-sm text-neutral-500 tracking-normal">
94
+ {getCountryName(item.country)}
95
+ </span>
96
96
  </span>
97
97
  {/if}
98
98
  </div>
@@ -8,6 +8,9 @@
8
8
  import IconPdf from './svg/IconPdf.svelte'
9
9
  import IconNoResults from './svg/IconNoResults.svelte'
10
10
  import type { SvelteComponent } from 'svelte'
11
+ import IconDelivery from './svg/IconDelivery.svelte'
12
+ import IconOrder from './svg/IconOrder.svelte'
13
+ import IconPayment from './svg/IconPayment.svelte'
11
14
 
12
15
  let {
13
16
  icon = undefined,
@@ -22,7 +25,11 @@
22
25
  const icons: Record<EmptyStateIcon, unknown> = {
23
26
  invoices: IconInvoice,
24
27
  contacts: IconContact,
28
+ parties: IconContact,
25
29
  products: IconProduct,
30
+ deliveries: IconDelivery,
31
+ orders: IconOrder,
32
+ payments: IconPayment,
26
33
  file: IconFile,
27
34
  pdf: IconPdf,
28
35
  'no-results': IconNoResults
@@ -1,7 +1,7 @@
1
1
  <script lang="ts">
2
2
  import { Icon } from '@steeze-ui/svelte-icon'
3
3
  import type { FeddIconStatusProps, FeedItemStatus } from './types.ts'
4
- import { Alert, Failure, Queue, Running, Success, CheckBadge, Skip } from '@invopop/ui-icons'
4
+ import { Warning, Failure, Queue, Running, Success, CheckBadge, Skip } from '@invopop/ui-icons'
5
5
  import type { IconSource } from '@steeze-ui/heroicons'
6
6
 
7
7
  let { status }: FeddIconStatusProps = $props()
@@ -12,7 +12,7 @@
12
12
  success: Success,
13
13
  run: Running,
14
14
  queued: Queue,
15
- alert: Alert,
15
+ alert: Warning,
16
16
  skip: Skip,
17
17
  signed: CheckBadge
18
18
  }
@@ -24,8 +24,8 @@
24
24
 
25
25
  {#if iconStatus}
26
26
  <div title={status}>
27
- <Icon src={iconStatus} class="h-4 w-4 flex-shrink-0" />
27
+ <Icon src={iconStatus} class="h-4 w-4 shrink-0" />
28
28
  </div>
29
29
  {:else}
30
- <div class="w-4 h-4 flex-shrink-0 bg-neutral-200 rounded-full"></div>
30
+ <div class="w-4 h-4 shrink-0 bg-neutral-200 rounded-full"></div>
31
31
  {/if}
@@ -23,7 +23,7 @@
23
23
  {#if status}
24
24
  <FeedIconStatus {status} />
25
25
  {/if}
26
- <span class="truncate font-medium text-neutral-800 text-base">{title}</span>
26
+ <span class="flex-1 truncate font-medium text-neutral-800 text-base">{title}</span>
27
27
  </div>
28
28
  <SeparatorHorizontal />
29
29
  <div class="pl-3 py-1 pr-2.5 flex items-center space-x-0.5">
@@ -66,7 +66,7 @@
66
66
  bind:this={input}
67
67
  bind:value
68
68
  type="search"
69
- class="py-[5px] pl-7 border border-neutral-200 hover:border-neutral-300 w-full rounded-md text-neutral-800 placeholder-neutral-500 text-base outline-none tracking-tight caret-workspace-accent focus:border-workspace-accent focus:shadow-active"
69
+ class="py-[5px] pl-7 border border-neutral-200 hover:border-neutral-300 w-full rounded-md text-neutral-800 placeholder-neutral-500 text-base outline-none tracking-tight caret-workspace-accent focus:border-workspace-accent focus:shadow-active bg-white"
70
70
  style:padding-right={`${shortcutKeys.length * 15 + 12}px`}
71
71
  {placeholder}
72
72
  {...rest}
@@ -67,7 +67,7 @@
67
67
  bind:this={inputEl}
68
68
  bind:value
69
69
  type="text"
70
- class="{inputStyles} py-1.5 px-2.5 border w-full rounded-md placeholder:text-neutral-500 text-base tracking-tight"
70
+ class="{inputStyles} py-1.5 px-2.5 border w-full rounded-md placeholder:text-neutral-500 text-base tracking-tight bg-white"
71
71
  {placeholder}
72
72
  readonly={disabled}
73
73
  {...rest}
@@ -40,7 +40,7 @@
40
40
  {id}
41
41
  {placeholder}
42
42
  {value}
43
- class="{inputStyles} py-1.5 px-3 border w-full rounded placeholder-neutral-500 text-base tracking-tight"
43
+ class="{inputStyles} py-1.5 px-3 border w-full rounded placeholder-neutral-500 text-base tracking-tight bg-white"
44
44
  {disabled}
45
45
  {rows}
46
46
  {...rest}
@@ -32,7 +32,7 @@
32
32
  {@render children?.()}
33
33
  {#if !collapsed}
34
34
  <div>
35
- <div class="whitespace-nowrap max-w-[140px] truncate tracking-tight">{title}</div>
35
+ <div class="whitespace-nowrap max-w-[118px] truncate tracking-tight">{title}</div>
36
36
  {#if subtitle}
37
37
  <div class="text-sm font-medium text-yellow-600">{subtitle}</div>
38
38
  {/if}
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import clsx from 'clsx'
3
- import { Alert, Failure, Success } from '@invopop/ui-icons'
3
+ import { Warning, Failure, Success } from '@invopop/ui-icons'
4
4
  import { Icon } from '@steeze-ui/svelte-icon'
5
5
  import type { NotificationProps, Status } from './types'
6
6
 
@@ -13,7 +13,7 @@
13
13
  case 'error':
14
14
  return Failure
15
15
  case 'warning':
16
- return Alert
16
+ return Warning
17
17
  default:
18
18
  return null
19
19
  }
@@ -0,0 +1,7 @@
1
+ <script lang="ts">
2
+ let { percentage = 0 }: { percentage?: number } = $props()
3
+ </script>
4
+
5
+ <div class="w-full h-1 shrink-0 rounded-full bg-neutral-200">
6
+ <div class="rounded-full h-1 bg-workspace-accent" style="width: {percentage}%;"></div>
7
+ </div>
@@ -0,0 +1,6 @@
1
+ type $$ComponentProps = {
2
+ percentage?: number;
3
+ };
4
+ declare const ProgressBar: import("svelte").Component<$$ComponentProps, {}, "">;
5
+ type ProgressBar = ReturnType<typeof ProgressBar>;
6
+ export default ProgressBar;
@@ -18,6 +18,16 @@
18
18
  'border border-blue-200': status === 'blue' && dot,
19
19
  'bg-purple-100 text-purple-500': status === 'purple',
20
20
  'border border-purple-200': status === 'purple' && dot,
21
+ 'bg-olive-100 text-olive-500': status === 'olive',
22
+ 'border border-olive-200': status === 'olive' && dot,
23
+ 'bg-teal-100 text-teal-500': status === 'teal',
24
+ 'border border-teal-200': status === 'teal' && dot,
25
+ 'bg-crimson-100 text-crimson-500': status === 'crimson',
26
+ 'border border-crimson-200': status === 'crimson' && dot,
27
+ 'bg-blue-violet-100 text-blue-violet-500': status === 'blueViolet',
28
+ 'border border-blue-violet-200': status === 'blueViolet' && dot,
29
+ 'bg-steel-blue-100 text-steel-blue-500': status === 'steelBlue',
30
+ 'border border-steel-blue-200': status === 'steelBlue' && dot,
21
31
  'border border-dashed border-neutral-200 text-neutral-400': status === 'empty',
22
32
  'bg-neutral-100 text-neutral-500': status === 'grey',
23
33
  'border border-neutral-200': status === 'grey' && dot,
@@ -35,6 +45,10 @@
35
45
  'bg-warning-500': status === 'orange',
36
46
  'bg-blue-500': status === 'blue',
37
47
  'bg-purple-500': status === 'purple',
48
+ 'bg-olive-500': status === 'olive',
49
+ 'bg-teal-500': status === 'teal',
50
+ 'bg-crimson-500': status === 'crimson',
51
+ 'bg-blue-violet-500': status === 'blueViolet',
38
52
  'bg-neutral-300': status === 'empty',
39
53
  'bg-neutral-500': status === 'grey'
40
54
  })
package/dist/index.d.ts CHANGED
@@ -43,6 +43,7 @@ import MenuItemCollapsible from './MenuItemCollapsible.svelte';
43
43
  import Notification from './Notification.svelte';
44
44
  import ProfileAvatar from './ProfileAvatar.svelte';
45
45
  import ProfileSelector from './ProfileSelector.svelte';
46
+ import ProgressBar from './ProgressBar.svelte';
46
47
  import SectionLayout from './SectionLayout.svelte';
47
48
  import SeparatorHorizontal from './SeparatorHorizontal.svelte';
48
49
  import ShortcutWrapper from './ShortcutWrapper.svelte';
@@ -74,4 +75,4 @@ import twTheme from './tw.theme.js';
74
75
  import { resolveIcon } from './helpers.js';
75
76
  import { getCountryName } from './helpers.js';
76
77
  import { getStatusType } from './helpers.js';
77
- export { AlertDialog, BaseButton, BaseCard, BaseCounter, BaseDropdown, BaseFlag, BaseTable, BaseTableActions, BaseTableHeaderContent, Breadcrumbs, ButtonFile, ButtonUuidCopy, CardCheckbox, CardRelation, CompanySelector, CounterWorkflow, DataListItem, DatePicker, DrawerContext, DrawerContextItem, DrawerContextSeparator, DropdownSelect, EmptyStateIcon, EmptyStateIllustration, FeedEvents, FeedIconEvent, FeedIconStatus, FeedItem, FeedItemDetail, FeedViewer, GlobalSearch, InputCheckbox, InputError, InputLabel, InputRadio, InputSearch, InputSelect, InputText, InputTextarea, InputToggle, MenuItem, MenuItemCollapsible, Notification, ProfileAvatar, ProfileSelector, SectionLayout, SeparatorHorizontal, ShortcutWrapper, StatusLabel, StepIconList, Table, TableBody, TableCaption, TableFooter, TableHeader, TableRow, TableHead, TableCell, Tabs, TabsContent, TabsList, TabsTrigger, TagBeta, TagSearch, TagStatus, TitleMain, TitleSection, Toaster, Tooltip, TooltipContent, TooltipTrigger, UuidCopy, twTheme, resolveIcon, getCountryName, getStatusType };
78
+ export { AlertDialog, BaseButton, BaseCard, BaseCounter, BaseDropdown, BaseFlag, BaseTable, BaseTableActions, BaseTableHeaderContent, Breadcrumbs, ButtonFile, ButtonUuidCopy, CardCheckbox, CardRelation, CompanySelector, CounterWorkflow, DataListItem, DatePicker, DrawerContext, DrawerContextItem, DrawerContextSeparator, DropdownSelect, EmptyStateIcon, EmptyStateIllustration, FeedEvents, FeedIconEvent, FeedIconStatus, FeedItem, FeedItemDetail, FeedViewer, GlobalSearch, InputCheckbox, InputError, InputLabel, InputRadio, InputSearch, InputSelect, InputText, InputTextarea, InputToggle, MenuItem, MenuItemCollapsible, Notification, ProfileAvatar, ProfileSelector, ProgressBar, SectionLayout, SeparatorHorizontal, ShortcutWrapper, StatusLabel, StepIconList, Table, TableBody, TableCaption, TableFooter, TableHeader, TableRow, TableHead, TableCell, Tabs, TabsContent, TabsList, TabsTrigger, TagBeta, TagSearch, TagStatus, TitleMain, TitleSection, Toaster, Tooltip, TooltipContent, TooltipTrigger, UuidCopy, twTheme, resolveIcon, getCountryName, getStatusType };
package/dist/index.js CHANGED
@@ -43,6 +43,7 @@ import MenuItemCollapsible from './MenuItemCollapsible.svelte'
43
43
  import Notification from './Notification.svelte'
44
44
  import ProfileAvatar from './ProfileAvatar.svelte'
45
45
  import ProfileSelector from './ProfileSelector.svelte'
46
+ import ProgressBar from './ProgressBar.svelte'
46
47
  import SectionLayout from './SectionLayout.svelte'
47
48
  import SeparatorHorizontal from './SeparatorHorizontal.svelte'
48
49
  import ShortcutWrapper from './ShortcutWrapper.svelte'
@@ -116,6 +117,7 @@ export {
116
117
  Notification,
117
118
  ProfileAvatar,
118
119
  ProfileSelector,
120
+ ProgressBar,
119
121
  SectionLayout,
120
122
  SeparatorHorizontal,
121
123
  ShortcutWrapper,
@@ -11,7 +11,7 @@
11
11
  <RangeCalendarPrimitive.Cell
12
12
  bind:ref
13
13
  class={cn(
14
- 'size-(--cell-size) dark:[&:has([data-range-start])]:hover:bg-accent dark:[&:has([data-range-end])]:hover:bg-accent [&:has([data-range-middle])]:bg-accent dark:[&:has([data-range-middle])]:hover:bg-accent/50 [&:has([data-selected])]:bg-accent relative p-0 text-center text-sm focus-within:z-20 data-[range-middle]:rounded-r-md [&:first-child[data-selected]_[data-bits-day]]:rounded-l-md [&:has([data-range-end])]:rounded-r-md [&:has([data-range-middle])]:rounded-none first:[&:has([data-range-middle])]:rounded-l-md last:[&:has([data-range-middle])]:rounded-r-md [&:has([data-range-start])]:rounded-l-md [&:last-child[data-selected]_[data-bits-day]]:rounded-r-md',
14
+ 'size-(--cell-size) [&:has([data-range-middle])]:bg-accent [&:has([data-selected])]:bg-accent relative p-0 text-center text-sm focus-within:z-20 data-[range-middle]:rounded-r-md [&:first-child[data-selected]_[data-bits-day]]:rounded-l-md [&:has([data-range-end])]:rounded-r-md [&:has([data-range-middle])]:rounded-none first:[&:has([data-range-middle])]:rounded-l-md last:[&:has([data-range-middle])]:rounded-r-md [&:has([data-range-start])]:rounded-l-md [&:last-child[data-selected]_[data-bits-day]]:rounded-r-md',
15
15
  className
16
16
  )}
17
17
  {...restProps}
@@ -28,9 +28,6 @@
28
28
  'data-[disabled]:text-muted-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
29
29
  // Unavailable
30
30
  'data-[unavailable]:line-through',
31
- 'dark:data-[range-middle]:hover:bg-accent/0',
32
- // hover
33
- 'dark:hover:text-accent-foreground',
34
31
  // focus
35
32
  'focus:border-ring focus:ring-ring/50 focus:relative',
36
33
  // inner spans
@@ -1,12 +1,46 @@
1
1
  <script lang="ts">
2
2
  import { Toaster as Sonner, type ToasterProps as SonnerProps } from 'svelte-sonner'
3
3
  import { mode } from 'mode-watcher'
4
+ import { Icon } from '@steeze-ui/svelte-icon'
5
+ import { Success, Failure, Info } from '@invopop/ui-icons'
6
+
4
7
  let { ...restProps }: SonnerProps = $props()
5
8
  </script>
6
9
 
7
10
  <Sonner
8
11
  theme={mode.current}
9
12
  class="toaster group"
10
- style="--normal-bg: var(--color-popover); --normal-text: var(--color-popover-foreground); --normal-border: var(--color-border);"
13
+ toastOptions={{
14
+ unstyled: true,
15
+ classes: {
16
+ toast:
17
+ 'group toast bg-neutral-800 border-0 rounded-lg text-white flex gap-2 items-start py-2 px-3 w-[336px]',
18
+ title: 'font-medium text-sm leading-5 tracking-tight text-white',
19
+ description: 'font-normal text-sm leading-5 tracking-tight text-white/70',
20
+ actionButton:
21
+ 'bg-white/10 rounded px-2 py-1 text-xs font-medium text-white leading-4 hover:bg-white/15 transition-colors',
22
+ cancelButton:
23
+ 'bg-white/10 rounded px-2 py-1 text-xs font-medium text-white leading-4 hover:bg-white/15 transition-colors',
24
+ closeButton: 'hidden'
25
+ }
26
+ }}
11
27
  {...restProps}
12
- />
28
+ >
29
+ {#snippet successIcon()}
30
+ <Icon src={Success} class="w-4 h-4 text-positive-500" />
31
+ {/snippet}
32
+
33
+ {#snippet errorIcon()}
34
+ <Icon src={Failure} class="w-4 h-4 text-danger-500" />
35
+ {/snippet}
36
+
37
+ {#snippet infoIcon()}
38
+ <Icon src={Info} class="w-4 h-4 text-white" />
39
+ {/snippet}
40
+ </Sonner>
41
+
42
+ <style>
43
+ :global(.toaster) {
44
+ --width: 336px;
45
+ }
46
+ </style>
@@ -0,0 +1,86 @@
1
+ <script lang="ts">
2
+ export let classes = ''
3
+ </script>
4
+
5
+ <svg class={classes} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 97 117">
6
+ <g filter="url(#a)">
7
+ <foreignObject width="97" height="119" x="0" y="-2">
8
+ <div style="backdrop-filter:blur(10px);clip-path:url(#b);height:100%;width:100%" />
9
+ </foreignObject>
10
+ <g data-figma-bg-blur-radius="20">
11
+ <rect width="57" height="79" x="20" y="18" fill="#fff" rx="6" />
12
+ <rect width="57" height="79" x="20" y="18" fill="#169958" fill-opacity=".02" rx="6" />
13
+ <rect
14
+ width="56.2"
15
+ height="78.2"
16
+ x="20.4"
17
+ y="18.4"
18
+ stroke="#169958"
19
+ stroke-opacity=".6"
20
+ stroke-width=".8"
21
+ rx="5.6"
22
+ />
23
+ </g>
24
+ <rect
25
+ width="50.4"
26
+ height="72.4"
27
+ x="23.3"
28
+ y="21.3"
29
+ stroke="#018551"
30
+ stroke-opacity=".2"
31
+ stroke-width=".6"
32
+ rx="3.7"
33
+ />
34
+ <rect width="19" height="2" x="28" y="45" fill="#018551" rx="1" />
35
+ <rect width="15" height="2" x="28" y="68" fill="#018551" rx="1" />
36
+ <rect width="10" height="2" x="59" y="50" fill="#018551" rx="1" />
37
+ <rect width="12" height="2" x="57" y="73" fill="#018551" rx="1" />
38
+ <rect width="14" height="2" x="55" y="54" fill="#018551" rx="1" />
39
+ <rect width="14" height="2" x="55" y="77" fill="#018551" rx="1" />
40
+ <rect width="10" height="2" x="59" y="58" fill="#018551" rx="1" />
41
+ <rect width="12" height="2" x="57" y="62" fill="#018551" rx="1" />
42
+ <rect width="8" height="2" x="61" y="81" fill="#018551" rx="1" />
43
+ <rect width="16" height="2" x="28" y="50" fill="#018551" fill-opacity=".2" rx="1" />
44
+ <rect width="12" height="2" x="28" y="73" fill="#018551" fill-opacity=".2" rx="1" />
45
+ <rect width="11" height="2" x="28" y="54" fill="#018551" fill-opacity=".2" rx="1" />
46
+ <rect width="16" height="2" x="28" y="77" fill="#018551" fill-opacity=".2" rx="1" />
47
+ <rect width="14" height="2" x="28" y="58" fill="#018551" fill-opacity=".2" rx="1" />
48
+ <rect width="18" height="2" x="28" y="81" fill="#018551" fill-opacity=".2" rx="1" />
49
+ <rect width="16" height="2" x="28" y="62" fill="#018551" fill-opacity=".2" rx="1" />
50
+ <g clip-path="url(#c)">
51
+ <path
52
+ fill="#018551"
53
+ d="M34.973 26.556a2.14 2.14 0 0 1 2.138 2.138v.195h1.131c.465 0 .894.235 1.145.626l1.397 2.171c.142.22.217.476.217.737v1.716a2.14 2.14 0 0 1-2.139 2.138h-.43a1.948 1.948 0 0 1-1.905 1.556c-.938 0-1.723-.67-1.904-1.556h-2.218a1.948 1.948 0 0 1-1.905 1.556 1.947 1.947 0 0 1-1.918-1.63A2.14 2.14 0 0 1 27 34.138v-5.445a2.14 2.14 0 0 1 2.139-2.138h5.834ZM30.5 35.11a.778.778 0 0 0 0 1.556.778.778 0 0 0 0-1.556Zm6.027 0a.779.779 0 0 0 0 1.556.78.78 0 0 0 .779-.778.78.78 0 0 0-.779-.778Zm.584-3.5h2.237l-.943-1.466a.193.193 0 0 0-.163-.09h-1.13v1.556Z"
54
+ />
55
+ </g>
56
+ </g>
57
+ <defs>
58
+ <clipPath id="b" transform="translate(0 2)">
59
+ <rect width="57" height="79" x="20" y="18" rx="6" />
60
+ </clipPath>
61
+ <clipPath id="c">
62
+ <path fill="#fff" d="M27 25h14v14H27z" />
63
+ </clipPath>
64
+ <filter
65
+ id="a"
66
+ width="97"
67
+ height="119"
68
+ x="0"
69
+ y="0"
70
+ color-interpolation-filters="sRGB"
71
+ filterUnits="userSpaceOnUse"
72
+ >
73
+ <feFlood flood-opacity="0" result="BackgroundImageFix" />
74
+ <feColorMatrix
75
+ in="SourceAlpha"
76
+ result="hardAlpha"
77
+ values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
78
+ />
79
+ <feOffset dy="2" />
80
+ <feGaussianBlur stdDeviation="10" />
81
+ <feColorMatrix values="0 0 0 0 0.0392157 0 0 0 0 0.0392157 0 0 0 0 0.0392157 0 0 0 0.04 0" />
82
+ <feBlend in2="BackgroundImageFix" result="effect1_dropShadow_9631_17687" />
83
+ <feBlend in="SourceGraphic" in2="effect1_dropShadow_9631_17687" result="shape" />
84
+ </filter>
85
+ </defs>
86
+ </svg>
@@ -0,0 +1,20 @@
1
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
2
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
+ $$bindings?: Bindings;
4
+ } & Exports;
5
+ (internal: unknown, props: Props & {
6
+ $$events?: Events;
7
+ $$slots?: Slots;
8
+ }): Exports & {
9
+ $set?: any;
10
+ $on?: any;
11
+ };
12
+ z_$$bindings?: Bindings;
13
+ }
14
+ declare const IconDelivery: $$__sveltets_2_IsomorphicComponent<{
15
+ classes?: string;
16
+ }, {
17
+ [evt: string]: CustomEvent<any>;
18
+ }, {}, {}, string>;
19
+ type IconDelivery = InstanceType<typeof IconDelivery>;
20
+ export default IconDelivery;
@@ -0,0 +1,81 @@
1
+ <script lang="ts">
2
+ export let classes = ''
3
+ </script>
4
+
5
+ <svg class={classes} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 97 117">
6
+ <g filter="url(#a)">
7
+ <foreignObject width="97" height="119" x="0" y="-2">
8
+ <div style="backdrop-filter:blur(10px);clip-path:url(#b);height:100%;width:100%" />
9
+ </foreignObject>
10
+ <g data-figma-bg-blur-radius="20">
11
+ <rect width="57" height="79" x="20" y="18" fill="#fff" rx="6" />
12
+ <rect width="57" height="79" x="20" y="18" fill="#169958" fill-opacity=".02" rx="6" />
13
+ <rect
14
+ width="56.2"
15
+ height="78.2"
16
+ x="20.4"
17
+ y="18.4"
18
+ stroke="#169958"
19
+ stroke-opacity=".6"
20
+ stroke-width=".8"
21
+ rx="5.6"
22
+ />
23
+ </g>
24
+ <rect
25
+ width="50.4"
26
+ height="72.4"
27
+ x="23.3"
28
+ y="21.3"
29
+ stroke="#018551"
30
+ stroke-opacity=".2"
31
+ stroke-width=".6"
32
+ rx="3.7"
33
+ />
34
+ <rect width="19" height="2" x="28" y="45" fill="#018551" rx="1" />
35
+ <rect width="15" height="2" x="28" y="68" fill="#018551" rx="1" />
36
+ <rect width="10" height="2" x="59" y="50" fill="#018551" rx="1" />
37
+ <rect width="12" height="2" x="57" y="73" fill="#018551" rx="1" />
38
+ <rect width="14" height="2" x="55" y="54" fill="#018551" rx="1" />
39
+ <rect width="14" height="2" x="55" y="77" fill="#018551" rx="1" />
40
+ <rect width="10" height="2" x="59" y="58" fill="#018551" rx="1" />
41
+ <rect width="12" height="2" x="57" y="62" fill="#018551" rx="1" />
42
+ <rect width="8" height="2" x="61" y="81" fill="#018551" rx="1" />
43
+ <rect width="16" height="2" x="28" y="50" fill="#018551" fill-opacity=".2" rx="1" />
44
+ <rect width="12" height="2" x="28" y="73" fill="#018551" fill-opacity=".2" rx="1" />
45
+ <rect width="11" height="2" x="28" y="54" fill="#018551" fill-opacity=".2" rx="1" />
46
+ <rect width="16" height="2" x="28" y="77" fill="#018551" fill-opacity=".2" rx="1" />
47
+ <rect width="14" height="2" x="28" y="58" fill="#018551" fill-opacity=".2" rx="1" />
48
+ <rect width="18" height="2" x="28" y="81" fill="#018551" fill-opacity=".2" rx="1" />
49
+ <rect width="16" height="2" x="28" y="62" fill="#018551" fill-opacity=".2" rx="1" />
50
+ <path
51
+ fill="#018551"
52
+ d="M37.306 26.555h-6.612c-1.18 0-2.139.96-2.139 2.14v6.61c0 1.18.96 2.14 2.14 2.14h4.022c.571 0 1.108-.223 1.512-.627l2.589-2.589c.404-.404.626-.94.626-1.512v-4.023c0-1.18-.959-2.139-2.139-2.139Zm-4.667 8.167h-1.167a.583.583 0 0 1 0-1.166h1.167a.583.583 0 0 1 0 1.166Zm.583-2.139h-1.75a.583.583 0 0 1 0-1.166h1.75a.583.583 0 0 1 0 1.166Zm-1.75-2.139a.583.583 0 0 1 0-1.166h5.056a.583.583 0 0 1 0 1.166h-5.056Zm6.52 2.96-2.588 2.589c-.068.068-.153.113-.237.158v-2.79c0-.107.087-.194.194-.194h2.791a.962.962 0 0 1-.16.237Z"
53
+ />
54
+ </g>
55
+ <defs>
56
+ <clipPath id="b" transform="translate(0 2)">
57
+ <rect width="57" height="79" x="20" y="18" rx="6" />
58
+ </clipPath>
59
+ <filter
60
+ id="a"
61
+ width="97"
62
+ height="119"
63
+ x="0"
64
+ y="0"
65
+ color-interpolation-filters="sRGB"
66
+ filterUnits="userSpaceOnUse"
67
+ >
68
+ <feFlood flood-opacity="0" result="BackgroundImageFix" />
69
+ <feColorMatrix
70
+ in="SourceAlpha"
71
+ result="hardAlpha"
72
+ values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
73
+ />
74
+ <feOffset dy="2" />
75
+ <feGaussianBlur stdDeviation="10" />
76
+ <feColorMatrix values="0 0 0 0 0.0392157 0 0 0 0 0.0392157 0 0 0 0 0.0392157 0 0 0 0.04 0" />
77
+ <feBlend in2="BackgroundImageFix" result="effect1_dropShadow_9631_18422" />
78
+ <feBlend in="SourceGraphic" in2="effect1_dropShadow_9631_18422" result="shape" />
79
+ </filter>
80
+ </defs>
81
+ </svg>
@@ -0,0 +1,20 @@
1
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
2
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
+ $$bindings?: Bindings;
4
+ } & Exports;
5
+ (internal: unknown, props: Props & {
6
+ $$events?: Events;
7
+ $$slots?: Slots;
8
+ }): Exports & {
9
+ $set?: any;
10
+ $on?: any;
11
+ };
12
+ z_$$bindings?: Bindings;
13
+ }
14
+ declare const IconOrder: $$__sveltets_2_IsomorphicComponent<{
15
+ classes?: string;
16
+ }, {
17
+ [evt: string]: CustomEvent<any>;
18
+ }, {}, {}, string>;
19
+ type IconOrder = InstanceType<typeof IconOrder>;
20
+ export default IconOrder;
@@ -0,0 +1,86 @@
1
+ <script lang="ts">
2
+ export let classes = ''
3
+ </script>
4
+
5
+ <svg class={classes} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 97 117">
6
+ <g filter="url(#a)">
7
+ <foreignObject width="97" height="119" x="0" y="-2">
8
+ <div style="backdrop-filter:blur(10px);clip-path:url(#b);height:100%;width:100%" />
9
+ </foreignObject>
10
+ <g data-figma-bg-blur-radius="20">
11
+ <rect width="57" height="79" x="20" y="18" fill="#fff" rx="6" />
12
+ <rect width="57" height="79" x="20" y="18" fill="#169958" fill-opacity=".02" rx="6" />
13
+ <rect
14
+ width="56.2"
15
+ height="78.2"
16
+ x="20.4"
17
+ y="18.4"
18
+ stroke="#169958"
19
+ stroke-opacity=".6"
20
+ stroke-width=".8"
21
+ rx="5.6"
22
+ />
23
+ </g>
24
+ <rect
25
+ width="50.4"
26
+ height="72.4"
27
+ x="23.3"
28
+ y="21.3"
29
+ stroke="#018551"
30
+ stroke-opacity=".2"
31
+ stroke-width=".6"
32
+ rx="3.7"
33
+ />
34
+ <rect width="19" height="2" x="28" y="45" fill="#018551" rx="1" />
35
+ <rect width="15" height="2" x="28" y="68" fill="#018551" rx="1" />
36
+ <rect width="10" height="2" x="59" y="50" fill="#018551" rx="1" />
37
+ <rect width="12" height="2" x="57" y="73" fill="#018551" rx="1" />
38
+ <rect width="14" height="2" x="55" y="54" fill="#018551" rx="1" />
39
+ <rect width="14" height="2" x="55" y="77" fill="#018551" rx="1" />
40
+ <rect width="10" height="2" x="59" y="58" fill="#018551" rx="1" />
41
+ <rect width="12" height="2" x="57" y="62" fill="#018551" rx="1" />
42
+ <rect width="8" height="2" x="61" y="81" fill="#018551" rx="1" />
43
+ <rect width="16" height="2" x="28" y="50" fill="#018551" fill-opacity=".2" rx="1" />
44
+ <rect width="12" height="2" x="28" y="73" fill="#018551" fill-opacity=".2" rx="1" />
45
+ <rect width="11" height="2" x="28" y="54" fill="#018551" fill-opacity=".2" rx="1" />
46
+ <rect width="16" height="2" x="28" y="77" fill="#018551" fill-opacity=".2" rx="1" />
47
+ <rect width="14" height="2" x="28" y="58" fill="#018551" fill-opacity=".2" rx="1" />
48
+ <rect width="18" height="2" x="28" y="81" fill="#018551" fill-opacity=".2" rx="1" />
49
+ <rect width="16" height="2" x="28" y="62" fill="#018551" fill-opacity=".2" rx="1" />
50
+ <g clip-path="url(#c)">
51
+ <path
52
+ fill="#018551"
53
+ d="M30.44 31.605c.83-.426 1.794-.433 2.715-.023l2.164.99c.408.184.721.518.88.939.049.132.076.268.091.404l2.335-1.054a1.684 1.684 0 0 1 2.226.842 1.685 1.685 0 0 1-.842 2.226l-5.282 2.383a2.902 2.902 0 0 1-2.088.12l-2.76-.882a1.362 1.362 0 0 1-1.323 1.06h-.195C27.611 38.61 27 38 27 37.25V33.36c0-.75.61-1.361 1.361-1.361h.195c.363 0 .692.145.936.378.267-.312.58-.583.947-.772Zm2.235 1.042c-.596-.265-1.185-.267-1.703-.002a2.1 2.1 0 0 0-1.055 1.381v2.313l3.077.983c.413.133.857.107 1.252-.071l5.282-2.384a.512.512 0 0 0 .27-.288.518.518 0 0 0-.695-.654c-.027.013-3.848 1.74-3.89 1.755a1.686 1.686 0 0 1-1.288-.043l-1.531-.697a.583.583 0 1 1 .481-1.062l1.532.696a.516.516 0 1 0 .428-.94l-2.16-.987ZM35.75 25a2.92 2.92 0 0 1 2.917 2.917 2.92 2.92 0 0 1-2.917 2.916 2.92 2.92 0 0 1-2.917-2.916A2.92 2.92 0 0 1 35.75 25Zm0 1.75a.583.583 0 0 0-.583.583V28.5a.583.583 0 1 0 1.166 0v-1.167a.583.583 0 0 0-.583-.583Z"
54
+ />
55
+ </g>
56
+ </g>
57
+ <defs>
58
+ <clipPath id="b" transform="translate(0 2)">
59
+ <rect width="57" height="79" x="20" y="18" rx="6" />
60
+ </clipPath>
61
+ <clipPath id="c">
62
+ <path fill="#fff" d="M27 25h14v14H27z" />
63
+ </clipPath>
64
+ <filter
65
+ id="a"
66
+ width="97"
67
+ height="119"
68
+ x="0"
69
+ y="0"
70
+ color-interpolation-filters="sRGB"
71
+ filterUnits="userSpaceOnUse"
72
+ >
73
+ <feFlood flood-opacity="0" result="BackgroundImageFix" />
74
+ <feColorMatrix
75
+ in="SourceAlpha"
76
+ result="hardAlpha"
77
+ values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
78
+ />
79
+ <feOffset dy="2" />
80
+ <feGaussianBlur stdDeviation="10" />
81
+ <feColorMatrix values="0 0 0 0 0.0392157 0 0 0 0 0.0392157 0 0 0 0 0.0392157 0 0 0 0.04 0" />
82
+ <feBlend in2="BackgroundImageFix" result="effect1_dropShadow_9631_18244" />
83
+ <feBlend in="SourceGraphic" in2="effect1_dropShadow_9631_18244" result="shape" />
84
+ </filter>
85
+ </defs>
86
+ </svg>
@@ -0,0 +1,20 @@
1
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
2
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
+ $$bindings?: Bindings;
4
+ } & Exports;
5
+ (internal: unknown, props: Props & {
6
+ $$events?: Events;
7
+ $$slots?: Slots;
8
+ }): Exports & {
9
+ $set?: any;
10
+ $on?: any;
11
+ };
12
+ z_$$bindings?: Bindings;
13
+ }
14
+ declare const IconPayment: $$__sveltets_2_IsomorphicComponent<{
15
+ classes?: string;
16
+ }, {
17
+ [evt: string]: CustomEvent<any>;
18
+ }, {}, {}, string>;
19
+ type IconPayment = InstanceType<typeof IconPayment>;
20
+ export default IconPayment;
package/dist/types.d.ts CHANGED
@@ -4,7 +4,7 @@ import type { Snippet } from 'svelte';
4
4
  export type IconTheme = 'default' | 'solid' | 'mini';
5
5
  export type IconPosition = 'right' | 'left';
6
6
  export type ButtonVariant = 'default' | 'primary' | 'secondary' | 'warning' | 'danger' | 'dark' | 'outline';
7
- export type StatusType = 'grey' | 'green' | 'yellow' | 'red' | 'orange' | 'blue' | 'purple' | 'empty';
7
+ export type StatusType = 'grey' | 'green' | 'yellow' | 'red' | 'orange' | 'blue' | 'purple' | 'olive' | 'teal' | 'crimson' | 'blueViolet' | 'steelBlue' | 'empty';
8
8
  export type AnyProp = string | number | object | boolean;
9
9
  export type SidebarIcon = {
10
10
  path: string;
@@ -102,7 +102,7 @@ export type TabItem = {
102
102
  check?: boolean;
103
103
  warning?: boolean;
104
104
  };
105
- export type EmptyStateIcon = 'invoices' | 'contacts' | 'products' | 'pdf' | 'file' | 'no-results';
105
+ export type EmptyStateIcon = 'invoices' | 'contacts' | 'parties' | 'products' | 'deliveries' | 'orders' | 'payments' | 'pdf' | 'file' | 'no-results' | 'no-results';
106
106
  export type DataListItem = {
107
107
  label: string;
108
108
  value: string;
@@ -342,10 +342,10 @@ export interface DatePickerProps {
342
342
  export interface DrawerContextProps {
343
343
  items?: DrawerOption[];
344
344
  multiple?: boolean;
345
- searchable?: boolean;
346
345
  widthClass?: string;
347
346
  onclick?: (value: AnyProp) => void;
348
347
  onselect?: (selected: DrawerOption[]) => void;
348
+ children?: Snippet;
349
349
  }
350
350
  export interface DrawerContextItemProps {
351
351
  multiple?: boolean;
@@ -415,6 +415,8 @@ export interface FeedItemDetailProps {
415
415
  events?: FeedEvent[];
416
416
  idLabel?: string;
417
417
  onCopied?: (uuid: string) => void;
418
+ cancelable?: boolean;
419
+ onCancel?: () => void;
418
420
  }
419
421
  export interface FeedViewerProps {
420
422
  items?: FeedItemProps[];
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@invopop/popui",
3
3
  "license": "MIT",
4
- "version": "0.1.8",
4
+ "version": "0.1.10",
5
5
  "scripts": {
6
6
  "dev": "vite dev",
7
7
  "build": "vite build && npm run package",
@@ -79,7 +79,7 @@
79
79
  "type": "module",
80
80
  "dependencies": {
81
81
  "@floating-ui/core": "^1.5.1",
82
- "@invopop/ui-icons": "0.0.67",
82
+ "@invopop/ui-icons": "0.0.71",
83
83
  "@steeze-ui/heroicons": "^2.2.3",
84
84
  "@steeze-ui/svelte-icon": "^1.6.2",
85
85
  "@tailwindcss/vite": "^4.1.12",