@getmicdrop/svelte-components 2.6.3 → 2.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/dist/__LIB_STORES__.js +30 -2
  2. package/dist/components/AboutShow/AboutShow.svelte +278 -0
  3. package/dist/components/AboutShow/AboutShow.svelte.d.ts +43 -0
  4. package/dist/components/AboutShow/AboutShow.svelte.d.ts.map +1 -0
  5. package/dist/components/Accordion/Accordion.svelte +44 -0
  6. package/dist/components/Accordion/Accordion.svelte.d.ts +42 -0
  7. package/dist/components/Accordion/Accordion.svelte.d.ts.map +1 -0
  8. package/dist/components/Accordion/AccordionItem.svelte +141 -0
  9. package/dist/components/Accordion/AccordionItem.svelte.d.ts +50 -0
  10. package/dist/components/Accordion/AccordionItem.svelte.d.ts.map +1 -0
  11. package/dist/components/Badges/Badge.svelte +268 -17
  12. package/dist/components/Badges/Badge.svelte.d.ts +18 -2
  13. package/dist/components/Badges/Badge.svelte.d.ts.map +1 -1
  14. package/dist/components/Breadcrumb/Breadcrumb.svelte +65 -36
  15. package/dist/components/Breadcrumb/Breadcrumb.svelte.d.ts +16 -2
  16. package/dist/components/Breadcrumb/Breadcrumb.svelte.d.ts.map +1 -1
  17. package/dist/components/Button/Button.svelte +136 -3
  18. package/dist/components/Button/Button.svelte.d.ts +2 -0
  19. package/dist/components/Button/Button.svelte.d.ts.map +1 -1
  20. package/dist/components/Calendar/MiniMonthCalendar.svelte +1446 -0
  21. package/dist/components/Calendar/{Calendar.svelte.d.ts → MiniMonthCalendar.svelte.d.ts} +20 -21
  22. package/dist/components/Calendar/MiniMonthCalendar.svelte.d.ts.map +1 -0
  23. package/dist/components/Card.svelte +2 -2
  24. package/dist/components/Card.svelte.d.ts +2 -2
  25. package/dist/components/Card.svelte.d.ts.map +1 -1
  26. package/dist/components/Checkbox/Checkbox.svelte +90 -0
  27. package/dist/components/Checkbox/Checkbox.svelte.d.ts +64 -0
  28. package/dist/components/Checkbox/Checkbox.svelte.d.ts.map +1 -0
  29. package/dist/components/DarkModeToggle.svelte +41 -52
  30. package/dist/components/DarkModeToggle.svelte.d.ts +0 -2
  31. package/dist/components/DarkModeToggle.svelte.d.ts.map +1 -1
  32. package/dist/components/Drawer/Drawer.svelte +207 -0
  33. package/dist/components/Drawer/Drawer.svelte.d.ts +74 -0
  34. package/dist/components/Drawer/Drawer.svelte.d.ts.map +1 -0
  35. package/dist/components/Dropdown/Dropdown.svelte +193 -0
  36. package/dist/components/Dropdown/Dropdown.svelte.d.ts +50 -0
  37. package/dist/components/Dropdown/Dropdown.svelte.d.ts.map +1 -0
  38. package/dist/components/Dropdown/DropdownItem.svelte +111 -0
  39. package/dist/components/Dropdown/DropdownItem.svelte.d.ts +48 -0
  40. package/dist/components/Dropdown/DropdownItem.svelte.d.ts.map +1 -0
  41. package/dist/components/Dropdown/SelectDropdown.svelte +301 -0
  42. package/dist/components/Dropdown/SelectDropdown.svelte.d.ts +51 -0
  43. package/dist/components/Dropdown/SelectDropdown.svelte.d.ts.map +1 -0
  44. package/dist/components/EmptyState/EmptyState.svelte +80 -0
  45. package/dist/components/{Calendar/QuarterView.stories.svelte.d.ts → EmptyState/EmptyState.svelte.d.ts} +17 -21
  46. package/dist/components/EmptyState/EmptyState.svelte.d.ts.map +1 -0
  47. package/dist/components/ErrorDisplay.svelte.d.ts +2 -2
  48. package/dist/components/FAQs/FAQs.svelte +49 -0
  49. package/dist/components/{Calendar/QuarterView.svelte.d.ts → FAQs/FAQs.svelte.d.ts} +10 -10
  50. package/dist/components/FAQs/FAQs.svelte.d.ts.map +1 -0
  51. package/dist/components/Input/Input.svelte +107 -12
  52. package/dist/components/Input/Input.svelte.d.ts +28 -12
  53. package/dist/components/Input/Input.svelte.d.ts.map +1 -1
  54. package/dist/components/Input/MultiSelect.svelte +4 -5
  55. package/dist/components/Input/MultiSelect.svelte.d.ts +8 -8
  56. package/dist/components/Input/MultiSelect.svelte.d.ts.map +1 -1
  57. package/dist/components/Input/OTPInput.svelte +1 -1
  58. package/dist/components/Input/Search.svelte +173 -0
  59. package/dist/components/Input/Search.svelte.d.ts +68 -0
  60. package/dist/components/Input/Search.svelte.d.ts.map +1 -0
  61. package/dist/components/Input/Select.svelte +42 -12
  62. package/dist/components/Input/Select.svelte.d.ts +8 -8
  63. package/dist/components/Input/Select.svelte.d.ts.map +1 -1
  64. package/dist/components/Input/Textarea.svelte +160 -0
  65. package/dist/components/Input/Textarea.svelte.d.ts +69 -0
  66. package/dist/components/Input/Textarea.svelte.d.ts.map +1 -0
  67. package/dist/components/Label/Label.svelte +60 -0
  68. package/dist/components/Label/Label.svelte.d.ts +48 -0
  69. package/dist/components/Label/Label.svelte.d.ts.map +1 -0
  70. package/dist/components/Layout/Header.svelte +14 -4
  71. package/dist/components/Layout/PageLayout.svelte +64 -0
  72. package/dist/components/Layout/PageLayout.svelte.d.ts +58 -0
  73. package/dist/components/Layout/PageLayout.svelte.d.ts.map +1 -0
  74. package/dist/components/Modal/ConfirmationModal.svelte +69 -17
  75. package/dist/components/Modal/ConfirmationModal.svelte.d.ts +22 -0
  76. package/dist/components/Modal/ConfirmationModal.svelte.d.ts.map +1 -1
  77. package/dist/components/Modal/InputModal.svelte +180 -0
  78. package/dist/components/Modal/InputModal.svelte.d.ts +77 -0
  79. package/dist/components/Modal/InputModal.svelte.d.ts.map +1 -0
  80. package/dist/components/Modal/Modal.svelte +34 -8
  81. package/dist/components/Modal/Modal.svelte.d.ts +2 -0
  82. package/dist/components/Modal/Modal.svelte.d.ts.map +1 -1
  83. package/dist/components/Modal/StatusModal.svelte +221 -0
  84. package/dist/components/Modal/StatusModal.svelte.d.ts +59 -0
  85. package/dist/components/Modal/StatusModal.svelte.d.ts.map +1 -0
  86. package/dist/components/MonthSwitcher/MonthSwitcher.svelte +206 -0
  87. package/dist/components/MonthSwitcher/MonthSwitcher.svelte.d.ts +37 -0
  88. package/dist/components/MonthSwitcher/MonthSwitcher.svelte.d.ts.map +1 -0
  89. package/dist/components/OrderSummary/OrderSummary.svelte +553 -0
  90. package/dist/components/OrderSummary/OrderSummary.svelte.d.ts +65 -0
  91. package/dist/components/OrderSummary/OrderSummary.svelte.d.ts.map +1 -0
  92. package/dist/components/Pagination/Pagination.svelte +197 -0
  93. package/dist/components/Pagination/Pagination.svelte.d.ts +53 -0
  94. package/dist/components/Pagination/Pagination.svelte.d.ts.map +1 -0
  95. package/dist/components/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte.d.ts +2 -2
  96. package/dist/components/PublicCard/PublicCard.svelte +267 -0
  97. package/dist/components/{pages/performers/AvailabilityCalendarModal.svelte.d.ts → PublicCard/PublicCard.svelte.d.ts} +12 -14
  98. package/dist/components/PublicCard/PublicCard.svelte.d.ts.map +1 -0
  99. package/dist/components/Radio/Radio.svelte +119 -0
  100. package/dist/components/Radio/Radio.svelte.d.ts +54 -0
  101. package/dist/components/Radio/Radio.svelte.d.ts.map +1 -0
  102. package/dist/components/ShowCard/ShowCard.svelte +240 -0
  103. package/dist/components/ShowCard/ShowCard.svelte.d.ts +39 -0
  104. package/dist/components/ShowCard/ShowCard.svelte.d.ts.map +1 -0
  105. package/dist/components/ShowTimeCard/ShowTimeCard.svelte +92 -0
  106. package/dist/components/ShowTimeCard/ShowTimeCard.svelte.d.ts +37 -0
  107. package/dist/components/ShowTimeCard/ShowTimeCard.svelte.d.ts.map +1 -0
  108. package/dist/components/Skeleton/Skeleton.svelte +68 -0
  109. package/dist/components/Skeleton/Skeleton.svelte.d.ts +37 -0
  110. package/dist/components/{Calendar/QuarterView.svelte.d.ts.map → Skeleton/Skeleton.svelte.d.ts.map} +1 -1
  111. package/dist/components/Spinner/Spinner.svelte +73 -17
  112. package/dist/components/Spinner/Spinner.svelte.d.ts +5 -3
  113. package/dist/components/Spinner/Spinner.svelte.d.ts.map +1 -1
  114. package/dist/components/Tabs/TabItem.svelte +39 -0
  115. package/dist/components/Tabs/TabItem.svelte.d.ts +52 -0
  116. package/dist/components/Tabs/TabItem.svelte.d.ts.map +1 -0
  117. package/dist/components/Tabs/Tabs.svelte +181 -0
  118. package/dist/components/Tabs/Tabs.svelte.d.ts +46 -0
  119. package/dist/components/Tabs/Tabs.svelte.d.ts.map +1 -0
  120. package/dist/components/Typography/Typography.svelte +50 -0
  121. package/dist/components/Typography/Typography.svelte.d.ts +48 -0
  122. package/dist/components/Typography/Typography.svelte.d.ts.map +1 -0
  123. package/dist/components/pages/performers/ShowDetails.svelte.d.ts +4 -4
  124. package/dist/components/pages/performers/ShowItemCard.svelte.d.ts +8 -8
  125. package/dist/components/pages/performers/SwitchOption.svelte.d.ts +2 -2
  126. package/dist/components/pages/performers/VenueInfo.svelte.d.ts +2 -2
  127. package/dist/components/pages/performers/VenueItemCard.svelte +2 -2
  128. package/dist/components/pages/performers/VenueItemCard.svelte.d.ts +4 -4
  129. package/dist/components/pages/profile/profile-form.svelte +1 -1
  130. package/dist/components/pages/settings/tabs/CustomImageDropzone.svelte.d.ts +2 -2
  131. package/dist/components/pages/shows/TabNavigation.svelte +7 -8
  132. package/dist/constants/formOptions.d.ts +5 -2
  133. package/dist/constants/formOptions.d.ts.map +1 -1
  134. package/dist/constants/formOptions.js +2 -1
  135. package/dist/index.d.ts +28 -4
  136. package/dist/index.js +33 -29
  137. package/dist/services/EventService.js +75 -75
  138. package/dist/services/EventService.spec.js +217 -217
  139. package/dist/services/ShowService.spec.js +342 -342
  140. package/package.json +160 -160
  141. package/dist/components/Calendar/Calendar.spec.d.ts +0 -2
  142. package/dist/components/Calendar/Calendar.spec.d.ts.map +0 -1
  143. package/dist/components/Calendar/Calendar.spec.js +0 -131
  144. package/dist/components/Calendar/Calendar.svelte +0 -1115
  145. package/dist/components/Calendar/Calendar.svelte.d.ts.map +0 -1
  146. package/dist/components/Calendar/QuarterView.spec.d.ts +0 -2
  147. package/dist/components/Calendar/QuarterView.spec.d.ts.map +0 -1
  148. package/dist/components/Calendar/QuarterView.spec.js +0 -394
  149. package/dist/components/Calendar/QuarterView.stories.svelte +0 -134
  150. package/dist/components/Calendar/QuarterView.stories.svelte.d.ts.map +0 -1
  151. package/dist/components/Calendar/QuarterView.svelte +0 -736
  152. package/dist/components/pages/performers/AvailabilityCalendarModal.svelte +0 -632
  153. package/dist/components/pages/performers/AvailabilityCalendarModal.svelte.d.ts.map +0 -1
@@ -1,5 +1,13 @@
1
1
  <script>
2
- import { createEventDispatcher, onMount, onDestroy } from "svelte";
2
+ /**
3
+ * Custom Select component - drop-in replacement for native select
4
+ *
5
+ * @fires change - Dispatched when selection changes
6
+ * Event detail: { value: any, item: { name: string, value: any } }
7
+ * Usage: on:change={(e) => handleChange(e.detail.value)}
8
+ * Note: Use e.detail.value, NOT e.target.value (this is a custom component, not native select)
9
+ */
10
+ import { createEventDispatcher, onMount } from "svelte";
3
11
 
4
12
  const dispatch = createEventDispatcher();
5
13
 
@@ -22,14 +30,27 @@
22
30
  let dropdownElement;
23
31
  let focusedIndex = -1;
24
32
 
33
+ // Unique ID for this Select instance to coordinate with other Selects
34
+ const instanceId = Math.random().toString(36).substring(2, 9);
35
+
25
36
  $: selectedItem = items.find((item) => item.value === value);
26
37
  $: displayText = selectedItem ? selectedItem.name : placeholder;
27
38
 
28
39
  function toggle() {
29
40
  if (disabled) return;
41
+ const wasOpen = isOpen;
30
42
  isOpen = !isOpen;
31
43
  if (isOpen) {
32
44
  focusedIndex = items.findIndex((item) => item.value === value);
45
+ // Dispatch custom event to close other Select dropdowns
46
+ window.dispatchEvent(new CustomEvent('select-opened', { detail: { instanceId } }));
47
+ }
48
+ }
49
+
50
+ // Listen for other Selects opening and close this one
51
+ function handleOtherSelectOpened(event) {
52
+ if (event.detail.instanceId !== instanceId && isOpen) {
53
+ close();
33
54
  }
34
55
  }
35
56
 
@@ -84,22 +105,31 @@
84
105
  }
85
106
 
86
107
  function handleClickOutside(event) {
87
- if (
88
- triggerElement &&
89
- !triggerElement.contains(event.target) &&
90
- dropdownElement &&
91
- !dropdownElement.contains(event.target)
92
- ) {
108
+ if (!isOpen) return;
109
+
110
+ // Check if click is outside the trigger button
111
+ const clickedOutsideTrigger =
112
+ triggerElement && !triggerElement.contains(event.target);
113
+
114
+ // Check if click is outside the dropdown (if it exists)
115
+ // dropdownElement may be null if dropdown just opened and hasn't rendered yet
116
+ const clickedOutsideDropdown =
117
+ !dropdownElement || !dropdownElement.contains(event.target);
118
+
119
+ if (clickedOutsideTrigger && clickedOutsideDropdown) {
93
120
  close();
94
121
  }
95
122
  }
96
123
 
97
124
  onMount(() => {
98
- document.addEventListener("click", handleClickOutside);
99
- });
100
-
101
- onDestroy(() => {
102
- document.removeEventListener("click", handleClickOutside);
125
+ // Use capture phase to ensure we get the event before it might be stopped
126
+ document.addEventListener("click", handleClickOutside, true);
127
+ // Listen for other Select components opening to close this one
128
+ window.addEventListener("select-opened", handleOtherSelectOpened);
129
+ return () => {
130
+ document.removeEventListener("click", handleClickOutside, true);
131
+ window.removeEventListener("select-opened", handleOtherSelectOpened);
132
+ };
103
133
  });
104
134
  </script>
105
135
 
@@ -2,12 +2,12 @@ export default Select;
2
2
  type Select = SvelteComponent<{
3
3
  error?: string | undefined;
4
4
  disabled?: boolean | undefined;
5
- label?: string | undefined;
5
+ value?: string | undefined;
6
6
  name?: string | undefined;
7
- required?: boolean | undefined;
8
- placeholder?: string | undefined;
7
+ label?: string | undefined;
9
8
  id?: string | undefined;
10
- value?: string | undefined;
9
+ placeholder?: string | undefined;
10
+ required?: boolean | undefined;
11
11
  animateFocus?: boolean | undefined;
12
12
  items?: any[] | undefined;
13
13
  }, {
@@ -20,12 +20,12 @@ type Select = SvelteComponent<{
20
20
  declare const Select: $$__sveltets_2_IsomorphicComponent<{
21
21
  error?: string | undefined;
22
22
  disabled?: boolean | undefined;
23
- label?: string | undefined;
23
+ value?: string | undefined;
24
24
  name?: string | undefined;
25
- required?: boolean | undefined;
26
- placeholder?: string | undefined;
25
+ label?: string | undefined;
27
26
  id?: string | undefined;
28
- value?: string | undefined;
27
+ placeholder?: string | undefined;
28
+ required?: boolean | undefined;
29
29
  animateFocus?: boolean | undefined;
30
30
  items?: any[] | undefined;
31
31
  }, {
@@ -1 +1 @@
1
- {"version":3,"file":"Select.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/Input/Select.svelte.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAqKA;;;;;;;;;;;;;;;mBAAoN;6CATvK,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,OAAO,OAAO,QAAQ;IAC3L,cAAc,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,WAAW,OAAO,SAAS,KAAK,GAAG;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAC9G,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"Select.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/Input/Select.svelte.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAoMA;;;;;;;;;;;;;;;mBAAoN;6CATvK,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,OAAO,OAAO,QAAQ;IAC3L,cAAc,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,WAAW,OAAO,SAAS,KAAK,GAAG;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAC9G,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,160 @@
1
+ <script>
2
+ import { createEventDispatcher } from "svelte";
3
+
4
+ const dispatch = createEventDispatcher();
5
+
6
+ // API compatible with flowbite-svelte Textarea
7
+ export let value = "";
8
+ export let placeholder = "";
9
+ export let rows = 4;
10
+ export let disabled = false;
11
+ export let required = false;
12
+ export let readonly = false;
13
+ export let id = "";
14
+ export let name = "";
15
+ export let label = "";
16
+ export let error = "";
17
+ export let maxlength = null;
18
+ export let minlength = null;
19
+
20
+ // Additional props
21
+ let className = "";
22
+ export { className as class };
23
+
24
+ function handleInput(event) {
25
+ value = event.target.value;
26
+ dispatch("input", { value });
27
+ }
28
+
29
+ function handleChange(event) {
30
+ dispatch("change", { value: event.target.value });
31
+ }
32
+
33
+ function handleBlur(event) {
34
+ dispatch("blur", event);
35
+ }
36
+
37
+ function handleFocus(event) {
38
+ dispatch("focus", event);
39
+ }
40
+ </script>
41
+
42
+ <div class="textarea-wrapper">
43
+ {#if label}
44
+ <label for={id || name} class="textarea-label">
45
+ {label}{#if required}<span class="textarea-required">*</span>{/if}
46
+ </label>
47
+ {/if}
48
+
49
+ <textarea
50
+ {id}
51
+ {name}
52
+ {placeholder}
53
+ {rows}
54
+ {disabled}
55
+ {readonly}
56
+ {maxlength}
57
+ {minlength}
58
+ class="textarea-field {error ? 'textarea-error' : ''} {className}"
59
+ bind:value
60
+ on:input={handleInput}
61
+ on:change={handleChange}
62
+ on:blur={handleBlur}
63
+ on:focus={handleFocus}
64
+ on:keydown
65
+ on:keyup
66
+ on:keypress
67
+ aria-required={required}
68
+ aria-invalid={!!error}
69
+ {...$$restProps}
70
+ ></textarea>
71
+
72
+ {#if error}
73
+ <p class="textarea-error-text">{error}</p>
74
+ {/if}
75
+ </div>
76
+
77
+ <style>
78
+ .textarea-wrapper {
79
+ --textarea-bg: #f9fafb;
80
+ --textarea-text: #0d1526;
81
+ --textarea-text-placeholder: #6b7280;
82
+ --textarea-border: #e5e7eb;
83
+ --textarea-border-error: #ff6666;
84
+ --textarea-focus-ring: #3b82f6;
85
+ --textarea-label-text: #0d1526;
86
+ width: 100%;
87
+ display: flex;
88
+ flex-direction: column;
89
+ gap: 0.5rem;
90
+ }
91
+
92
+ .textarea-label {
93
+ color: var(--textarea-label-text);
94
+ font-size: 0.875rem;
95
+ font-weight: 500;
96
+ line-height: 1.25;
97
+ }
98
+
99
+ .textarea-required {
100
+ color: var(--textarea-border-error);
101
+ font-weight: 500;
102
+ font-size: 0.875rem;
103
+ margin-left: 0.125rem;
104
+ }
105
+
106
+ .textarea-field {
107
+ width: 100%;
108
+ padding: 0.625rem 0.75rem;
109
+ background-color: var(--textarea-bg);
110
+ color: var(--textarea-text);
111
+ font-size: 0.875rem;
112
+ line-height: 1.5;
113
+ border: 1px solid var(--textarea-border);
114
+ border-radius: 0.5rem;
115
+ resize: vertical;
116
+ transition: border-color 0.15s ease, box-shadow 0.15s ease;
117
+ }
118
+
119
+ .textarea-field:focus {
120
+ outline: none;
121
+ box-shadow: 0 0 0 2px var(--textarea-focus-ring);
122
+ border-color: var(--textarea-focus-ring);
123
+ }
124
+
125
+ .textarea-field:hover:not(:focus):not(:disabled) {
126
+ border-color: var(--textarea-focus-ring);
127
+ }
128
+
129
+ .textarea-field:disabled {
130
+ opacity: 0.5;
131
+ cursor: not-allowed;
132
+ }
133
+
134
+ .textarea-field::-moz-placeholder {
135
+ color: var(--textarea-text-placeholder);
136
+ }
137
+
138
+ .textarea-field::placeholder {
139
+ color: var(--textarea-text-placeholder);
140
+ }
141
+
142
+ .textarea-field.textarea-error {
143
+ border-color: var(--textarea-border-error);
144
+ }
145
+
146
+ .textarea-error-text {
147
+ margin: 0;
148
+ color: var(--textarea-border-error);
149
+ font-size: 0.875rem;
150
+ }
151
+
152
+ /* Dark mode overrides */
153
+ :global(.dark) .textarea-wrapper {
154
+ --textarea-bg: #111827;
155
+ --textarea-text: #f7f7f8;
156
+ --textarea-text-placeholder: #9ca3af;
157
+ --textarea-border: #374151;
158
+ --textarea-label-text: #f7f7f8;
159
+ }
160
+ </style>
@@ -0,0 +1,69 @@
1
+ export default Textarea;
2
+ type Textarea = SvelteComponent<{
3
+ [x: string]: any;
4
+ class?: string | undefined;
5
+ error?: string | undefined;
6
+ disabled?: boolean | undefined;
7
+ value?: string | undefined;
8
+ name?: string | undefined;
9
+ label?: string | undefined;
10
+ id?: string | undefined;
11
+ placeholder?: string | undefined;
12
+ required?: boolean | undefined;
13
+ maxlength?: null | undefined;
14
+ minlength?: null | undefined;
15
+ readonly?: boolean | undefined;
16
+ rows?: number | undefined;
17
+ }, {
18
+ keydown: KeyboardEvent;
19
+ keyup: KeyboardEvent;
20
+ keypress: KeyboardEvent;
21
+ input: CustomEvent<any>;
22
+ change: CustomEvent<any>;
23
+ blur: CustomEvent<any>;
24
+ focus: CustomEvent<any>;
25
+ } & {
26
+ [evt: string]: CustomEvent<any>;
27
+ }, {}> & {
28
+ $$bindings?: string | undefined;
29
+ };
30
+ declare const Textarea: $$__sveltets_2_IsomorphicComponent<{
31
+ [x: string]: any;
32
+ class?: string | undefined;
33
+ error?: string | undefined;
34
+ disabled?: boolean | undefined;
35
+ value?: string | undefined;
36
+ name?: string | undefined;
37
+ label?: string | undefined;
38
+ id?: string | undefined;
39
+ placeholder?: string | undefined;
40
+ required?: boolean | undefined;
41
+ maxlength?: null | undefined;
42
+ minlength?: null | undefined;
43
+ readonly?: boolean | undefined;
44
+ rows?: number | undefined;
45
+ }, {
46
+ keydown: KeyboardEvent;
47
+ keyup: KeyboardEvent;
48
+ keypress: KeyboardEvent;
49
+ input: CustomEvent<any>;
50
+ change: CustomEvent<any>;
51
+ blur: CustomEvent<any>;
52
+ focus: CustomEvent<any>;
53
+ } & {
54
+ [evt: string]: CustomEvent<any>;
55
+ }, {}, {}, string>;
56
+ 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> {
57
+ new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
58
+ $$bindings?: Bindings;
59
+ } & Exports;
60
+ (internal: unknown, props: Props & {
61
+ $$events?: Events;
62
+ $$slots?: Slots;
63
+ }): Exports & {
64
+ $set?: any;
65
+ $on?: any;
66
+ };
67
+ z_$$bindings?: Bindings;
68
+ }
69
+ //# sourceMappingURL=Textarea.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Textarea.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/Input/Textarea.svelte.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyEA;;;;;;;;;;;;;;;;;;;;;;;;;mBAA0P;6CAT7M,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,OAAO,OAAO,QAAQ;IAC3L,cAAc,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,WAAW,OAAO,SAAS,KAAK,GAAG;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAC9G,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,60 @@
1
+ <script>
2
+ // API compatible with flowbite-svelte Label
3
+ export let color = "gray";
4
+ export let defaultClass = "text-sm rtl:text-right font-medium block";
5
+ export let show = true;
6
+
7
+ // Additional props for convenience
8
+ let className = "";
9
+ export { className as class };
10
+
11
+ const colorClasses = {
12
+ gray: "label-gray",
13
+ green: "label-green",
14
+ red: "label-red",
15
+ disabled: "label-disabled"
16
+ };
17
+
18
+ $: labelClass = `label-wrapper ${defaultClass} ${colorClasses[color] || colorClasses.gray} ${className}`;
19
+ </script>
20
+
21
+ {#if show}
22
+ <!-- svelte-ignore a11y-label-has-associated-control -->
23
+ <label {...$$restProps} class={labelClass}><slot /></label>
24
+ {:else}
25
+ <slot />
26
+ {/if}
27
+
28
+ <style>
29
+ .label-wrapper {
30
+ --label-text-gray: #111827;
31
+ --label-text-green: #047857;
32
+ --label-text-red: #dc2626;
33
+ --label-text-disabled: #9ca3af;
34
+ }
35
+
36
+ .label-gray {
37
+ color: var(--label-text-gray);
38
+ }
39
+
40
+ .label-green {
41
+ color: var(--label-text-green);
42
+ }
43
+
44
+ .label-red {
45
+ color: var(--label-text-red);
46
+ }
47
+
48
+ .label-disabled {
49
+ color: var(--label-text-disabled);
50
+ filter: grayscale(1) contrast(0.5);
51
+ }
52
+
53
+ /* Dark mode overrides */
54
+ :global(.dark) .label-wrapper {
55
+ --label-text-gray: #d1d5db;
56
+ --label-text-green: #34d399;
57
+ --label-text-red: #f87171;
58
+ --label-text-disabled: #6b7280;
59
+ }
60
+ </style>
@@ -0,0 +1,48 @@
1
+ export default Label;
2
+ type Label = SvelteComponent<$$__sveltets_2_PropsWithChildren<{
3
+ [x: string]: any;
4
+ class?: string | undefined;
5
+ color?: string | undefined;
6
+ show?: boolean | undefined;
7
+ defaultClass?: string | undefined;
8
+ }, {
9
+ default: {};
10
+ }>, {
11
+ [evt: string]: CustomEvent<any>;
12
+ }, {
13
+ default: {};
14
+ }> & {
15
+ $$bindings?: string | undefined;
16
+ };
17
+ declare const Label: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsWithChildren<{
18
+ [x: string]: any;
19
+ class?: string | undefined;
20
+ color?: string | undefined;
21
+ show?: boolean | undefined;
22
+ defaultClass?: string | undefined;
23
+ }, {
24
+ default: {};
25
+ }>, {
26
+ [evt: string]: CustomEvent<any>;
27
+ }, {
28
+ default: {};
29
+ }, {}, string>;
30
+ type $$__sveltets_2_PropsWithChildren<Props, Slots> = Props & (Slots extends {
31
+ default: any;
32
+ } ? Props extends Record<string, never> ? any : {
33
+ children?: any;
34
+ } : {});
35
+ 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> {
36
+ new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
37
+ $$bindings?: Bindings;
38
+ } & Exports;
39
+ (internal: unknown, props: Props & {
40
+ $$events?: Events;
41
+ $$slots?: Slots;
42
+ }): Exports & {
43
+ $set?: any;
44
+ $on?: any;
45
+ };
46
+ z_$$bindings?: Bindings;
47
+ }
48
+ //# sourceMappingURL=Label.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Label.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/Label/Label.svelte.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAgDA;;;;;;;;;;;;eAAyK;sCATnI,KAAK,EAAE,KAAK;;;;;6CALL,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,OAAO,OAAO,QAAQ;IAC3L,cAAc,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,WAAW,OAAO,SAAS,KAAK,GAAG;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAC9G,eAAe,QAAQ,CAAC"}
@@ -79,7 +79,7 @@
79
79
  class="avatar-button"
80
80
  on:click={() => showDesktopDropdown = !showDesktopDropdown}
81
81
  >
82
- <Avatar src={avatar} dot={{ color: "green" }} rounded size="sm" />
82
+ <Avatar src={avatar} rounded size="md" />
83
83
  </button>
84
84
 
85
85
  {#if showDesktopDropdown}
@@ -137,7 +137,7 @@
137
137
  <div class="header-avatar-wrapper">
138
138
  <!-- Mobile: triggers bottom sheet -->
139
139
  <button class="avatar-button avatar-button--mobile" on:click={() => showMobileSheet = true}>
140
- <Avatar src={avatar} dot={{ color: "green" }} rounded size="sm" />
140
+ <Avatar src={avatar} rounded size="md" />
141
141
  </button>
142
142
 
143
143
  <!-- Desktop: triggers dropdown -->
@@ -145,7 +145,7 @@
145
145
  class="avatar-button avatar-button--desktop"
146
146
  on:click={() => showDesktopDropdown = !showDesktopDropdown}
147
147
  >
148
- <Avatar src={avatar} dot={{ color: "green" }} rounded size="sm" />
148
+ <Avatar src={avatar} rounded size="md" />
149
149
  </button>
150
150
 
151
151
  <!-- Desktop dropdown -->
@@ -294,13 +294,23 @@
294
294
  margin-left: 0.25rem;
295
295
  }
296
296
 
297
+ /* Fix avatar image aspect ratio and border radius */
298
+ :global(.avatar-button img) {
299
+ -o-object-fit: cover !important;
300
+ object-fit: cover !important;
301
+ aspect-ratio: 1 / 1 !important;
302
+ border-radius: 0.5rem !important;
303
+ }
304
+
297
305
  .avatar-button {
298
306
  background: none;
299
307
  border: none;
300
308
  padding: 0;
301
309
  cursor: pointer;
302
- border-radius: 9999px;
310
+ border-radius: 0.5rem;
303
311
  transition: opacity 0.15s;
312
+ min-width: 40px;
313
+ min-height: 40px;
304
314
  }
305
315
 
306
316
  .avatar-button:hover {
@@ -0,0 +1,64 @@
1
+ <script>
2
+ import Breadcrumb from '../Breadcrumb/Breadcrumb.svelte';
3
+ import Card from '../Card.svelte';
4
+
5
+ /**
6
+ * Breadcrumb navigation data
7
+ * @type {Array<{name: string, href: string}>}
8
+ */
9
+ export let breadcrumb = [];
10
+
11
+ /**
12
+ * Page title displayed below breadcrumb
13
+ * @type {string}
14
+ */
15
+ export let title = '';
16
+
17
+ /**
18
+ * Subtitle displayed below title
19
+ * @type {string}
20
+ */
21
+ export let subtitle = '';
22
+
23
+ /**
24
+ * Layout variant
25
+ * - 'default': Content with standard padding, no wrapper
26
+ * - 'card': Content wrapped in Card component with max-width
27
+ * @type {'default' | 'card'}
28
+ */
29
+ export let variant = 'default';
30
+
31
+ /**
32
+ * Max width class for card variant (e.g., 'max-w-4xl', 'max-w-6xl')
33
+ * @type {string}
34
+ */
35
+ export let maxWidth = 'max-w-4xl';
36
+
37
+ /**
38
+ * Additional CSS classes for the content container
39
+ * @type {string}
40
+ */
41
+ export let className = '';
42
+
43
+ /**
44
+ * Whether to show the header (breadcrumb, title, subtitle)
45
+ * @type {boolean}
46
+ */
47
+ export let showHeader = true;
48
+ </script>
49
+
50
+ {#if showHeader}
51
+ <nav class="pt-4 px-4 text-text-primary text-lg font-semibold">
52
+ <Breadcrumb data={breadcrumb} {title} {subtitle} />
53
+ </nav>
54
+ {/if}
55
+
56
+ <div class="px-4 pb-20 md:pb-6 {className}">
57
+ {#if variant === 'card'}
58
+ <Card className="dark:bg-bg-primary {maxWidth}">
59
+ <slot />
60
+ </Card>
61
+ {:else}
62
+ <slot />
63
+ {/if}
64
+ </div>
@@ -0,0 +1,58 @@
1
+ export default PageLayout;
2
+ type PageLayout = SvelteComponent<$$__sveltets_2_PropsWithChildren<{
3
+ title?: string | undefined;
4
+ className?: string | undefined;
5
+ variant?: "default" | "card" | undefined;
6
+ subtitle?: string | undefined;
7
+ breadcrumb?: {
8
+ name: string;
9
+ href: string;
10
+ }[] | undefined;
11
+ maxWidth?: string | undefined;
12
+ showHeader?: boolean | undefined;
13
+ }, {
14
+ default: {};
15
+ }>, {
16
+ [evt: string]: CustomEvent<any>;
17
+ }, {
18
+ default: {};
19
+ }> & {
20
+ $$bindings?: string | undefined;
21
+ };
22
+ declare const PageLayout: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsWithChildren<{
23
+ title?: string | undefined;
24
+ className?: string | undefined;
25
+ variant?: "default" | "card" | undefined;
26
+ subtitle?: string | undefined;
27
+ breadcrumb?: {
28
+ name: string;
29
+ href: string;
30
+ }[] | undefined;
31
+ maxWidth?: string | undefined;
32
+ showHeader?: boolean | undefined;
33
+ }, {
34
+ default: {};
35
+ }>, {
36
+ [evt: string]: CustomEvent<any>;
37
+ }, {
38
+ default: {};
39
+ }, {}, string>;
40
+ type $$__sveltets_2_PropsWithChildren<Props, Slots> = Props & (Slots extends {
41
+ default: any;
42
+ } ? Props extends Record<string, never> ? any : {
43
+ children?: any;
44
+ } : {});
45
+ 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> {
46
+ new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
47
+ $$bindings?: Bindings;
48
+ } & Exports;
49
+ (internal: unknown, props: Props & {
50
+ $$events?: Events;
51
+ $$slots?: Slots;
52
+ }): Exports & {
53
+ $set?: any;
54
+ $on?: any;
55
+ };
56
+ z_$$bindings?: Bindings;
57
+ }
58
+ //# sourceMappingURL=PageLayout.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PageLayout.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/Layout/PageLayout.svelte.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAqHA;;;;;;cA1CyB,MAAM;cAAQ,MAAM;;;;;;;;;;eA0CgK;sCATvK,KAAK,EAAE,KAAK;;;;;6CALL,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,OAAO,OAAO,QAAQ;IAC3L,cAAc,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,WAAW,OAAO,SAAS,KAAK,GAAG;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAC9G,eAAe,QAAQ,CAAC"}