@invopop/popui 0.0.73 → 0.0.75-beta1

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 (90) hide show
  1. package/dist/AlertDialog.svelte +38 -0
  2. package/dist/AlertDialog.svelte.d.ts +25 -0
  3. package/dist/BaseButton.svelte +1 -1
  4. package/dist/BaseDropdown.svelte +3 -1
  5. package/dist/BaseTable.svelte +43 -56
  6. package/dist/BaseTableActions.svelte +12 -2
  7. package/dist/BaseTableCellContent.svelte +64 -0
  8. package/dist/BaseTableCellContent.svelte.d.ts +24 -0
  9. package/dist/BaseTableCheckbox.svelte +28 -0
  10. package/dist/BaseTableCheckbox.svelte.d.ts +21 -0
  11. package/dist/BaseTableHeaderContent.svelte +59 -0
  12. package/dist/BaseTableHeaderContent.svelte.d.ts +21 -0
  13. package/dist/BaseTableRow.svelte +44 -41
  14. package/dist/BaseTableRow.svelte.d.ts +1 -1
  15. package/dist/CardCheckbox.svelte +22 -13
  16. package/dist/CardCheckbox.svelte.d.ts +2 -0
  17. package/dist/DrawerContext.svelte +1 -1
  18. package/dist/DropdownSelect.svelte +7 -3
  19. package/dist/ShortcutWrapper.svelte +2 -2
  20. package/dist/StepIconList.svelte +45 -0
  21. package/dist/StepIconList.svelte.d.ts +17 -0
  22. package/dist/alert-dialog/alert-dialog-action.svelte +19 -0
  23. package/dist/alert-dialog/alert-dialog-action.svelte.d.ts +28 -0
  24. package/dist/alert-dialog/alert-dialog-cancel.svelte +16 -0
  25. package/dist/alert-dialog/alert-dialog-cancel.svelte.d.ts +23 -0
  26. package/dist/alert-dialog/alert-dialog-content.svelte +23 -0
  27. package/dist/alert-dialog/alert-dialog-content.svelte.d.ts +17 -0
  28. package/dist/alert-dialog/alert-dialog-description.svelte +12 -0
  29. package/dist/alert-dialog/alert-dialog-description.svelte.d.ts +17 -0
  30. package/dist/alert-dialog/alert-dialog-footer.svelte +11 -0
  31. package/dist/alert-dialog/alert-dialog-footer.svelte.d.ts +17 -0
  32. package/dist/alert-dialog/alert-dialog-header.svelte +8 -0
  33. package/dist/alert-dialog/alert-dialog-header.svelte.d.ts +17 -0
  34. package/dist/alert-dialog/alert-dialog-overlay.svelte +17 -0
  35. package/dist/alert-dialog/alert-dialog-overlay.svelte.d.ts +15 -0
  36. package/dist/alert-dialog/alert-dialog-portal.svelte +6 -0
  37. package/dist/alert-dialog/alert-dialog-portal.svelte.d.ts +17 -0
  38. package/dist/alert-dialog/alert-dialog-title.svelte +10 -0
  39. package/dist/alert-dialog/alert-dialog-title.svelte.d.ts +17 -0
  40. package/dist/alert-dialog/index.d.ts +13 -0
  41. package/dist/alert-dialog/index.js +15 -0
  42. package/dist/button/button.svelte +20 -0
  43. package/dist/button/button.svelte.d.ts +16 -0
  44. package/dist/button/index.d.ts +60 -0
  45. package/dist/button/index.js +29 -0
  46. package/dist/index.d.ts +6 -2
  47. package/dist/index.js +6 -1
  48. package/dist/table/index.d.ts +9 -0
  49. package/dist/table/index.js +11 -0
  50. package/dist/table/table-body.svelte +8 -0
  51. package/dist/table/table-body.svelte.d.ts +17 -0
  52. package/dist/table/table-caption.svelte +8 -0
  53. package/dist/table/table-caption.svelte.d.ts +17 -0
  54. package/dist/table/table-cell.svelte +16 -0
  55. package/dist/table/table-cell.svelte.d.ts +20 -0
  56. package/dist/table/table-footer.svelte +8 -0
  57. package/dist/table/table-footer.svelte.d.ts +17 -0
  58. package/dist/table/table-head.svelte +14 -0
  59. package/dist/table/table-head.svelte.d.ts +17 -0
  60. package/dist/table/table-header.svelte +14 -0
  61. package/dist/table/table-header.svelte.d.ts +20 -0
  62. package/dist/table/table-row.svelte +17 -0
  63. package/dist/table/table-row.svelte.d.ts +23 -0
  64. package/dist/table/table.svelte +10 -0
  65. package/dist/table/table.svelte.d.ts +17 -0
  66. package/dist/tabs/index.d.ts +5 -0
  67. package/dist/tabs/index.js +7 -0
  68. package/dist/tabs/tabs-content.svelte +17 -0
  69. package/dist/tabs/tabs-content.svelte.d.ts +17 -0
  70. package/dist/tabs/tabs-list.svelte +15 -0
  71. package/dist/tabs/tabs-list.svelte.d.ts +17 -0
  72. package/dist/tabs/tabs-trigger.svelte +18 -0
  73. package/dist/tabs/tabs-trigger.svelte.d.ts +15 -0
  74. package/dist/tabs/tabs.svelte +14 -0
  75. package/dist/{Tabs.svelte.d.ts → tabs/tabs.svelte.d.ts} +5 -8
  76. package/dist/tooltip/index.d.ts +5 -0
  77. package/dist/tooltip/index.js +7 -0
  78. package/dist/tooltip/tooltip-content.svelte +25 -0
  79. package/dist/tooltip/tooltip-content.svelte.d.ts +17 -0
  80. package/dist/tw.theme.d.ts +4 -0
  81. package/dist/tw.theme.js +7 -3
  82. package/dist/types.d.ts +4 -0
  83. package/dist/utils.d.ts +13 -0
  84. package/dist/utils.js +38 -0
  85. package/package.json +5 -1
  86. package/dist/BaseTableCell.svelte +0 -91
  87. package/dist/BaseTableCell.svelte.d.ts +0 -28
  88. package/dist/BaseTableHeader.svelte +0 -68
  89. package/dist/BaseTableHeader.svelte.d.ts +0 -24
  90. package/dist/Tabs.svelte +0 -41
package/dist/utils.js ADDED
@@ -0,0 +1,38 @@
1
+ import { clsx } from 'clsx';
2
+ import { twMerge } from 'tailwind-merge';
3
+ import { cubicOut } from 'svelte/easing';
4
+ export function cn(...inputs) {
5
+ return twMerge(clsx(inputs));
6
+ }
7
+ export function styleToString(style) {
8
+ return Object.keys(style).reduce((str, key) => {
9
+ if (style[key] === undefined)
10
+ return str;
11
+ return `${str}${key}:${style[key]};`;
12
+ }, '');
13
+ }
14
+ export function flyAndScale(node, params = { y: -8, x: 0, start: 0.95, duration: 150 }) {
15
+ const style = getComputedStyle(node);
16
+ const transform = style.transform === 'none' ? '' : style.transform;
17
+ const scaleConversion = (valueA, scaleA, scaleB) => {
18
+ const [minA, maxA] = scaleA;
19
+ const [minB, maxB] = scaleB;
20
+ const percentage = (valueA - minA) / (maxA - minA);
21
+ const valueB = percentage * (maxB - minB) + minB;
22
+ return valueB;
23
+ };
24
+ return {
25
+ duration: params.duration ?? 200,
26
+ delay: 0,
27
+ css: (t) => {
28
+ const y = scaleConversion(t, [0, 1], [params.y ?? 5, 0]);
29
+ const x = scaleConversion(t, [0, 1], [params.x ?? 0, 0]);
30
+ const scale = scaleConversion(t, [0, 1], [params.start ?? 0.95, 1]);
31
+ return styleToString({
32
+ transform: `${transform} translate3d(${x}px, ${y}px, 0) scale(${scale})`,
33
+ opacity: t
34
+ });
35
+ },
36
+ easing: cubicOut
37
+ };
38
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@invopop/popui",
3
3
  "license": "MIT",
4
- "version": "0.0.73",
4
+ "version": "0.0.75-beta1",
5
5
  "scripts": {
6
6
  "dev": "vite dev",
7
7
  "build": "vite build && npm run package",
@@ -71,6 +71,7 @@
71
71
  "svelte": "^4.0.5",
72
72
  "svelte-check": "^3.4.3",
73
73
  "svelte-headlessui": "^0.0.32",
74
+ "tailwind-merge": "^3.0.2",
74
75
  "tailwindcss": "^3.4.16",
75
76
  "tslib": "^2.4.1",
76
77
  "typescript": "^4.1.6",
@@ -92,6 +93,7 @@
92
93
  "@twind/preset-tailwind-forms": "^1.1.2",
93
94
  "@twind/with-web-components": "^1.1.3",
94
95
  "@types/flatpickr": "^3.1.2",
96
+ "bits-ui": "^0.22.0",
95
97
  "clsx": "^2.0.0",
96
98
  "date-fns": "^2.30.0",
97
99
  "dayjs": "^1.11.10",
@@ -99,8 +101,10 @@
99
101
  "inter-ui": "^3.19.3",
100
102
  "svelte-floating-ui": "^1.5.8",
101
103
  "svelte-intersection-observer-action": "^0.0.4",
104
+ "svelte-portal": "^2.2.1",
102
105
  "svelte-transition": "^0.0.10",
103
106
  "svelte-viewport-info": "^1.0.2",
107
+ "tailwind-variants": "^1.0.0",
104
108
  "twind": "^0.16.19"
105
109
  }
106
110
  }
@@ -1,91 +0,0 @@
1
- <script>import Viewport from "svelte-viewport-info";
2
- import clsx from "clsx";
3
- import TagStatus from "./TagStatus.svelte";
4
- import FeedIconStatus from "./FeedIconStatus.svelte";
5
- import BaseFlag from "./BaseFlag.svelte";
6
- import { getCountryName } from "./helpers.js";
7
- import UuidCopy from "./UuidCopy.svelte";
8
- import { Icon } from "@steeze-ui/svelte-icon";
9
- export let field;
10
- export let isFirst = false;
11
- export let isLast = false;
12
- export let badge = null;
13
- export let status = null;
14
- export let icons = null;
15
- export let data = "";
16
- export let tag = "td";
17
- export let selectable = false;
18
- export let hasActions = false;
19
- $:
20
- isSelectableFirst = isFirst && selectable;
21
- $:
22
- cellStyles = clsx(
23
- { "tabular-nums slashed-zero lining-nums": field.monospacedNums },
24
- { "font-mono": field.monospaced },
25
- { "whitespace-nowrap": field.nowrap },
26
- { "text-neutral-800 font-medium": isFirst && !field.grayed },
27
- { "text-neutral-800 md:text-neutral-500": !isFirst || field.grayed },
28
- { "md:text-right": field.rightAlign },
29
- { "pl-5": isFirst && !selectable },
30
- { "pl-3": !isFirst && !isSelectableFirst },
31
- { "pr-5": isLast && !hasActions },
32
- { "pr-3": !isLast || hasActions },
33
- { "px-2": (!isFirst || !selectable) && !field.noPadding },
34
- { "px-0": field.noPadding }
35
- );
36
- $:
37
- isMobile = Viewport.Width < 769;
38
- </script>
39
-
40
- <svelte:element this={tag} class="{cellStyles} text-base tracking-normal py-2">
41
- <div class="flex flex-col">
42
- <span class="md:hidden text-sm text-neutral-600 font-normal">
43
- {field.headerLabel}
44
- </span>
45
- <span class="flex items-center" class:justify-end={field.rightAlign}>
46
- {#if field.isCountry && data}
47
- <span class="flex items-center space-x-1">
48
- <BaseFlag country={String(data)} width={16} />
49
- <span>{getCountryName(String(data))}</span>
50
- </span>
51
- {:else if field.copy && data}
52
- <UuidCopy
53
- rightAlign={isMobile ? false : field.rightAlign}
54
- uuid={String(data)}
55
- prefixLength={4}
56
- suffixLength={4}
57
- full
58
- compact
59
- dark={isMobile}
60
- on:copied
61
- />
62
- {:else}
63
- <span class="hidden md:inline">{data}</span>
64
- <span class="md:hidden">{data ? data : badge || status ? '' : '-'}</span>
65
- {/if}
66
- {#if badge}
67
- <span class:ml-2={!!data}>
68
- <TagStatus label={badge.label} status={badge.status} dot={Boolean(badge.dot)} />
69
- </span>
70
- {/if}
71
- {#if status}
72
- <span class:ml-2={!!data}>
73
- <FeedIconStatus {status} />
74
- </span>
75
- {/if}
76
- {#if icons}
77
- <span class:ml-2={!!data} class="flex items-center gap-1 flex-shrink-0">
78
- {#each icons as icon}
79
- <div class="border border-neutral-200 rounded-md p-px">
80
- {#if typeof icon === 'string'}
81
- <img alt="icon" src={icon} class="h-4 w-4" />
82
- {:else}
83
- <Icon src={icon} class="h-4 w-4" />
84
- {/if}
85
- </div>
86
- {/each}
87
- </span>
88
- {/if}
89
- </span>
90
- </div>
91
- </svelte:element>
@@ -1,28 +0,0 @@
1
- import { SvelteComponent } from "svelte";
2
- import type { Badge, FeedItemStatus, TableField, TableIcon } from './types.js';
3
- declare const __propDef: {
4
- props: {
5
- field: TableField;
6
- isFirst?: boolean | undefined;
7
- isLast?: boolean | undefined;
8
- badge?: Badge | null | undefined;
9
- status?: FeedItemStatus | null | undefined;
10
- icons?: TableIcon[] | null | undefined;
11
- data?: unknown;
12
- tag?: string | undefined;
13
- selectable?: boolean | undefined;
14
- hasActions?: boolean | undefined;
15
- };
16
- events: {
17
- copied: CustomEvent<any>;
18
- } & {
19
- [evt: string]: CustomEvent<any>;
20
- };
21
- slots: {};
22
- };
23
- export type BaseTableCellProps = typeof __propDef.props;
24
- export type BaseTableCellEvents = typeof __propDef.events;
25
- export type BaseTableCellSlots = typeof __propDef.slots;
26
- export default class BaseTableCell extends SvelteComponent<BaseTableCellProps, BaseTableCellEvents, BaseTableCellSlots> {
27
- }
28
- export {};
@@ -1,68 +0,0 @@
1
- <script>import clsx from "clsx";
2
- import { createEventDispatcher } from "svelte";
3
- import BaseDropdown from "./BaseDropdown.svelte";
4
- import BaseTableHeaderSortBy from "./BaseTableHeaderSortBy.svelte";
5
- const dispatch = createEventDispatcher();
6
- let sortDropdown;
7
- export let field;
8
- export let sortBy = "";
9
- export let sortDirection;
10
- export let isFirst = false;
11
- export let isLast = false;
12
- export let selectable = false;
13
- $:
14
- headerStyles = clsx({
15
- "hover:bg-neutral-50 focus:bg-neutral-100": field.sortable,
16
- "pl-5": isFirst && !selectable,
17
- "pl-2": !isFirst,
18
- "pr-5": isLast,
19
- "pr-2": !isLast
20
- });
21
- function handleSortBy(event) {
22
- sortDirection = event.detail;
23
- dispatch("orderBy", { field: field.slug, direction: sortDirection });
24
- sortDropdown.toggle();
25
- }
26
- </script>
27
-
28
- <th scope="col" class="bg-white text-neutral-500 group sticky z-10 top-0 h-9 box-border p-0">
29
- <span class="flex border-b border-neutral-100" class:justify-end={field.rightAlign}>
30
- {#if field.sortable}
31
- <BaseDropdown bind:this={sortDropdown} fullWidth>
32
- <span
33
- slot="trigger"
34
- class="{headerStyles} w-full py-2 flex items-center justify-start space-x-1 text-left text-base tracking-normal whitespace-nowrap font-normal"
35
- >
36
- <span class="w-full" class:text-right={field.rightAlign}>{field.headerLabel}</span>
37
- {#if sortBy === field.slug}
38
- <svg
39
- viewBox="0 0 12 12"
40
- fill="none"
41
- xmlns="http://www.w3.org/2000/svg"
42
- class:rotate-180={sortDirection === 'asc'}
43
- class="mt-px text-neutral-400 h-3 w-3"
44
- >
45
- <path
46
- fill-rule="evenodd"
47
- clip-rule="evenodd"
48
- d="M6.56519 8.8272L7.9966 7.39579L8.7037 8.1029L6.41082 10.3958L6.05726 10.7493L5.70371 10.3958L3.41082 8.1029L4.11793 7.39579L5.56507 8.84293L5.61453 1.24609L6.61451 1.2526L6.56519 8.8272Z"
49
- fill="currentColor"
50
- />
51
- </svg>
52
- {/if}
53
- </span>
54
- <BaseTableHeaderSortBy
55
- {sortDirection}
56
- isActive={sortBy === field.slug}
57
- on:sortBy={handleSortBy}
58
- />
59
- </BaseDropdown>
60
- {:else}
61
- <div
62
- class="{headerStyles} py-2 text-left text-base font-normal tracking-normal whitespace-nowrap"
63
- >
64
- <div class="h-5">{field.headerLabel}</div>
65
- </div>
66
- {/if}
67
- </span>
68
- </th>
@@ -1,24 +0,0 @@
1
- import { SvelteComponent } from "svelte";
2
- import type { TableField, TableSortBy } from './types.js';
3
- declare const __propDef: {
4
- props: {
5
- field: TableField;
6
- sortBy?: string | undefined;
7
- sortDirection: TableSortBy;
8
- isFirst?: boolean | undefined;
9
- isLast?: boolean | undefined;
10
- selectable?: boolean | undefined;
11
- };
12
- events: {
13
- orderBy: CustomEvent<any>;
14
- } & {
15
- [evt: string]: CustomEvent<any>;
16
- };
17
- slots: {};
18
- };
19
- export type BaseTableHeaderProps = typeof __propDef.props;
20
- export type BaseTableHeaderEvents = typeof __propDef.events;
21
- export type BaseTableHeaderSlots = typeof __propDef.slots;
22
- export default class BaseTableHeader extends SvelteComponent<BaseTableHeaderProps, BaseTableHeaderEvents, BaseTableHeaderSlots> {
23
- }
24
- export {};
package/dist/Tabs.svelte DELETED
@@ -1,41 +0,0 @@
1
- <script>import { createTabs } from "svelte-headlessui";
2
- import BaseCounter from "./BaseCounter.svelte";
3
- import { Icon } from "@steeze-ui/svelte-icon";
4
- import { Alert, Success } from "@invopop/ui-icons";
5
- import { createEventDispatcher } from "svelte";
6
- const dispatch = createEventDispatcher();
7
- export let items = [];
8
- export let selected = "";
9
- const tabs = createTabs({ selected: items.find((i) => i.slug === selected) || items[0] });
10
- </script>
11
-
12
- <div
13
- use:tabs.list
14
- class="inline-flex space-x-0.5 rounded-md border p-0.5 border-neutral-200 bg-neutral-100 w-full"
15
- >
16
- {#each items as value}
17
- <button
18
- use:tabs.tab={{ value }}
19
- class:bg-white={selected === value.slug}
20
- class="flex items-center space-x-1 justify-center w-full whitespace-nowrap text-neutral-800 text-base font-medium focus:outline-none focus:ring-0 py-0.5 px-3 rounded"
21
- on:click={() => {
22
- selected = value.slug
23
- dispatch('selected', selected)
24
- }}
25
- >
26
- <span class="tracking-tighter">{value.label}</span>
27
- {#if value.counter}
28
- <BaseCounter
29
- content={value.counter}
30
- variant={selected === value.slug ? 'light' : 'default'}
31
- />
32
- {/if}
33
- {#if value.check}
34
- <Icon src={Success} class="h-4 w-4" />
35
- {/if}
36
- {#if value.warning}
37
- <Icon src={Alert} class="h-4 w-4" />
38
- {/if}
39
- </button>
40
- {/each}
41
- </div>