@streamscloud/kit 0.2.0 → 0.2.2

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/dist/styles/_input.scss +98 -0
  2. package/dist/styles/_mixins.scss +2 -2
  3. package/dist/styles/reset.css +1 -1
  4. package/dist/ui/color-picker/cmp.color-picker.svelte +3 -12
  5. package/dist/ui/color-picker/cmp.color-picker.svelte.d.ts +3 -9
  6. package/dist/ui/dialog/cmp.dialog.svelte +1 -1
  7. package/dist/ui/dropdown/cmp.dropdown-item.svelte +93 -0
  8. package/dist/ui/dropdown/cmp.dropdown-item.svelte.d.ts +32 -0
  9. package/dist/ui/dropdown/cmp.dropdown-panel.svelte +29 -0
  10. package/dist/ui/dropdown/cmp.dropdown-panel.svelte.d.ts +18 -0
  11. package/dist/ui/dropdown/cmp.dropdown.svelte +72 -7
  12. package/dist/ui/dropdown/cmp.dropdown.svelte.d.ts +3 -1
  13. package/dist/ui/dropdown/index.d.ts +2 -0
  14. package/dist/ui/dropdown/index.js +2 -0
  15. package/dist/ui/dynamic-component/cmp.dynamic-component.svelte +0 -5
  16. package/dist/ui/dynamic-component/cmp.dynamic-component.svelte.d.ts +2 -8
  17. package/dist/ui/emoji-picker/cmp.emoji-panel.svelte +186 -0
  18. package/dist/ui/emoji-picker/cmp.emoji-panel.svelte.d.ts +21 -0
  19. package/dist/ui/emoji-picker/cmp.emoji-picker.svelte +35 -0
  20. package/dist/ui/emoji-picker/cmp.emoji-picker.svelte.d.ts +15 -0
  21. package/dist/ui/emoji-picker/emoji-list.d.ts +2 -0
  22. package/dist/ui/emoji-picker/emoji-list.js +1754 -0
  23. package/dist/ui/emoji-picker/emoji-picker-localization.d.ts +5 -0
  24. package/dist/ui/emoji-picker/emoji-picker-localization.js +40 -0
  25. package/dist/ui/emoji-picker/index.d.ts +2 -0
  26. package/dist/ui/emoji-picker/index.js +2 -0
  27. package/dist/ui/emoji-picker/types.d.ts +8 -0
  28. package/dist/ui/emoji-picker/types.js +1 -0
  29. package/dist/ui/form-group/cmp.form-group-label.svelte.d.ts +1 -0
  30. package/dist/ui/form-group/cmp.form-group.svelte.d.ts +1 -0
  31. package/dist/ui/icon-text/cmp.icon-text.svelte +0 -9
  32. package/dist/ui/icon-text/cmp.icon-text.svelte.d.ts +4 -9
  33. package/dist/ui/inputs/index.d.ts +6 -0
  34. package/dist/ui/inputs/index.js +5 -0
  35. package/dist/ui/inputs/input/cmp.input-validatable.svelte +57 -0
  36. package/dist/ui/inputs/input/cmp.input-validatable.svelte.d.ts +56 -0
  37. package/dist/ui/inputs/input/cmp.input.svelte +235 -0
  38. package/dist/ui/inputs/input/cmp.input.svelte.d.ts +60 -0
  39. package/dist/ui/inputs/input/index.d.ts +2 -0
  40. package/dist/ui/inputs/input/index.js +2 -0
  41. package/dist/ui/inputs/input-emoji-picker/cmp.input-emoji-picker.svelte +44 -0
  42. package/dist/ui/inputs/input-emoji-picker/cmp.input-emoji-picker.svelte.d.ts +9 -0
  43. package/dist/ui/inputs/input-emoji-picker/index.d.ts +2 -0
  44. package/dist/ui/inputs/input-emoji-picker/index.js +2 -0
  45. package/dist/ui/inputs/input-emoji-picker/input-emoji-picker-container.d.ts +2 -0
  46. package/dist/ui/inputs/input-emoji-picker/input-emoji-picker-container.js +16 -0
  47. package/dist/ui/inputs/numeral-input/cmp.numeral-input-validatable.svelte +55 -0
  48. package/dist/ui/inputs/numeral-input/cmp.numeral-input-validatable.svelte.d.ts +62 -0
  49. package/dist/ui/inputs/numeral-input/cmp.numeral-input.svelte +248 -0
  50. package/dist/ui/inputs/numeral-input/cmp.numeral-input.svelte.d.ts +66 -0
  51. package/dist/ui/inputs/numeral-input/index.d.ts +2 -0
  52. package/dist/ui/inputs/numeral-input/index.js +2 -0
  53. package/dist/ui/inputs/pin-input/cmp.pin-input.svelte +58 -0
  54. package/dist/ui/inputs/pin-input/cmp.pin-input.svelte.d.ts +23 -0
  55. package/dist/ui/inputs/pin-input/index.d.ts +1 -0
  56. package/dist/ui/inputs/pin-input/index.js +1 -0
  57. package/dist/ui/inputs/pin-input/pin-input-generator.d.ts +27 -0
  58. package/dist/ui/inputs/pin-input/pin-input-generator.js +114 -0
  59. package/dist/ui/inputs/rich-text-input/cmp.rich-text-input.svelte +55 -0
  60. package/dist/ui/inputs/rich-text-input/cmp.rich-text-input.svelte.d.ts +43 -0
  61. package/dist/ui/inputs/rich-text-input/index.d.ts +2 -0
  62. package/dist/ui/inputs/rich-text-input/index.js +1 -0
  63. package/dist/ui/inputs/rich-text-input/rich-text-input-localization.d.ts +12 -0
  64. package/dist/ui/inputs/rich-text-input/rich-text-input-localization.js +48 -0
  65. package/dist/ui/inputs/rich-text-input/tinymce-input.svelte +250 -0
  66. package/dist/ui/inputs/rich-text-input/tinymce-input.svelte.d.ts +25 -0
  67. package/dist/ui/inputs/rich-text-input/tinymce.declarations.d.ts +7 -0
  68. package/dist/ui/inputs/rich-text-input/types.d.ts +4 -0
  69. package/dist/ui/inputs/rich-text-input/types.js +1 -0
  70. package/dist/ui/inputs/rich-text-input/validated-link-button.d.ts +3 -0
  71. package/dist/ui/inputs/rich-text-input/validated-link-button.js +78 -0
  72. package/dist/ui/inputs/textarea/cmp.textarea-validatable.svelte +35 -0
  73. package/dist/ui/inputs/textarea/cmp.textarea-validatable.svelte.d.ts +53 -0
  74. package/dist/ui/inputs/textarea/cmp.textarea.svelte +247 -0
  75. package/dist/ui/inputs/textarea/cmp.textarea.svelte.d.ts +57 -0
  76. package/dist/ui/inputs/textarea/index.d.ts +2 -0
  77. package/dist/ui/inputs/textarea/index.js +2 -0
  78. package/dist/ui/media-viewer-dialog/cmp.media-viewer-dialog.svelte.d.ts +2 -0
  79. package/dist/ui/media-viewer-dialog/index.d.ts +2 -1
  80. package/dist/ui/media-viewer-dialog/index.js +4 -2
  81. package/dist/ui/selects/_multiselect.scss +282 -0
  82. package/dist/ui/selects/_singleselect.scss +175 -0
  83. package/dist/ui/selects/cmp.multiselect.svelte +530 -0
  84. package/dist/ui/selects/cmp.multiselect.svelte.d.ts +85 -0
  85. package/dist/ui/selects/cmp.search-multiselect.svelte +532 -0
  86. package/dist/ui/selects/cmp.search-multiselect.svelte.d.ts +67 -0
  87. package/dist/ui/selects/cmp.singleselect.svelte +381 -0
  88. package/dist/ui/selects/cmp.singleselect.svelte.d.ts +78 -0
  89. package/dist/ui/selects/index.d.ts +5 -0
  90. package/dist/ui/selects/index.js +4 -0
  91. package/dist/ui/selects/select-localization.d.ts +6 -0
  92. package/dist/ui/selects/select-localization.js +27 -0
  93. package/dist/ui/selects/types.d.ts +29 -0
  94. package/dist/ui/selects/types.js +1 -0
  95. package/dist/ui/time-ago/cmp.time-ago.svelte +0 -6
  96. package/dist/ui/time-ago/cmp.time-ago.svelte.d.ts +2 -6
  97. package/dist/ui/validatable/_validatable.scss +34 -0
  98. package/dist/ui/validatable/cmp.validatable.svelte +57 -0
  99. package/dist/ui/validatable/cmp.validatable.svelte.d.ts +49 -0
  100. package/dist/ui/validatable/cmp.validation-error.svelte +52 -0
  101. package/dist/ui/validatable/cmp.validation-error.svelte.d.ts +42 -0
  102. package/dist/ui/validatable/index.d.ts +2 -0
  103. package/dist/ui/validatable/index.js +2 -0
  104. package/package.json +31 -5
  105. package/dist/ui/color-picker/cmp.input-stub.svelte +0 -98
  106. package/dist/ui/color-picker/cmp.input-stub.svelte.d.ts +0 -40
@@ -0,0 +1,186 @@
1
+ <script lang="ts">import { ArrayHelper } from '../../core/utils';
2
+ import { Icon } from '../icon';
3
+ import { emojiCategories } from './emoji-list';
4
+ import { EmojiPickerLocalization } from './emoji-picker-localization';
5
+ import IconDismiss from '@fluentui/svg-icons/icons/dismiss_20_regular.svg?raw';
6
+ let { on } = $props();
7
+ let searchValue = $state('');
8
+ const loc = new EmojiPickerLocalization();
9
+ const filteredEmojiCategories = $derived.by(() => {
10
+ if (!searchValue) {
11
+ return emojiCategories;
12
+ }
13
+ const searchTerms = searchValue.replace(/\s\s+/g, ' ').trim().toLowerCase().split(' ');
14
+ const searchMap = [];
15
+ emojiCategories.forEach((category) => {
16
+ category.emojis.forEach((emoji) => {
17
+ let score = 0;
18
+ searchTerms.forEach((term) => {
19
+ if (emoji.text.toLowerCase().includes(term)) {
20
+ score++;
21
+ }
22
+ });
23
+ if (score > 0) {
24
+ searchMap.push({ emoji, score });
25
+ }
26
+ });
27
+ });
28
+ const sorted = ArrayHelper.sortArrayDescending(searchMap, (x) => x.score);
29
+ return [
30
+ {
31
+ name: 'search',
32
+ emojis: sorted.map((s) => s.emoji)
33
+ }
34
+ ];
35
+ });
36
+ const select = (emoji) => {
37
+ on.select(emoji.unicode);
38
+ };
39
+ const getCategoryLabel = (name) => {
40
+ return loc.categories[name] ?? name;
41
+ };
42
+ const clearSearch = () => {
43
+ searchValue = '';
44
+ };
45
+ </script>
46
+
47
+ <div class="emoji-panel">
48
+ <div class="emoji-panel__search">
49
+ <input
50
+ class="emoji-panel__search-input"
51
+ type="text"
52
+ placeholder={loc.searchPlaceholder}
53
+ value={searchValue}
54
+ oninput={(e) => (searchValue = e.currentTarget.value)} />
55
+ {#if searchValue}
56
+ <button type="button" class="emoji-panel__search-clear" onclick={clearSearch}>
57
+ <Icon src={IconDismiss} />
58
+ </button>
59
+ {/if}
60
+ </div>
61
+ <div class="emoji-panel__categories">
62
+ {#each filteredEmojiCategories as category (category.name)}
63
+ <div class="emoji-panel__category-title">{getCategoryLabel(category.name)}</div>
64
+ <div class="emoji-panel__grid">
65
+ {#each category.emojis as emoji (emoji.text)}
66
+ <span class="emoji-panel__emoji" onclick={() => select(emoji)} onkeydown={() => ({})} role="none" title={emoji.text}>{emoji.unicode}</span>
67
+ {/each}
68
+ {#if !category.emojis.length}
69
+ <span class="emoji-panel__not-found">{loc.notFound}</span>
70
+ {/if}
71
+ </div>
72
+ {/each}
73
+ </div>
74
+ </div>
75
+
76
+ <!--
77
+ @component
78
+ Inline emoji panel with search and categorized emoji grid. Used by EmojiPicker (dropdown wrapper)
79
+ and can be embedded directly by input components.
80
+
81
+ ### CSS Custom Properties
82
+ | Property | Description | Default |
83
+ |---|---|---|
84
+ | `--sc-kit--emoji-panel--background` | Panel background | light-dark white/gray-800 |
85
+ | `--sc-kit--emoji-panel--border-color` | Border color | light-dark neutral-300/neutral-600 |
86
+ | `--sc-kit--emoji-panel--label-color` | Category title and info text color | light-dark neutral-500/neutral-400 |
87
+ | `--sc-kit--emoji-panel--placeholder-color` | Placeholder and clear icon color | light-dark neutral-400/neutral-500 |
88
+ | `--sc-kit--emoji-panel--width` | Panel width | `100%` |
89
+ -->
90
+
91
+ <style>.emoji-panel {
92
+ --_emoji-panel--background: var(--sc-kit--emoji-panel--background, light-dark(#ffffff, #2e2e2e));
93
+ --_emoji-panel--border-color: var(--sc-kit--emoji-panel--border-color, light-dark(#d1d5db, #4b5563));
94
+ --_emoji-panel--label-color: var(--sc-kit--emoji-panel--label-color, light-dark(#6b7280, #9ca3af));
95
+ --_emoji-panel--placeholder-color: var(--sc-kit--emoji-panel--placeholder-color, light-dark(#9ca3af, #6b7280));
96
+ --_emoji-panel--width: var(--sc-kit--emoji-panel--width, 100%);
97
+ width: var(--_emoji-panel--width);
98
+ background-color: var(--_emoji-panel--background);
99
+ border: 1px solid var(--_emoji-panel--border-color);
100
+ border-radius: 0.25rem;
101
+ z-index: 999;
102
+ box-sizing: border-box;
103
+ display: flex;
104
+ flex-direction: column;
105
+ }
106
+ .emoji-panel__search {
107
+ padding: 0.375rem;
108
+ position: relative;
109
+ display: flex;
110
+ align-items: center;
111
+ }
112
+ .emoji-panel__search-input {
113
+ width: 100%;
114
+ height: 1.75rem;
115
+ font-size: 0.75rem;
116
+ padding: 0 0.625rem;
117
+ border: 1px solid var(--_emoji-panel--border-color);
118
+ border-radius: 1em;
119
+ background: transparent;
120
+ outline: none;
121
+ }
122
+ .emoji-panel__search-input::placeholder {
123
+ color: var(--_emoji-panel--placeholder-color);
124
+ }
125
+ .emoji-panel__search-clear {
126
+ position: absolute;
127
+ right: 0.625rem;
128
+ display: flex;
129
+ align-items: center;
130
+ cursor: pointer;
131
+ --sc-kit--icon--size: 0.875rem;
132
+ --sc-kit--icon--color: var(--_emoji-panel--placeholder-color);
133
+ }
134
+ .emoji-panel__categories {
135
+ max-height: 15em;
136
+ padding: 0 0.5rem;
137
+ overflow-y: auto;
138
+ --_cross-browser-scrollbar--thumb-color: var(--scrollbar--thumb-color, light-dark(#d1d5db, #4b5563));
139
+ --_cross-browser-scrollbar--track-color: var(--scrollbar--track-color, transparent);
140
+ }
141
+ .emoji-panel__categories::-webkit-scrollbar {
142
+ width: 6px;
143
+ height: 6px;
144
+ }
145
+ .emoji-panel__categories::-webkit-scrollbar-track {
146
+ background: var(--_cross-browser-scrollbar--track-color);
147
+ border-radius: 100vw;
148
+ }
149
+ .emoji-panel__categories::-webkit-scrollbar-thumb {
150
+ background: var(--_cross-browser-scrollbar--thumb-color);
151
+ border-radius: 100vw;
152
+ }
153
+ @supports (scrollbar-color: transparent transparent) {
154
+ .emoji-panel__categories {
155
+ scrollbar-color: var(--_cross-browser-scrollbar--thumb-color) var(--_cross-browser-scrollbar--track-color);
156
+ scrollbar-width: thin;
157
+ }
158
+ }
159
+ .emoji-panel__category-title {
160
+ font-size: 0.625rem;
161
+ font-weight: 400;
162
+ color: var(--_emoji-panel--label-color);
163
+ position: sticky;
164
+ top: 0;
165
+ background-color: var(--_emoji-panel--background);
166
+ padding: 0.5rem 0;
167
+ z-index: 1;
168
+ }
169
+ .emoji-panel__grid {
170
+ display: grid;
171
+ grid-template-columns: repeat(auto-fill, minmax(1.7em, 1fr));
172
+ grid-auto-rows: minmax(1.7em, auto);
173
+ }
174
+ .emoji-panel__not-found {
175
+ grid-column: 1/-1;
176
+ line-height: 1.7em;
177
+ font-size: 0.5rem;
178
+ text-align: center;
179
+ font-style: italic;
180
+ color: var(--_emoji-panel--label-color);
181
+ }
182
+ .emoji-panel__emoji {
183
+ font-size: 1.25em;
184
+ cursor: pointer;
185
+ text-align: center;
186
+ }</style>
@@ -0,0 +1,21 @@
1
+ type Props = {
2
+ on: {
3
+ select: (value: string) => void;
4
+ };
5
+ };
6
+ /**
7
+ * Inline emoji panel with search and categorized emoji grid. Used by EmojiPicker (dropdown wrapper)
8
+ * and can be embedded directly by input components.
9
+ *
10
+ * ### CSS Custom Properties
11
+ * | Property | Description | Default |
12
+ * |---|---|---|
13
+ * | `--sc-kit--emoji-panel--background` | Panel background | light-dark white/gray-800 |
14
+ * | `--sc-kit--emoji-panel--border-color` | Border color | light-dark neutral-300/neutral-600 |
15
+ * | `--sc-kit--emoji-panel--label-color` | Category title and info text color | light-dark neutral-500/neutral-400 |
16
+ * | `--sc-kit--emoji-panel--placeholder-color` | Placeholder and clear icon color | light-dark neutral-400/neutral-500 |
17
+ * | `--sc-kit--emoji-panel--width` | Panel width | `100%` |
18
+ */
19
+ declare const Cmp: import("svelte").Component<Props, {}, "">;
20
+ type Cmp = ReturnType<typeof Cmp>;
21
+ export default Cmp;
@@ -0,0 +1,35 @@
1
+ <script lang="ts">import { Dropdown } from '../dropdown';
2
+ import { Icon } from '../icon';
3
+ import { default as EmojiPanel } from './cmp.emoji-panel.svelte';
4
+ import IconEmoji from '@fluentui/svg-icons/icons/emoji_20_regular.svg?raw';
5
+ let { dropdownPosition = 'bottom-end', on, children } = $props();
6
+ </script>
7
+
8
+ <Dropdown position={dropdownPosition} keepDropdownOpen={true}>
9
+ {#snippet trigger()}
10
+ <div class="emoji-picker__trigger">
11
+ {#if children}
12
+ {@render children()}
13
+ {:else}
14
+ <Icon src={IconEmoji} />
15
+ {/if}
16
+ </div>
17
+ {/snippet}
18
+ <EmojiPanel on={{ select: on.select }} />
19
+ </Dropdown>
20
+
21
+ <!--
22
+ @component
23
+ Emoji picker dropdown with trigger icon. Wraps EmojiPanel in a Dropdown for positioning.
24
+ -->
25
+
26
+ <style>.emoji-picker__trigger {
27
+ display: flex;
28
+ align-items: center;
29
+ cursor: pointer;
30
+ opacity: 0;
31
+ transition: opacity 150ms cubic-bezier(0.4, 0, 0.2, 1);
32
+ }
33
+ :global(:hover) > .emoji-picker__trigger {
34
+ opacity: 1;
35
+ }</style>
@@ -0,0 +1,15 @@
1
+ import { type DropdownPosition } from '../dropdown';
2
+ import type { Snippet } from 'svelte';
3
+ type Props = {
4
+ /** Popper.js dropdown placement @default 'bottom-end' */
5
+ dropdownPosition?: DropdownPosition;
6
+ on: {
7
+ select: (value: string) => void;
8
+ };
9
+ /** Custom trigger content (defaults to emoji icon) */
10
+ children?: Snippet;
11
+ };
12
+ /** Emoji picker dropdown with trigger icon. Wraps EmojiPanel in a Dropdown for positioning. */
13
+ declare const Cmp: import("svelte").Component<Props, {}, "">;
14
+ type Cmp = ReturnType<typeof Cmp>;
15
+ export default Cmp;
@@ -0,0 +1,2 @@
1
+ import type { EmojiCategory } from './types';
2
+ export declare const emojiCategories: EmojiCategory[];