@getmicdrop/svelte-components 5.7.2 → 5.8.1
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.
- package/dist/primitives/Checkbox/Checkbox.svelte +3 -3
- package/dist/stores/auth.svelte.d.ts +39 -0
- package/dist/stores/auth.svelte.d.ts.map +1 -0
- package/dist/stores/auth.svelte.js +60 -0
- package/dist/stores/formDataStore.svelte.d.ts +47 -0
- package/dist/stores/formDataStore.svelte.d.ts.map +1 -0
- package/dist/stores/formDataStore.svelte.js +84 -0
- package/dist/stores/formSave.svelte.d.ts +33 -0
- package/dist/stores/formSave.svelte.d.ts.map +1 -0
- package/dist/stores/formSave.svelte.js +113 -0
- package/dist/stores/index.d.ts +4 -4
- package/dist/stores/index.js +6 -7
- package/dist/stores/navigation.svelte.d.ts +35 -0
- package/dist/stores/navigation.svelte.d.ts.map +1 -0
- package/dist/stores/navigation.svelte.js +69 -0
- package/package.json +8 -9
- package/dist/stores/auth.js +0 -36
- package/dist/stores/auth.spec.d.ts +0 -2
- package/dist/stores/auth.spec.d.ts.map +0 -1
- package/dist/stores/auth.spec.js +0 -139
- package/dist/stores/createFormStore.d.ts +0 -77
- package/dist/stores/createFormStore.d.ts.map +0 -1
- package/dist/stores/createFormStore.js +0 -410
- package/dist/stores/createFormStore.spec.d.ts +0 -2
- package/dist/stores/createFormStore.spec.d.ts.map +0 -1
- package/dist/stores/createFormStore.spec.js +0 -540
- package/dist/stores/formDataStore.d.ts +0 -17
- package/dist/stores/formDataStore.d.ts.map +0 -1
- package/dist/stores/formDataStore.js +0 -25
- package/dist/stores/formDataStore.spec.d.ts +0 -2
- package/dist/stores/formDataStore.spec.d.ts.map +0 -1
- package/dist/stores/formDataStore.spec.js +0 -257
- package/dist/stores/formSave.d.ts +0 -24
- package/dist/stores/formSave.d.ts.map +0 -1
- package/dist/stores/formSave.js +0 -132
- package/dist/stores/formSave.spec.d.ts +0 -2
- package/dist/stores/formSave.spec.d.ts.map +0 -1
- package/dist/stores/formSave.spec.js +0 -296
- package/dist/stores/navigation.d.ts +0 -5
- package/dist/stores/navigation.d.ts.map +0 -1
- package/dist/stores/navigation.js +0 -12
- package/dist/stores/navigation.spec.d.ts +0 -2
- package/dist/stores/navigation.spec.d.ts.map +0 -1
- package/dist/stores/navigation.spec.js +0 -136
|
@@ -35,9 +35,9 @@
|
|
|
35
35
|
...restProps
|
|
36
36
|
}: Props = $props();
|
|
37
37
|
|
|
38
|
-
function handleChange(
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
function handleChange() {
|
|
39
|
+
// Note: checked is already updated by bind:checked before this handler runs
|
|
40
|
+
// We just need to call the onchange callback with the current values
|
|
41
41
|
onchange?.({ checked, value });
|
|
42
42
|
}
|
|
43
43
|
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authentication store using Svelte 5 runes
|
|
3
|
+
* Manages authentication state for the components library
|
|
4
|
+
*/
|
|
5
|
+
interface UserDetails {
|
|
6
|
+
email?: string;
|
|
7
|
+
firstName?: string;
|
|
8
|
+
lastName?: string;
|
|
9
|
+
[key: string]: unknown;
|
|
10
|
+
}
|
|
11
|
+
interface AuthState {
|
|
12
|
+
isAuthenticated: boolean;
|
|
13
|
+
token: string | null;
|
|
14
|
+
userDetails: UserDetails | null;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Authentication store
|
|
18
|
+
*/
|
|
19
|
+
export declare const auth: {
|
|
20
|
+
readonly value: AuthState;
|
|
21
|
+
readonly isAuthenticated: boolean;
|
|
22
|
+
readonly token: string | null;
|
|
23
|
+
readonly userDetails: UserDetails | null;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Set the authentication state
|
|
27
|
+
*/
|
|
28
|
+
export declare function setAuthState(state: AuthState): void;
|
|
29
|
+
/**
|
|
30
|
+
* Clear the authentication state
|
|
31
|
+
*/
|
|
32
|
+
export declare function clearAuthState(): void;
|
|
33
|
+
/**
|
|
34
|
+
* Initialize the store from cookies
|
|
35
|
+
* Should only be called in browser environment
|
|
36
|
+
*/
|
|
37
|
+
export declare function initializeAuthState(): void;
|
|
38
|
+
export type { AuthState, UserDetails };
|
|
39
|
+
//# sourceMappingURL=auth.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/stores/auth.svelte.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,UAAU,SAAS;IACjB,eAAe,EAAE,OAAO,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;CACjC;AAWD;;GAEG;AACH,eAAO,MAAM,IAAI;;;;;CAahB,CAAC;AAEF;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAEnD;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAkB1C;AAGD,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authentication store using Svelte 5 runes
|
|
3
|
+
* Manages authentication state for the components library
|
|
4
|
+
*/
|
|
5
|
+
const defaultAuthState = {
|
|
6
|
+
isAuthenticated: false,
|
|
7
|
+
token: null,
|
|
8
|
+
userDetails: null,
|
|
9
|
+
};
|
|
10
|
+
// State using Svelte 5 runes
|
|
11
|
+
let authState = $state(structuredClone(defaultAuthState));
|
|
12
|
+
/**
|
|
13
|
+
* Authentication store
|
|
14
|
+
*/
|
|
15
|
+
export const auth = {
|
|
16
|
+
get value() {
|
|
17
|
+
return authState;
|
|
18
|
+
},
|
|
19
|
+
get isAuthenticated() {
|
|
20
|
+
return authState.isAuthenticated;
|
|
21
|
+
},
|
|
22
|
+
get token() {
|
|
23
|
+
return authState.token;
|
|
24
|
+
},
|
|
25
|
+
get userDetails() {
|
|
26
|
+
return authState.userDetails;
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Set the authentication state
|
|
31
|
+
*/
|
|
32
|
+
export function setAuthState(state) {
|
|
33
|
+
authState = state;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Clear the authentication state
|
|
37
|
+
*/
|
|
38
|
+
export function clearAuthState() {
|
|
39
|
+
authState = structuredClone(defaultAuthState);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Initialize the store from cookies
|
|
43
|
+
* Should only be called in browser environment
|
|
44
|
+
*/
|
|
45
|
+
export function initializeAuthState() {
|
|
46
|
+
if (typeof document === "undefined")
|
|
47
|
+
return;
|
|
48
|
+
const cookies = Object.fromEntries(document.cookie
|
|
49
|
+
.split("; ")
|
|
50
|
+
.filter((c) => c)
|
|
51
|
+
.map((c) => c.split("="))
|
|
52
|
+
.map(([k, v]) => [k, decodeURIComponent(v || "")]));
|
|
53
|
+
if (cookies.performer_token) {
|
|
54
|
+
setAuthState({
|
|
55
|
+
isAuthenticated: true,
|
|
56
|
+
token: cookies.performer_token,
|
|
57
|
+
userDetails: cookies.userDetails ? JSON.parse(cookies.userDetails) : null,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Form data store using Svelte 5 runes
|
|
3
|
+
* Tracks profile form data and change detection
|
|
4
|
+
*/
|
|
5
|
+
interface BasicInfo {
|
|
6
|
+
firstName: string;
|
|
7
|
+
lastName: string;
|
|
8
|
+
email: string;
|
|
9
|
+
phone: string;
|
|
10
|
+
stageName: string;
|
|
11
|
+
location: string;
|
|
12
|
+
}
|
|
13
|
+
interface SocialMedia {
|
|
14
|
+
videoLink: string;
|
|
15
|
+
}
|
|
16
|
+
interface ProfileFormData {
|
|
17
|
+
basicInfo: BasicInfo;
|
|
18
|
+
socialMedia: SocialMedia;
|
|
19
|
+
extraDetails: Record<string, unknown>;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Profile form data store
|
|
23
|
+
*/
|
|
24
|
+
export declare const profileFormData: {
|
|
25
|
+
value: ProfileFormData;
|
|
26
|
+
basicInfo: BasicInfo;
|
|
27
|
+
socialMedia: SocialMedia;
|
|
28
|
+
extraDetails: Record<string, unknown>;
|
|
29
|
+
update(updater: (data: ProfileFormData) => ProfileFormData): void;
|
|
30
|
+
reset(): void;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Initial form data store (for comparison)
|
|
34
|
+
*/
|
|
35
|
+
export declare const initialFormData: {
|
|
36
|
+
value: ProfileFormData | null;
|
|
37
|
+
setFromCurrent(): void;
|
|
38
|
+
reset(): void;
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Derived store indicating if form has unsaved changes
|
|
42
|
+
*/
|
|
43
|
+
export declare const hasChanges: {
|
|
44
|
+
readonly value: boolean;
|
|
45
|
+
};
|
|
46
|
+
export type { ProfileFormData, BasicInfo, SocialMedia };
|
|
47
|
+
//# sourceMappingURL=formDataStore.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formDataStore.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/stores/formDataStore.svelte.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,UAAU,SAAS;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,WAAW;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,eAAe;IACvB,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AA2BD;;GAEG;AACH,eAAO,MAAM,eAAe;WAIV,eAAe;eAMX,SAAS;iBAMN,WAAW;kBAMR,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oBAGjC,CAAC,IAAI,EAAE,eAAe,KAAK,eAAe;;CAM3D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe;WAIV,eAAe,GAAG,IAAI;;;CASvC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU;;CAItB,CAAC;AAGF,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Form data store using Svelte 5 runes
|
|
3
|
+
* Tracks profile form data and change detection
|
|
4
|
+
*/
|
|
5
|
+
const defaultFormData = {
|
|
6
|
+
basicInfo: {
|
|
7
|
+
firstName: "",
|
|
8
|
+
lastName: "",
|
|
9
|
+
email: "",
|
|
10
|
+
phone: "",
|
|
11
|
+
stageName: "",
|
|
12
|
+
location: "",
|
|
13
|
+
},
|
|
14
|
+
socialMedia: {
|
|
15
|
+
videoLink: "",
|
|
16
|
+
},
|
|
17
|
+
extraDetails: {},
|
|
18
|
+
};
|
|
19
|
+
// State using Svelte 5 runes
|
|
20
|
+
let profileFormDataState = $state(structuredClone(defaultFormData));
|
|
21
|
+
let initialFormDataState = $state(null);
|
|
22
|
+
// Derived state for change detection
|
|
23
|
+
const hasChangesValue = $derived(initialFormDataState !== null &&
|
|
24
|
+
JSON.stringify(profileFormDataState) !== JSON.stringify(initialFormDataState));
|
|
25
|
+
/**
|
|
26
|
+
* Profile form data store
|
|
27
|
+
*/
|
|
28
|
+
export const profileFormData = {
|
|
29
|
+
get value() {
|
|
30
|
+
return profileFormDataState;
|
|
31
|
+
},
|
|
32
|
+
set value(data) {
|
|
33
|
+
profileFormDataState = data;
|
|
34
|
+
},
|
|
35
|
+
get basicInfo() {
|
|
36
|
+
return profileFormDataState.basicInfo;
|
|
37
|
+
},
|
|
38
|
+
set basicInfo(info) {
|
|
39
|
+
profileFormDataState.basicInfo = info;
|
|
40
|
+
},
|
|
41
|
+
get socialMedia() {
|
|
42
|
+
return profileFormDataState.socialMedia;
|
|
43
|
+
},
|
|
44
|
+
set socialMedia(media) {
|
|
45
|
+
profileFormDataState.socialMedia = media;
|
|
46
|
+
},
|
|
47
|
+
get extraDetails() {
|
|
48
|
+
return profileFormDataState.extraDetails;
|
|
49
|
+
},
|
|
50
|
+
set extraDetails(details) {
|
|
51
|
+
profileFormDataState.extraDetails = details;
|
|
52
|
+
},
|
|
53
|
+
update(updater) {
|
|
54
|
+
profileFormDataState = updater(profileFormDataState);
|
|
55
|
+
},
|
|
56
|
+
reset() {
|
|
57
|
+
profileFormDataState = structuredClone(defaultFormData);
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Initial form data store (for comparison)
|
|
62
|
+
*/
|
|
63
|
+
export const initialFormData = {
|
|
64
|
+
get value() {
|
|
65
|
+
return initialFormDataState;
|
|
66
|
+
},
|
|
67
|
+
set value(data) {
|
|
68
|
+
initialFormDataState = data;
|
|
69
|
+
},
|
|
70
|
+
setFromCurrent() {
|
|
71
|
+
initialFormDataState = structuredClone(profileFormDataState);
|
|
72
|
+
},
|
|
73
|
+
reset() {
|
|
74
|
+
initialFormDataState = null;
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Derived store indicating if form has unsaved changes
|
|
79
|
+
*/
|
|
80
|
+
export const hasChanges = {
|
|
81
|
+
get value() {
|
|
82
|
+
return hasChangesValue;
|
|
83
|
+
},
|
|
84
|
+
};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Form save utilities using Svelte 5 runes
|
|
3
|
+
* Handles form submission with loading and success states
|
|
4
|
+
*/
|
|
5
|
+
interface FormSaveOptions {
|
|
6
|
+
endpoint?: string;
|
|
7
|
+
successMessage?: string;
|
|
8
|
+
errorMessage?: string;
|
|
9
|
+
onSuccess?: () => void;
|
|
10
|
+
onError?: (error: string) => void;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Creates a form save handler with loading and success states
|
|
14
|
+
* Uses Svelte 5 runes for reactive state
|
|
15
|
+
*/
|
|
16
|
+
export declare function createFormSave(options?: FormSaveOptions): {
|
|
17
|
+
readonly isLoading: boolean;
|
|
18
|
+
readonly isSuccess: boolean;
|
|
19
|
+
readonly error: string | null;
|
|
20
|
+
save: (data: Record<string, unknown>, customEndpoint?: string | null) => Promise<boolean>;
|
|
21
|
+
resetSuccess: () => void;
|
|
22
|
+
reset: () => void;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Creates a simple dirty state tracker for forms
|
|
26
|
+
*/
|
|
27
|
+
export declare function createDirtyTracker(initialData: Record<string, unknown>): {
|
|
28
|
+
readonly isDirty: boolean;
|
|
29
|
+
check: (currentData: Record<string, unknown>) => boolean;
|
|
30
|
+
reset: (newInitialData: Record<string, unknown>) => void;
|
|
31
|
+
};
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=formSave.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formSave.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/stores/formSave.svelte.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,UAAU,eAAe;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAQD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,eAAoB;;;;iBAyBlD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,mBACb,MAAM,GAAG,IAAI,KAC5B,OAAO,CAAC,OAAO,CAAC;wBAVM,IAAI;iBA0DX,IAAI;EAoBvB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;yBAIzC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,OAAO;4BAM9B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,IAAI;EAY9D"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Form save utilities using Svelte 5 runes
|
|
3
|
+
* Handles form submission with loading and success states
|
|
4
|
+
*/
|
|
5
|
+
import { showToast } from "./toaster";
|
|
6
|
+
/**
|
|
7
|
+
* Creates a form save handler with loading and success states
|
|
8
|
+
* Uses Svelte 5 runes for reactive state
|
|
9
|
+
*/
|
|
10
|
+
export function createFormSave(options = {}) {
|
|
11
|
+
const { endpoint = "", successMessage = "Changes saved successfully", errorMessage = "Failed to save changes", onSuccess, onError, } = options;
|
|
12
|
+
// State using Svelte 5 runes
|
|
13
|
+
let isLoadingState = $state(false);
|
|
14
|
+
let isSuccessState = $state(false);
|
|
15
|
+
let errorState = $state(null);
|
|
16
|
+
/**
|
|
17
|
+
* Reset success state (call when form becomes dirty)
|
|
18
|
+
*/
|
|
19
|
+
function resetSuccess() {
|
|
20
|
+
isSuccessState = false;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Save form data to the endpoint
|
|
24
|
+
*/
|
|
25
|
+
async function save(data, customEndpoint = null) {
|
|
26
|
+
const targetEndpoint = customEndpoint || endpoint;
|
|
27
|
+
if (!targetEndpoint) {
|
|
28
|
+
console.error("No endpoint specified for form save");
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
isLoadingState = true;
|
|
32
|
+
isSuccessState = false;
|
|
33
|
+
errorState = null;
|
|
34
|
+
try {
|
|
35
|
+
const res = await fetch(targetEndpoint, {
|
|
36
|
+
method: "POST",
|
|
37
|
+
headers: { "Content-Type": "application/json" },
|
|
38
|
+
body: JSON.stringify(data),
|
|
39
|
+
});
|
|
40
|
+
if (res.ok) {
|
|
41
|
+
isSuccessState = true;
|
|
42
|
+
if (successMessage) {
|
|
43
|
+
showToast(successMessage, "success");
|
|
44
|
+
}
|
|
45
|
+
onSuccess?.();
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
const errorData = await res.json().catch(() => ({}));
|
|
50
|
+
const errorMsg = errorData.message || errorMessage;
|
|
51
|
+
errorState = errorMsg;
|
|
52
|
+
showToast(errorMsg, "error");
|
|
53
|
+
onError?.(errorMsg);
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
const errorMsg = err instanceof Error ? err.message : "Something went wrong";
|
|
59
|
+
errorState = errorMsg;
|
|
60
|
+
showToast(errorMsg, "error");
|
|
61
|
+
onError?.(errorMsg);
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
finally {
|
|
65
|
+
isLoadingState = false;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Reset all states
|
|
70
|
+
*/
|
|
71
|
+
function reset() {
|
|
72
|
+
isLoadingState = false;
|
|
73
|
+
isSuccessState = false;
|
|
74
|
+
errorState = null;
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
get isLoading() {
|
|
78
|
+
return isLoadingState;
|
|
79
|
+
},
|
|
80
|
+
get isSuccess() {
|
|
81
|
+
return isSuccessState;
|
|
82
|
+
},
|
|
83
|
+
get error() {
|
|
84
|
+
return errorState;
|
|
85
|
+
},
|
|
86
|
+
save,
|
|
87
|
+
resetSuccess,
|
|
88
|
+
reset,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Creates a simple dirty state tracker for forms
|
|
93
|
+
*/
|
|
94
|
+
export function createDirtyTracker(initialData) {
|
|
95
|
+
let isDirtyState = $state(false);
|
|
96
|
+
let initial = JSON.stringify(initialData);
|
|
97
|
+
function check(currentData) {
|
|
98
|
+
const dirty = JSON.stringify(currentData) !== initial;
|
|
99
|
+
isDirtyState = dirty;
|
|
100
|
+
return dirty;
|
|
101
|
+
}
|
|
102
|
+
function reset(newInitialData) {
|
|
103
|
+
initial = JSON.stringify(newInitialData);
|
|
104
|
+
isDirtyState = false;
|
|
105
|
+
}
|
|
106
|
+
return {
|
|
107
|
+
get isDirty() {
|
|
108
|
+
return isDirtyState;
|
|
109
|
+
},
|
|
110
|
+
check,
|
|
111
|
+
reset,
|
|
112
|
+
};
|
|
113
|
+
}
|
package/dist/stores/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { createFormStore, createFieldTracker } from "../forms/index";
|
|
2
|
-
export { createFormSave, createDirtyTracker } from "./formSave";
|
|
3
|
-
export { profileFormData, initialFormData, hasChanges } from "./formDataStore";
|
|
4
|
-
export { isSubPage, hideHeaderBackButton, selectedVenueData, isAnimatedNavigation } from "./navigation";
|
|
2
|
+
export { createFormSave, createDirtyTracker } from "./formSave.svelte";
|
|
3
|
+
export { profileFormData, initialFormData, hasChanges } from "./formDataStore.svelte";
|
|
4
|
+
export { isSubPage, hideHeaderBackButton, selectedVenueData, isAnimatedNavigation } from "./navigation.svelte";
|
|
5
5
|
export { toast, showToast } from "./toaster";
|
|
6
|
-
export { auth, setAuthState, clearAuthState, initializeAuthState } from "./auth";
|
|
6
|
+
export { auth, setAuthState, clearAuthState, initializeAuthState } from "./auth.svelte";
|
|
7
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/stores/index.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
//
|
|
2
|
-
// These are Svelte 5 runes-based implementations
|
|
1
|
+
// Form utilities (Svelte 5 runes-based)
|
|
3
2
|
export { createFormStore, createFieldTracker } from '../forms/index';
|
|
4
3
|
|
|
5
|
-
//
|
|
6
|
-
export { createFormSave, createDirtyTracker } from './formSave';
|
|
7
|
-
export { profileFormData, initialFormData, hasChanges } from './formDataStore';
|
|
8
|
-
export { isSubPage, hideHeaderBackButton, selectedVenueData, isAnimatedNavigation } from './navigation';
|
|
4
|
+
// Store exports (Svelte 5 runes-based)
|
|
5
|
+
export { createFormSave, createDirtyTracker } from './formSave.svelte';
|
|
6
|
+
export { profileFormData, initialFormData, hasChanges } from './formDataStore.svelte';
|
|
7
|
+
export { isSubPage, hideHeaderBackButton, selectedVenueData, isAnimatedNavigation } from './navigation.svelte';
|
|
9
8
|
export { toast, showToast } from './toaster';
|
|
10
|
-
export { auth, setAuthState, clearAuthState, initializeAuthState
|
|
9
|
+
export { auth, setAuthState, clearAuthState, initializeAuthState } from './auth.svelte';
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Navigation store using Svelte 5 runes
|
|
3
|
+
* Tracks navigation state and page context
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Whether the current page is a sub-page (for header back button display)
|
|
7
|
+
*/
|
|
8
|
+
export declare const isSubPage: {
|
|
9
|
+
value: boolean;
|
|
10
|
+
set(val: boolean): void;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Pages can set this to true to hide the header back button
|
|
14
|
+
* (e.g., when they have their own)
|
|
15
|
+
*/
|
|
16
|
+
export declare const hideHeaderBackButton: {
|
|
17
|
+
value: boolean;
|
|
18
|
+
set(val: boolean): void;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Store venue data when navigating to calendar to avoid re-fetching
|
|
22
|
+
*/
|
|
23
|
+
export declare const selectedVenueData: {
|
|
24
|
+
value: Record<string, unknown> | null;
|
|
25
|
+
set(data: Record<string, unknown> | null): void;
|
|
26
|
+
reset(): void;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Flag to indicate we're doing an animated navigation (not a refresh/direct load)
|
|
30
|
+
*/
|
|
31
|
+
export declare const isAnimatedNavigation: {
|
|
32
|
+
value: boolean;
|
|
33
|
+
set(val: boolean): void;
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=navigation.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigation.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/stores/navigation.svelte.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH;;GAEG;AACH,eAAO,MAAM,SAAS;WAIL,OAAO;aAGb,OAAO;CAGjB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,oBAAoB;WAIhB,OAAO;aAGb,OAAO;CAGjB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB;WAIZ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;cAGpC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;;CAMzC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB;WAIhB,OAAO;aAGb,OAAO;CAGjB,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Navigation store using Svelte 5 runes
|
|
3
|
+
* Tracks navigation state and page context
|
|
4
|
+
*/
|
|
5
|
+
// State using Svelte 5 runes
|
|
6
|
+
let isSubPageState = $state(false);
|
|
7
|
+
let hideHeaderBackButtonState = $state(false);
|
|
8
|
+
let selectedVenueDataState = $state(null);
|
|
9
|
+
let isAnimatedNavigationState = $state(false);
|
|
10
|
+
/**
|
|
11
|
+
* Whether the current page is a sub-page (for header back button display)
|
|
12
|
+
*/
|
|
13
|
+
export const isSubPage = {
|
|
14
|
+
get value() {
|
|
15
|
+
return isSubPageState;
|
|
16
|
+
},
|
|
17
|
+
set value(val) {
|
|
18
|
+
isSubPageState = val;
|
|
19
|
+
},
|
|
20
|
+
set(val) {
|
|
21
|
+
isSubPageState = val;
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Pages can set this to true to hide the header back button
|
|
26
|
+
* (e.g., when they have their own)
|
|
27
|
+
*/
|
|
28
|
+
export const hideHeaderBackButton = {
|
|
29
|
+
get value() {
|
|
30
|
+
return hideHeaderBackButtonState;
|
|
31
|
+
},
|
|
32
|
+
set value(val) {
|
|
33
|
+
hideHeaderBackButtonState = val;
|
|
34
|
+
},
|
|
35
|
+
set(val) {
|
|
36
|
+
hideHeaderBackButtonState = val;
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Store venue data when navigating to calendar to avoid re-fetching
|
|
41
|
+
*/
|
|
42
|
+
export const selectedVenueData = {
|
|
43
|
+
get value() {
|
|
44
|
+
return selectedVenueDataState;
|
|
45
|
+
},
|
|
46
|
+
set value(data) {
|
|
47
|
+
selectedVenueDataState = data;
|
|
48
|
+
},
|
|
49
|
+
set(data) {
|
|
50
|
+
selectedVenueDataState = data;
|
|
51
|
+
},
|
|
52
|
+
reset() {
|
|
53
|
+
selectedVenueDataState = null;
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Flag to indicate we're doing an animated navigation (not a refresh/direct load)
|
|
58
|
+
*/
|
|
59
|
+
export const isAnimatedNavigation = {
|
|
60
|
+
get value() {
|
|
61
|
+
return isAnimatedNavigationState;
|
|
62
|
+
},
|
|
63
|
+
set value(val) {
|
|
64
|
+
isAnimatedNavigationState = val;
|
|
65
|
+
},
|
|
66
|
+
set(val) {
|
|
67
|
+
isAnimatedNavigationState = val;
|
|
68
|
+
},
|
|
69
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@getmicdrop/svelte-components",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.8.1",
|
|
4
4
|
"description": "Shared component library for Micdrop applications",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -247,14 +247,15 @@
|
|
|
247
247
|
"@storybook/addon-links": "^8.6.15",
|
|
248
248
|
"@storybook/addon-svelte-csf": "^5.0.10",
|
|
249
249
|
"@storybook/blocks": "^8.6.15",
|
|
250
|
-
"@storybook/svelte": "^
|
|
251
|
-
"@storybook/sveltekit": "^
|
|
250
|
+
"@storybook/svelte": "^10.1.11",
|
|
251
|
+
"@storybook/sveltekit": "^10.1.11",
|
|
252
252
|
"@storybook/test": "^8.6.15",
|
|
253
253
|
"@sveltejs/adapter-auto": "^3.2.2",
|
|
254
|
-
"@sveltejs/kit": "^2.
|
|
254
|
+
"@sveltejs/kit": "^2.50.0",
|
|
255
255
|
"@sveltejs/package": "^2.5.7",
|
|
256
|
-
"@sveltejs/vite-plugin-svelte": "^
|
|
256
|
+
"@sveltejs/vite-plugin-svelte": "^6.2.4",
|
|
257
257
|
"@tailwindcss/forms": "^0.5.11",
|
|
258
|
+
"@tailwindcss/vite": "^4.0.0",
|
|
258
259
|
"@testing-library/jest-dom": "^6.4.6",
|
|
259
260
|
"@testing-library/svelte": "^5.2.0",
|
|
260
261
|
"@types/cookie": "^1.0.0",
|
|
@@ -263,7 +264,6 @@
|
|
|
263
264
|
"@vitest/coverage-istanbul": "^4.0.16",
|
|
264
265
|
"@vitest/coverage-v8": "^4.0.16",
|
|
265
266
|
"@vitest/ui": "^4.0.16",
|
|
266
|
-
"autoprefixer": "^10.4.19",
|
|
267
267
|
"chromatic": "^13.3.4",
|
|
268
268
|
"cypress": "^15.1.0",
|
|
269
269
|
"eslint": "^9.7.0",
|
|
@@ -271,17 +271,16 @@
|
|
|
271
271
|
"globals": "^17.0.0",
|
|
272
272
|
"husky": "^9.1.7",
|
|
273
273
|
"jsdom": "^24.1.1",
|
|
274
|
-
"postcss": "^8.4.39",
|
|
275
274
|
"prettier": "^3.3.3",
|
|
276
275
|
"prettier-plugin-svelte": "^3.2.6",
|
|
277
276
|
"start-server-and-test": "^2.0.13",
|
|
278
277
|
"storybook": "^8.6.15",
|
|
279
278
|
"svelte": "^5.46.1",
|
|
280
279
|
"svelte-check": "^3.8.4",
|
|
281
|
-
"tailwindcss": "^
|
|
280
|
+
"tailwindcss": "^4.0.0",
|
|
282
281
|
"typescript": "^5.9.3",
|
|
283
282
|
"typescript-eslint": "^8.52.0",
|
|
284
|
-
"vite": "^
|
|
283
|
+
"vite": "^7.0.0",
|
|
285
284
|
"vite-plugin-istanbul": "^7.2.1",
|
|
286
285
|
"vitest": "^4.0.16"
|
|
287
286
|
},
|
package/dist/stores/auth.js
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { writable } from "svelte/store";
|
|
2
|
-
|
|
3
|
-
// Store to manage authentication state
|
|
4
|
-
export const auth = writable({
|
|
5
|
-
isAuthenticated: false,
|
|
6
|
-
token: null,
|
|
7
|
-
userDetails: null, // To store email and first name
|
|
8
|
-
});
|
|
9
|
-
|
|
10
|
-
// Function to set authentication state
|
|
11
|
-
export const setAuthState = (state) => {
|
|
12
|
-
auth.set(state);
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
// Function to clear the authentication state
|
|
16
|
-
export const clearAuthState = () => {
|
|
17
|
-
auth.set({ isAuthenticated: false, token: null, userDetails: null });
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
// Initialize the store from cookies
|
|
21
|
-
export const initializeAuthState = () => {
|
|
22
|
-
const cookies = Object.fromEntries(
|
|
23
|
-
document.cookie
|
|
24
|
-
.split("; ")
|
|
25
|
-
.map((c) => c.split("="))
|
|
26
|
-
.map(([k, v]) => [k, decodeURIComponent(v)])
|
|
27
|
-
);
|
|
28
|
-
|
|
29
|
-
if (cookies.performer_token) {
|
|
30
|
-
setAuthState({
|
|
31
|
-
isAuthenticated: true,
|
|
32
|
-
token: cookies.performer_token,
|
|
33
|
-
userDetails: cookies.userDetails ? JSON.parse(cookies.userDetails) : null,
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth.spec.d.ts","sourceRoot":"","sources":["../../src/lib/stores/auth.spec.js"],"names":[],"mappings":""}
|