@molecule/app-solid 1.0.0
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/LICENSE +115 -0
- package/README.md +2543 -0
- package/dist/context.d.ts +82 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +141 -0
- package/dist/context.js.map +1 -0
- package/dist/index.d.ts +61 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +61 -0
- package/dist/index.js.map +1 -0
- package/dist/primitives/async-state.d.ts +46 -0
- package/dist/primitives/async-state.d.ts.map +1 -0
- package/dist/primitives/async-state.js +83 -0
- package/dist/primitives/async-state.js.map +1 -0
- package/dist/primitives/auth.d.ts +85 -0
- package/dist/primitives/auth.d.ts.map +1 -0
- package/dist/primitives/auth.js +147 -0
- package/dist/primitives/auth.js.map +1 -0
- package/dist/primitives/capacitor-app.d.ts +46 -0
- package/dist/primitives/capacitor-app.d.ts.map +1 -0
- package/dist/primitives/capacitor-app.js +57 -0
- package/dist/primitives/capacitor-app.js.map +1 -0
- package/dist/primitives/change-password.d.ts +36 -0
- package/dist/primitives/change-password.d.ts.map +1 -0
- package/dist/primitives/change-password.js +32 -0
- package/dist/primitives/change-password.js.map +1 -0
- package/dist/primitives/device.d.ts +48 -0
- package/dist/primitives/device.d.ts.map +1 -0
- package/dist/primitives/device.js +47 -0
- package/dist/primitives/device.js.map +1 -0
- package/dist/primitives/forms.d.ts +193 -0
- package/dist/primitives/forms.d.ts.map +1 -0
- package/dist/primitives/forms.js +309 -0
- package/dist/primitives/forms.js.map +1 -0
- package/dist/primitives/http.d.ts +176 -0
- package/dist/primitives/http.d.ts.map +1 -0
- package/dist/primitives/http.js +254 -0
- package/dist/primitives/http.js.map +1 -0
- package/dist/primitives/i18n.d.ts +146 -0
- package/dist/primitives/i18n.d.ts.map +1 -0
- package/dist/primitives/i18n.js +223 -0
- package/dist/primitives/i18n.js.map +1 -0
- package/dist/primitives/index.d.ts +27 -0
- package/dist/primitives/index.d.ts.map +1 -0
- package/dist/primitives/index.js +27 -0
- package/dist/primitives/index.js.map +1 -0
- package/dist/primitives/logger.d.ts +143 -0
- package/dist/primitives/logger.d.ts.map +1 -0
- package/dist/primitives/logger.js +165 -0
- package/dist/primitives/logger.js.map +1 -0
- package/dist/primitives/login.d.ts +37 -0
- package/dist/primitives/login.d.ts.map +1 -0
- package/dist/primitives/login.js +32 -0
- package/dist/primitives/login.js.map +1 -0
- package/dist/primitives/oauth.d.ts +102 -0
- package/dist/primitives/oauth.d.ts.map +1 -0
- package/dist/primitives/oauth.js +232 -0
- package/dist/primitives/oauth.js.map +1 -0
- package/dist/primitives/password-reset.d.ts +46 -0
- package/dist/primitives/password-reset.d.ts.map +1 -0
- package/dist/primitives/password-reset.js +49 -0
- package/dist/primitives/password-reset.js.map +1 -0
- package/dist/primitives/platform.d.ts +48 -0
- package/dist/primitives/platform.d.ts.map +1 -0
- package/dist/primitives/platform.js +47 -0
- package/dist/primitives/platform.js.map +1 -0
- package/dist/primitives/promise.d.ts +46 -0
- package/dist/primitives/promise.d.ts.map +1 -0
- package/dist/primitives/promise.js +104 -0
- package/dist/primitives/promise.js.map +1 -0
- package/dist/primitives/push.d.ts +52 -0
- package/dist/primitives/push.d.ts.map +1 -0
- package/dist/primitives/push.js +72 -0
- package/dist/primitives/push.js.map +1 -0
- package/dist/primitives/router.d.ts +170 -0
- package/dist/primitives/router.d.ts.map +1 -0
- package/dist/primitives/router.js +251 -0
- package/dist/primitives/router.js.map +1 -0
- package/dist/primitives/signup.d.ts +37 -0
- package/dist/primitives/signup.d.ts.map +1 -0
- package/dist/primitives/signup.js +32 -0
- package/dist/primitives/signup.js.map +1 -0
- package/dist/primitives/state.d.ts +132 -0
- package/dist/primitives/state.d.ts.map +1 -0
- package/dist/primitives/state.js +167 -0
- package/dist/primitives/state.js.map +1 -0
- package/dist/primitives/storage.d.ts +132 -0
- package/dist/primitives/storage.d.ts.map +1 -0
- package/dist/primitives/storage.js +275 -0
- package/dist/primitives/storage.js.map +1 -0
- package/dist/primitives/theme.d.ts +106 -0
- package/dist/primitives/theme.d.ts.map +1 -0
- package/dist/primitives/theme.js +187 -0
- package/dist/primitives/theme.js.map +1 -0
- package/dist/primitives/version.d.ts +50 -0
- package/dist/primitives/version.d.ts.map +1 -0
- package/dist/primitives/version.js +62 -0
- package/dist/primitives/version.js.map +1 -0
- package/dist/provider.d.ts +36 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/provider.jsx +71 -0
- package/dist/provider.jsx.map +1 -0
- package/dist/types.d.ts +82 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Solid.js primitives for push notifications.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import { createSignal } from 'solid-js';
|
|
7
|
+
import { getProvider } from '@molecule/app-push';
|
|
8
|
+
/**
|
|
9
|
+
* Create push notification primitives.
|
|
10
|
+
*
|
|
11
|
+
* @returns Push primitives object
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```tsx
|
|
15
|
+
* import { createPush } from '@molecule/app-solid'
|
|
16
|
+
*
|
|
17
|
+
* function NotificationButton() {
|
|
18
|
+
* const { permission, requestPermission, register } = createPush()
|
|
19
|
+
*
|
|
20
|
+
* const handleEnable = async () => {
|
|
21
|
+
* const status = await requestPermission()
|
|
22
|
+
* if (status === 'granted') {
|
|
23
|
+
* await register()
|
|
24
|
+
* }
|
|
25
|
+
* }
|
|
26
|
+
*
|
|
27
|
+
* return (
|
|
28
|
+
* <Show when={permission() !== 'granted'}>
|
|
29
|
+
* <button onClick={handleEnable}>Enable Notifications</button>
|
|
30
|
+
* </Show>
|
|
31
|
+
* )
|
|
32
|
+
* }
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export function createPush() {
|
|
36
|
+
const provider = getProvider();
|
|
37
|
+
const [permission, setPermission] = createSignal(null);
|
|
38
|
+
const [token, setToken] = createSignal(null);
|
|
39
|
+
const checkPermission = async () => {
|
|
40
|
+
const status = await provider.checkPermission();
|
|
41
|
+
setPermission(status);
|
|
42
|
+
return status;
|
|
43
|
+
};
|
|
44
|
+
const requestPermission = async () => {
|
|
45
|
+
const status = await provider.requestPermission();
|
|
46
|
+
setPermission(status);
|
|
47
|
+
return status;
|
|
48
|
+
};
|
|
49
|
+
const register = async (options) => {
|
|
50
|
+
const pushToken = await provider.register(options);
|
|
51
|
+
setToken(pushToken);
|
|
52
|
+
return pushToken;
|
|
53
|
+
};
|
|
54
|
+
const unregister = async () => {
|
|
55
|
+
await provider.unregister();
|
|
56
|
+
setToken(null);
|
|
57
|
+
};
|
|
58
|
+
return {
|
|
59
|
+
permission,
|
|
60
|
+
token,
|
|
61
|
+
checkPermission,
|
|
62
|
+
requestPermission,
|
|
63
|
+
register,
|
|
64
|
+
unregister,
|
|
65
|
+
onNotificationReceived: (listener) => provider.onNotificationReceived(listener),
|
|
66
|
+
onNotificationAction: (listener) => provider.onNotificationAction(listener),
|
|
67
|
+
onTokenChange: (listener) => provider.onTokenChange(listener),
|
|
68
|
+
setBadge: (count) => provider.setBadge(count),
|
|
69
|
+
clearBadge: () => provider.clearBadge(),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=push.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/primitives/push.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAiB,YAAY,EAAE,MAAM,UAAU,CAAA;AAUtD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAmBhD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAE9B,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,YAAY,CAA0B,IAAI,CAAC,CAAA;IAC/E,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,YAAY,CAAmB,IAAI,CAAC,CAAA;IAE9D,MAAM,eAAe,GAAG,KAAK,IAA+B,EAAE;QAC5D,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,eAAe,EAAE,CAAA;QAC/C,aAAa,CAAC,MAAM,CAAC,CAAA;QACrB,OAAO,MAAM,CAAA;IACf,CAAC,CAAA;IAED,MAAM,iBAAiB,GAAG,KAAK,IAA+B,EAAE;QAC9D,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,iBAAiB,EAAE,CAAA;QACjD,aAAa,CAAC,MAAM,CAAC,CAAA;QACrB,OAAO,MAAM,CAAA;IACf,CAAC,CAAA;IAED,MAAM,QAAQ,GAAG,KAAK,EAAE,OAA6B,EAAsB,EAAE;QAC3E,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;QAClD,QAAQ,CAAC,SAAS,CAAC,CAAA;QACnB,OAAO,SAAS,CAAA;IAClB,CAAC,CAAA;IAED,MAAM,UAAU,GAAG,KAAK,IAAmB,EAAE;QAC3C,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAA;QAC3B,QAAQ,CAAC,IAAI,CAAC,CAAA;IAChB,CAAC,CAAA;IAED,OAAO;QACL,UAAU;QACV,KAAK;QACL,eAAe;QACf,iBAAiB;QACjB,QAAQ;QACR,UAAU;QACV,sBAAsB,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC,QAAQ,CAAC;QAC/E,oBAAoB,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,QAAQ,CAAC;QAC3E,aAAa,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;QAC7D,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC7C,UAAU,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE;KACxC,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Solid.js primitives for routing.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import { type Accessor } from 'solid-js';
|
|
7
|
+
import type { NavigateOptions, QueryParams, RouteLocation, RouteParams, Router } from '@molecule/app-routing';
|
|
8
|
+
import type { RouterPrimitives } from '../types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Create router primitives for navigation state and actions.
|
|
11
|
+
*
|
|
12
|
+
* @returns Router primitives object
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```tsx
|
|
16
|
+
* import { createRouter } from '@molecule/app-solid'
|
|
17
|
+
*
|
|
18
|
+
* function Navigation() {
|
|
19
|
+
* const { location, navigate, isActive } = createRouter()
|
|
20
|
+
*
|
|
21
|
+
* return (
|
|
22
|
+
* <nav>
|
|
23
|
+
* <a
|
|
24
|
+
* href="/home"
|
|
25
|
+
* class={isActive('/home') ? 'active' : ''}
|
|
26
|
+
* onClick={(e) => {
|
|
27
|
+
* e.preventDefault()
|
|
28
|
+
* navigate('/home')
|
|
29
|
+
* }}
|
|
30
|
+
* >
|
|
31
|
+
* Home
|
|
32
|
+
* </a>
|
|
33
|
+
* <span>Current: {location().pathname}</span>
|
|
34
|
+
* </nav>
|
|
35
|
+
* )
|
|
36
|
+
* }
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare function createRouter(): RouterPrimitives;
|
|
40
|
+
/**
|
|
41
|
+
* Get current route location as accessor.
|
|
42
|
+
*
|
|
43
|
+
* @returns Accessor for current location
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```tsx
|
|
47
|
+
* function Breadcrumb() {
|
|
48
|
+
* const location = useLocation()
|
|
49
|
+
* return <span>{location().pathname}</span>
|
|
50
|
+
* }
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export declare function useLocation(): Accessor<RouteLocation>;
|
|
54
|
+
/**
|
|
55
|
+
* Get current route params as accessor.
|
|
56
|
+
*
|
|
57
|
+
* @returns Accessor for route params
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```tsx
|
|
61
|
+
* function UserProfile() {
|
|
62
|
+
* const params = useParams()
|
|
63
|
+
* return <div>User ID: {params().userId}</div>
|
|
64
|
+
* }
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
export declare function useParams(): Accessor<RouteParams>;
|
|
68
|
+
/**
|
|
69
|
+
* Get current query params as accessor.
|
|
70
|
+
*
|
|
71
|
+
* @returns Accessor for query params
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```tsx
|
|
75
|
+
* function SearchResults() {
|
|
76
|
+
* const query = useQuery()
|
|
77
|
+
* return <div>Search: {query().q}</div>
|
|
78
|
+
* }
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
export declare function useQuery(): Accessor<QueryParams>;
|
|
82
|
+
/**
|
|
83
|
+
* Get navigate function.
|
|
84
|
+
*
|
|
85
|
+
* @returns Navigate function
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* ```tsx
|
|
89
|
+
* function LoginButton() {
|
|
90
|
+
* const navigate = useNavigate()
|
|
91
|
+
*
|
|
92
|
+
* const handleLogin = async () => {
|
|
93
|
+
* await login()
|
|
94
|
+
* navigate('/dashboard')
|
|
95
|
+
* }
|
|
96
|
+
*
|
|
97
|
+
* return <button onClick={handleLogin}>Login</button>
|
|
98
|
+
* }
|
|
99
|
+
* ```
|
|
100
|
+
*/
|
|
101
|
+
export declare function useNavigate(): (path: string, options?: NavigateOptions) => void;
|
|
102
|
+
/**
|
|
103
|
+
* Create a match accessor for a path pattern.
|
|
104
|
+
*
|
|
105
|
+
* @param pattern - Path pattern to match
|
|
106
|
+
* @returns Accessor indicating if current path matches
|
|
107
|
+
*
|
|
108
|
+
* @example
|
|
109
|
+
* ```tsx
|
|
110
|
+
* function NavLink(props: { href: string; children: JSX.Element }) {
|
|
111
|
+
* const isActive = useMatch(props.href)
|
|
112
|
+
* return <a class={isActive() ? 'active' : ''} href={props.href}>{props.children}</a>
|
|
113
|
+
* }
|
|
114
|
+
* ```
|
|
115
|
+
*/
|
|
116
|
+
export declare function useMatch(pattern: string): Accessor<boolean>;
|
|
117
|
+
/**
|
|
118
|
+
* Create a reactive boolean accessor that tracks whether a given path is active.
|
|
119
|
+
*
|
|
120
|
+
* Unlike `useMatch` which only accepts a static pattern, this factory returns
|
|
121
|
+
* a signal that re-evaluates on every route change and supports the `exact`
|
|
122
|
+
* parameter from the router's `isActive` method.
|
|
123
|
+
*
|
|
124
|
+
* @param path - Path to check against the current location
|
|
125
|
+
* @param exact - Whether to require an exact match (default: false)
|
|
126
|
+
* @returns Accessor<boolean> that is true when the path is active
|
|
127
|
+
*
|
|
128
|
+
* @example
|
|
129
|
+
* ```tsx
|
|
130
|
+
* function SideNav() {
|
|
131
|
+
* const dashboardActive = createIsActive('/dashboard')
|
|
132
|
+
* const settingsExact = createIsActive('/settings', true)
|
|
133
|
+
*
|
|
134
|
+
* return (
|
|
135
|
+
* <nav>
|
|
136
|
+
* <a class={dashboardActive() ? 'active' : ''} href="/dashboard">Dashboard</a>
|
|
137
|
+
* <a class={settingsExact() ? 'active' : ''} href="/settings">Settings</a>
|
|
138
|
+
* </nav>
|
|
139
|
+
* )
|
|
140
|
+
* }
|
|
141
|
+
* ```
|
|
142
|
+
*/
|
|
143
|
+
export declare function createIsActive(path: string, exact?: boolean): Accessor<boolean>;
|
|
144
|
+
/**
|
|
145
|
+
* Create router helpers from context.
|
|
146
|
+
*
|
|
147
|
+
* @returns Router helper functions
|
|
148
|
+
*/
|
|
149
|
+
/**
|
|
150
|
+
* Creates a router helpers.
|
|
151
|
+
* @returns The created result.
|
|
152
|
+
*/
|
|
153
|
+
export declare function createRouterHelpers(): {
|
|
154
|
+
navigate: (path: string, options?: NavigateOptions) => void;
|
|
155
|
+
navigateTo: (name: string, params?: RouteParams, query?: QueryParams, options?: NavigateOptions) => void;
|
|
156
|
+
back: () => void;
|
|
157
|
+
forward: () => void;
|
|
158
|
+
getLocation: () => RouteLocation;
|
|
159
|
+
getParams: () => RouteParams;
|
|
160
|
+
getQuery: () => QueryParams;
|
|
161
|
+
isActive: (path: string) => boolean;
|
|
162
|
+
};
|
|
163
|
+
/**
|
|
164
|
+
* Create router primitives from a specific router.
|
|
165
|
+
*
|
|
166
|
+
* @param router - Router instance
|
|
167
|
+
* @returns Router primitives
|
|
168
|
+
*/
|
|
169
|
+
export declare function createRouterFromInstance(router: Router): RouterPrimitives;
|
|
170
|
+
//# sourceMappingURL=router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/primitives/router.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,QAAQ,EAAyC,MAAM,UAAU,CAAA;AAE/E,OAAO,KAAK,EACV,eAAe,EACf,WAAW,EACX,aAAa,EACb,WAAW,EACX,MAAM,EACP,MAAM,uBAAuB,CAAA;AAG9B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAEnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,YAAY,IAAI,gBAAgB,CA4B/C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,IAAI,QAAQ,CAAC,aAAa,CAAC,CAGrD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,IAAI,QAAQ,CAAC,WAAW,CAAC,CAGjD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,IAAI,QAAQ,CAAC,WAAW,CAAC,CAGhD;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,WAAW,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,KAAK,IAAI,CAG/E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAc3D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAa/E;AAED;;;;GAIG;AAEH;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI;IACrC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,KAAK,IAAI,CAAA;IAC3D,UAAU,EAAE,CACV,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,WAAW,EACpB,KAAK,CAAC,EAAE,WAAW,EACnB,OAAO,CAAC,EAAE,eAAe,KACtB,IAAI,CAAA;IACT,IAAI,EAAE,MAAM,IAAI,CAAA;IAChB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,WAAW,EAAE,MAAM,aAAa,CAAA;IAChC,SAAS,EAAE,MAAM,WAAW,CAAA;IAC5B,QAAQ,EAAE,MAAM,WAAW,CAAA;IAC3B,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;CACpC,CAkBA;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAyBzE"}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Solid.js primitives for routing.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import { createEffect, createSignal, onCleanup } from 'solid-js';
|
|
7
|
+
import { getRouter } from '../context.js';
|
|
8
|
+
/**
|
|
9
|
+
* Create router primitives for navigation state and actions.
|
|
10
|
+
*
|
|
11
|
+
* @returns Router primitives object
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```tsx
|
|
15
|
+
* import { createRouter } from '@molecule/app-solid'
|
|
16
|
+
*
|
|
17
|
+
* function Navigation() {
|
|
18
|
+
* const { location, navigate, isActive } = createRouter()
|
|
19
|
+
*
|
|
20
|
+
* return (
|
|
21
|
+
* <nav>
|
|
22
|
+
* <a
|
|
23
|
+
* href="/home"
|
|
24
|
+
* class={isActive('/home') ? 'active' : ''}
|
|
25
|
+
* onClick={(e) => {
|
|
26
|
+
* e.preventDefault()
|
|
27
|
+
* navigate('/home')
|
|
28
|
+
* }}
|
|
29
|
+
* >
|
|
30
|
+
* Home
|
|
31
|
+
* </a>
|
|
32
|
+
* <span>Current: {location().pathname}</span>
|
|
33
|
+
* </nav>
|
|
34
|
+
* )
|
|
35
|
+
* }
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export function createRouter() {
|
|
39
|
+
const router = getRouter();
|
|
40
|
+
const [location, setLocation] = createSignal(router.getLocation());
|
|
41
|
+
const [params, setParams] = createSignal(router.getParams());
|
|
42
|
+
const [query, setQuery] = createSignal(router.getQuery());
|
|
43
|
+
// Subscribe to route changes
|
|
44
|
+
createEffect(() => {
|
|
45
|
+
const unsubscribe = router.subscribe((newLocation) => {
|
|
46
|
+
setLocation(newLocation);
|
|
47
|
+
setParams(router.getParams());
|
|
48
|
+
setQuery(router.getQuery());
|
|
49
|
+
});
|
|
50
|
+
onCleanup(unsubscribe);
|
|
51
|
+
});
|
|
52
|
+
return {
|
|
53
|
+
location,
|
|
54
|
+
params,
|
|
55
|
+
query,
|
|
56
|
+
navigate: router.navigate.bind(router),
|
|
57
|
+
navigateTo: router.navigateTo.bind(router),
|
|
58
|
+
back: router.back.bind(router),
|
|
59
|
+
forward: router.forward.bind(router),
|
|
60
|
+
isActive: router.isActive.bind(router),
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Get current route location as accessor.
|
|
65
|
+
*
|
|
66
|
+
* @returns Accessor for current location
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```tsx
|
|
70
|
+
* function Breadcrumb() {
|
|
71
|
+
* const location = useLocation()
|
|
72
|
+
* return <span>{location().pathname}</span>
|
|
73
|
+
* }
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
export function useLocation() {
|
|
77
|
+
const { location } = createRouter();
|
|
78
|
+
return location;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Get current route params as accessor.
|
|
82
|
+
*
|
|
83
|
+
* @returns Accessor for route params
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* ```tsx
|
|
87
|
+
* function UserProfile() {
|
|
88
|
+
* const params = useParams()
|
|
89
|
+
* return <div>User ID: {params().userId}</div>
|
|
90
|
+
* }
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
93
|
+
export function useParams() {
|
|
94
|
+
const { params } = createRouter();
|
|
95
|
+
return params;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Get current query params as accessor.
|
|
99
|
+
*
|
|
100
|
+
* @returns Accessor for query params
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* ```tsx
|
|
104
|
+
* function SearchResults() {
|
|
105
|
+
* const query = useQuery()
|
|
106
|
+
* return <div>Search: {query().q}</div>
|
|
107
|
+
* }
|
|
108
|
+
* ```
|
|
109
|
+
*/
|
|
110
|
+
export function useQuery() {
|
|
111
|
+
const { query } = createRouter();
|
|
112
|
+
return query;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Get navigate function.
|
|
116
|
+
*
|
|
117
|
+
* @returns Navigate function
|
|
118
|
+
*
|
|
119
|
+
* @example
|
|
120
|
+
* ```tsx
|
|
121
|
+
* function LoginButton() {
|
|
122
|
+
* const navigate = useNavigate()
|
|
123
|
+
*
|
|
124
|
+
* const handleLogin = async () => {
|
|
125
|
+
* await login()
|
|
126
|
+
* navigate('/dashboard')
|
|
127
|
+
* }
|
|
128
|
+
*
|
|
129
|
+
* return <button onClick={handleLogin}>Login</button>
|
|
130
|
+
* }
|
|
131
|
+
* ```
|
|
132
|
+
*/
|
|
133
|
+
export function useNavigate() {
|
|
134
|
+
const { navigate } = createRouter();
|
|
135
|
+
return navigate;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Create a match accessor for a path pattern.
|
|
139
|
+
*
|
|
140
|
+
* @param pattern - Path pattern to match
|
|
141
|
+
* @returns Accessor indicating if current path matches
|
|
142
|
+
*
|
|
143
|
+
* @example
|
|
144
|
+
* ```tsx
|
|
145
|
+
* function NavLink(props: { href: string; children: JSX.Element }) {
|
|
146
|
+
* const isActive = useMatch(props.href)
|
|
147
|
+
* return <a class={isActive() ? 'active' : ''} href={props.href}>{props.children}</a>
|
|
148
|
+
* }
|
|
149
|
+
* ```
|
|
150
|
+
*/
|
|
151
|
+
export function useMatch(pattern) {
|
|
152
|
+
const { isActive } = createRouter();
|
|
153
|
+
const [matches, setMatches] = createSignal(isActive(pattern));
|
|
154
|
+
createEffect(() => {
|
|
155
|
+
const router = getRouter();
|
|
156
|
+
const unsubscribe = router.subscribe(() => {
|
|
157
|
+
setMatches(isActive(pattern));
|
|
158
|
+
});
|
|
159
|
+
onCleanup(unsubscribe);
|
|
160
|
+
});
|
|
161
|
+
return matches;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Create a reactive boolean accessor that tracks whether a given path is active.
|
|
165
|
+
*
|
|
166
|
+
* Unlike `useMatch` which only accepts a static pattern, this factory returns
|
|
167
|
+
* a signal that re-evaluates on every route change and supports the `exact`
|
|
168
|
+
* parameter from the router's `isActive` method.
|
|
169
|
+
*
|
|
170
|
+
* @param path - Path to check against the current location
|
|
171
|
+
* @param exact - Whether to require an exact match (default: false)
|
|
172
|
+
* @returns Accessor<boolean> that is true when the path is active
|
|
173
|
+
*
|
|
174
|
+
* @example
|
|
175
|
+
* ```tsx
|
|
176
|
+
* function SideNav() {
|
|
177
|
+
* const dashboardActive = createIsActive('/dashboard')
|
|
178
|
+
* const settingsExact = createIsActive('/settings', true)
|
|
179
|
+
*
|
|
180
|
+
* return (
|
|
181
|
+
* <nav>
|
|
182
|
+
* <a class={dashboardActive() ? 'active' : ''} href="/dashboard">Dashboard</a>
|
|
183
|
+
* <a class={settingsExact() ? 'active' : ''} href="/settings">Settings</a>
|
|
184
|
+
* </nav>
|
|
185
|
+
* )
|
|
186
|
+
* }
|
|
187
|
+
* ```
|
|
188
|
+
*/
|
|
189
|
+
export function createIsActive(path, exact) {
|
|
190
|
+
const router = getRouter();
|
|
191
|
+
const [active, setActive] = createSignal(router.isActive(path, exact));
|
|
192
|
+
createEffect(() => {
|
|
193
|
+
const unsubscribe = router.subscribe(() => {
|
|
194
|
+
setActive(router.isActive(path, exact));
|
|
195
|
+
});
|
|
196
|
+
onCleanup(unsubscribe);
|
|
197
|
+
});
|
|
198
|
+
return active;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Create router helpers from context.
|
|
202
|
+
*
|
|
203
|
+
* @returns Router helper functions
|
|
204
|
+
*/
|
|
205
|
+
/**
|
|
206
|
+
* Creates a router helpers.
|
|
207
|
+
* @returns The created result.
|
|
208
|
+
*/
|
|
209
|
+
export function createRouterHelpers() {
|
|
210
|
+
const router = getRouter();
|
|
211
|
+
return {
|
|
212
|
+
navigate: (path, options) => router.navigate(path, options),
|
|
213
|
+
navigateTo: (name, params, query, options) => router.navigateTo(name, params, query, options),
|
|
214
|
+
back: () => router.back(),
|
|
215
|
+
forward: () => router.forward(),
|
|
216
|
+
getLocation: () => router.getLocation(),
|
|
217
|
+
getParams: () => router.getParams(),
|
|
218
|
+
getQuery: () => router.getQuery(),
|
|
219
|
+
isActive: (path) => router.isActive(path),
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Create router primitives from a specific router.
|
|
224
|
+
*
|
|
225
|
+
* @param router - Router instance
|
|
226
|
+
* @returns Router primitives
|
|
227
|
+
*/
|
|
228
|
+
export function createRouterFromInstance(router) {
|
|
229
|
+
const [location, setLocation] = createSignal(router.getLocation());
|
|
230
|
+
const [params, setParams] = createSignal(router.getParams());
|
|
231
|
+
const [query, setQuery] = createSignal(router.getQuery());
|
|
232
|
+
createEffect(() => {
|
|
233
|
+
const unsubscribe = router.subscribe((newLocation) => {
|
|
234
|
+
setLocation(newLocation);
|
|
235
|
+
setParams(router.getParams());
|
|
236
|
+
setQuery(router.getQuery());
|
|
237
|
+
});
|
|
238
|
+
onCleanup(unsubscribe);
|
|
239
|
+
});
|
|
240
|
+
return {
|
|
241
|
+
location,
|
|
242
|
+
params,
|
|
243
|
+
query,
|
|
244
|
+
navigate: router.navigate.bind(router),
|
|
245
|
+
navigateTo: router.navigateTo.bind(router),
|
|
246
|
+
back: router.back.bind(router),
|
|
247
|
+
forward: router.forward.bind(router),
|
|
248
|
+
isActive: router.isActive.bind(router),
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
//# sourceMappingURL=router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/primitives/router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Solid.js primitive for registration with async state tracking.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import type { Accessor } from 'solid-js';
|
|
7
|
+
import type { AuthResult, RegisterData } from '@molecule/app-auth';
|
|
8
|
+
import type { PromiseState } from '@molecule/app-utilities';
|
|
9
|
+
/**
|
|
10
|
+
* Return type for createSignup primitive.
|
|
11
|
+
*/
|
|
12
|
+
export interface CreateSignupReturn<T = unknown> {
|
|
13
|
+
state: Accessor<PromiseState<AuthResult<T>>>;
|
|
14
|
+
signup: (data: RegisterData) => Promise<AuthResult<T>>;
|
|
15
|
+
reset: () => void;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Creates a signup primitive with async state tracking.
|
|
19
|
+
*
|
|
20
|
+
* @returns Signup state and action
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```tsx
|
|
24
|
+
* const { state, signup } = createSignup()
|
|
25
|
+
*
|
|
26
|
+
* return (
|
|
27
|
+
* <button
|
|
28
|
+
* onClick={() => signup({ email: email(), password: password() })}
|
|
29
|
+
* disabled={state().status === 'pending'}
|
|
30
|
+
* >
|
|
31
|
+
* {state().status === 'pending' ? 'Signing up...' : 'Sign Up'}
|
|
32
|
+
* </button>
|
|
33
|
+
* )
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export declare function createSignup<T = unknown>(): CreateSignupReturn<T>;
|
|
37
|
+
//# sourceMappingURL=signup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signup.d.ts","sourceRoot":"","sources":["../../src/primitives/signup.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAExC,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAK3D;;GAEG;AACH,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,OAAO;IAC7C,KAAK,EAAE,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5C,MAAM,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;IACtD,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,YAAY,CAAC,CAAC,GAAG,OAAO,KAAK,kBAAkB,CAAC,CAAC,CAAC,CAKjE"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Solid.js primitive for registration with async state tracking.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import { getAuthClient } from '../context.js';
|
|
7
|
+
import { createPromise } from './promise.js';
|
|
8
|
+
/**
|
|
9
|
+
* Creates a signup primitive with async state tracking.
|
|
10
|
+
*
|
|
11
|
+
* @returns Signup state and action
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```tsx
|
|
15
|
+
* const { state, signup } = createSignup()
|
|
16
|
+
*
|
|
17
|
+
* return (
|
|
18
|
+
* <button
|
|
19
|
+
* onClick={() => signup({ email: email(), password: password() })}
|
|
20
|
+
* disabled={state().status === 'pending'}
|
|
21
|
+
* >
|
|
22
|
+
* {state().status === 'pending' ? 'Signing up...' : 'Sign Up'}
|
|
23
|
+
* </button>
|
|
24
|
+
* )
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export function createSignup() {
|
|
28
|
+
const client = getAuthClient();
|
|
29
|
+
const { state, call, reset } = createPromise((data) => client.register(data));
|
|
30
|
+
return { state, signup: call, reset };
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=signup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signup.js","sourceRoot":"","sources":["../../src/primitives/signup.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAW5C;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,MAAM,GAAG,aAAa,EAAK,CAAA;IACjC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,aAAa,CAAC,CAAC,IAAkB,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;IAE3F,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;AACvC,CAAC"}
|