firstly 0.0.13 → 0.0.14

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 (104) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/esm/ROUTES.d.ts +2 -0
  3. package/esm/ROUTES.js +1 -0
  4. package/esm/api/index.d.ts +8 -0
  5. package/esm/auth/AuthController.d.ts +12 -23
  6. package/esm/auth/AuthController.js +12 -31
  7. package/esm/auth/server/AuthController.server.d.ts +11 -11
  8. package/esm/auth/server/AuthController.server.js +83 -18
  9. package/esm/auth/server/helperFirstly.d.ts +1 -1
  10. package/esm/auth/server/helperFirstly.js +1 -0
  11. package/esm/auth/server/module.d.ts +3 -6
  12. package/esm/auth/server/providers/github.d.ts +2 -1
  13. package/esm/auth/server/providers/github.js +1 -1
  14. package/esm/auth/static/assets/Page-B0XXxe0N.d.ts +6 -0
  15. package/esm/auth/static/assets/Page-B0XXxe0N.js +1 -0
  16. package/esm/auth/static/assets/Page-DdKMiUZn.d.ts +6 -0
  17. package/esm/auth/static/assets/Page-DdKMiUZn.js +20 -0
  18. package/esm/auth/static/assets/Page-UV_hqY7I.d.ts +6 -0
  19. package/esm/auth/static/assets/Page-UV_hqY7I.js +1 -0
  20. package/esm/auth/static/assets/Page-mK42zGEw.css +1 -0
  21. package/esm/auth/static/assets/index-C9jzxOBu.d.ts +151 -0
  22. package/esm/auth/static/assets/index-C9jzxOBu.js +42 -0
  23. package/esm/auth/static/index.html +2 -2
  24. package/esm/auth/types.d.ts +26 -3
  25. package/esm/bin/cmd.js +339 -139
  26. package/esm/feedback/FeedbackController.js +57 -51
  27. package/esm/feedback/server/index.d.ts +6 -15
  28. package/esm/feedback/server/index.js +4 -5
  29. package/esm/feedback/types.d.ts +14 -0
  30. package/esm/feedback/types.js +4 -0
  31. package/esm/feedback/ui/DialogIssue.svelte +78 -62
  32. package/esm/feedback/ui/DialogIssue.svelte.d.ts +20 -18
  33. package/esm/feedback/ui/DialogIssues.svelte +37 -28
  34. package/esm/feedback/ui/DialogIssues.svelte.d.ts +20 -18
  35. package/esm/feedback/ui/DialogMilestones.svelte +18 -12
  36. package/esm/feedback/ui/DialogMilestones.svelte.d.ts +18 -16
  37. package/esm/feedback/ui/Feedback.svelte +11 -9
  38. package/esm/feedback/ui/Feedback.svelte.d.ts +16 -14
  39. package/esm/mail/server/index.d.ts +9 -2
  40. package/esm/mail/server/index.js +3 -1
  41. package/esm/mail/templates/DefaultMail.svelte +64 -44
  42. package/esm/mail/templates/DefaultMail.svelte.d.ts +28 -26
  43. package/esm/server/index.d.ts +0 -0
  44. package/esm/server/index.js +1 -0
  45. package/esm/storeItem.d.ts +1 -1
  46. package/esm/storeList.d.ts +1 -1
  47. package/esm/sveltekit/server/index.d.ts +0 -9
  48. package/esm/ui/Button.svelte +79 -56
  49. package/esm/ui/Button.svelte.d.ts +34 -24
  50. package/esm/ui/Clipboardable.svelte +18 -11
  51. package/esm/ui/Clipboardable.svelte.d.ts +34 -23
  52. package/esm/ui/Field.svelte +189 -136
  53. package/esm/ui/Field.svelte.d.ts +13 -6
  54. package/esm/ui/FieldGroup.svelte +74 -53
  55. package/esm/ui/FieldGroup.svelte.d.ts +17 -6
  56. package/esm/ui/Grid.svelte +110 -86
  57. package/esm/ui/Grid.svelte.d.ts +17 -6
  58. package/esm/ui/GridLoading.svelte +10 -5
  59. package/esm/ui/GridLoading.svelte.d.ts +19 -17
  60. package/esm/ui/GridPaginate.svelte +30 -23
  61. package/esm/ui/GridPaginate.svelte.d.ts +21 -19
  62. package/esm/ui/Icon.svelte +67 -32
  63. package/esm/ui/Icon.svelte.d.ts +52 -43
  64. package/esm/ui/Loading.svelte +5 -3
  65. package/esm/ui/Loading.svelte.d.ts +29 -18
  66. package/esm/ui/Tooltip.svelte +22 -19
  67. package/esm/ui/Tooltip.svelte.d.ts +30 -20
  68. package/esm/ui/dialog/DialogForm.svelte +48 -41
  69. package/esm/ui/dialog/DialogForm.svelte.d.ts +18 -16
  70. package/esm/ui/dialog/DialogManagement.svelte.d.ts +22 -21
  71. package/esm/ui/dialog/DialogPrimitive.svelte +32 -26
  72. package/esm/ui/dialog/DialogPrimitive.svelte.d.ts +35 -25
  73. package/esm/ui/dialog/FormEditAction.svelte +20 -12
  74. package/esm/ui/dialog/FormEditAction.svelte.d.ts +13 -6
  75. package/esm/ui/dialog/dialog.d.ts +1 -1
  76. package/esm/ui/internals/FieldContainer.svelte +13 -6
  77. package/esm/ui/internals/FieldContainer.svelte.d.ts +37 -28
  78. package/esm/ui/internals/Input.svelte +110 -76
  79. package/esm/ui/internals/Input.svelte.d.ts +34 -32
  80. package/esm/ui/internals/Textarea.svelte +39 -31
  81. package/esm/ui/internals/Textarea.svelte.d.ts +31 -28
  82. package/esm/ui/internals/select/MultiSelectMelt.svelte +174 -126
  83. package/esm/ui/internals/select/MultiSelectMelt.svelte.d.ts +29 -27
  84. package/esm/ui/internals/select/SelectMelt.svelte +168 -133
  85. package/esm/ui/internals/select/SelectMelt.svelte.d.ts +34 -32
  86. package/esm/ui/internals/select/SelectRadio.svelte +17 -11
  87. package/esm/ui/internals/select/SelectRadio.svelte.d.ts +24 -22
  88. package/esm/ui/link/Link.svelte +11 -6
  89. package/esm/ui/link/Link.svelte.d.ts +31 -22
  90. package/esm/ui/link/LinkPlus.svelte +19 -16
  91. package/esm/ui/link/LinkPlus.svelte.d.ts +20 -18
  92. package/esm/vite/index.d.ts +2 -3
  93. package/esm/vite/index.js +33 -26
  94. package/package.json +5 -5
  95. package/esm/auth/static/assets/Page-BUfjaN-D.d.ts +0 -5
  96. package/esm/auth/static/assets/Page-BUfjaN-D.js +0 -19
  97. package/esm/auth/static/assets/Page-CJ58H1vl.css +0 -1
  98. package/esm/auth/static/assets/Page-CaDAqmBS.d.ts +0 -5
  99. package/esm/auth/static/assets/Page-CaDAqmBS.js +0 -1
  100. package/esm/auth/static/assets/Page-DhdZddzJ.d.ts +0 -5
  101. package/esm/auth/static/assets/Page-DhdZddzJ.js +0 -1
  102. package/esm/auth/static/assets/index-D-Ztdt2o.d.ts +0 -54
  103. package/esm/auth/static/assets/index-D-Ztdt2o.js +0 -2
  104. /package/esm/auth/static/assets/{index-BDy4A_14.css → index-DKWpA6v7.css} +0 -0
@@ -1,129 +1,177 @@
1
- <script>import { createCombobox, createSync } from "@melt-ui/svelte";
2
- import { createEventDispatcher, onMount } from "svelte";
3
- import { fly } from "svelte/transition";
4
- import {
5
- LibIcon_Check,
6
- LibIcon_Cross,
7
- LibIcon_MultiCheck,
8
- LibIcon_Search,
9
- tw
10
- } from "../../..";
11
- import Icon from "../../Icon.svelte";
12
- export let id;
13
- export let disabled = false;
14
- export let placeholder = "";
15
- export let items = [];
16
- let totalCount = void 0;
17
- export let loadOptions = void 0;
18
- export let values = void 0;
19
- export let clearable = false;
20
- const dispatch = createEventDispatcher();
21
- function dispatchSelectedValues(_data) {
22
- values = _data?.map((_data2) => _data2.id);
23
- dispatch("selected", _data);
24
- }
25
- onMount(async () => {
26
- if (loadOptions) {
27
- const lo = await loadOptions("");
28
- items = lo.items;
29
- totalCount = lo.totalCount;
30
- filteredItems = items;
31
- }
32
- });
33
- const getDefaultValues = (_selectedValue) => {
34
- if (!items) {
35
- return [];
36
- }
37
- const f = items.filter((c) => (_selectedValue ?? []).includes(String(c.id)));
38
- if (f) {
39
- return f.map((c) => toOption(c));
40
- }
41
- return [];
42
- };
43
- const toOption = (item) => ({
44
- value: item,
45
- label: item.caption
46
- // icon: item.icon,
47
- // disabled: item.disabled,
48
- });
49
- const {
50
- elements: { menu, input, option },
51
- states: { open, inputValue, touchedInput, selected: localSelected },
52
- helpers: { isSelected }
53
- } = createCombobox({
54
- forceVisible: true,
55
- multiple: true,
56
- disabled,
57
- ids: { label: id }
58
- });
59
- const clearSelection = () => {
60
- sync.selected(void 0);
61
- };
62
- let debounceTimer;
63
- const debounce = (callback) => {
64
- clearTimeout(debounceTimer);
65
- debounceTimer = setTimeout(
66
- callback,
67
- // debounce only if we have a load option
68
- loadOptions ? 444 : 0
69
- );
70
- };
71
- const sync = createSync({ selected: localSelected });
72
- $: items && sync.selected(getDefaultValues(values), (v) => {
73
- const list = (v ?? []).map((c) => c.value.id);
74
- const countMap = /* @__PURE__ */ new Map();
75
- list.forEach((item) => {
76
- countMap.set(item, (countMap.get(item) || 0) + 1);
77
- });
78
- const uniqueList = list.filter((item) => countMap.get(item) === 1);
79
- const newIds = uniqueList.sort().join(",");
80
- const oldSelectedValues = (values ?? []).sort().join(",");
81
- if (newIds !== oldSelectedValues) {
82
- dispatchSelectedValues(
83
- v === void 0 ? void 0 : v.filter((c) => uniqueList.includes(c.value.id)).map((c) => c.value)
84
- );
85
- }
86
- });
87
- const labelToDisplayInInput = (_localSelected) => {
88
- if (_localSelected === void 0 || _localSelected.length === 0) {
89
- return "";
90
- }
91
- if (_localSelected.length === 1) {
92
- return _localSelected[0].label ?? "";
93
- }
94
- return `${_localSelected.length} \xE9l\xE9ments`;
95
- };
96
- $: $inputValue = labelToDisplayInInput($localSelected);
97
- const iconToDisplayInInput = (_localSelected) => {
98
- if (_localSelected === void 0 || _localSelected.length === 0) {
99
- return { data: LibIcon_Search };
100
- }
101
- if (_localSelected.length === 1) {
102
- return _localSelected[0].value.icon ?? { data: LibIcon_Search };
103
- }
104
- return { data: LibIcon_MultiCheck };
105
- };
106
- const isChecked = (_localSelected, _item) => {
107
- const f = (_localSelected ?? []).filter((c) => c.value?.id === _item.id);
108
- if (f.length > 0) {
109
- return true;
110
- }
111
- return false;
112
- };
113
- let filteredItems = items;
114
- const calcFilteredItems = (touched, str, values2) => {
115
- if (touched && !str.endsWith(" \xE9l\xE9ments")) {
116
- debounce(async () => {
117
- const normalizedInput = str.toLowerCase();
118
- filteredItems = items.filter((item) => {
119
- return item.caption?.toLowerCase().includes(normalizedInput);
120
- });
121
- });
122
- } else {
123
- filteredItems = items;
124
- }
125
- };
126
- $: calcFilteredItems($touchedInput, $inputValue, values);
1
+ <script lang="ts">
2
+ import { createCombobox, createSync, type ComboboxOptionProps } from '@melt-ui/svelte'
3
+ import { createEventDispatcher, onMount } from 'svelte'
4
+ import { fly } from 'svelte/transition'
5
+
6
+ import {
7
+ LibIcon_Check,
8
+ LibIcon_Cross,
9
+ LibIcon_MultiCheck,
10
+ LibIcon_Search,
11
+ tw,
12
+ type BaseItem,
13
+ type FF_Icon,
14
+ } from '../../..'
15
+ import Icon from '../../Icon.svelte'
16
+
17
+ export let id: string
18
+ export let disabled: boolean = false
19
+ export let placeholder: string = ''
20
+ export let items: BaseItem[] = []
21
+ let totalCount: number | undefined = undefined
22
+
23
+ export let loadOptions:
24
+ | ((str: string) => Promise<{ items: BaseItem[]; totalCount: number }>)
25
+ | undefined = undefined
26
+ export let values: string[] | undefined = undefined
27
+ export let clearable = false
28
+
29
+ const dispatch = createEventDispatcher()
30
+
31
+ function dispatchSelectedValues(_data: BaseItem[] | undefined) {
32
+ values = _data?.map((_data) => _data.id)
33
+ dispatch('selected', _data)
34
+ }
35
+
36
+ onMount(async () => {
37
+ if (loadOptions) {
38
+ const lo = await loadOptions('')
39
+ items = lo.items
40
+ totalCount = lo.totalCount
41
+ filteredItems = items
42
+ }
43
+ })
44
+
45
+ const getDefaultValues = (_selectedValue: string[] | undefined) => {
46
+ if (!items) {
47
+ return []
48
+ }
49
+
50
+ const f = items.filter((c) => (_selectedValue ?? []).includes(String(c.id)))
51
+ if (f) {
52
+ return f.map((c) => toOption(c))
53
+ }
54
+
55
+ return []
56
+ }
57
+
58
+ const toOption = (
59
+ item: BaseItem,
60
+ ): ComboboxOptionProps<BaseItem> & {
61
+ icon?: FF_Icon
62
+ } => ({
63
+ value: item,
64
+ label: item.caption,
65
+ // icon: item.icon,
66
+ // disabled: item.disabled,
67
+ })
68
+
69
+ const {
70
+ elements: { menu, input, option },
71
+ states: { open, inputValue, touchedInput, selected: localSelected },
72
+ helpers: { isSelected },
73
+ } = createCombobox<BaseItem, true>({
74
+ forceVisible: true,
75
+ multiple: true,
76
+ disabled,
77
+ ids: { label: id },
78
+ })
79
+
80
+ const clearSelection = () => {
81
+ sync.selected(undefined)
82
+ }
83
+
84
+ let debounceTimer: ReturnType<typeof setTimeout>
85
+ const debounce = (callback: () => void) => {
86
+ clearTimeout(debounceTimer)
87
+ debounceTimer = setTimeout(
88
+ callback,
89
+ // debounce only if we have a load option
90
+ loadOptions ? 444 : 0,
91
+ )
92
+ }
93
+
94
+ const sync = createSync({ selected: localSelected })
95
+ $: items &&
96
+ sync.selected(getDefaultValues(values), (v) => {
97
+ const list = (v ?? []).map((c) => c.value.id)
98
+
99
+ // Create a map to count occurrences of each element
100
+ const countMap: Map<string, number> = new Map()
101
+
102
+ list.forEach((item) => {
103
+ countMap.set(item, (countMap.get(item) || 0) + 1)
104
+ })
105
+
106
+ // Filter the list to include only elements that occur exactly once
107
+ const uniqueList: string[] = list.filter((item) => countMap.get(item) === 1)
108
+
109
+ const newIds = uniqueList.sort().join(',')
110
+ const oldSelectedValues = (values ?? []).sort().join(',')
111
+
112
+ if (newIds !== oldSelectedValues) {
113
+ dispatchSelectedValues(
114
+ v === undefined
115
+ ? undefined
116
+ : v.filter((c) => uniqueList.includes(c.value.id)).map((c) => c.value),
117
+ )
118
+ }
119
+ })
120
+
121
+ const labelToDisplayInInput = (_localSelected: typeof $localSelected) => {
122
+ if (_localSelected === undefined || _localSelected.length === 0) {
123
+ return ''
124
+ }
125
+ if (_localSelected.length === 1) {
126
+ return _localSelected[0].label ?? ''
127
+ }
128
+ return `${_localSelected.length} éléments`
129
+ }
130
+ $: $inputValue = labelToDisplayInInput($localSelected)
131
+
132
+ const iconToDisplayInInput = (_localSelected: typeof $localSelected): FF_Icon => {
133
+ if (_localSelected === undefined || _localSelected.length === 0) {
134
+ return { data: LibIcon_Search }
135
+ }
136
+ if (_localSelected.length === 1) {
137
+ return _localSelected[0].value.icon ?? { data: LibIcon_Search }
138
+ }
139
+ return { data: LibIcon_MultiCheck }
140
+ }
141
+
142
+ const isChecked = (_localSelected: typeof $localSelected, _item: BaseItem) => {
143
+ const f = (_localSelected ?? []).filter((c) => c.value?.id === _item.id)
144
+ if (f.length > 0) {
145
+ return true
146
+ }
147
+ return false
148
+ }
149
+
150
+ let filteredItems = items
151
+ const calcFilteredItems = (touched: boolean, str: string, values: any) => {
152
+ if (touched && !str.endsWith(' éléments')) {
153
+ debounce(async () => {
154
+ const normalizedInput = str.toLowerCase()
155
+
156
+ // In a Multi select we can't filter to the server.
157
+ // If we do I don't knwo what to set to $inputValue. and and list gets shorter... So what do we do about items that are selected but not in the list anymore (because of the filter) ?
158
+ // if (loadOptions) {
159
+ // const lo = await loadOptions(normalizedInput)
160
+ // items = lo.items
161
+ // totalCount = lo.totalCount
162
+ // filteredItems = items
163
+ // } else {
164
+ filteredItems = items.filter((item) => {
165
+ return item.caption?.toLowerCase().includes(normalizedInput)
166
+ })
167
+ // }
168
+ })
169
+ } else {
170
+ filteredItems = items
171
+ }
172
+ }
173
+
174
+ $: calcFilteredItems($touchedInput, $inputValue, values)
127
175
  </script>
128
176
 
129
177
  <div class="input input-bordered flex min-w-0 items-center">
@@ -1,30 +1,32 @@
1
- import { SvelteComponent } from "svelte";
2
1
  import { type BaseItem } from '../../..';
3
- declare const __propDef: {
4
- props: {
5
- id: string;
6
- disabled?: boolean;
7
- placeholder?: string;
8
- items?: BaseItem[];
9
- loadOptions?: ((str: string) => Promise<{
10
- items: BaseItem[];
11
- totalCount: number;
12
- }>) | undefined;
13
- values?: string[] | undefined;
14
- clearable?: boolean;
2
+ 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> {
3
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
4
+ $$bindings?: Bindings;
5
+ } & Exports;
6
+ (internal: unknown, props: Props & {
7
+ $$events?: Events;
8
+ $$slots?: Slots;
9
+ }): Exports & {
10
+ $set?: any;
11
+ $on?: any;
15
12
  };
16
- events: {
17
- selected: CustomEvent<any>;
18
- } & {
19
- [evt: string]: CustomEvent<any>;
20
- };
21
- slots: {};
22
- exports?: {} | undefined;
23
- bindings?: string | undefined;
24
- };
25
- export type MultiSelectMeltProps = typeof __propDef.props;
26
- export type MultiSelectMeltEvents = typeof __propDef.events;
27
- export type MultiSelectMeltSlots = typeof __propDef.slots;
28
- export default class MultiSelectMelt extends SvelteComponent<MultiSelectMeltProps, MultiSelectMeltEvents, MultiSelectMeltSlots> {
13
+ z_$$bindings?: Bindings;
29
14
  }
30
- export {};
15
+ declare const MultiSelectMelt: $$__sveltets_2_IsomorphicComponent<{
16
+ id: string;
17
+ disabled?: boolean;
18
+ placeholder?: string;
19
+ items?: BaseItem[];
20
+ loadOptions?: ((str: string) => Promise<{
21
+ items: BaseItem[];
22
+ totalCount: number;
23
+ }>) | undefined;
24
+ values?: string[] | undefined;
25
+ clearable?: boolean;
26
+ }, {
27
+ selected: CustomEvent<any>;
28
+ } & {
29
+ [evt: string]: CustomEvent<any>;
30
+ }, {}, {}, string>;
31
+ type MultiSelectMelt = InstanceType<typeof MultiSelectMelt>;
32
+ export default MultiSelectMelt;