@xwadex/fesd-next 0.1.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.
Files changed (40) hide show
  1. package/README.md +35 -0
  2. package/package.json +45 -0
  3. package/src/fesd/components/Anchors/Anchor.Controller.tsx +101 -0
  4. package/src/fesd/components/Anchors/Anchor.Offseter.tsx +36 -0
  5. package/src/fesd/components/Anchors/Anchor.Target.tsx +97 -0
  6. package/src/fesd/components/Anchors/Anchor.Wrapper.tsx +160 -0
  7. package/src/fesd/components/Anchors/Anchors.tsx +12 -0
  8. package/src/fesd/components/Anchors/index.ts +2 -0
  9. package/src/fesd/components/Articles/Article.Basic.tsx +49 -0
  10. package/src/fesd/components/Articles/Article.Figure.tsx +113 -0
  11. package/src/fesd/components/Articles/ArticleBasic.module.scss +62 -0
  12. package/src/fesd/components/Articles/ArticleFigure.module.scss +82 -0
  13. package/src/fesd/components/Articles/index.ts +2 -0
  14. package/src/fesd/components/Collapse/Collapse.Body.tsx +27 -0
  15. package/src/fesd/components/Collapse/Collapse.Container.tsx +56 -0
  16. package/src/fesd/components/Collapse/Collapse.Head.tsx +39 -0
  17. package/src/fesd/components/Collapse/Collapse.Wrapper.tsx +46 -0
  18. package/src/fesd/components/Collapse/Collapse.module.scss +23 -0
  19. package/src/fesd/components/Collapse/Collapse.tsx +11 -0
  20. package/src/fesd/components/Collapse/CollapseContext.tsx +21 -0
  21. package/src/fesd/components/Collapse/index.ts +1 -0
  22. package/src/fesd/components/Modals/Modals.module.scss +84 -0
  23. package/src/fesd/components/Modals/Modals.tsx +103 -0
  24. package/src/fesd/components/Modals/Modals.types.ts +52 -0
  25. package/src/fesd/components/Modals/index.ts +2 -0
  26. package/src/fesd/components/Overlay/Overlay.module.scss +14 -0
  27. package/src/fesd/components/Overlay/Overlay.tsx +50 -0
  28. package/src/fesd/components/Overlay/Overlay.types.ts +5 -0
  29. package/src/fesd/components/Overlay/index.ts +2 -0
  30. package/src/fesd/components/index.ts +5 -0
  31. package/src/fesd/hooks/index.ts +2 -0
  32. package/src/fesd/hooks/useAnchor4/Anchor4.ts +185 -0
  33. package/src/fesd/hooks/useAnchor4/index.ts +2 -0
  34. package/src/fesd/hooks/useAnchor4/useAnchor4.tsx +88 -0
  35. package/src/fesd/hooks/useDragScroll4.tsx +139 -0
  36. package/src/fesd/hooks/useTransitionend.tsx +3 -0
  37. package/src/fesd/methods/Easing4/Easing4.ts +374 -0
  38. package/src/fesd/methods/Easing4/index.ts +2 -0
  39. package/src/fesd/methods/index.ts +1 -0
  40. package/src/fesd/tools.ts +69 -0
@@ -0,0 +1,374 @@
1
+ /* 2024.06.10 */
2
+ // https://www.cnblogs.com/ZTianming/p/15390536.html
3
+ // 函数参数说明 每个函数包含 t、b、c 和 d 四个参数
4
+ // t = Time - 表示动画开始以来经过的时间。通常从0开始,通过游戏循环或update函数来缓慢增加。
5
+ // b = Beginning value - 动画的起点,默认从0开始。
6
+ // c = Change in value - 从起点到终点的差值。
7
+ // d = Duration - 完成动画所需的时间。 使用示例
8
+
9
+ // t = 0 - 动画从0s开始
10
+ // b = 200 - 对象 x 坐标的起始位置为200
11
+ // c = 300 - 对象必须向右移动 300,到500 结束
12
+ // d = 1 - 对象用 1 秒时间来完成从 200 到 500 的移动
13
+ export type Easing4Type =
14
+ | "easeLinear"
15
+ | "easeInQuad"
16
+ | "easeOutQuad"
17
+ | "easeInOutQuad"
18
+ | "easeInSine"
19
+ | "easeOutSine"
20
+ | "easeInOutSine"
21
+ | "easeInExpo"
22
+ | "easeOutExpo"
23
+ | "easeInOutExpo"
24
+ | "easeInCirc"
25
+ | "easeOutCirc"
26
+ | "easeInOutCirc"
27
+ | "easeInCubic"
28
+ | "easeOutCubic"
29
+ | "easeInOutCubic"
30
+ | "easeInQuart"
31
+ | "easeOutQuart"
32
+ | "easeInOutQuart"
33
+ | "easeInQuint"
34
+ | "easeOutQuint"
35
+ | "easeInOutQuint"
36
+ | "easeInElastic"
37
+ | "easeOutElastic"
38
+ | "easeInOutElastic"
39
+ | "easeInBack"
40
+ | "easeOutBack"
41
+ | "easeInOutBack"
42
+ | "easeInBounce"
43
+ | "easeOutBounce"
44
+ | "easeInOutBounce"
45
+
46
+ export function easeLinear(
47
+ t: number,
48
+ b: number,
49
+ c: number,
50
+ d: number
51
+ ) {
52
+ return c * t / d + b;
53
+ }
54
+ export function easeInQuad(
55
+ t: number,
56
+ b: number,
57
+ c: number,
58
+ d: number
59
+ ) {
60
+ return c * (t /= d) * t + b;
61
+ }
62
+ export function easeOutQuad(
63
+ t: number,
64
+ b: number,
65
+ c: number,
66
+ d: number
67
+ ) {
68
+ return -c * (t /= d) * (t - 2) + b;
69
+ }
70
+ export function easeInOutQuad(
71
+ t: number,
72
+ b: number,
73
+ c: number,
74
+ d: number
75
+ ) {
76
+ if ((t /= d / 2) < 1) return c / 2 * t * t + b;
77
+ return -c / 2 * ((--t) * (t - 2) - 1) + b;
78
+ }
79
+ export function easeInSine(
80
+ t: number,
81
+ b: number,
82
+ c: number,
83
+ d: number
84
+ ) {
85
+ return -c * Math.cos(t / d * (Math.PI / 2)) + c + b;
86
+ }
87
+ export function easeOutSine(
88
+ t: number,
89
+ b: number,
90
+ c: number,
91
+ d: number
92
+ ) {
93
+ return c * Math.sin(t / d * (Math.PI / 2)) + b;
94
+ }
95
+ export function easeInOutSine(
96
+ t: number,
97
+ b: number,
98
+ c: number,
99
+ d: number
100
+ ) {
101
+ return -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b;
102
+ }
103
+ export function easeInExpo(
104
+ t: number,
105
+ b: number,
106
+ c: number,
107
+ d: number
108
+ ) {
109
+ return (t == 0) ? b : c * Math.pow(2, 10 * (t / d - 1)) + b;
110
+ }
111
+ export function easeOutExpo(
112
+ t: number,
113
+ b: number,
114
+ c: number,
115
+ d: number
116
+ ) {
117
+ return (t == d) ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b;
118
+ }
119
+ export function easeInOutExpo(
120
+ t: number,
121
+ b: number,
122
+ c: number,
123
+ d: number
124
+ ) {
125
+ if (t == 0) return b;
126
+ if (t == d) return b + c;
127
+ if ((t /= d / 2) < 1) return c / 2 * Math.pow(2, 10 * (t - 1)) + b;
128
+ return c / 2 * (-Math.pow(2, -10 * --t) + 2) + b;
129
+ }
130
+ export function easeInCirc(
131
+ t: number,
132
+ b: number,
133
+ c: number,
134
+ d: number
135
+ ) {
136
+ return -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;
137
+ }
138
+ export function easeOutCirc(
139
+ t: number,
140
+ b: number,
141
+ c: number,
142
+ d: number
143
+ ) {
144
+ return c * Math.sqrt(1 - (t = t / d - 1) * t) + b;
145
+ }
146
+ export function easeInOutCirc(
147
+ t: number,
148
+ b: number,
149
+ c: number,
150
+ d: number
151
+ ) {
152
+ if ((t /= d / 2) < 1) return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b;
153
+ return c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;
154
+ }
155
+ export function easeInCubic(
156
+ t: number,
157
+ b: number,
158
+ c: number,
159
+ d: number
160
+ ) {
161
+ return c * (t /= d) * t * t + b;
162
+ }
163
+ export function easeOutCubic(
164
+ t: number,
165
+ b: number,
166
+ c: number,
167
+ d: number
168
+ ) {
169
+ return c * ((t = t / d - 1) * t * t + 1) + b;
170
+ }
171
+ export function easeInOutCubic(
172
+ t: number,
173
+ b: number,
174
+ c: number,
175
+ d: number
176
+ ) {
177
+ if ((t /= d / 2) < 1) return c / 2 * t * t * t + b;
178
+ return c / 2 * ((t -= 2) * t * t + 2) + b;
179
+ }
180
+ export function easeInQuart(
181
+ t: number,
182
+ b: number,
183
+ c: number,
184
+ d: number
185
+ ) {
186
+ return c * (t /= d) * t * t * t + b;
187
+ }
188
+ export function easeOutQuart(
189
+ t: number,
190
+ b: number,
191
+ c: number,
192
+ d: number
193
+ ) {
194
+ return -c * ((t = t / d - 1) * t * t * t - 1) + b;
195
+ }
196
+ export function easeInOutQuart(
197
+ t: number,
198
+ b: number,
199
+ c: number,
200
+ d: number
201
+ ) {
202
+ if ((t /= d / 2) < 1) return c / 2 * t * t * t * t + b;
203
+ return -c / 2 * ((t -= 2) * t * t * t - 2) + b;
204
+ }
205
+ export function easeInQuint(
206
+ t: number,
207
+ b: number,
208
+ c: number,
209
+ d: number
210
+ ) {
211
+ return c * (t /= d) * t * t * t * t + b;
212
+ }
213
+ export function easeOutQuint(
214
+ t: number,
215
+ b: number,
216
+ c: number,
217
+ d: number
218
+ ) {
219
+ return c * ((t = t / d - 1) * t * t * t * t + 1) + b;
220
+ }
221
+ export function easeInOutQuint(
222
+ t: number,
223
+ b: number,
224
+ c: number,
225
+ d: number
226
+ ) {
227
+ if ((t /= d / 2) < 1) return c / 2 * t * t * t * t * t + b;
228
+ return c / 2 * ((t -= 2) * t * t * t * t + 2) + b;
229
+ }
230
+ export function easeInElastic(
231
+ t: number,
232
+ b: number,
233
+ c: number,
234
+ d: number
235
+ ) {
236
+ let s = 1.70158;
237
+ let p = 0;
238
+ let a = c;
239
+ if (t == 0) return b;
240
+ if ((t /= d) == 1) return b + c;
241
+ if (!p) p = d * .3;
242
+ if (a < Math.abs(c)) { a = c; s = p / 4; }
243
+ else s = p / (2 * Math.PI) * Math.asin(c / a);
244
+ return -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;
245
+ }
246
+ export function easeOutElastic(
247
+ t: number,
248
+ b: number,
249
+ c: number,
250
+ d: number
251
+ ) {
252
+ let s = 1.70158; let p = 0; let a = c;
253
+ if (t == 0) return b;
254
+ if ((t /= d) == 1) return b + c;
255
+ if (!p) p = d * .3;
256
+ if (a < Math.abs(c)) { a = c; s = p / 4; }
257
+ else s = p / (2 * Math.PI) * Math.asin(c / a);
258
+ return a * Math.pow(2, -10 * t) * Math.sin((t * d - s) * (2 * Math.PI) / p) + c + b;
259
+ }
260
+ export function easeInOutElastic(
261
+ t: number,
262
+ b: number,
263
+ c: number,
264
+ d: number
265
+ ) {
266
+ let s = 1.70158;
267
+ let p = 0;
268
+ let a = c;
269
+ if (t == 0) return b;
270
+ if ((t /= d / 2) == 2) return b + c;
271
+ if (!p) p = d * (.3 * 1.5);
272
+ if (a < Math.abs(c)) { a = c; s = p / 4; }
273
+ else s = p / (2 * Math.PI) * Math.asin(c / a); if (t < 1)
274
+ return -.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;
275
+ return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p) * .5 + c + b;
276
+ }
277
+ export function easeInBack(
278
+ t: number,
279
+ b: number,
280
+ c: number,
281
+ d: number
282
+ ) {
283
+ let s
284
+ if (s == undefined) s = 1.70158;
285
+ return c * (t /= d) * t * ((s + 1) * t - s) + b;
286
+ }
287
+ export function easeOutBack(
288
+ t: number,
289
+ b: number,
290
+ c: number,
291
+ d: number
292
+ ) {
293
+ let s
294
+ if (s == undefined) s = 1.70158;
295
+ return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;
296
+ }
297
+ export function easeInOutBack(
298
+ t: number,
299
+ b: number,
300
+ c: number,
301
+ d: number
302
+ ) {
303
+ let s
304
+ if (s == undefined) s = 1.70158;
305
+ if ((t /= d / 2) < 1) return c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b;
306
+ return c / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2) + b;
307
+ }
308
+ export function easeInBounce(
309
+ t: number,
310
+ b: number,
311
+ c: number,
312
+ d: number
313
+ ) {
314
+ return c - easeOutBounce(d - t, 0, c, d) + b;
315
+ }
316
+ export function easeOutBounce(
317
+ t: number,
318
+ b: number,
319
+ c: number,
320
+ d: number
321
+ ) {
322
+ if ((t /= d) < (1 / 2.75)) {
323
+ return c * (7.5625 * t * t) + b;
324
+ } else if (t < (2 / 2.75)) {
325
+ return c * (7.5625 * (t -= (1.5 / 2.75)) * t + .75) + b;
326
+ } else if (t < (2.5 / 2.75)) {
327
+ return c * (7.5625 * (t -= (2.25 / 2.75)) * t + .9375) + b;
328
+ } else {
329
+ return c * (7.5625 * (t -= (2.625 / 2.75)) * t + .984375) + b;
330
+ }
331
+ }
332
+ export function easeInOutBounce(
333
+ t: number,
334
+ b: number,
335
+ c: number,
336
+ d: number
337
+ ) {
338
+ if (t < d / 2) return easeInBounce(t * 2, 0, c, d) * .5 + b;
339
+ return easeOutBounce(t * 2 - d, 0, c, d) * .5 + c * .5 + b;
340
+ }
341
+
342
+ export const Easing4 = {
343
+ easeLinear,
344
+ easeInQuad,
345
+ easeOutQuad,
346
+ easeInOutQuad,
347
+ easeInSine,
348
+ easeOutSine,
349
+ easeInOutSine,
350
+ easeInExpo,
351
+ easeOutExpo,
352
+ easeInOutExpo,
353
+ easeInCirc,
354
+ easeOutCirc,
355
+ easeInOutCirc,
356
+ easeInCubic,
357
+ easeOutCubic,
358
+ easeInOutCubic,
359
+ easeInQuart,
360
+ easeOutQuart,
361
+ easeInOutQuart,
362
+ easeInQuint,
363
+ easeOutQuint,
364
+ easeInOutQuint,
365
+ easeInElastic,
366
+ easeOutElastic,
367
+ easeInOutElastic,
368
+ easeInBack,
369
+ easeOutBack,
370
+ easeInOutBack,
371
+ easeInBounce,
372
+ easeOutBounce,
373
+ easeInOutBounce,
374
+ }
@@ -0,0 +1,2 @@
1
+ /* 2024.05.28 */
2
+ export * from "./Easing4"
@@ -0,0 +1 @@
1
+ export * from "./Easing4"
@@ -0,0 +1,69 @@
1
+ import { lock, unlock, clearBodyLocks } from "tua-body-scroll-lock"
2
+
3
+ export const mediaRatio = (width: number, height: number) =>
4
+ Number(width) && Number(height)
5
+ ? Math.round(height / width * 10000) / 100 + "%"
6
+ : "100%"
7
+
8
+
9
+ export const delay = (time: number) => new Promise<void>((resolve) => {
10
+ let timer = setTimeout(() => {
11
+ clearTimeout(timer)
12
+ return resolve()
13
+ }, time)
14
+ })
15
+
16
+ export const querySearchWord = (str: string) => str.trim().toLowerCase()
17
+
18
+ export const lockBody = (
19
+ active: boolean,
20
+ stillScrollHTMLElement?: HTMLElement | HTMLElement[] | null | undefined
21
+ ): void => {
22
+
23
+ if (active) {
24
+ document.body.style.overflow = "visible"
25
+ lock(stillScrollHTMLElement)
26
+ } else {
27
+ document.body.style.overflow = ""
28
+ clearBodyLocks()
29
+ }
30
+ }
31
+
32
+ export const mergeClassName = (...argements: (string | number | boolean)[]): string =>
33
+ argements.toString().replace(/,/g, " ").replace(/\s+/g, " ").trim()
34
+
35
+
36
+ export const getSearchParams = (searchParams: URLSearchParams) => {
37
+ const params: any = {}
38
+ searchParams.forEach((value: any, key: any) => { params[key] = value })
39
+ return params
40
+ }
41
+
42
+ export const getURLSearchParams = (searchParams: URLSearchParams) => {
43
+ const params: any = {}
44
+ searchParams.forEach((value: any, key: any) => { params[key] = value })
45
+ return new URLSearchParams({ ...params })
46
+ }
47
+
48
+ export const off = (event: string, callback: (e: any) => void, ref?: HTMLElement | Window & typeof globalThis,) => {
49
+ const element = ref ?? window
50
+ element.removeEventListener(event, callback)
51
+ }
52
+
53
+ export const on = (event: string, callback: (e: any) => void, ref?: HTMLElement | Window & typeof globalThis,) => {
54
+ const element = ref ?? window
55
+ element.addEventListener(event, callback)
56
+ }
57
+
58
+ export const debug = (target: string, value: any, fn: string, hook?: string,) =>
59
+ console.debug(`debug mode : ${hook ? hook + " > " + fn : fn} > ${target}`, value);
60
+
61
+ export const query = (name: string) => document.querySelector(name)
62
+
63
+ export const queryAll = (name: string) => document.querySelectorAll(name)
64
+
65
+ export const isElement = (element: any | null) => element instanceof Element
66
+
67
+
68
+
69
+