@rkosafo/cai.components 0.0.75 → 0.0.78

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 (127) hide show
  1. package/README.md +8 -8
  2. package/dist/baseEditor/index.svelte +32 -32
  3. package/dist/builders/filters/FilterBuilder.svelte +641 -641
  4. package/dist/forms/FormCheckbox/FormCheckbox.svelte +53 -53
  5. package/dist/forms/FormClEditor/ClEdito.svelte +68 -68
  6. package/dist/forms/FormDatepicker/FormDatepicker.svelte +159 -159
  7. package/dist/forms/FormFileUpload/FormFileUplad.svelte +134 -134
  8. package/dist/forms/FormInput/FormInput.svelte +87 -87
  9. package/dist/forms/FormRadio/FormRadio.svelte +53 -53
  10. package/dist/forms/FormSelect/FormSelect.svelte +88 -88
  11. package/dist/forms/FormTextarea/FormTextarea.svelte +78 -78
  12. package/dist/forms/button-toggle/ButtonToggle.svelte +119 -0
  13. package/dist/forms/button-toggle/ButtonToggle.svelte.d.ts +139 -0
  14. package/dist/forms/button-toggle/ButtonToggleGroup.svelte +0 -0
  15. package/dist/forms/button-toggle/ButtonToggleGroup.svelte.d.ts +26 -0
  16. package/dist/forms/button-toggle/CheckIcon.svelte +28 -0
  17. package/dist/forms/button-toggle/CheckIcon.svelte.d.ts +4 -0
  18. package/dist/forms/button-toggle/index.d.ts +4 -0
  19. package/dist/forms/button-toggle/index.js +4 -0
  20. package/dist/forms/button-toggle/theme.d.ts +347 -0
  21. package/dist/forms/button-toggle/theme.js +129 -0
  22. package/dist/forms/checkbox/Checkbox.svelte +82 -82
  23. package/dist/forms/checkbox/CheckboxButton.svelte +92 -92
  24. package/dist/forms/datepicker/Datepicker.svelte +707 -707
  25. package/dist/forms/form/Form.svelte +69 -69
  26. package/dist/forms/input/Input.svelte +363 -363
  27. package/dist/forms/label/Label.svelte +38 -38
  28. package/dist/forms/radio/Radio.svelte +48 -48
  29. package/dist/forms/radio/RadioButton.svelte +22 -22
  30. package/dist/forms/select/Select.svelte +56 -56
  31. package/dist/forms/textarea/Textarea.svelte +165 -165
  32. package/dist/forms/toggle/Toggle.svelte +70 -0
  33. package/dist/forms/toggle/Toggle.svelte.d.ts +3 -0
  34. package/dist/forms/toggle/index.d.ts +2 -0
  35. package/dist/forms/toggle/index.js +2 -0
  36. package/dist/forms/toggle/theme.d.ts +280 -0
  37. package/dist/forms/toggle/theme.js +97 -0
  38. package/dist/index.d.ts +3 -0
  39. package/dist/index.js +3 -0
  40. package/dist/layout/Chat/CategorySelector.svelte +52 -52
  41. package/dist/layout/Chat/ChatEntry.svelte +246 -246
  42. package/dist/layout/Chat/ChatEntrySkeleton.svelte +81 -81
  43. package/dist/layout/Chat/ChatHeader.svelte +172 -172
  44. package/dist/layout/Chat/ChatInput.svelte +207 -207
  45. package/dist/layout/Chat/DraggableWindow.svelte +230 -230
  46. package/dist/layout/Chat/PreviewPage.svelte +182 -182
  47. package/dist/layout/Chat/RichText.svelte +216 -216
  48. package/dist/layout/ComponentCanvas/Canvas.svelte +40 -40
  49. package/dist/layout/ComponentCanvas/ComponentRenderer.svelte +85 -85
  50. package/dist/layout/TF/Content/Content.svelte +21 -21
  51. package/dist/layout/TF/Header/Header.svelte +166 -166
  52. package/dist/layout/TF/Sidebar/Sidebar.svelte +148 -148
  53. package/dist/layout/TF/Wrapper/Wrapper.svelte +17 -17
  54. package/dist/layout/mailing/MailPaginator.svelte +36 -36
  55. package/dist/layout/mailing/MailSidebar.svelte +39 -39
  56. package/dist/layout/mailing/MailToolBar.svelte +174 -174
  57. package/dist/layout/mailing/MailingContent.svelte +10 -10
  58. package/dist/layout/mailing/MailingHeader.svelte +55 -55
  59. package/dist/layout/mailing/MailingMessageCard.svelte +112 -112
  60. package/dist/layout/mailing/MailingMessageViewer.svelte +87 -87
  61. package/dist/layout/mailing/MailingModule.svelte +448 -448
  62. package/dist/styles/docs.css +615 -615
  63. package/dist/styles/tf-layout.css +185 -185
  64. package/dist/themes/ThemeProvider.svelte +20 -20
  65. package/dist/themes/themes.d.ts +3 -0
  66. package/dist/themes/themes.js +3 -0
  67. package/dist/types/index.d.ts +57 -1
  68. package/dist/typography/heading/Heading.svelte +35 -35
  69. package/dist/ui/accordion/Accordion.svelte +49 -49
  70. package/dist/ui/accordion/AccordionItem.svelte +173 -173
  71. package/dist/ui/alert/Alert.svelte +83 -83
  72. package/dist/ui/alertDialog/AlertDialog.svelte +40 -40
  73. package/dist/ui/avatar/Avatar.svelte +77 -77
  74. package/dist/ui/box/Box.svelte +28 -28
  75. package/dist/ui/breadcrumb/Breadcrumb.svelte +39 -39
  76. package/dist/ui/buttons/ActionButton.svelte +234 -234
  77. package/dist/ui/buttons/Button.svelte +102 -102
  78. package/dist/ui/buttons/GradientButton.svelte +59 -59
  79. package/dist/ui/datatable/Datatable.svelte +525 -525
  80. package/dist/ui/drawer/Drawer.svelte +300 -300
  81. package/dist/ui/dropdown/Dropdown.svelte +36 -36
  82. package/dist/ui/dropdown/DropdownDivider.svelte +11 -11
  83. package/dist/ui/dropdown/DropdownGroup.svelte +14 -14
  84. package/dist/ui/dropdown/DropdownHeader.svelte +14 -14
  85. package/dist/ui/dropdown/DropdownItem.svelte +52 -52
  86. package/dist/ui/footer/Footer.svelte +15 -15
  87. package/dist/ui/footer/FooterBrand.svelte +37 -37
  88. package/dist/ui/footer/FooterCopyright.svelte +45 -45
  89. package/dist/ui/footer/FooterIcon.svelte +22 -22
  90. package/dist/ui/footer/FooterLink.svelte +33 -33
  91. package/dist/ui/footer/FooterLinkGroup.svelte +13 -13
  92. package/dist/ui/icons/IconifyIcon.svelte +7 -7
  93. package/dist/ui/indicator/Indicator.svelte +42 -42
  94. package/dist/ui/modal/Modal.svelte +265 -265
  95. package/dist/ui/modal/theme.d.ts +26 -26
  96. package/dist/ui/modal/theme.js +25 -25
  97. package/dist/ui/notificationList/NotificationList.svelte +123 -123
  98. package/dist/ui/pageLoader/PageLoader.svelte +14 -14
  99. package/dist/ui/paginate/Paginate.svelte +96 -96
  100. package/dist/ui/speedDial/SpeedDial.svelte +77 -0
  101. package/dist/ui/speedDial/SpeedDial.svelte.d.ts +21 -0
  102. package/dist/ui/speedDial/SpeedDialButton.svelte +75 -0
  103. package/dist/ui/speedDial/SpeedDialButton.svelte.d.ts +20 -0
  104. package/dist/ui/speedDial/SpeedDialTrigger.svelte +79 -0
  105. package/dist/ui/speedDial/SpeedDialTrigger.svelte.d.ts +18 -0
  106. package/dist/ui/speedDial/index.d.ts +4 -0
  107. package/dist/ui/speedDial/index.js +4 -0
  108. package/dist/ui/speedDial/theme.d.ts +75 -0
  109. package/dist/ui/speedDial/theme.js +35 -0
  110. package/dist/ui/tab/Tab.svelte +67 -67
  111. package/dist/ui/table/Table.svelte +396 -396
  112. package/dist/ui/tableLoader/TableLoader.svelte +24 -24
  113. package/dist/ui/toast/Toast.svelte +337 -337
  114. package/dist/ui/toast/Toast.svelte.d.ts +10 -10
  115. package/dist/ui/toast/index.d.ts +1 -2
  116. package/dist/ui/toast/index.js +3 -1
  117. package/dist/ui/toolbar/Toolbar.svelte +59 -59
  118. package/dist/ui/toolbar/ToolbarButton.svelte +56 -56
  119. package/dist/ui/toolbar/ToolbarGroup.svelte +43 -43
  120. package/dist/ui/tooltip/Tooltip.svelte +51 -51
  121. package/dist/utils/Popper.svelte +257 -257
  122. package/dist/utils/closeButton/CloseButton.svelte +88 -88
  123. package/dist/utils/index.d.ts +3 -2
  124. package/dist/utils/index.js +13 -3
  125. package/dist/utils/singleSelection.svelte.js +48 -48
  126. package/dist/youtube/index.svelte +12 -12
  127. package/package.json +2 -1
@@ -1,207 +1,207 @@
1
- <script lang="ts">
2
- import { fade, fly } from 'svelte/transition';
3
- import type {
4
- ChatInputMessage,
5
- ChatInputProps,
6
- IMentionableItem,
7
- PreviewPageSrc
8
- } from './types.js';
9
- import { IconifyIcon } from '../../ui/icons/index.js';
10
- import RichText from './RichText.svelte';
11
- import PreviewPage from './PreviewPage.svelte';
12
- import { clickOutsideAction } from '../../index.js';
13
-
14
- let {
15
- hideLoad = true,
16
- clearMessage = false,
17
- slashCommands = [],
18
- mentionableItems = [],
19
- onMessage,
20
- previewPageTitle = 'Preview Attachment',
21
- onSlash,
22
- class: className = ''
23
- }: ChatInputProps = $props();
24
-
25
- let message = $state<ChatInputMessage>({
26
- content: '',
27
- contentType: 'text',
28
- files: [],
29
- mentions: []
30
- });
31
-
32
- let mentions = $state<IMentionableItem[]>([]);
33
-
34
- let imageInput = $state<PreviewPageSrc>({
35
- name: '',
36
- content: '',
37
- file: ''
38
- });
39
- let filesToSend = $state<any[]>([]);
40
- let showImage = $state(false);
41
- let open = $state(false);
42
- let showFiles = $state(false);
43
- let openDropDown = $state(false);
44
-
45
- function loadFile(e: any) {
46
- let image = e.target.files[0];
47
- let reader = new FileReader();
48
- reader.readAsDataURL(image);
49
-
50
- reader.onload = (e: any) => {
51
- const x = { name: image.name, content: e.target.result, file: image };
52
- imageInput = x;
53
- };
54
- showImage = true;
55
- open = false;
56
- }
57
-
58
- function onEmoji(event: any) {
59
- message.content += event.detail;
60
- }
61
-
62
- function sendImage( detail : PreviewPageSrc) {
63
- const { file } = detail;
64
- filesToSend = [file, ...filesToSend];
65
- imageInput = {
66
- name: '',
67
- content: '',
68
- file: ''
69
- };
70
- showImage = false;
71
- }
72
-
73
- function sendMessage() {
74
- if (message.content.length > 0) {
75
- message = { ...message, files: filesToSend, mentions };
76
- onMessage?.(message);
77
- message = { content: '', contentType: 'text', files: [], mentions: [] };
78
- filesToSend = [];
79
- return;
80
- }
81
- }
82
-
83
- function handleMention(event: any) {
84
- const { detail } = event;
85
- if (mentions.some((mention) => mention.id === detail.id)) {
86
- mentions = mentions.filter((mention) => mention.id !== detail.id);
87
- } else {
88
- mentions = [...mentions, detail];
89
- }
90
-
91
- // console.log({ mentions, message: message.content });
92
- }
93
- </script>
94
-
95
- <div class="flex flex-col gap-2">
96
- {#if showFiles}
97
- {#each filesToSend as file, index}
98
- <ul class="flex w-full flex-col divide-y py-2" transition:fade>
99
- <li class="w-full">
100
- <div class="flex items-center justify-between">
101
- <p class="w-96 truncate">{index + 1}. {file?.name}</p>
102
- <button
103
- class="grid place-content-center"
104
- onclick={() => {
105
- filesToSend = filesToSend.filter((_, i) => i !== index);
106
- }}
107
- >
108
- <IconifyIcon
109
- icon="ic:baseline-delete"
110
- class="text-red-500"
111
- style="font-size: 20px;"
112
- />
113
- </button>
114
- </div>
115
- </li>
116
- </ul>
117
- {/each}
118
- {/if}
119
- <RichText
120
- bind:value={message.content}
121
- loading={!hideLoad}
122
- {slashCommands}
123
- {mentionableItems}
124
- onMention={handleMention}
125
- {onSlash}
126
- class={className}
127
- />
128
-
129
- <div class="mx-4 flex items-center justify-between">
130
- <div
131
- class="flex items-center gap-3"
132
- use:clickOutsideAction
133
- onclickoutside={() => (openDropDown = false)}
134
- >
135
- <!-- <button class=" relative text-slate-600 hover:text-indigo-600 pb-2">
136
- <EmojiSelector on:emoji={onEmoji} />
137
- </button> -->
138
- <button onclick={() => (open = !open)} class="text-slate-600 hover:text-indigo-600"
139
- ><IconifyIcon icon="mdi:clippy" style="font-size: 20px;" /></button
140
- >
141
- </div>
142
- {#if filesToSend.length}
143
- <div class="flex-grow pl-3" in:fade>
144
- <button class="text-purple-700" onclick={() => (showFiles = !showFiles)}>
145
- {filesToSend.length}
146
- Attachments
147
- </button>
148
- </div>
149
- {/if}
150
- <button
151
- aria-label="send message"
152
- onclick={sendMessage}
153
- class="text-slate-600 hover:text-indigo-600"
154
- >
155
- <IconifyIcon icon="majesticons:send" style="font-size: 20px;" />
156
- </button>
157
- </div>
158
- </div>
159
-
160
- {#if open}
161
- <div class="relative">
162
- <ul
163
- use:clickOutsideAction
164
- onclickoutside={() => (open = false)}
165
- transition:fly={{ y: 50 }}
166
- class="absolute bottom-6 left-8"
167
- >
168
- <li
169
- class="h-10 w-10 cursor-pointer rounded-full bg-gradient-to-b from-blue-500 to-blue-300 p-2 text-white"
170
- >
171
- <label for="doc"
172
- ><IconifyIcon
173
- icon="bxs:file"
174
- class="grid cursor-pointer place-content-center"
175
- style="font-size: 24px;"
176
- />
177
- </label>
178
- <input type="file" id="doc" class="hidden" accept="application/pdf" onchange={loadFile} />
179
- </li>
180
- <li
181
- class="my-2 h-10 w-10 cursor-pointer rounded-full bg-gradient-to-b from-purple-500 to-pink-500 p-2 text-white"
182
- >
183
- <label for="photo"
184
- ><IconifyIcon
185
- icon="icon-park-solid:pic"
186
- class="grid cursor-pointer place-content-center"
187
- style="font-size: 24px;"
188
- />
189
- </label>
190
- <input
191
- type="file"
192
- id="photo"
193
- class="hidden"
194
- accept="image/png, image/jpg"
195
- onchange={loadFile}
196
- />
197
- </li>
198
- </ul>
199
- </div>
200
- {/if}
201
-
202
- <PreviewPage
203
- title={previewPageTitle}
204
- src={imageInput}
205
- bind:open={showImage}
206
- onGetImage={sendImage}
207
- />
1
+ <script lang="ts">
2
+ import { fade, fly } from 'svelte/transition';
3
+ import type {
4
+ ChatInputMessage,
5
+ ChatInputProps,
6
+ IMentionableItem,
7
+ PreviewPageSrc
8
+ } from './types.js';
9
+ import { IconifyIcon } from '../../ui/icons/index.js';
10
+ import RichText from './RichText.svelte';
11
+ import PreviewPage from './PreviewPage.svelte';
12
+ import { clickOutsideAction } from '../../index.js';
13
+
14
+ let {
15
+ hideLoad = true,
16
+ clearMessage = false,
17
+ slashCommands = [],
18
+ mentionableItems = [],
19
+ onMessage,
20
+ previewPageTitle = 'Preview Attachment',
21
+ onSlash,
22
+ class: className = ''
23
+ }: ChatInputProps = $props();
24
+
25
+ let message = $state<ChatInputMessage>({
26
+ content: '',
27
+ contentType: 'text',
28
+ files: [],
29
+ mentions: []
30
+ });
31
+
32
+ let mentions = $state<IMentionableItem[]>([]);
33
+
34
+ let imageInput = $state<PreviewPageSrc>({
35
+ name: '',
36
+ content: '',
37
+ file: ''
38
+ });
39
+ let filesToSend = $state<any[]>([]);
40
+ let showImage = $state(false);
41
+ let open = $state(false);
42
+ let showFiles = $state(false);
43
+ let openDropDown = $state(false);
44
+
45
+ function loadFile(e: any) {
46
+ let image = e.target.files[0];
47
+ let reader = new FileReader();
48
+ reader.readAsDataURL(image);
49
+
50
+ reader.onload = (e: any) => {
51
+ const x = { name: image.name, content: e.target.result, file: image };
52
+ imageInput = x;
53
+ };
54
+ showImage = true;
55
+ open = false;
56
+ }
57
+
58
+ function onEmoji(event: any) {
59
+ message.content += event.detail;
60
+ }
61
+
62
+ function sendImage( detail : PreviewPageSrc) {
63
+ const { file } = detail;
64
+ filesToSend = [file, ...filesToSend];
65
+ imageInput = {
66
+ name: '',
67
+ content: '',
68
+ file: ''
69
+ };
70
+ showImage = false;
71
+ }
72
+
73
+ function sendMessage() {
74
+ if (message.content.length > 0) {
75
+ message = { ...message, files: filesToSend, mentions };
76
+ onMessage?.(message);
77
+ message = { content: '', contentType: 'text', files: [], mentions: [] };
78
+ filesToSend = [];
79
+ return;
80
+ }
81
+ }
82
+
83
+ function handleMention(event: any) {
84
+ const { detail } = event;
85
+ if (mentions.some((mention) => mention.id === detail.id)) {
86
+ mentions = mentions.filter((mention) => mention.id !== detail.id);
87
+ } else {
88
+ mentions = [...mentions, detail];
89
+ }
90
+
91
+ // console.log({ mentions, message: message.content });
92
+ }
93
+ </script>
94
+
95
+ <div class="flex flex-col gap-2">
96
+ {#if showFiles}
97
+ {#each filesToSend as file, index}
98
+ <ul class="flex w-full flex-col divide-y py-2" transition:fade>
99
+ <li class="w-full">
100
+ <div class="flex items-center justify-between">
101
+ <p class="w-96 truncate">{index + 1}. {file?.name}</p>
102
+ <button
103
+ class="grid place-content-center"
104
+ onclick={() => {
105
+ filesToSend = filesToSend.filter((_, i) => i !== index);
106
+ }}
107
+ >
108
+ <IconifyIcon
109
+ icon="ic:baseline-delete"
110
+ class="text-red-500"
111
+ style="font-size: 20px;"
112
+ />
113
+ </button>
114
+ </div>
115
+ </li>
116
+ </ul>
117
+ {/each}
118
+ {/if}
119
+ <RichText
120
+ bind:value={message.content}
121
+ loading={!hideLoad}
122
+ {slashCommands}
123
+ {mentionableItems}
124
+ onMention={handleMention}
125
+ {onSlash}
126
+ class={className}
127
+ />
128
+
129
+ <div class="mx-4 flex items-center justify-between">
130
+ <div
131
+ class="flex items-center gap-3"
132
+ use:clickOutsideAction
133
+ onclickoutside={() => (openDropDown = false)}
134
+ >
135
+ <!-- <button class=" relative text-slate-600 hover:text-indigo-600 pb-2">
136
+ <EmojiSelector on:emoji={onEmoji} />
137
+ </button> -->
138
+ <button onclick={() => (open = !open)} class="text-slate-600 hover:text-indigo-600"
139
+ ><IconifyIcon icon="mdi:clippy" style="font-size: 20px;" /></button
140
+ >
141
+ </div>
142
+ {#if filesToSend.length}
143
+ <div class="flex-grow pl-3" in:fade>
144
+ <button class="text-purple-700" onclick={() => (showFiles = !showFiles)}>
145
+ {filesToSend.length}
146
+ Attachments
147
+ </button>
148
+ </div>
149
+ {/if}
150
+ <button
151
+ aria-label="send message"
152
+ onclick={sendMessage}
153
+ class="text-slate-600 hover:text-indigo-600"
154
+ >
155
+ <IconifyIcon icon="majesticons:send" style="font-size: 20px;" />
156
+ </button>
157
+ </div>
158
+ </div>
159
+
160
+ {#if open}
161
+ <div class="relative">
162
+ <ul
163
+ use:clickOutsideAction
164
+ onclickoutside={() => (open = false)}
165
+ transition:fly={{ y: 50 }}
166
+ class="absolute bottom-6 left-8"
167
+ >
168
+ <li
169
+ class="h-10 w-10 cursor-pointer rounded-full bg-gradient-to-b from-blue-500 to-blue-300 p-2 text-white"
170
+ >
171
+ <label for="doc"
172
+ ><IconifyIcon
173
+ icon="bxs:file"
174
+ class="grid cursor-pointer place-content-center"
175
+ style="font-size: 24px;"
176
+ />
177
+ </label>
178
+ <input type="file" id="doc" class="hidden" accept="application/pdf" onchange={loadFile} />
179
+ </li>
180
+ <li
181
+ class="my-2 h-10 w-10 cursor-pointer rounded-full bg-gradient-to-b from-purple-500 to-pink-500 p-2 text-white"
182
+ >
183
+ <label for="photo"
184
+ ><IconifyIcon
185
+ icon="icon-park-solid:pic"
186
+ class="grid cursor-pointer place-content-center"
187
+ style="font-size: 24px;"
188
+ />
189
+ </label>
190
+ <input
191
+ type="file"
192
+ id="photo"
193
+ class="hidden"
194
+ accept="image/png, image/jpg"
195
+ onchange={loadFile}
196
+ />
197
+ </li>
198
+ </ul>
199
+ </div>
200
+ {/if}
201
+
202
+ <PreviewPage
203
+ title={previewPageTitle}
204
+ src={imageInput}
205
+ bind:open={showImage}
206
+ onGetImage={sendImage}
207
+ />