@makolabs/ripple 2.5.8 → 3.0.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 (184) hide show
  1. package/README.md +403 -497
  2. package/dist/adapters/storage/S3Adapter.d.ts +49 -1
  3. package/dist/adapters/storage/S3Adapter.js +38 -1
  4. package/dist/adapters/storage/types.d.ts +20 -0
  5. package/dist/ai/AIChatInterface.svelte +2 -1
  6. package/dist/ai/AIChatInterface.svelte.d.ts +2 -1
  7. package/dist/ai/CodeRenderer.svelte +7 -2
  8. package/dist/ai/CodeRenderer.svelte.d.ts +2 -1
  9. package/dist/ai/ComposeDropdown.svelte +1 -1
  10. package/dist/ai/MessageBox.svelte +3 -3
  11. package/dist/ai/MessageBox.svelte.d.ts +3 -2
  12. package/dist/ai/ThinkingDisplay.svelte +4 -3
  13. package/dist/ai/ThinkingDisplay.svelte.d.ts +2 -1
  14. package/dist/ai/ai-types.d.ts +55 -1
  15. package/dist/button/Button.svelte +5 -5
  16. package/dist/button/button-types.d.ts +49 -4
  17. package/dist/button/button.d.ts +9 -9
  18. package/dist/button/button.js +6 -6
  19. package/dist/charts/Chart.svelte +8 -16
  20. package/dist/charts/chart-types.d.ts +78 -1
  21. package/dist/drawer/Drawer.svelte +6 -26
  22. package/dist/drawer/drawer-types.d.ts +33 -12
  23. package/dist/drawer/drawer.d.ts +3 -3
  24. package/dist/drawer/drawer.js +1 -1
  25. package/dist/elements/accordion/Accordion.svelte +6 -17
  26. package/dist/elements/accordion/accordion-types.d.ts +53 -6
  27. package/dist/elements/alert/Alert.svelte +3 -0
  28. package/dist/elements/badge/Badge.svelte +1 -1
  29. package/dist/elements/badge/badge-types.d.ts +22 -0
  30. package/dist/elements/badge/badge.d.ts +3 -3
  31. package/dist/elements/badge/badge.js +1 -1
  32. package/dist/elements/combobox/ComboBox.svelte +247 -0
  33. package/dist/elements/combobox/ComboBox.svelte.d.ts +4 -0
  34. package/dist/elements/combobox/combobox-types.d.ts +41 -0
  35. package/dist/elements/combobox/combobox-types.js +1 -0
  36. package/dist/elements/context-menu/ContextMenu.svelte +137 -0
  37. package/dist/elements/context-menu/ContextMenu.svelte.d.ts +4 -0
  38. package/dist/elements/context-menu/context-menu-types.d.ts +40 -0
  39. package/dist/elements/context-menu/context-menu-types.js +1 -0
  40. package/dist/elements/dropdown/Dropdown.svelte +1 -1
  41. package/dist/elements/dropdown/Select.svelte +4 -1
  42. package/dist/elements/dropdown/dropdown-types.d.ts +114 -0
  43. package/dist/elements/dropdown/dropdown.d.ts +3 -3
  44. package/dist/elements/dropdown/dropdown.js +2 -2
  45. package/dist/elements/dropdown/select.d.ts +3 -3
  46. package/dist/elements/dropdown/select.js +2 -2
  47. package/dist/elements/empty-state/EmptyState.svelte +1 -1
  48. package/dist/elements/empty-state/empty-state-types.d.ts +32 -1
  49. package/dist/elements/empty-state/empty-state.d.ts +3 -3
  50. package/dist/elements/empty-state/empty-state.js +2 -2
  51. package/dist/elements/file-upload/FileUpload.svelte +5 -0
  52. package/dist/elements/file-upload/file-upload-types.d.ts +59 -0
  53. package/dist/elements/pagination/Pagination.svelte +53 -21
  54. package/dist/elements/pagination/Pagination.svelte.d.ts +33 -5
  55. package/dist/elements/popover/Popover.svelte +234 -0
  56. package/dist/elements/popover/Popover.svelte.d.ts +4 -0
  57. package/dist/elements/popover/index.d.ts +2 -0
  58. package/dist/elements/popover/index.js +1 -0
  59. package/dist/elements/popover/popover-types.d.ts +60 -0
  60. package/dist/elements/popover/popover-types.js +1 -0
  61. package/dist/elements/progress/Progress.svelte +32 -7
  62. package/dist/elements/progress/progress-types.d.ts +48 -1
  63. package/dist/elements/skeleton/Skeleton.svelte +56 -0
  64. package/dist/elements/skeleton/Skeleton.svelte.d.ts +4 -0
  65. package/dist/elements/skeleton/index.d.ts +2 -0
  66. package/dist/elements/skeleton/index.js +1 -0
  67. package/dist/elements/skeleton/skeleton-types.d.ts +50 -0
  68. package/dist/elements/skeleton/skeleton-types.js +1 -0
  69. package/dist/elements/spinner/Spinner.svelte +1 -1
  70. package/dist/elements/spinner/spinner-types.d.ts +20 -0
  71. package/dist/elements/spinner/spinner.d.ts +3 -3
  72. package/dist/elements/spinner/spinner.js +2 -2
  73. package/dist/elements/tooltip/Tooltip.svelte +108 -11
  74. package/dist/elements/tooltip/tooltip-types.d.ts +49 -1
  75. package/dist/file-browser/FileBrowser.svelte +21 -12
  76. package/dist/filters/CompactFilters.svelte +221 -33
  77. package/dist/filters/CompactFilters.svelte.d.ts +1 -1
  78. package/dist/filters/FilterBar.svelte +184 -0
  79. package/dist/filters/FilterBar.svelte.d.ts +4 -0
  80. package/dist/filters/FilterPopover.svelte +346 -0
  81. package/dist/filters/FilterPopover.svelte.d.ts +4 -0
  82. package/dist/filters/date-presets.d.ts +15 -0
  83. package/dist/filters/date-presets.js +107 -0
  84. package/dist/filters/filter-types.d.ts +69 -3
  85. package/dist/filters/index.d.ts +5 -0
  86. package/dist/filters/index.js +4 -0
  87. package/dist/filters/sync-filters-to-url.svelte.d.ts +37 -0
  88. package/dist/filters/sync-filters-to-url.svelte.js +114 -0
  89. package/dist/forms/DateRange.svelte +4 -2
  90. package/dist/forms/Input.svelte +2 -2
  91. package/dist/forms/MarketSelector.svelte +8 -3
  92. package/dist/forms/NumberInput.svelte +4 -4
  93. package/dist/forms/RadioGroup.svelte +123 -0
  94. package/dist/forms/RadioGroup.svelte.d.ts +4 -0
  95. package/dist/forms/SegmentedControl.svelte +11 -4
  96. package/dist/forms/Slider.svelte +72 -3
  97. package/dist/forms/Tags.svelte +14 -5
  98. package/dist/forms/Textarea.svelte +126 -0
  99. package/dist/forms/Textarea.svelte.d.ts +4 -0
  100. package/dist/forms/Toggle.svelte +8 -8
  101. package/dist/forms/calendar/Calendar.svelte +218 -0
  102. package/dist/forms/calendar/Calendar.svelte.d.ts +4 -0
  103. package/dist/forms/calendar/calendar-types.d.ts +46 -0
  104. package/dist/forms/calendar/calendar-types.js +1 -0
  105. package/dist/forms/calendar/index.d.ts +2 -0
  106. package/dist/forms/calendar/index.js +1 -0
  107. package/dist/forms/date-picker/DatePicker.svelte +144 -0
  108. package/dist/forms/date-picker/DatePicker.svelte.d.ts +4 -0
  109. package/dist/forms/date-picker/date-picker-types.d.ts +29 -0
  110. package/dist/forms/date-picker/date-picker-types.js +1 -0
  111. package/dist/forms/form-types.d.ts +425 -6
  112. package/dist/forms/market/market-selector-types.d.ts +52 -1
  113. package/dist/forms/segmented-control.d.ts +5 -2
  114. package/dist/forms/segmented-control.js +16 -5
  115. package/dist/forms/slider.d.ts +3 -3
  116. package/dist/forms/slider.js +2 -2
  117. package/dist/funcs/user-management.remote.d.ts +1 -1
  118. package/dist/funcs/user-management.remote.js +2 -2
  119. package/dist/header/Breadcrumbs.svelte +4 -20
  120. package/dist/header/PageHeader.svelte +6 -14
  121. package/dist/header/breadcrumbs.d.ts +3 -11
  122. package/dist/header/breadcrumbs.js +10 -5
  123. package/dist/header/header-types.d.ts +62 -11
  124. package/dist/index.d.ts +35 -9
  125. package/dist/index.js +24 -4
  126. package/dist/layout/activity-list/ActivityList.svelte +13 -7
  127. package/dist/layout/activity-list/activity-list-types.d.ts +46 -7
  128. package/dist/layout/card/Card.svelte +12 -15
  129. package/dist/layout/card/MetricCard.svelte +50 -32
  130. package/dist/layout/card/card-types.d.ts +114 -4
  131. package/dist/layout/navbar/navbar-types.d.ts +48 -0
  132. package/dist/layout/navbar/navbar.d.ts +3 -3
  133. package/dist/layout/navbar/navbar.js +2 -2
  134. package/dist/layout/sidebar/Sidebar.svelte +87 -11
  135. package/dist/layout/sidebar/sidebar-types.d.ts +60 -1
  136. package/dist/layout/stepper/Stepper.svelte +288 -0
  137. package/dist/layout/stepper/Stepper.svelte.d.ts +4 -0
  138. package/dist/layout/stepper/stepper-types.d.ts +80 -0
  139. package/dist/layout/stepper/stepper-types.js +1 -0
  140. package/dist/layout/table/Table.svelte +91 -85
  141. package/dist/layout/table/table-types.d.ts +148 -24
  142. package/dist/layout/table/table.d.ts +3 -3
  143. package/dist/layout/table/table.js +2 -2
  144. package/dist/layout/tabs/Tab.svelte +6 -2
  145. package/dist/layout/tabs/Tab.svelte.d.ts +4 -1
  146. package/dist/layout/tabs/TabGroup.svelte +9 -2
  147. package/dist/layout/tabs/tabs-types.d.ts +63 -0
  148. package/dist/layout/tabs/tabs.d.ts +3 -3
  149. package/dist/layout/tabs/tabs.js +12 -6
  150. package/dist/modal/ConfirmDialog.svelte +65 -0
  151. package/dist/modal/ConfirmDialog.svelte.d.ts +4 -0
  152. package/dist/modal/Modal.svelte +6 -26
  153. package/dist/modal/confirm-dialog-types.d.ts +39 -0
  154. package/dist/modal/confirm-dialog-types.js +1 -0
  155. package/dist/modal/modal-types.d.ts +51 -12
  156. package/dist/modal/modal.d.ts +3 -3
  157. package/dist/modal/modal.js +3 -3
  158. package/dist/pipeline/Pipeline.svelte +8 -3
  159. package/dist/pipeline/pipeline-types.d.ts +55 -3
  160. package/dist/pipeline/pipeline.d.ts +18 -3
  161. package/dist/pipeline/pipeline.js +7 -2
  162. package/dist/server/s3.d.ts +35 -3
  163. package/dist/sonner/Toaster.svelte +29 -0
  164. package/dist/sonner/Toaster.svelte.d.ts +4 -0
  165. package/dist/sonner/index.d.ts +21 -0
  166. package/dist/sonner/index.js +20 -0
  167. package/dist/user-management/UserManagement.svelte +22 -16
  168. package/dist/user-management/UserModal.svelte +10 -7
  169. package/dist/user-management/UserTable.svelte +16 -17
  170. package/dist/user-management/UserViewModal.svelte +11 -11
  171. package/dist/user-management/user-management-types.d.ts +118 -31
  172. package/dist/variants.d.ts +1 -1
  173. package/dist/variants.js +1 -1
  174. package/package.json +7 -4
  175. package/dist/config/ai.d.ts +0 -13
  176. package/dist/config/ai.js +0 -44
  177. package/dist/elements/empty-state/EmptyStateTestWrapper.svelte +0 -25
  178. package/dist/elements/empty-state/EmptyStateTestWrapper.svelte.d.ts +0 -8
  179. package/dist/elements/tooltip/TooltipTestWrapper.svelte +0 -14
  180. package/dist/elements/tooltip/TooltipTestWrapper.svelte.d.ts +0 -7
  181. package/dist/helper/deprecation.d.ts +0 -14
  182. package/dist/helper/deprecation.js +0 -24
  183. package/dist/modal/ModalFooterTestWrapper.svelte +0 -17
  184. package/dist/modal/ModalFooterTestWrapper.svelte.d.ts +0 -8
@@ -19,7 +19,7 @@ export const pipelineVariants = tv({
19
19
  count: 'text-xl mt-0.5',
20
20
  content: 'px-4'
21
21
  },
22
- base: {
22
+ md: {
23
23
  stage: 'min-w-[150px]',
24
24
  borderLayer: 'h-24',
25
25
  innerLayer: 'h-24',
@@ -43,6 +43,11 @@ export const pipelineVariants = tv({
43
43
  label: 'text-default-700',
44
44
  count: 'text-default-900'
45
45
  },
46
+ secondary: {
47
+ borderLayer: 'bg-secondary-500',
48
+ label: 'text-default-700',
49
+ count: 'text-default-900'
50
+ },
46
51
  success: {
47
52
  borderLayer: 'bg-green-500',
48
53
  label: 'text-default-700',
@@ -84,7 +89,7 @@ export const pipelineVariants = tv({
84
89
  }
85
90
  },
86
91
  defaultVariants: {
87
- size: 'base',
92
+ size: 'md',
88
93
  color: 'default',
89
94
  equalWidth: true
90
95
  }
@@ -1,9 +1,14 @@
1
1
  /**
2
- * S3 server handler factory. Returns Request handlers that the client-side
3
- * S3Adapter expects at /api/s3/list and /api/s3/download.
2
+ * S3 server handler factory the server-side half of the `FileBrowser`
3
+ * component. Returns two `Request Response` handlers that the client-side
4
+ * `S3Adapter` expects at **`GET /api/s3/list`** and **`GET /api/s3/download`**.
4
5
  *
5
6
  * Keeps AWS credentials server-side — consumers just wire these handlers into
6
- * their route files.
7
+ * their SvelteKit route files.
8
+ *
9
+ * **Both routes are required.** Skipping `download` makes file downloads 404.
10
+ *
11
+ * Pair with the client-side `S3Adapter` from `@makolabs/ripple`:
7
12
  *
8
13
  * @example
9
14
  * ```ts
@@ -21,6 +26,33 @@
21
26
  *
22
27
  * export const GET = ({ request }) => s3.list(request);
23
28
  * ```
29
+ *
30
+ * @example
31
+ * ```ts
32
+ * // src/routes/api/s3/download/+server.ts
33
+ * import { createS3Handlers } from '@makolabs/ripple/server';
34
+ * import { env } from '$env/dynamic/private';
35
+ *
36
+ * // Reuse the same config as the list route — or export a shared `s3` helper.
37
+ * const s3 = createS3Handlers({
38
+ * bucket: env.S3_BUCKET,
39
+ * region: env.S3_REGION,
40
+ * accessKeyId: env.S3_ACCESS_KEY_ID,
41
+ * secretAccessKey: env.S3_SECRET_ACCESS_KEY
42
+ * });
43
+ *
44
+ * export const GET = ({ request }) => s3.download(request);
45
+ * ```
46
+ *
47
+ * @example
48
+ * ```svelte
49
+ * <!-- Consumer page wires S3Adapter to FileBrowser -->
50
+ * <script lang="ts">
51
+ * import { FileBrowser, S3Adapter } from '@makolabs/ripple';
52
+ * const adapter = new S3Adapter({ basePath: '/' });
53
+ * </script>
54
+ * <FileBrowser {adapter} />
55
+ * ```
24
56
  */
25
57
  export interface S3HandlerConfig {
26
58
  /** S3 bucket name (default used when request doesn't specify one) */
@@ -0,0 +1,29 @@
1
+ <script lang="ts">
2
+ import { Toaster as Sonner, type ToasterProps as SonnerProps } from 'svelte-sonner';
3
+
4
+ let {
5
+ position = 'top-right',
6
+ richColors = true,
7
+ closeButton = true,
8
+ duration = 4000,
9
+ ...rest
10
+ }: SonnerProps = $props();
11
+ </script>
12
+
13
+ <Sonner
14
+ class="toaster group"
15
+ {position}
16
+ {richColors}
17
+ {closeButton}
18
+ {duration}
19
+ toastOptions={{
20
+ classes: {
21
+ toast:
22
+ 'group toast group-[.toaster]:bg-white group-[.toaster]:text-default-900 group-[.toaster]:border-default-200 group-[.toaster]:shadow-lg',
23
+ description: 'group-[.toast]:text-default-500',
24
+ actionButton: 'group-[.toast]:bg-primary-600 group-[.toast]:text-white',
25
+ cancelButton: 'group-[.toast]:bg-default-100 group-[.toast]:text-default-600'
26
+ }
27
+ }}
28
+ {...rest}
29
+ />
@@ -0,0 +1,4 @@
1
+ import { type ToasterProps as SonnerProps } from 'svelte-sonner';
2
+ declare const Toaster: import("svelte").Component<SonnerProps, {}, "">;
3
+ type Toaster = ReturnType<typeof Toaster>;
4
+ export default Toaster;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Toast — a thin wrapper over svelte-sonner with ripple-branded defaults.
3
+ *
4
+ * @example
5
+ * ```svelte
6
+ * <!-- Mount once, usually in +layout.svelte -->
7
+ * <script>
8
+ * import { Toaster } from '@makolabs/ripple';
9
+ * </script>
10
+ * <Toaster />
11
+ *
12
+ * <!-- Use anywhere -->
13
+ * <script>
14
+ * import { toast } from '@makolabs/ripple';
15
+ * </script>
16
+ * <button onclick={() => toast.success('Saved!')}>Save</button>
17
+ * ```
18
+ */
19
+ export { default as Toaster } from './Toaster.svelte';
20
+ export { toast } from 'svelte-sonner';
21
+ export type { ToasterProps, ToastT } from 'svelte-sonner';
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Toast — a thin wrapper over svelte-sonner with ripple-branded defaults.
3
+ *
4
+ * @example
5
+ * ```svelte
6
+ * <!-- Mount once, usually in +layout.svelte -->
7
+ * <script>
8
+ * import { Toaster } from '@makolabs/ripple';
9
+ * </script>
10
+ * <Toaster />
11
+ *
12
+ * <!-- Use anywhere -->
13
+ * <script>
14
+ * import { toast } from '@makolabs/ripple';
15
+ * </script>
16
+ * <button onclick={() => toast.success('Saved!')}>Save</button>
17
+ * ```
18
+ */
19
+ export { default as Toaster } from './Toaster.svelte';
20
+ export { toast } from 'svelte-sonner';
@@ -5,7 +5,13 @@
5
5
  import UserTable from './UserTable.svelte';
6
6
  import UserModal from './UserModal.svelte';
7
7
  import UserViewModal from './UserViewModal.svelte';
8
- import type { User, UserManagementProps, Role, Permission } from '../index.js';
8
+ import type {
9
+ User,
10
+ UserManagementProps,
11
+ UserModalSavePayload,
12
+ Role,
13
+ Permission
14
+ } from '../index.js';
9
15
  import { SvelteSet } from 'svelte/reactivity';
10
16
 
11
17
  let {
@@ -152,20 +158,20 @@
152
158
  }
153
159
 
154
160
  // Save handlers
155
- async function handleUserSave(user: User, mode: 'create' | 'edit') {
161
+ async function handleUserSave(payload: UserModalSavePayload) {
156
162
  try {
157
- if (mode === 'create') {
163
+ if (payload.mode === 'create') {
158
164
  // After creating, go to page 1 to see the new user (newest first)
159
165
  currentPage = 1;
160
- await adapter.createUser(user);
166
+ await adapter.createUser(payload.user);
161
167
  } else {
162
- await adapter.updateUser({ userId: user.id, userData: user });
168
+ await adapter.updateUser({ userId: payload.user.id, userData: payload.user });
163
169
  }
164
170
  // Refresh the users list
165
171
  await refreshUsersQuery();
166
172
  } catch (error) {
167
173
  console.error('Error saving user:', error);
168
- toast.error(mode === 'create' ? 'Failed to create user' : 'Failed to update user');
174
+ toast.error(payload.mode === 'create' ? 'Failed to create user' : 'Failed to update user');
169
175
  // Reload on error to restore correct state
170
176
  await loadUsers();
171
177
  throw error;
@@ -307,12 +313,12 @@
307
313
  {currentPage}
308
314
  {pageSize}
309
315
  {totalUsers}
310
- onPageChange={handlePageChange}
311
- onPageSizeChange={handlePageSizeChange}
312
- onSort={handleSort}
313
- onView={openViewModal}
314
- onEdit={openEditModal}
315
- onDelete={handleDeleteUser}
316
+ onpagechange={handlePageChange}
317
+ onpagesizechange={handlePageSizeChange}
318
+ onsort={handleSort}
319
+ onview={openViewModal}
320
+ onedit={openEditModal}
321
+ ondelete={handleDeleteUser}
316
322
  />
317
323
 
318
324
  <!-- User View Modal -->
@@ -320,8 +326,8 @@
320
326
  bind:open={showViewModal}
321
327
  bind:user={selectedUser}
322
328
  {permissions}
323
- onEdit={handleEditFromView}
324
- onClose={handleModalClose}
329
+ onedit={handleEditFromView}
330
+ onclose={handleModalClose}
325
331
  />
326
332
 
327
333
  <!-- User Edit/Create Modal -->
@@ -331,7 +337,7 @@
331
337
  {roles}
332
338
  {adapter}
333
339
  {loadingPermissions}
334
- onSave={handleUserSave}
335
- onClose={handleModalClose}
340
+ onsave={handleUserSave}
341
+ onclose={handleModalClose}
336
342
  />
337
343
  </div>
@@ -18,8 +18,8 @@
18
18
  roles = [],
19
19
  adapter,
20
20
  loadingPermissions = false,
21
- onSave,
22
- onClose,
21
+ onsave,
22
+ onclose,
23
23
  class: className
24
24
  }: UserModalProps = $props();
25
25
 
@@ -142,7 +142,7 @@
142
142
  formErrors = {};
143
143
  saving = false;
144
144
  tokenVerification = null;
145
- if (onClose) onClose();
145
+ if (onclose) onclose();
146
146
  }
147
147
 
148
148
  async function handleSubmit(event: SubmitEvent) {
@@ -166,8 +166,7 @@
166
166
 
167
167
  try {
168
168
  saving = true;
169
- const userData: User = {
170
- id: user?.id || '',
169
+ const commonFields = {
171
170
  first_name: formData.first_name,
172
171
  last_name: formData.last_name,
173
172
  email_addresses: formData.email_addresses,
@@ -176,7 +175,11 @@
176
175
  permissions: formData.permissions
177
176
  };
178
177
 
179
- await onSave(userData, mode);
178
+ if (mode === 'edit' && user?.id) {
179
+ await onsave({ mode: 'edit', user: { id: user.id, ...commonFields } });
180
+ } else {
181
+ await onsave({ mode: 'create', user: commonFields });
182
+ }
180
183
  handleClose();
181
184
  } catch (error) {
182
185
  console.error('[UserModal] Error saving user:', error);
@@ -650,7 +653,7 @@
650
653
  color="primary"
651
654
  onclick={() => formElement?.requestSubmit()}
652
655
  disabled={saving}
653
- isLoading={saving}
656
+ loading={saving}
654
657
  data-testid="save-user-button"
655
658
  >
656
659
  {mode === 'create' ? 'Create User' : 'Save Changes'}
@@ -15,12 +15,12 @@
15
15
  currentPage = 1,
16
16
  pageSize = 10,
17
17
  totalUsers = 0,
18
- onPageChange,
19
- onPageSizeChange,
20
- onSort,
21
- onView,
22
- onEdit,
23
- onDelete,
18
+ onpagechange,
19
+ onpagesizechange,
20
+ onsort,
21
+ onview,
22
+ onedit,
23
+ ondelete,
24
24
  class: className = ''
25
25
  }: UserTableProps = $props();
26
26
 
@@ -38,8 +38,8 @@
38
38
 
39
39
  // Handle table sort
40
40
  function handleTableSort(state: { column: string | null; direction: 'asc' | 'desc' | null }) {
41
- if (onSort && state.column && state.direction) {
42
- onSort(state);
41
+ if (onsort && state.column && state.direction) {
42
+ onsort(state);
43
43
  }
44
44
  }
45
45
 
@@ -174,9 +174,9 @@
174
174
 
175
175
  {#snippet ActionsCell(user: User)}
176
176
  <div class="flex items-center justify-end space-x-1">
177
- {#if onView}
177
+ {#if onview}
178
178
  <button
179
- onclick={() => onView(user)}
179
+ onclick={() => onview(user)}
180
180
  class="inline-flex rounded p-1 text-blue-600 transition-colors hover:bg-blue-50 hover:text-blue-900"
181
181
  title="View User"
182
182
  aria-label="View User"
@@ -184,9 +184,9 @@
184
184
  {@render EyeIcon()}
185
185
  </button>
186
186
  {/if}
187
- {#if onEdit}
187
+ {#if onedit}
188
188
  <button
189
- onclick={() => onEdit(user)}
189
+ onclick={() => onedit(user)}
190
190
  class="inline-flex rounded p-1 text-green-600 transition-colors hover:bg-green-50 hover:text-green-900"
191
191
  title="Edit User"
192
192
  aria-label="Edit User"
@@ -194,9 +194,9 @@
194
194
  {@render EditIcon()}
195
195
  </button>
196
196
  {/if}
197
- {#if onDelete}
197
+ {#if ondelete}
198
198
  <button
199
- onclick={() => onDelete(user.id)}
199
+ onclick={() => ondelete(user.id)}
200
200
  class="text-danger-600 hover:bg-danger-50 hover:text-danger-900 inline-flex rounded p-1 transition-colors"
201
201
  title="Delete User"
202
202
  aria-label="Delete User"
@@ -215,12 +215,11 @@
215
215
  totalItems={totalUsers}
216
216
  {loading}
217
217
  pagination={true}
218
- showPagination={true}
219
218
  showPageSize={true}
220
219
  pageSizeOptions={[10, 25, 50, 100]}
221
220
  paginationTemplate="full"
222
- onpagechange={onPageChange}
223
- onpagesizechange={onPageSizeChange}
221
+ {onpagechange}
222
+ {onpagesizechange}
224
223
  onsort={handleTableSort}
225
224
  paginationPosition="bottom"
226
225
  paginationClass="whitespace-nowrap flex-wrap gap-3 justify-between items-center"
@@ -6,9 +6,9 @@
6
6
  open = $bindable(),
7
7
  user = $bindable(),
8
8
  roles = [],
9
- onEdit,
10
- onRegenerateApiKey,
11
- onClose,
9
+ onedit,
10
+ onregenerateapikey,
11
+ onclose,
12
12
  class: className
13
13
  }: UserViewModalProps = $props();
14
14
 
@@ -20,12 +20,12 @@
20
20
  function handleClose() {
21
21
  open = false;
22
22
  showApiKey = false;
23
- if (onClose) onClose();
23
+ if (onclose) onclose();
24
24
  }
25
25
 
26
26
  function handleEdit() {
27
- if (onEdit && user) {
28
- onEdit(user);
27
+ if (onedit && user) {
28
+ onedit(user);
29
29
  }
30
30
  }
31
31
 
@@ -47,12 +47,12 @@
47
47
  }
48
48
 
49
49
  async function handleRegenerateApiKey() {
50
- if (!user?.id || !onRegenerateApiKey) return;
50
+ if (!user?.id || !onregenerateapikey) return;
51
51
 
52
52
  try {
53
53
  regeneratingApiKey = true;
54
54
  apiKeyError = null;
55
- await onRegenerateApiKey(user.id);
55
+ await onregenerateapikey(user.id);
56
56
  } catch (error) {
57
57
  console.error('Error regenerating API key:', error);
58
58
  apiKeyError = error instanceof Error ? error.message : 'Failed to regenerate API key';
@@ -125,11 +125,11 @@
125
125
  </div>
126
126
 
127
127
  <!-- Mako API Key -->
128
- {#if apiKey || onRegenerateApiKey}
128
+ {#if apiKey || onregenerateapikey}
129
129
  <div>
130
130
  <div class="mb-2 flex items-center justify-between">
131
131
  <p class="text-default-700 text-sm font-medium">Mako API Key</p>
132
- {#if onRegenerateApiKey}
132
+ {#if onregenerateapikey}
133
133
  <button
134
134
  type="button"
135
135
  onclick={handleRegenerateApiKey}
@@ -283,7 +283,7 @@
283
283
  <div></div>
284
284
  <div class="flex gap-3">
285
285
  <Button variant="outline" onclick={handleClose}>Close</Button>
286
- {#if onEdit}
286
+ {#if onedit}
287
287
  <Button color="primary" onclick={handleEdit}>
288
288
  <svg class="h-4 w-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
289
289
  <path