@makolabs/ripple 1.2.3 → 1.2.4

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 (106) hide show
  1. package/README.md +77 -0
  2. package/dist/adapters/ai/OpenAIAdapter.js +16 -11
  3. package/dist/adapters/ai/types.d.ts +3 -3
  4. package/dist/adapters/storage/BaseAdapter.d.ts +1 -1
  5. package/dist/adapters/storage/BaseAdapter.js +1 -1
  6. package/dist/adapters/storage/S3Adapter.js +2 -2
  7. package/dist/ai/AIChatInterface.svelte +32 -34
  8. package/dist/ai/AIChatInterface.svelte.d.ts +0 -1
  9. package/dist/ai/AIChatInterfaceTestWrapper.svelte +26 -0
  10. package/dist/ai/AIChatInterfaceTestWrapper.svelte.d.ts +17 -0
  11. package/dist/ai/ChatInput.svelte +7 -15
  12. package/dist/ai/ChatInput.svelte.d.ts +0 -2
  13. package/dist/ai/CodeRenderer.svelte +25 -12
  14. package/dist/ai/ComposeDropdown.svelte +17 -14
  15. package/dist/ai/MermaidRenderer.svelte +21 -17
  16. package/dist/ai/MermaidRenderer.svelte.d.ts +0 -1
  17. package/dist/ai/MessageBox.svelte +10 -7
  18. package/dist/ai/ThinkingDisplay.svelte +67 -43
  19. package/dist/ai/ai-chat-interface.d.ts +22 -21
  20. package/dist/ai/ai-chat-interface.js +8 -7
  21. package/dist/ai/content-detector.js +2 -2
  22. package/dist/button/ButtonTestWrapper.svelte +10 -0
  23. package/dist/button/ButtonTestWrapper.svelte.d.ts +7 -0
  24. package/dist/charts/Chart.svelte +6 -1
  25. package/dist/config/ai.js +1 -0
  26. package/dist/drawer/DrawerTestWrapper.svelte +19 -0
  27. package/dist/drawer/DrawerTestWrapper.svelte.d.ts +9 -0
  28. package/dist/drawer/drawer.d.ts +19 -18
  29. package/dist/drawer/drawer.js +7 -6
  30. package/dist/elements/accordion/Accordion.svelte +1 -1
  31. package/dist/elements/accordion/Accordion.svelte.d.ts +1 -1
  32. package/dist/elements/accordion/AccordionTestWrapper.svelte +21 -0
  33. package/dist/elements/accordion/AccordionTestWrapper.svelte.d.ts +10 -0
  34. package/dist/elements/badge/Badge.svelte +5 -4
  35. package/dist/elements/badge/BadgeTestWrapper.svelte +14 -0
  36. package/dist/elements/badge/BadgeTestWrapper.svelte.d.ts +9 -0
  37. package/dist/elements/badge/badge.d.ts +40 -39
  38. package/dist/elements/badge/badge.js +14 -13
  39. package/dist/elements/dropdown/Dropdown.svelte +0 -1
  40. package/dist/elements/pagination/Pagination.svelte +20 -26
  41. package/dist/elements/progress/Progress.svelte +3 -3
  42. package/dist/elements/timeline/Timeline.svelte +1 -1
  43. package/dist/file-browser/FileBrowser.svelte +7 -10
  44. package/dist/filters/CompactFilters.svelte +3 -3
  45. package/dist/forms/Checkbox.svelte +0 -1
  46. package/dist/forms/CheckboxTestWrapper.svelte +8 -0
  47. package/dist/forms/CheckboxTestWrapper.svelte.d.ts +4 -0
  48. package/dist/forms/DateRange.svelte +186 -198
  49. package/dist/forms/Form.svelte +1 -0
  50. package/dist/forms/Input.svelte +14 -5
  51. package/dist/forms/InputTestWrapper.svelte +8 -0
  52. package/dist/forms/InputTestWrapper.svelte.d.ts +4 -0
  53. package/dist/forms/NumberInput.svelte +2 -2
  54. package/dist/forms/RadioInputs.svelte +1 -1
  55. package/dist/forms/RadioPill.svelte +1 -1
  56. package/dist/forms/Slider.svelte +2 -2
  57. package/dist/forms/Tags.svelte +3 -3
  58. package/dist/forms/ToggleTestWrapper.svelte +8 -0
  59. package/dist/forms/ToggleTestWrapper.svelte.d.ts +7 -0
  60. package/dist/forms/slider.js +1 -1
  61. package/dist/header/PageHeader.svelte +2 -1
  62. package/dist/header/breadcrumbs.d.ts +47 -33
  63. package/dist/header/breadcrumbs.js +12 -11
  64. package/dist/index.d.ts +3 -2
  65. package/dist/index.js +2 -0
  66. package/dist/layout/activity-list/ActivityList.svelte +9 -11
  67. package/dist/layout/card/CardTestWrapper.svelte +15 -0
  68. package/dist/layout/card/CardTestWrapper.svelte.d.ts +7 -0
  69. package/dist/layout/card/RankedCard.svelte +2 -3
  70. package/dist/layout/navbar/navbar.d.ts +19 -18
  71. package/dist/layout/navbar/navbar.js +7 -6
  72. package/dist/layout/sidebar/NavGroup.svelte +1 -0
  73. package/dist/layout/table/Cells.svelte +5 -5
  74. package/dist/layout/table/Table.svelte +8 -8
  75. package/dist/layout/table/table.d.ts +28 -24
  76. package/dist/layout/table/table.js +14 -13
  77. package/dist/modal/Modal.svelte +1 -1
  78. package/dist/modal/ModalTestWrapper.svelte +20 -0
  79. package/dist/modal/ModalTestWrapper.svelte.d.ts +8 -0
  80. package/dist/modal/modal.d.ts +1 -20
  81. package/dist/pipeline/Pipeline.svelte +29 -17
  82. package/dist/user-management/README.md +417 -0
  83. package/dist/user-management/UserManagement.svelte +184 -0
  84. package/dist/user-management/UserManagement.svelte.d.ts +4 -0
  85. package/dist/user-management/UserManagementTestWrapper.svelte +47 -0
  86. package/dist/user-management/UserManagementTestWrapper.svelte.d.ts +7 -0
  87. package/dist/user-management/UserModal.svelte +303 -0
  88. package/dist/user-management/UserModal.svelte.d.ts +4 -0
  89. package/dist/user-management/UserModalTestWrapper.svelte +22 -0
  90. package/dist/user-management/UserModalTestWrapper.svelte.d.ts +7 -0
  91. package/dist/user-management/UserTable.svelte +219 -0
  92. package/dist/user-management/UserTable.svelte.d.ts +4 -0
  93. package/dist/user-management/UserTableTestWrapper.svelte +41 -0
  94. package/dist/user-management/UserTableTestWrapper.svelte.d.ts +7 -0
  95. package/dist/user-management/UserViewModal.svelte +282 -0
  96. package/dist/user-management/UserViewModal.svelte.d.ts +4 -0
  97. package/dist/user-management/UserViewModalTestWrapper.svelte +22 -0
  98. package/dist/user-management/UserViewModalTestWrapper.svelte.d.ts +7 -0
  99. package/dist/user-management/index.d.ts +10 -0
  100. package/dist/user-management/index.js +11 -0
  101. package/dist/user-management/user-management.d.ts +99 -0
  102. package/dist/user-management/user-management.js +42 -0
  103. package/package.json +3 -1
  104. package/dist/types/markdown.d.ts +0 -14
  105. package/dist/types/variants.d.ts +0 -1
  106. package/dist/types/variants.js +0 -1
@@ -125,15 +125,11 @@
125
125
 
126
126
  // Computed values
127
127
  const totalPages = $derived(Math.ceil(validTotalItems / validPageSize));
128
- const startItem = $derived(
129
- Math.min((currentPage - 1) * validPageSize + 1, validTotalItems)
130
- );
128
+ const startItem = $derived(Math.min((currentPage - 1) * validPageSize + 1, validTotalItems));
131
129
  const endItem = $derived(Math.min(currentPage * validPageSize, validTotalItems));
132
130
 
133
131
  // Ensure currentPage is within valid range
134
- const validCurrentPage = $derived(
135
- Math.max(1, Math.min(currentPage, totalPages || 1))
136
- );
132
+ const validCurrentPage = $derived(Math.max(1, Math.min(currentPage, totalPages || 1)));
137
133
 
138
134
  // Navigation functions
139
135
  function goToPage(page: number) {
@@ -244,21 +240,19 @@
244
240
  }
245
241
 
246
242
  // Determine if we should show pagination
247
- const shouldShowPagination = $derived(
248
- !hideWhenNoItems || validTotalItems > 0
249
- );
250
- const shouldShowControls = $derived(
251
- !hideWhenSinglePage || totalPages > 1
252
- );
243
+ const shouldShowPagination = $derived(!hideWhenNoItems || validTotalItems > 0);
244
+ const shouldShowControls = $derived(!hideWhenSinglePage || totalPages > 1);
253
245
 
254
246
  // Default classes using ripple-ui design system
255
247
  const defaultWrapperClass = 'flex items-center justify-between p-4';
256
248
  const defaultInfoClass = 'text-default-500 text-sm';
257
- const defaultButtonClass = 'relative inline-flex items-center rounded-md px-2 py-1 text-sm font-medium';
249
+ const defaultButtonClass =
250
+ 'relative inline-flex items-center rounded-md px-2 py-1 text-sm font-medium';
258
251
  const defaultActiveButtonClass = 'bg-primary-100 text-primary-700';
259
252
  const defaultInactiveButtonClass = 'text-default-700 hover:bg-default-100';
260
253
  const defaultDisabledButtonClass = 'text-default-300 cursor-not-allowed';
261
- const defaultPageButtonClass = 'relative inline-flex items-center rounded-md px-3 py-1 text-sm font-medium';
254
+ const defaultPageButtonClass =
255
+ 'relative inline-flex items-center rounded-md px-3 py-1 text-sm font-medium';
262
256
  </script>
263
257
 
264
258
  {#if shouldShowPagination}
@@ -276,9 +270,9 @@
276
270
  )}
277
271
  value={pageSize}
278
272
  onchange={handlePageSizeChange}
279
- disabled={disabled}
273
+ {disabled}
280
274
  >
281
- {#each pageSizeOptions as option}
275
+ {#each pageSizeOptions as option (option)}
282
276
  <option value={option}>{option}</option>
283
277
  {/each}
284
278
  </select>
@@ -330,11 +324,11 @@
330
324
  {#if template === 'full' && showPageNumbers}
331
325
  {#if totalPages <= maxVisiblePages}
332
326
  <!-- Show all pages if total is less than or equal to maxVisiblePages -->
333
- {#each Array(totalPages) as _, i}
327
+ {#each Array(totalPages) as page, i (page + i)}
334
328
  {@const pageNum = i + 1}
335
329
  <button
336
330
  onclick={() => goToPage(pageNum)}
337
- disabled={disabled}
331
+ {disabled}
338
332
  class={cn(
339
333
  defaultPageButtonClass,
340
334
  buttonClass,
@@ -353,12 +347,13 @@
353
347
  <!-- Smart pagination for many pages -->
354
348
  {@const pageNumbers = getPageNumbers()}
355
349
  {@const showFirst = alwaysShowFirstLast && pageNumbers[0] > 1}
356
- {@const showLast = alwaysShowFirstLast && pageNumbers[pageNumbers.length - 1] < totalPages}
350
+ {@const showLast =
351
+ alwaysShowFirstLast && pageNumbers[pageNumbers.length - 1] < totalPages}
357
352
 
358
353
  {#if showFirst}
359
354
  <button
360
355
  onclick={() => goToPage(1)}
361
- disabled={disabled}
356
+ {disabled}
362
357
  class={cn(
363
358
  defaultPageButtonClass,
364
359
  buttonClass,
@@ -373,14 +368,14 @@
373
368
  1
374
369
  </button>
375
370
  {#if pageNumbers[0] > 2}
376
- <span class="px-2 text-sm text-default-400">...</span>
371
+ <span class="text-default-400 px-2 text-sm">...</span>
377
372
  {/if}
378
373
  {/if}
379
374
 
380
- {#each pageNumbers as pageNum}
375
+ {#each pageNumbers as pageNum (pageNum)}
381
376
  <button
382
377
  onclick={() => goToPage(pageNum)}
383
- disabled={disabled}
378
+ {disabled}
384
379
  class={cn(
385
380
  defaultPageButtonClass,
386
381
  buttonClass,
@@ -398,11 +393,11 @@
398
393
 
399
394
  {#if showLast}
400
395
  {#if pageNumbers[pageNumbers.length - 1] < totalPages - 1}
401
- <span class="px-2 text-sm text-default-400">...</span>
396
+ <span class="text-default-400 px-2 text-sm">...</span>
402
397
  {/if}
403
398
  <button
404
399
  onclick={() => goToPage(totalPages)}
405
- disabled={disabled}
400
+ {disabled}
406
401
  class={cn(
407
402
  defaultPageButtonClass,
408
403
  buttonClass,
@@ -461,4 +456,3 @@
461
456
  {/if}
462
457
  </div>
463
458
  {/if}
464
-
@@ -1,7 +1,7 @@
1
1
  <script lang="ts">
2
2
  import { cn } from '../../helper/cls.js';
3
3
  import { Color, Size } from '../../variants.js';
4
- import type { ProgressProps, ProgressSegment, VariantColors } from '../../index.js';
4
+ import type { ProgressProps, VariantColors } from '../../index.js';
5
5
 
6
6
  let {
7
7
  value,
@@ -104,7 +104,7 @@
104
104
  aria-valuemax="100"
105
105
  >
106
106
  {#if segments}
107
- {#each segmentPercentages as segment}
107
+ {#each segmentPercentages as segment (segment.label || segment.value)}
108
108
  {#if segment.percentage > 0}
109
109
  <div
110
110
  class={cn(getColorClass(segment.color), barClass)}
@@ -120,7 +120,7 @@
120
120
 
121
121
  {#if segments && (showLabels || showValues)}
122
122
  <div class="mt-1 flex justify-between">
123
- {#each segmentPercentages as segment}
123
+ {#each segmentPercentages as segment (segment.label || segment.value)}
124
124
  {#if segment.percentage > 0}
125
125
  <div class={labelTextClass}>
126
126
  {#if showLabels && segment.label}
@@ -8,7 +8,7 @@
8
8
 
9
9
  <div class={cn('flow-root', className)}>
10
10
  <ul role="list" class="-mb-8">
11
- {#each items as item, index}
11
+ {#each items as item, index (item.title + index)}
12
12
  <li>
13
13
  <div class="relative pb-8">
14
14
  {#if index !== items.length - 1}
@@ -4,7 +4,6 @@
4
4
  import type { TableColumn, FileBrowserProps } from '../index.js';
5
5
  import { formatDate } from '../utils/dateUtils.js';
6
6
  import type {
7
- StorageAdapter,
8
7
  FileItem,
9
8
  Breadcrumb,
10
9
  FileAction,
@@ -198,7 +197,9 @@
198
197
  const folderFile = files.find((file) => file.key === folderPath);
199
198
  if (folderFile && folderFile.name && adapter.getName() === 'Google Drive') {
200
199
  // Assuming the adapter might have a setFolderName method
201
- (adapter as any).setFolderName?.(folderPath, folderFile.name);
200
+ if ('setFolderName' in adapter && typeof adapter.setFolderName === 'function') {
201
+ adapter.setFolderName(folderPath, folderFile.name);
202
+ }
202
203
  }
203
204
 
204
205
  // Store the currently selected files before navigation
@@ -416,13 +417,11 @@
416
417
  // Check if any single action allows this file
417
418
  const hasAllowedAction = actions.some((action) => {
418
419
  // Only check single file actions for individual file selection
419
- if ('action' in action && typeof action.action === 'function' && action.action) {
420
+ if ('action' in action && typeof action.action === 'function') {
420
421
  return action.isAllowed(item);
421
422
  }
422
423
  return false;
423
- });
424
-
425
- // Always allow folders to be selected (for recursive selection)
424
+ }); // Always allow folders to be selected (for recursive selection)
426
425
  return item.isFolder || hasAllowedAction;
427
426
  });
428
427
 
@@ -446,9 +445,6 @@
446
445
  newFolders.forEach((folder) => {
447
446
  handleSelectFolder(folder);
448
447
  });
449
-
450
- // Update select all state
451
- const nonFolderFiles = displayFiles.filter((file) => !file.isFolder);
452
448
  }
453
449
 
454
450
  async function fetchFilesFromFolder(folderKey: string, folderName: string) {
@@ -493,6 +489,7 @@
493
489
  if (!folder.isFolder) return;
494
490
 
495
491
  isFetchingRecursively = true;
492
+ // eslint-disable-next-line svelte/prefer-svelte-reactivity
496
493
  processedFolders = new Set();
497
494
  // Don't clear fileQueue entirely, it will lose files from other folders
498
495
  // Store existing fileQueue
@@ -727,7 +724,7 @@
727
724
  <span class="text-default-400 mx-1 text-sm">/</span>
728
725
 
729
726
  <div class="flex flex-wrap items-center">
730
- {#each breadcrumbs as crumb, i}
727
+ {#each breadcrumbs as crumb, i (crumb.path)}
731
728
  {#if i > 0}
732
729
  <span class="text-default-400 mx-1 text-sm">/</span>
733
730
  {/if}
@@ -100,7 +100,7 @@
100
100
  {#if !isExpanded}
101
101
  <!-- Summary of selected filters when collapsed -->
102
102
  <div class={cn('flex flex-wrap gap-2', summaryClass)}>
103
- {#each filterGroups as group}
103
+ {#each filterGroups as group (group.label)}
104
104
  {#if group.tabs.length > 0}
105
105
  <div
106
106
  class="bg-primary-50 text-primary-700 border-primary-200 flex items-center gap-1 rounded-full border px-3 py-1 text-xs"
@@ -113,7 +113,7 @@
113
113
  </div>
114
114
  {:else}
115
115
  <div class={cn('flex flex-col gap-2', expandedClass)}>
116
- {#each filterGroups as group, index}
116
+ {#each filterGroups as group, index (group.label)}
117
117
  {#if group.tabs.length > 0}
118
118
  <div
119
119
  class={cn(
@@ -125,7 +125,7 @@
125
125
  {group.label}
126
126
  </div>
127
127
  <div class="flex flex-wrap gap-2">
128
- {#each group.tabs as tab}
128
+ {#each group.tabs as tab (tab.value)}
129
129
  <button
130
130
  onclick={() => group.onChange(tab.value)}
131
131
  class={cn(
@@ -7,7 +7,6 @@
7
7
  label,
8
8
  value = $bindable(false),
9
9
  disabled = false,
10
- class: className = '',
11
10
  errors = [],
12
11
  required = false
13
12
  }: CheckboxProps = $props();
@@ -0,0 +1,8 @@
1
+ <script lang="ts">
2
+ import Checkbox from './Checkbox.svelte';
3
+ import type { CheckboxProps } from '../index.js';
4
+
5
+ let { ...checkboxProps }: CheckboxProps = $props();
6
+ </script>
7
+
8
+ <Checkbox {...checkboxProps} />
@@ -0,0 +1,4 @@
1
+ import type { CheckboxProps } from '../index.js';
2
+ declare const CheckboxTestWrapper: import("svelte").Component<CheckboxProps, {}, "">;
3
+ type CheckboxTestWrapper = ReturnType<typeof CheckboxTestWrapper>;
4
+ export default CheckboxTestWrapper;