@invopop/popui 0.0.1

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 (141) hide show
  1. package/README.md +146 -0
  2. package/dist/BaseButton.svelte +107 -0
  3. package/dist/BaseButton.svelte.d.ts +33 -0
  4. package/dist/BaseCard.svelte +50 -0
  5. package/dist/BaseCard.svelte.d.ts +25 -0
  6. package/dist/BaseCounter.svelte +16 -0
  7. package/dist/BaseCounter.svelte.d.ts +17 -0
  8. package/dist/BaseDropdown.svelte +46 -0
  9. package/dist/BaseDropdown.svelte.d.ts +24 -0
  10. package/dist/BaseFlag.svelte +14 -0
  11. package/dist/BaseFlag.svelte.d.ts +17 -0
  12. package/dist/BaseTable.svelte +148 -0
  13. package/dist/BaseTable.svelte.d.ts +33 -0
  14. package/dist/BaseTableActions.svelte +31 -0
  15. package/dist/BaseTableActions.svelte.d.ts +21 -0
  16. package/dist/BaseTableCell.svelte +90 -0
  17. package/dist/BaseTableCell.svelte.d.ts +26 -0
  18. package/dist/BaseTableHeader.svelte +75 -0
  19. package/dist/BaseTableHeader.svelte.d.ts +23 -0
  20. package/dist/BaseTableHeaderSortBy.svelte +22 -0
  21. package/dist/BaseTableHeaderSortBy.svelte.d.ts +20 -0
  22. package/dist/BaseTableRow.svelte +48 -0
  23. package/dist/BaseTableRow.svelte.d.ts +25 -0
  24. package/dist/ButtonFile.svelte +51 -0
  25. package/dist/ButtonFile.svelte.d.ts +25 -0
  26. package/dist/CardRelation.svelte +29 -0
  27. package/dist/CardRelation.svelte.d.ts +22 -0
  28. package/dist/CompanySelector.svelte +74 -0
  29. package/dist/CompanySelector.svelte.d.ts +23 -0
  30. package/dist/CounterWorkflow.svelte +15 -0
  31. package/dist/CounterWorkflow.svelte.d.ts +17 -0
  32. package/dist/DataListItem.svelte +22 -0
  33. package/dist/DataListItem.svelte.d.ts +22 -0
  34. package/dist/DatePicker.svelte +431 -0
  35. package/dist/DatePicker.svelte.d.ts +22 -0
  36. package/dist/DrawerContext.svelte +48 -0
  37. package/dist/DrawerContext.svelte.d.ts +23 -0
  38. package/dist/DrawerContextItem.svelte +93 -0
  39. package/dist/DrawerContextItem.svelte.d.ts +23 -0
  40. package/dist/DrawerContextWorkspace.svelte +40 -0
  41. package/dist/DrawerContextWorkspace.svelte.d.ts +20 -0
  42. package/dist/DropdownSelect.svelte +78 -0
  43. package/dist/DropdownSelect.svelte.d.ts +26 -0
  44. package/dist/EmptyStateIcon.svelte +46 -0
  45. package/dist/EmptyStateIcon.svelte.d.ts +22 -0
  46. package/dist/EmptyStateIllustration.svelte +58 -0
  47. package/dist/EmptyStateIllustration.svelte.d.ts +21 -0
  48. package/dist/FeedEvents.svelte +26 -0
  49. package/dist/FeedEvents.svelte.d.ts +17 -0
  50. package/dist/FeedIconEvent.svelte +10 -0
  51. package/dist/FeedIconEvent.svelte.d.ts +19 -0
  52. package/dist/FeedIconStatus.svelte +26 -0
  53. package/dist/FeedIconStatus.svelte.d.ts +17 -0
  54. package/dist/FeedItem.svelte +87 -0
  55. package/dist/FeedItem.svelte.d.ts +30 -0
  56. package/dist/FeedItemDetail.svelte +56 -0
  57. package/dist/FeedItemDetail.svelte.d.ts +23 -0
  58. package/dist/FeedViewer.svelte +19 -0
  59. package/dist/FeedViewer.svelte.d.ts +21 -0
  60. package/dist/FormLayoutModal.svelte +8 -0
  61. package/dist/FormLayoutModal.svelte.d.ts +29 -0
  62. package/dist/GlobalSearch.svelte +47 -0
  63. package/dist/GlobalSearch.svelte.d.ts +18 -0
  64. package/dist/InputCheckbox.svelte +20 -0
  65. package/dist/InputCheckbox.svelte.d.ts +18 -0
  66. package/dist/InputError.svelte +14 -0
  67. package/dist/InputError.svelte.d.ts +16 -0
  68. package/dist/InputLabel.svelte +5 -0
  69. package/dist/InputLabel.svelte.d.ts +17 -0
  70. package/dist/InputRadio.svelte +27 -0
  71. package/dist/InputRadio.svelte.d.ts +19 -0
  72. package/dist/InputSearch.svelte +69 -0
  73. package/dist/InputSearch.svelte.d.ts +32 -0
  74. package/dist/InputSelect.svelte +75 -0
  75. package/dist/InputSelect.svelte.d.ts +30 -0
  76. package/dist/InputText.svelte +63 -0
  77. package/dist/InputText.svelte.d.ts +26 -0
  78. package/dist/InputTextarea.svelte +42 -0
  79. package/dist/InputTextarea.svelte.d.ts +24 -0
  80. package/dist/InputToggle.svelte +33 -0
  81. package/dist/InputToggle.svelte.d.ts +18 -0
  82. package/dist/MenuItem.svelte +141 -0
  83. package/dist/MenuItem.svelte.d.ts +29 -0
  84. package/dist/ProfileAvatar.svelte +39 -0
  85. package/dist/ProfileAvatar.svelte.d.ts +21 -0
  86. package/dist/ProfileSelector.svelte +20 -0
  87. package/dist/ProfileSelector.svelte.d.ts +20 -0
  88. package/dist/SectionLayout.svelte +10 -0
  89. package/dist/SectionLayout.svelte.d.ts +18 -0
  90. package/dist/SeparatorHorizontal.svelte +14 -0
  91. package/dist/SeparatorHorizontal.svelte.d.ts +23 -0
  92. package/dist/ShortcutWrapper.svelte +6 -0
  93. package/dist/ShortcutWrapper.svelte.d.ts +27 -0
  94. package/dist/StatusLabel.svelte +20 -0
  95. package/dist/StatusLabel.svelte.d.ts +18 -0
  96. package/dist/Tabs.svelte +41 -0
  97. package/dist/Tabs.svelte.d.ts +20 -0
  98. package/dist/TagBeta.svelte +23 -0
  99. package/dist/TagBeta.svelte.d.ts +23 -0
  100. package/dist/TagSearch.svelte +46 -0
  101. package/dist/TagSearch.svelte.d.ts +22 -0
  102. package/dist/TagStatus.svelte +46 -0
  103. package/dist/TagStatus.svelte.d.ts +19 -0
  104. package/dist/TitleMain.svelte +6 -0
  105. package/dist/TitleMain.svelte.d.ts +18 -0
  106. package/dist/TitleSection.svelte +6 -0
  107. package/dist/TitleSection.svelte.d.ts +18 -0
  108. package/dist/UuidCopy.svelte +55 -0
  109. package/dist/UuidCopy.svelte.d.ts +26 -0
  110. package/dist/clickOutside.d.ts +4 -0
  111. package/dist/clickOutside.js +18 -0
  112. package/dist/constants.d.ts +1 -0
  113. package/dist/constants.js +1 -0
  114. package/dist/helpers.d.ts +6 -0
  115. package/dist/helpers.js +35 -0
  116. package/dist/index.d.ts +51 -0
  117. package/dist/index.js +101 -0
  118. package/dist/popui.css +1 -0
  119. package/dist/svg/BgPattern.svelte +20 -0
  120. package/dist/svg/BgPattern.svelte.d.ts +23 -0
  121. package/dist/svg/IconContact.svelte +114 -0
  122. package/dist/svg/IconContact.svelte.d.ts +16 -0
  123. package/dist/svg/IconEmpty.svelte +138 -0
  124. package/dist/svg/IconEmpty.svelte.d.ts +23 -0
  125. package/dist/svg/IconFile.svelte +91 -0
  126. package/dist/svg/IconFile.svelte.d.ts +16 -0
  127. package/dist/svg/IconInvoice.svelte +97 -0
  128. package/dist/svg/IconInvoice.svelte.d.ts +16 -0
  129. package/dist/svg/IconNoResults.svelte +83 -0
  130. package/dist/svg/IconNoResults.svelte.d.ts +16 -0
  131. package/dist/svg/IconPdf.svelte +93 -0
  132. package/dist/svg/IconPdf.svelte.d.ts +16 -0
  133. package/dist/svg/IconProduct.svelte +105 -0
  134. package/dist/svg/IconProduct.svelte.d.ts +16 -0
  135. package/dist/tw.theme.d.ts +135 -0
  136. package/dist/tw.theme.js +152 -0
  137. package/dist/types.d.ts +128 -0
  138. package/dist/types.js +1 -0
  139. package/dist/wcdispatch.d.ts +1 -0
  140. package/dist/wcdispatch.js +9 -0
  141. package/package.json +102 -0
@@ -0,0 +1,17 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ content: number | string;
5
+ variant?: "default" | "transparent" | undefined;
6
+ };
7
+ events: {
8
+ [evt: string]: CustomEvent<any>;
9
+ };
10
+ slots: {};
11
+ };
12
+ export type CounterWorkflowProps = typeof __propDef.props;
13
+ export type CounterWorkflowEvents = typeof __propDef.events;
14
+ export type CounterWorkflowSlots = typeof __propDef.slots;
15
+ export default class CounterWorkflow extends SvelteComponent<CounterWorkflowProps, CounterWorkflowEvents, CounterWorkflowSlots> {
16
+ }
17
+ export {};
@@ -0,0 +1,22 @@
1
+ <script>import clsx from "clsx";
2
+ export let label = "";
3
+ export let value = "";
4
+ export let monospaced = false;
5
+ export let monospacedNums = false;
6
+ export let fullWidth = false;
7
+ $:
8
+ styles = clsx({
9
+ "font-mono": monospaced,
10
+ "slashed-zero tabular-nums lining-nums": monospacedNums,
11
+ "w-full": fullWidth
12
+ });
13
+ </script>
14
+
15
+ <div class="flex space-x-4 text-base items-center">
16
+ <div class="text-neutral-500 min-w-[125px]">{label}</div>
17
+ <div class="{styles} text-neutral-800 font-medium">
18
+ <slot>
19
+ {value}
20
+ </slot>
21
+ </div>
22
+ </div>
@@ -0,0 +1,22 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ label?: string | undefined;
5
+ value?: string | undefined;
6
+ monospaced?: boolean | undefined;
7
+ monospacedNums?: boolean | undefined;
8
+ fullWidth?: boolean | undefined;
9
+ };
10
+ events: {
11
+ [evt: string]: CustomEvent<any>;
12
+ };
13
+ slots: {
14
+ default: {};
15
+ };
16
+ };
17
+ export type DataListItemProps = typeof __propDef.props;
18
+ export type DataListItemEvents = typeof __propDef.events;
19
+ export type DataListItemSlots = typeof __propDef.slots;
20
+ export default class DataListItem extends SvelteComponent<DataListItemProps, DataListItemEvents, DataListItemSlots> {
21
+ }
22
+ export {};
@@ -0,0 +1,431 @@
1
+ <script>import Transition from "svelte-transition";
2
+ import flatpickr from "flatpickr";
3
+ import "flatpickr/dist/flatpickr.min.css";
4
+ import { createEventDispatcher, onMount } from "svelte";
5
+ import BaseButton from "./BaseButton.svelte";
6
+ import {
7
+ startOfWeek,
8
+ endOfWeek,
9
+ subWeeks,
10
+ endOfMonth,
11
+ startOfMonth,
12
+ subMonths,
13
+ startOfQuarter,
14
+ endOfQuarter,
15
+ subQuarters
16
+ } from "date-fns";
17
+ import { Icon } from "@steeze-ui/svelte-icon";
18
+ import { Calendar } from "@invopop/ui-icons";
19
+ import clsx from "clsx";
20
+ const dispatch = createEventDispatcher();
21
+ export let label = "Date";
22
+ export let position = "left";
23
+ export let from = "";
24
+ export let to = "";
25
+ $:
26
+ if (datepicker) {
27
+ setDates(from, to);
28
+ }
29
+ $:
30
+ styles = clsx({
31
+ "border-workspace-accent focus:border-workspace-accent shadow-active": isOpen,
32
+ "border-neutral-200": !isOpen
33
+ });
34
+ let datePickerEl;
35
+ let selectedLabel = label;
36
+ let datepicker;
37
+ let selectedDates = { from: { value: "", display: "" }, to: { value: "", display: "" } };
38
+ let isOpen = false;
39
+ let selectedPeriod = "custom";
40
+ const today = /* @__PURE__ */ new Date();
41
+ const startOfThisWeek = startOfWeek(today, { weekStartsOn: 1 });
42
+ const endOfThisWeek = endOfWeek(today, { weekStartsOn: 1 });
43
+ const startOfLastWeek = subWeeks(startOfThisWeek, 1);
44
+ const endOfLastWeek = endOfWeek(startOfLastWeek, { weekStartsOn: 1 });
45
+ const startOfThisMonth = startOfMonth(today);
46
+ const endOfThisMonth = endOfMonth(today);
47
+ const startOfLastMonth = subMonths(startOfThisMonth, 1);
48
+ const endOfLastMonth = endOfMonth(startOfLastMonth);
49
+ const startOfThisQuarter = startOfQuarter(today);
50
+ const endOfThisQuarter = endOfQuarter(today);
51
+ const startOfLastQuarter = subQuarters(startOfThisQuarter, 1);
52
+ const endOfLastQuarter = endOfQuarter(startOfLastQuarter);
53
+ const periods = [
54
+ {
55
+ slug: "this-week",
56
+ label: "This Week",
57
+ action: () => {
58
+ selectedPeriod = "this-week";
59
+ datepicker.setDate([startOfThisWeek, endOfThisWeek], true);
60
+ datepicker.jumpToDate(startOfThisWeek);
61
+ }
62
+ },
63
+ {
64
+ slug: "last-week",
65
+ label: "Last Week",
66
+ action: () => {
67
+ selectedPeriod = "last-week";
68
+ datepicker.setDate([startOfLastWeek, endOfLastWeek], true);
69
+ datepicker.jumpToDate(startOfLastWeek);
70
+ }
71
+ },
72
+ {
73
+ slug: "this-month",
74
+ label: "This month",
75
+ action: () => {
76
+ selectedPeriod = "this-month";
77
+ datepicker.setDate([startOfThisMonth, endOfThisMonth], true);
78
+ datepicker.jumpToDate(startOfThisMonth);
79
+ }
80
+ },
81
+ {
82
+ slug: "last-month",
83
+ label: "Last month",
84
+ action: () => {
85
+ selectedPeriod = "last-month";
86
+ datepicker.setDate([startOfLastMonth, endOfLastMonth], true);
87
+ datepicker.jumpToDate(startOfLastMonth);
88
+ }
89
+ },
90
+ {
91
+ slug: "this-quarter",
92
+ label: "This quarter",
93
+ action: () => {
94
+ selectedPeriod = "this-quarter";
95
+ datepicker.setDate([startOfThisQuarter, endOfThisQuarter], true);
96
+ datepicker.jumpToDate(startOfThisQuarter);
97
+ }
98
+ },
99
+ {
100
+ slug: "last-quarter",
101
+ label: "Last quarter",
102
+ action: () => {
103
+ selectedPeriod = "last-quarter";
104
+ datepicker.setDate([startOfLastQuarter, endOfLastQuarter], true);
105
+ datepicker.jumpToDate(startOfLastQuarter);
106
+ }
107
+ },
108
+ {
109
+ slug: "custom",
110
+ label: "Custom",
111
+ action: () => {
112
+ datepicker.clear();
113
+ selectedPeriod = "custom";
114
+ }
115
+ }
116
+ ];
117
+ onMount(() => {
118
+ datepicker = flatpickr(datePickerEl, {
119
+ onChange: function(dates) {
120
+ if (dates.length === 0) {
121
+ selectedLabel = label;
122
+ return;
123
+ }
124
+ if (dates.length === 1) {
125
+ selectedPeriod = "custom";
126
+ return;
127
+ }
128
+ const from2 = getDate(dates[0]);
129
+ const to2 = getDate(dates[1]);
130
+ selectedDates = { from: from2, to: to2 };
131
+ },
132
+ locale: {
133
+ firstDayOfWeek: 1,
134
+ weekdays: {
135
+ shorthand: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
136
+ longhand: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
137
+ }
138
+ },
139
+ inline: true,
140
+ mode: "range",
141
+ dateFormat: "Y-m-d",
142
+ showMonths: 2
143
+ });
144
+ });
145
+ function getDate(date) {
146
+ const year = date.getFullYear();
147
+ const month = ("0" + (date.getMonth() + 1)).slice(-2);
148
+ const day = ("0" + date.getDate()).slice(-2);
149
+ return { value: `${year}-${month}-${day}`, display: `${day}/${month}/${year}` };
150
+ }
151
+ function cancel() {
152
+ isOpen = false;
153
+ datepicker.clear();
154
+ dispatch("selected", { from: "", to: "" });
155
+ }
156
+ function confirm() {
157
+ isOpen = false;
158
+ selectedLabel = getLabel();
159
+ dispatch("selected", { from: selectedDates.from.value, to: selectedDates.to.value });
160
+ }
161
+ function getLabel() {
162
+ if (!selectedDates.from.value)
163
+ return label;
164
+ if (selectedDates.from.value === selectedDates.to.value)
165
+ return selectedDates.from.display;
166
+ return `${selectedDates.from.display} \u2192 ${selectedDates.to.display}`;
167
+ }
168
+ function setDates(from2, to2) {
169
+ datepicker.setDate([from2, to2]);
170
+ selectedDates = {
171
+ from: { value: from2, display: getDisplayFromValue(from2) },
172
+ to: { value: to2, display: getDisplayFromValue(to2) }
173
+ };
174
+ selectedLabel = getLabel();
175
+ }
176
+ function getDisplayFromValue(value) {
177
+ if (!value)
178
+ return "";
179
+ const parts = value.split("-");
180
+ return `${parts[2]}/${parts[1]}/${parts[0]}`;
181
+ }
182
+ </script>
183
+
184
+ <div>
185
+ <div class="relative">
186
+ <button
187
+ on:click={() => (isOpen = !isOpen)}
188
+ class="{styles} datepicker-trigger w-full py-1.25 pl-7 pr-8 border hover:border-neutral-300 rounded-md text-neutral-800 placeholder-neutral-800 text-base"
189
+ >
190
+ {selectedLabel}
191
+ </button>
192
+ <Icon src={Calendar} class="h-4 w-4 absolute top-2 left-2 text-neutral-500" />
193
+ </div>
194
+
195
+ <div class="relative">
196
+ <Transition
197
+ show={isOpen}
198
+ enter="transition ease-out duration-100"
199
+ enterFrom="transform opacity-0 scale-95"
200
+ enterTo="transform opacity-100 scale-100"
201
+ leave="transition ease-in duration-75"
202
+ leaveFrom="transform opacity-100 scale-100"
203
+ leaveTo="transform opacity-0 scale-95"
204
+ >
205
+ <div
206
+ class:left-0={position === 'left'}
207
+ class:right-0={position === 'right'}
208
+ class="bg-white inline-flex flex-col shadow rounded-lg absolute right-0 top-2 z-40"
209
+ >
210
+ <div class="flex border-b border-neutral-100 h-[300px]">
211
+ <div class="flex flex-col space-y-2 items-start p-3 border-r border-neutral-100">
212
+ {#each periods as period}
213
+ <button
214
+ on:click={period.action}
215
+ class="{selectedPeriod === period.slug
216
+ ? 'selected-period text-workspace-accent border-workspace-accent-200 bg-workspace-accent-50'
217
+ : 'text-neutral-500 border-transparent'} whitespace-nowrap text-base px-2 py-1 tracking-normal border rounded"
218
+ >
219
+ {period.label}
220
+ </button>
221
+ {/each}
222
+ </div>
223
+ <div bind:this={datePickerEl} />
224
+ </div>
225
+ <div class="p-3 flex justify-end items-center space-x-3">
226
+ <BaseButton variant="secondary" on:click={cancel}>Cancel</BaseButton>
227
+ <BaseButton variant="primary" on:click={confirm} disabled={!selectedDates.to.value}>
228
+ Confirm
229
+ </BaseButton>
230
+ </div>
231
+ </div>
232
+ </Transition>
233
+ </div>
234
+ </div>
235
+
236
+ <style>
237
+ :global(.flatpickr-calendar) {
238
+ width: 508px !important;
239
+ padding-left: 12px;
240
+ padding-right: 12px;
241
+ padding-top: 4px;
242
+ padding-bottom: 8px;
243
+ font-family: 'Inter' !important;
244
+ top: 0 !important;
245
+ border-radius: 0;
246
+ box-shadow: none;
247
+ }
248
+ :global(.flatpickr-weekdaycontainer:nth-child(2)) {
249
+ margin-left: 28px;
250
+ }
251
+ :global(.dayContainer:nth-child(1)) {
252
+ margin-right: 28px;
253
+ }
254
+ :global(.flatpickr-months) {
255
+ padding-top: 8px;
256
+ padding-bottom: 12px;
257
+ }
258
+ :global(.flatpickr-current-month) {
259
+ padding-top: 0px;
260
+ display: flex;
261
+ align-items: center;
262
+ justify-content: center;
263
+ font-size: 14px;
264
+ height: 24px !important;
265
+ letter-spacing: -0.07px;
266
+ }
267
+ :global(.flatpickr-monthDropdown-months) {
268
+ font-weight: 500 !important;
269
+ height: 22px !important;
270
+ color: #09101c !important;
271
+ }
272
+ :global(.cur-month:hover) {
273
+ background-color: transparent !important;
274
+ }
275
+ :global(.numInputWrapper:hover) {
276
+ background-color: #fafbfb !important;
277
+ border: 1px solid #f3f5f5 !important;
278
+ }
279
+ :global(.numInputWrapper span.arrowUp) {
280
+ right: -4px;
281
+ border: 0;
282
+ background-color: transparent;
283
+ }
284
+ :global(.numInputWrapper span.arrowDown) {
285
+ right: -4px;
286
+ border: 0;
287
+ background-color: transparent;
288
+ }
289
+ :global(.cur-year, .cur-month) {
290
+ font-weight: 600 !important;
291
+ color: #09101c !important;
292
+ }
293
+ :global(.numInputWrapper) {
294
+ display: flex !important;
295
+ align-items: center;
296
+ justify-content: center;
297
+ height: 22px;
298
+ }
299
+ :global(.flatpickr-next-month) {
300
+ display: flex;
301
+ align-items: center;
302
+ justify-content: center;
303
+ height: 24px !important;
304
+ width: 24px !important;
305
+ border: 1px solid #e9ebeb;
306
+ right: 12px !important;
307
+ top: 12px !important;
308
+ padding: 0 !important;
309
+ border-radius: 4px;
310
+ }
311
+ :global(.flatpickr-prev-month) {
312
+ display: flex;
313
+ align-items: center;
314
+ justify-content: center;
315
+ height: 24px !important;
316
+ width: 24px !important;
317
+ border: 1px solid #e9ebeb;
318
+ left: 12px !important;
319
+ top: 12px !important;
320
+ padding: 0 !important;
321
+ border-radius: 4px;
322
+ }
323
+ :global(.flatpickr-weekdays) {
324
+ height: 32px;
325
+ }
326
+ :global(.flatpickr-day.selected, .flatpickr-day.startRange, .flatpickr-day.endRange) {
327
+ background-color: var(--workspace-accent-color, #169958) !important;
328
+ border: 0;
329
+ border-radius: 4px !important;
330
+ box-shadow: 0px 0px 0px 2px
331
+ color-mix(in lab, transparent 88%, var(--workspace-accent-color, #169958)) !important;
332
+ }
333
+ :global(
334
+ .flatpickr-day.selected:hover,
335
+ .flatpickr-day.startRange:hover,
336
+ .flatpickr-day.endRange:hover
337
+ ) {
338
+ border: 0;
339
+ }
340
+ :global(.flatpickr-day.inRange) {
341
+ background-color: #f4f5f5;
342
+ border: 1px solid #f4f5f5;
343
+ box-shadow: none !important;
344
+ }
345
+ :global(.prevMonthDay, .nextMonthDay) {
346
+ color: #cccece !important;
347
+ font-weight: 500;
348
+ font-size: 13px;
349
+ }
350
+ :global(.prevMonthDay.inRange, .nextMonthDay.inRange) {
351
+ background-color: #f4f5f5 !important;
352
+ border: 1px solid #f4f5f5 !important;
353
+ }
354
+ :global(.flatpickr-weekday) {
355
+ width: 32px;
356
+ height: 32px;
357
+ display: flex !important;
358
+ align-items: center;
359
+ justify-content: center;
360
+ font-weight: 400 !important;
361
+ color: #9ca3af !important;
362
+ font-size: 12px !important;
363
+ }
364
+ :global(.flatpickr-weekdaycontainer) {
365
+ flex: 0 !important;
366
+ border-bottom: 1px solid #f3f5f5 !important;
367
+ }
368
+ :global(.flatpickr-prev-month svg) {
369
+ fill: #0a0a0a;
370
+ height: 10px !important;
371
+ width: 10px !important;
372
+ }
373
+ :global(.flatpickr-next-month svg) {
374
+ fill: #0a0a0a;
375
+ height: 10px !important;
376
+ width: 10px !important;
377
+ }
378
+ :global(.flatpickr-prev-month:hover svg, .flatpickr-next-month:hover svg) {
379
+ fill: #0a0a0a !important;
380
+ }
381
+ :global(.flatpickr-days) {
382
+ width: 496px !important;
383
+ }
384
+ :global(.dayContainer) {
385
+ width: 224px;
386
+ min-width: 224px;
387
+ max-width: 224px;
388
+ justify-content: start;
389
+ box-shadow: none !important;
390
+ }
391
+ :global(.flatpickr-day) {
392
+ margin-top: 2px !important;
393
+ border-radius: 4px;
394
+ width: 32px;
395
+ max-width: 32px;
396
+ height: 32px;
397
+ line-height: 32px;
398
+ display: flex !important;
399
+ font-weight: 500 !important;
400
+ align-items: center;
401
+ justify-content: center;
402
+ color: #0a0a0a;
403
+ }
404
+ :global(.flatpickr-day.today) {
405
+ border: 0;
406
+ border-bottom: 1px solid var(--workspace-accent-color, #169958);
407
+ border-radius: 0;
408
+ }
409
+ :global(.flatpickr-day.today:hover) {
410
+ background-color: #fafbfb !important;
411
+ border: 1px solid #f3f5f5 !important;
412
+ color: #0a0a0a;
413
+ border-radius: 4px;
414
+ }
415
+ :global(.flatpickr-day:hover) {
416
+ background-color: #fafbfb;
417
+ border: 1px solid #f3f5f5;
418
+ }
419
+ :global(.prevMonthDay:hover, .nextMonthDay:hover) {
420
+ background-color: #fafbfb !important;
421
+ border: 1px solid #f3f5f5 !important;
422
+ }
423
+ .datepicker-trigger {
424
+ appearance: none;
425
+ -webkit-appearance: none;
426
+ -moz-appearance: none;
427
+ background-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiByeD0iNCIgZmlsbD0iI0YzRjRGNiIvPgo8cGF0aCBkPSJNNi41IDguMjUwMDRMMTAgMTEuNzVMMTMuNSA4LjI1IiBzdHJva2U9IiMwMzA3MTIiIHN0cm9rZS13aWR0aD0iMS4xIi8+Cjwvc3ZnPg==');
428
+ background-repeat: no-repeat;
429
+ background-position: center right 8px;
430
+ }
431
+ </style>
@@ -0,0 +1,22 @@
1
+ import { SvelteComponent } from "svelte";
2
+ import 'flatpickr/dist/flatpickr.min.css';
3
+ declare const __propDef: {
4
+ props: {
5
+ label?: string | undefined;
6
+ position?: "right" | "left" | undefined;
7
+ from?: string | undefined;
8
+ to?: string | undefined;
9
+ };
10
+ events: {
11
+ selected: CustomEvent<any>;
12
+ } & {
13
+ [evt: string]: CustomEvent<any>;
14
+ };
15
+ slots: {};
16
+ };
17
+ export type DatePickerProps = typeof __propDef.props;
18
+ export type DatePickerEvents = typeof __propDef.events;
19
+ export type DatePickerSlots = typeof __propDef.slots;
20
+ export default class DatePicker extends SvelteComponent<DatePickerProps, DatePickerEvents, DatePickerSlots> {
21
+ }
22
+ export {};
@@ -0,0 +1,48 @@
1
+ <script>import DrawerContextItem from "./DrawerContextItem.svelte";
2
+ import InputSearch from "./InputSearch.svelte";
3
+ import { createEventDispatcher } from "svelte";
4
+ const dispatch = createEventDispatcher();
5
+ export let items = [];
6
+ export let multiple = false;
7
+ export let searchable = false;
8
+ export let widthClass = "w-60";
9
+ $:
10
+ mainItems = items.filter((i) => !i.footer);
11
+ $:
12
+ footerItems = items.filter((i) => i.footer);
13
+ $:
14
+ selectedItems = items.filter((i) => i.selected);
15
+ $:
16
+ dispatch("selected", selectedItems);
17
+ function updateItem(event) {
18
+ const item = event.detail;
19
+ items = items.map((i) => {
20
+ if (i.value === item.value)
21
+ return item;
22
+ return i;
23
+ });
24
+ }
25
+ </script>
26
+
27
+ <div
28
+ class="{widthClass} border border-neutral-200 py-1 rounded shadow-lg space-y-0.5 bg-white max-h-80 overflow-y-auto"
29
+ >
30
+ {#if searchable}
31
+ <div class="px-2 mt-2 mb-1">
32
+ <InputSearch placeholder="Search" />
33
+ </div>
34
+ {/if}
35
+ <ul class="px-1 space-y-1 max-h-80 overflow-y-auto">
36
+ {#each mainItems as item}
37
+ <DrawerContextItem {item} {multiple} on:click on:change={updateItem} />
38
+ {/each}
39
+ </ul>
40
+ {#if footerItems.length}
41
+ <hr class="!my-1 border-neutral-100" />
42
+ <ul class="px-1 space-y-1">
43
+ {#each footerItems as item}
44
+ <DrawerContextItem {item} {multiple} on:click />
45
+ {/each}
46
+ </ul>
47
+ {/if}
48
+ </div>
@@ -0,0 +1,23 @@
1
+ import { SvelteComponent } from "svelte";
2
+ import type { DrawerOption } from './types.ts';
3
+ declare const __propDef: {
4
+ props: {
5
+ items?: DrawerOption[] | undefined;
6
+ multiple?: boolean | undefined;
7
+ searchable?: boolean | undefined;
8
+ widthClass?: string | undefined;
9
+ };
10
+ events: {
11
+ click: CustomEvent<any>;
12
+ selected: CustomEvent<any>;
13
+ } & {
14
+ [evt: string]: CustomEvent<any>;
15
+ };
16
+ slots: {};
17
+ };
18
+ export type DrawerContextProps = typeof __propDef.props;
19
+ export type DrawerContextEvents = typeof __propDef.events;
20
+ export type DrawerContextSlots = typeof __propDef.slots;
21
+ export default class DrawerContext extends SvelteComponent<DrawerContextProps, DrawerContextEvents, DrawerContextSlots> {
22
+ }
23
+ export {};
@@ -0,0 +1,93 @@
1
+ <script>import InputCheckbox from "./InputCheckbox.svelte";
2
+ import { Icon } from "@steeze-ui/svelte-icon";
3
+ import { createEventDispatcher, onMount } from "svelte";
4
+ import { Tick } from "@invopop/ui-icons";
5
+ import ProfileAvatar from "./ProfileAvatar.svelte";
6
+ import clsx from "clsx";
7
+ import BaseFlag from "./BaseFlag.svelte";
8
+ import { getCountryName } from "./helpers.js";
9
+ import TagStatus from "./TagStatus.svelte";
10
+ const dispatch = createEventDispatcher();
11
+ export let multiple = false;
12
+ export let item;
13
+ export let scrollIfSelected = false;
14
+ export let workspace = false;
15
+ let el;
16
+ $:
17
+ hasIcon = item.icon || workspace;
18
+ $:
19
+ styles = clsx(
20
+ { "py-1 space-x-3": workspace },
21
+ { "py-1.5 space-x-2": !workspace },
22
+ { "px-1.5": hasIcon },
23
+ { "px-2": !hasIcon },
24
+ { "bg-workspace-accent-100": item.selected && !multiple },
25
+ { "hover:bg-neutral-100 rounded": !item.selected }
26
+ );
27
+ $:
28
+ labelStyles = clsx(
29
+ { "text-danger-500": item.destructive },
30
+ { "text-neutral-800": !item.destructive },
31
+ { "font-semibold tracking-tight": workspace },
32
+ { "font-normal tracking-normal": !workspace }
33
+ );
34
+ onMount(() => {
35
+ if (!scrollIfSelected)
36
+ return;
37
+ if (item.selected) {
38
+ el.scrollIntoView();
39
+ }
40
+ });
41
+ </script>
42
+
43
+ <button
44
+ bind:this={el}
45
+ class="{styles} border border-transparent rounded pr-2 flex items-center justify-start w-full"
46
+ on:click|stopPropagation={() => {
47
+ if (multiple) {
48
+ item.selected = !item.selected
49
+ dispatch('change', item)
50
+ } else {
51
+ dispatch('click', item.value)
52
+ }
53
+ }}
54
+ >
55
+ {#if workspace}
56
+ <ProfileAvatar name={item.label} picture={item.picture} large />
57
+ {:else if item.icon}
58
+ <Icon
59
+ src={item.icon}
60
+ class="w-4 h-4 {item.destructive ? 'text-danger-500' : 'text-neutral-500'}"
61
+ />
62
+ {/if}
63
+ <div
64
+ class="whitespace-nowrap flex-1 text-left max-w-40 truncate flex flex-col"
65
+ title={item.label}
66
+ >
67
+ <span class="flex items-center space-x-1.5">
68
+ {#if item.color}
69
+ <TagStatus status={item.color} dot />
70
+ {/if}
71
+ <span class="{labelStyles} text-base">{item.label}</span>
72
+ </span>
73
+
74
+ {#if item.country}
75
+ <span class="flex space-x-1 items-center">
76
+ <BaseFlag country={item.country} width={10} />
77
+ <span class="text-sm text-neutral-500 tracking-normal">{getCountryName(item.country)}</span>
78
+ </span>
79
+ {/if}
80
+ </div>
81
+ {#if multiple}
82
+ <InputCheckbox
83
+ bind:checked={item.selected}
84
+ on:change={() => {
85
+ dispatch('change', item)
86
+ }}
87
+ />
88
+ {:else if item.selected}
89
+ <Icon src={Tick} class="w-5 h-5 text-workspace-accent" />
90
+ {:else if item.rightIcon}
91
+ <Icon src={item.rightIcon} class="w-5 h-5 text-neutral-300" />
92
+ {/if}
93
+ </button>