amotify 0.0.2 → 0.0.4

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 (185) hide show
  1. package/dist/src/@jsminAmotifyExtension/_.d.ts +4 -0
  2. package/dist/src/@jsminAmotifyExtension/fetch.d.ts +9 -0
  3. package/dist/src/@jsminAmotifyExtension/formCollect.d.ts +1 -0
  4. package/dist/src/@jsminAmotifyExtension/spreadSheet.d.ts +4 -0
  5. package/dist/src/@jsminAmotifyExtension/variables.d.ts +0 -0
  6. package/dist/src/@types/_.d.ts +6 -0
  7. package/dist/src/@types/amot.d.ts +260 -0
  8. package/dist/src/@types/fn.d.ts +1040 -0
  9. package/dist/src/@types/index.d.ts +62 -0
  10. package/dist/src/@types/jsminAmotifyExtension.d.ts +134 -0
  11. package/dist/src/@types/module.d.ts +2 -0
  12. package/dist/src/@types/state.d.ts +145 -0
  13. package/dist/src/Atoms/@export.d.ts +4 -0
  14. package/dist/src/Atoms/FAIcon/parts.d.ts +2 -0
  15. package/dist/src/Atoms/Logo/parts.d.ts +1 -0
  16. package/dist/src/Atoms/Various/parts.d.ts +9 -0
  17. package/dist/src/Functions/@export.d.ts +12 -0
  18. package/dist/src/Functions/Button/_.d.ts +1 -0
  19. package/dist/src/Functions/Cropper/parts.d.ts +1 -0
  20. package/dist/src/Functions/Effects/Fade.d.ts +1 -0
  21. package/dist/src/Functions/Effects/Ripple.d.ts +1 -0
  22. package/dist/src/Functions/Effects/_.d.ts +3 -0
  23. package/dist/src/Functions/Input/Chips/Selector.d.ts +1 -0
  24. package/dist/src/Functions/Input/Chips/_.d.ts +2 -0
  25. package/dist/src/Functions/Input/DigitCharacters.d.ts +1 -0
  26. package/dist/src/Functions/Input/File/_.d.ts +2 -0
  27. package/dist/src/Functions/Input/Hidden.d.ts +1 -0
  28. package/dist/src/Functions/Input/List/_.d.ts +1 -0
  29. package/dist/src/Functions/Input/Segmented/_.d.ts +1 -0
  30. package/dist/src/Functions/Input/Select/_.d.ts +1 -0
  31. package/dist/src/Functions/Input/Slider/_.d.ts +1 -0
  32. package/dist/src/Functions/Input/Switch/_.d.ts +1 -0
  33. package/dist/src/Functions/Input/Text.d.ts +5 -0
  34. package/dist/src/Functions/Input/TextArea.d.ts +1 -0
  35. package/dist/src/Functions/Input/Time/Picker.d.ts +1 -0
  36. package/dist/src/Functions/Input/Time/_.d.ts +2 -0
  37. package/dist/src/Functions/Input/_.d.ts +5 -0
  38. package/dist/src/Functions/Input/core.d.ts +34 -0
  39. package/dist/src/Functions/Inputs/_.d.ts +3 -0
  40. package/dist/src/Functions/Inputs/text.d.ts +12 -0
  41. package/dist/src/Functions/Layout/PageNotFound.d.ts +1 -0
  42. package/dist/src/Functions/Layout/PageRouter.d.ts +2 -0
  43. package/dist/src/Functions/Layout/PageViewController/parts.d.ts +1 -0
  44. package/dist/src/Functions/Layout/Plate.d.ts +1 -0
  45. package/dist/src/Functions/Layout/RootViewController/parts.d.ts +1 -0
  46. package/dist/src/Functions/Layout/SwipeView/parts.d.ts +2 -0
  47. package/dist/src/Functions/Layout/TabBar.d.ts +1 -0
  48. package/dist/src/Functions/Layout/_.d.ts +2 -0
  49. package/dist/src/Functions/Loader/corner.d.ts +1 -0
  50. package/dist/src/Functions/Loader/mini.d.ts +33 -0
  51. package/dist/src/Functions/Loader/parts.d.ts +3 -0
  52. package/dist/src/Functions/Loader/top.d.ts +1 -0
  53. package/dist/src/Functions/Sheet/parts.d.ts +2 -0
  54. package/dist/src/Functions/SnackBar/parts.d.ts +2 -0
  55. package/dist/src/Functions/Table/Data/parts.d.ts +3 -0
  56. package/dist/src/Functions/Table/Drag/parts.d.ts +1 -0
  57. package/dist/src/Functions/Table/Normal/parts.d.ts +1 -0
  58. package/dist/src/Functions/Table/_.d.ts +9 -0
  59. package/dist/src/Functions/Tooltips/parts.d.ts +2 -0
  60. package/dist/src/Global/@export.d.ts +12 -0
  61. package/dist/src/Global/LaunchReactApplication.d.ts +1 -0
  62. package/dist/src/Global/styleConverter.d.ts +2 -0
  63. package/dist/src/Molecules/@export.d.ts +21 -0
  64. package/dist/src/Molecules/Accordion/parts.d.ts +2 -0
  65. package/dist/src/Molecules/LinkifyText/parts.d.ts +1 -0
  66. package/dist/src/Molecules/List.d.ts +1 -0
  67. package/dist/src/Organisms/@export.d.ts +2 -0
  68. package/dist/src/Organisms/DisplayStyleInput/_.d.ts +1 -0
  69. package/dist/src/Organisms/DisplayStyleInput/darkmode.d.ts +1 -0
  70. package/dist/src/Organisms/DisplayStyleInput/themeColor.d.ts +27 -0
  71. package/dist/src/Templates/@export.d.ts +2 -0
  72. package/dist/src/Templates/PlayGround/parts.d.ts +1 -0
  73. package/dist/src/config.d.ts +16 -0
  74. package/dist/src/launch.d.ts +9 -0
  75. package/dist/src/preload.d.ts +1 -0
  76. package/package.json +2 -2
  77. package/src/@jsminAmotifyExtension/_.tsx +4 -0
  78. package/src/@jsminAmotifyExtension/fetch.tsx +107 -0
  79. package/src/@jsminAmotifyExtension/formCollect.tsx +89 -0
  80. package/src/@jsminAmotifyExtension/spreadSheet.tsx +159 -0
  81. package/src/@jsminAmotifyExtension/variables.tsx +130 -0
  82. package/src/@styles/@app.scss +4 -0
  83. package/src/@styles/@variables/customProps.scss +109 -0
  84. package/src/@styles/@variables/styleSet.scss +38 -0
  85. package/src/@styles/@variables/themeColor.scss +71 -0
  86. package/src/@styles/@variables/var.scss +171 -0
  87. package/src/@styles/UniStyling.scss +996 -0
  88. package/src/@styles/init.scss +154 -0
  89. package/src/@types/_.tsx +6 -0
  90. package/src/@types/amot.tsx +323 -0
  91. package/src/@types/fn.tsx +1210 -0
  92. package/src/@types/index.tsx +74 -0
  93. package/src/@types/jsminAmotifyExtension.tsx +143 -0
  94. package/src/@types/module.tsx +2 -0
  95. package/src/@types/state.tsx +199 -0
  96. package/src/Atoms/@export.tsx +32 -0
  97. package/src/Atoms/FAIcon/parts.tsx +117 -0
  98. package/src/Atoms/FAIcon/style.module.scss +9 -0
  99. package/src/Atoms/Logo/parts.tsx +335 -0
  100. package/src/Atoms/Logo/style.module.scss +96 -0
  101. package/src/Atoms/Various/parts.tsx +157 -0
  102. package/src/Atoms/Various/style.module.scss +40 -0
  103. package/src/Functions/@export.tsx +29 -0
  104. package/src/Functions/Button/_.tsx +305 -0
  105. package/src/Functions/Button/style.module.scss +183 -0
  106. package/src/Functions/Cropper/parts.tsx +1061 -0
  107. package/src/Functions/Cropper/style.module.scss +62 -0
  108. package/src/Functions/Effects/Fade.tsx +81 -0
  109. package/src/Functions/Effects/Ripple.tsx +141 -0
  110. package/src/Functions/Effects/_.tsx +33 -0
  111. package/src/Functions/Effects/style.module.scss +83 -0
  112. package/src/Functions/Input/Chips/Selector.tsx +451 -0
  113. package/src/Functions/Input/Chips/_.tsx +286 -0
  114. package/src/Functions/Input/Chips/style.module.scss +6 -0
  115. package/src/Functions/Input/DigitCharacters.tsx +241 -0
  116. package/src/Functions/Input/File/_.tsx +596 -0
  117. package/src/Functions/Input/File/style.module.scss +34 -0
  118. package/src/Functions/Input/Hidden.tsx +18 -0
  119. package/src/Functions/Input/List/_.tsx +383 -0
  120. package/src/Functions/Input/List/style.module.scss +84 -0
  121. package/src/Functions/Input/Segmented/_.tsx +238 -0
  122. package/src/Functions/Input/Segmented/style.module.scss +81 -0
  123. package/src/Functions/Input/Select/_.tsx +225 -0
  124. package/src/Functions/Input/Select/style.module.scss +10 -0
  125. package/src/Functions/Input/Slider/_.tsx +519 -0
  126. package/src/Functions/Input/Slider/style.module.scss +67 -0
  127. package/src/Functions/Input/Switch/_.tsx +177 -0
  128. package/src/Functions/Input/Switch/style.module.scss +18 -0
  129. package/src/Functions/Input/Text.tsx +437 -0
  130. package/src/Functions/Input/TextArea.tsx +115 -0
  131. package/src/Functions/Input/Time/Picker.tsx +950 -0
  132. package/src/Functions/Input/Time/_.tsx +736 -0
  133. package/src/Functions/Input/Time/style.module.scss +72 -0
  134. package/src/Functions/Input/_.tsx +793 -0
  135. package/src/Functions/Input/core.tsx +461 -0
  136. package/src/Functions/Input/style.module.scss +43 -0
  137. package/src/Functions/Inputs/_.tsx +5 -0
  138. package/src/Functions/Inputs/style.module.scss +15 -0
  139. package/src/Functions/Inputs/text.tsx +67 -0
  140. package/src/Functions/Inputs/types.d.ts +1 -0
  141. package/src/Functions/Layout/PageNotFound.tsx +81 -0
  142. package/src/Functions/Layout/PageRouter.tsx +107 -0
  143. package/src/Functions/Layout/PageViewController/parts.tsx +32 -0
  144. package/src/Functions/Layout/Plate.tsx +30 -0
  145. package/src/Functions/Layout/RootViewController/parts.tsx +290 -0
  146. package/src/Functions/Layout/RootViewController/style.module.scss +24 -0
  147. package/src/Functions/Layout/SwipeView/parts.tsx +380 -0
  148. package/src/Functions/Layout/SwipeView/style.module.scss +19 -0
  149. package/src/Functions/Layout/TabBar.tsx +64 -0
  150. package/src/Functions/Layout/_.tsx +20 -0
  151. package/src/Functions/Loader/corner.tsx +78 -0
  152. package/src/Functions/Loader/mini.tsx +117 -0
  153. package/src/Functions/Loader/parts.tsx +105 -0
  154. package/src/Functions/Loader/style.module.scss +222 -0
  155. package/src/Functions/Loader/top.tsx +90 -0
  156. package/src/Functions/Sheet/parts.tsx +972 -0
  157. package/src/Functions/Sheet/style.module.scss +235 -0
  158. package/src/Functions/SnackBar/parts.tsx +215 -0
  159. package/src/Functions/SnackBar/style.module.scss +25 -0
  160. package/src/Functions/Table/Data/parts.tsx +955 -0
  161. package/src/Functions/Table/Drag/parts.tsx +448 -0
  162. package/src/Functions/Table/Normal/parts.tsx +123 -0
  163. package/src/Functions/Table/_.tsx +170 -0
  164. package/src/Functions/Table/style.module.scss +92 -0
  165. package/src/Functions/Tooltips/parts.tsx +52 -0
  166. package/src/Global/@export.tsx +138 -0
  167. package/src/Global/LaunchReactApplication.tsx +30 -0
  168. package/src/Global/exe.tsx +0 -0
  169. package/src/Global/styleConverter.tsx +435 -0
  170. package/src/Molecules/@export.tsx +95 -0
  171. package/src/Molecules/Accordion/parts.tsx +146 -0
  172. package/src/Molecules/Accordion/style.module.scss +13 -0
  173. package/src/Molecules/LinkifyText/parts.tsx +54 -0
  174. package/src/Molecules/List.tsx +30 -0
  175. package/src/Organisms/@export.tsx +5 -0
  176. package/src/Organisms/DisplayStyleInput/_.tsx +18 -0
  177. package/src/Organisms/DisplayStyleInput/darkmode.tsx +112 -0
  178. package/src/Organisms/DisplayStyleInput/themeColor.tsx +210 -0
  179. package/src/Templates/@export.tsx +7 -0
  180. package/src/Templates/PlayGround/parts.tsx +115 -0
  181. package/src/Templates/PlayGround/style.module.scss +38 -0
  182. package/src/config.tsx +132 -0
  183. package/src/launch.tsx +100 -0
  184. package/src/preload.tsx +49 -0
  185. package/tsconfig.json +27 -14
@@ -0,0 +1,972 @@
1
+ import {
2
+ LaunchReactApplication,
3
+ useStore
4
+ } from '@global';
5
+ import {
6
+ Img,
7
+ Box,
8
+ Flex,
9
+ FAIcon
10
+ } from '@atoms';
11
+ import {
12
+ Column,
13
+ Row,
14
+ Text
15
+ } from '@mols';
16
+ import {
17
+ Buttons,
18
+ Input,
19
+ Layout
20
+ } from '@functions';
21
+ const {
22
+ useEffect,
23
+ useState,
24
+ } = React;
25
+
26
+ import style from './style.module.scss';
27
+
28
+ type Params = amotify.fn.Sheet.Params & {
29
+ type: amotify.fn.Sheet.SheetTypes
30
+ }
31
+
32
+ const Comps = {
33
+ contents: {} as {
34
+ [ key: string ]: {
35
+ open: boolean
36
+ holdState: boolean
37
+ params: Params
38
+ created_at: Time.Method
39
+ }
40
+ },
41
+ Launch: function ( params: Params ) {
42
+ params = {
43
+ sheetID: $.uuidGen(),
44
+ sheetGroups: params.sheetGroups || [],
45
+ overwrap: params.type == 'custom' ? true : false,
46
+ holdState: false,
47
+ ...params,
48
+ closeOption: {
49
+ pageTransit: true,
50
+ escapeKeyDown: true,
51
+ aroundClick: false,
52
+ ...params.closeOption
53
+ },
54
+ }
55
+
56
+ if ( this.contents[ params.sheetID! ] ) {
57
+ /** open Exist Sheet */
58
+ let component = useStore.get( params.sheetID! );
59
+ if ( component && component.refresh ) component.refresh( params,true );
60
+ return;
61
+ }
62
+ /** create Sheet */
63
+ let Content = <Comps.Core { ...params } />
64
+
65
+ this.contents[ params.sheetID! ] = {
66
+ open: true,
67
+ holdState: !!params.holdState,
68
+ params: params,
69
+ created_at: $.Time()
70
+ }
71
+
72
+ $( '#SHEET' )
73
+ .append( `<div id="Sheet-${ params.sheetID }"></div>` )
74
+ .callback( () => {
75
+ LaunchReactApplication( {
76
+ baseElement: '#Sheet-' + params.sheetID,
77
+ reactElement: Content,
78
+ } );
79
+ } );
80
+ },
81
+ mainSheetScrolls: 0,
82
+ subSheetLength: 0,
83
+ Core: ( params: Params ) => {
84
+ let [ val_componentID ] = useState( $.uuidGen() );
85
+ let [ val_params,set_params ] = useState( params );
86
+ let [ val_open,set_open ] = useState( true );
87
+
88
+ let {
89
+ type,
90
+ sheetID,
91
+ openAfter,
92
+ closeAfter
93
+ } = val_params;
94
+
95
+ let isNewSheet = !params.overwrap;
96
+
97
+ let ContentFC: any = Comps.Types[ {
98
+ 'normal.topLeft': 'Normal',
99
+ 'normal.topCenter': 'Normal',
100
+ 'normal.topRight': 'Normal',
101
+ 'normal.middleLeft': 'Normal',
102
+ 'normal.middleCenter': 'Normal',
103
+ 'normal.middleRight': 'Normal',
104
+ 'normal.bottomLeft': 'Normal',
105
+ 'normal.bottomCenter': 'Normal',
106
+ 'normal.bottomRight': 'Normal',
107
+ 'image': 'Normal',
108
+
109
+ 'drawer.left': 'Edge',
110
+ 'drawer.right': 'Edge',
111
+ 'drawer.bottom': 'Bottom',
112
+
113
+ 'custom': 'Custom',
114
+ }[ type ] as 'Normal' ];
115
+
116
+ useEffect( () => {
117
+ useStore.set( {
118
+ key: sheetID!,
119
+ value: {
120
+ refresh: ( params: Params,open?: boolean ) => {
121
+ set_params( params );
122
+ set_open( open ?? false );
123
+ },
124
+ resize: ( size: string ) => {
125
+ if ( type == 'drawer.bottom' ) {
126
+ let component = useStore.get( val_componentID );
127
+ if ( component && component.resize ) component.resize( size );
128
+ } else if (
129
+ val_params.type.includes( 'normal' ) ||
130
+ val_params.type.includes( 'drawer' )
131
+ ) {
132
+ set_params( {
133
+ ...val_params,
134
+ size: size
135
+ } as any );
136
+ }
137
+ },
138
+ close: () => {
139
+ Comps.contents[ sheetID! ].open = false;
140
+
141
+ set_open( false );
142
+ },
143
+ open: () => {
144
+ Comps.contents[ sheetID! ].open = true;
145
+
146
+ set_open( true );
147
+ }
148
+ }
149
+ } );
150
+ } );
151
+ useEffect( () => {
152
+ let {
153
+ closeOption
154
+ } = params;
155
+
156
+ $.fnScope( () => {
157
+ if ( !closeOption?.elementBlur ) return;
158
+ let element = $( closeOption.elementBlur );
159
+ if ( !element[ 0 ] ) return;
160
+ $( element ).addEvent( {
161
+ eventID: 'SheetClosation-' + sheetID!,
162
+ eventType: 'mouseout',
163
+ callback: () => {
164
+ Sheet.close( sheetID! );
165
+
166
+ $().removeEvent( 'SheetClosation-' + sheetID! );
167
+ }
168
+ } );
169
+ } );
170
+ },[] );
171
+ useEffect( () => {
172
+ $.fnScope( () => {
173
+ // #ROOT
174
+ if ( !isNewSheet ) return;
175
+
176
+ Comps.subSheetLength = Comps.subSheetLength + ( val_open ? 1 : -1 );
177
+ if ( val_open ) {
178
+ let html = $( 'html' );
179
+
180
+ if ( Comps.subSheetLength == 1 ) {
181
+ let scroll = html[ 0 ].scrollTop;
182
+ Comps.mainSheetScrolls = scroll;
183
+ }
184
+ if ( !amotify.config.device.isBreakpoint() ) {
185
+ html
186
+ .abort()
187
+ .addClass( style.FixHeight )
188
+ .callback( () => {
189
+ $( '#ROOT' )[ 0 ].scrollTop = Comps.mainSheetScrolls;
190
+ } )
191
+ .addClass( [
192
+ style.FloatMainSheet,
193
+ style[ 'Type_' + type ]
194
+ ] )
195
+ [ 0 ].scrollTop = 0;
196
+ }
197
+ } else {
198
+ if ( Comps.subSheetLength != 0 ) return;
199
+ if ( amotify.config.device.isBreakpoint() ) return;
200
+ let html = $( 'html' );
201
+ html
202
+ .abort()
203
+ .removeClass( style.FloatMainSheet )
204
+ .await( 251 )
205
+ .removeClass( style.FixHeight )
206
+ .callback( ( html ) => {
207
+ html[ 0 ].scrollTop = Comps.mainSheetScrolls | 0;
208
+ $( '#ROOT' )[ 0 ].scrollTop = 0;
209
+ } );
210
+ }
211
+ } );
212
+ $.fnScope( () => {
213
+ if ( val_open ) {
214
+ $( '#' + val_componentID )
215
+ .abort()
216
+ .await( 10 )
217
+ .removeClass( style.Hide )
218
+ .await( 10 )
219
+ .addClass( style.Open )
220
+ .callback( () => {
221
+ if ( openAfter ) openAfter();
222
+ } )
223
+ } else {
224
+ $( '#' + val_componentID )
225
+ .abort()
226
+ .await( 10 )
227
+ .removeClass( style.Open )
228
+ .await( 251 )
229
+ .addClass( style.Hide )
230
+ .callback( () => {
231
+ !closeAfter || closeAfter();
232
+ params.holdState || $.fnScope( () => {
233
+ delete Comps.contents[ sheetID! ];
234
+ $( '#Sheet-' + sheetID ).remove();
235
+ $().removeEvent( 'SheetClosation-' + sheetID! );
236
+ } );
237
+ } );
238
+ }
239
+ } );
240
+ },[ val_open ] );
241
+
242
+ let [ Tcate,Tpos ] = type.split( '.' );
243
+
244
+ return ( <Box
245
+ className={ [
246
+ style.Wrap,
247
+ style[ 'Tcate_' + Tcate ],
248
+ style[ 'Tpos_' + Tpos ],
249
+ style[ 'isNewSheet_' + isNewSheet ],
250
+ ].join( ' ' ) }
251
+ width={ 1 }
252
+ height={ 0 }
253
+ ssAbsoluteCovered
254
+ freeCSS={ {
255
+ zIndex: Object.keys( Comps.contents ).length + 1
256
+ } }
257
+ id={ val_componentID }
258
+ >
259
+ <Column
260
+ className={ style.Content }
261
+ gap={ 0 }
262
+ height={ 'viewHeight' }
263
+ overflow={ 'auto' }
264
+ transition='middle'
265
+ >
266
+ { isNewSheet ? <Comps.TapSensor
267
+ sheetID={ sheetID! }
268
+ delegateAroundClick={ params.closeOption?.aroundClick }
269
+ /> : null }
270
+ <ContentFC
271
+ componentID={ val_componentID }
272
+ { ...val_params }
273
+ />
274
+ </Column>
275
+ </Box> );
276
+ },
277
+ Types: {
278
+ Normal: ( params: amotify.fn.Sheet.NormalParams ) => {
279
+ let {
280
+ sheetID,
281
+ content: Content,
282
+ className = '',
283
+ type,
284
+ size = 'R',
285
+ freeCSS,
286
+ ...styles
287
+ } = params;
288
+ let [ Tcate,Tpos ] = type.split( '.' );
289
+
290
+ let SysStyles: amotifyUniStyleParams = {}
291
+ let transformOrigins: string[] = [];
292
+
293
+ if ( Tpos.match( /top/ ) ) {
294
+ transformOrigins.push( 'top' );
295
+
296
+ SysStyles.marginBottom = 'auto';
297
+ } else if ( Tpos.match( /middle/ ) ) {
298
+ transformOrigins.push( 'center' );
299
+
300
+ SysStyles.marginTop = 'auto';
301
+ SysStyles.marginBottom = 'auto';
302
+ } else if ( Tpos.match( /bottom/ ) ) {
303
+ transformOrigins.push( 'bottom' );
304
+
305
+ SysStyles.marginTop = 'auto';
306
+ }
307
+
308
+ if ( Tpos.match( /left/i ) ) {
309
+ transformOrigins.push( 'left' );
310
+
311
+ SysStyles.marginRight = 'auto';
312
+ } else if ( Tpos.match( /center/i ) ) {
313
+ transformOrigins.push( 'center' );
314
+
315
+ SysStyles.marginLeft = 'auto';
316
+ SysStyles.marginRight = 'auto';
317
+ } else if ( Tpos.match( /right/i ) ) {
318
+ transformOrigins.push( 'right' );
319
+
320
+ SysStyles.marginLeft = 'auto';
321
+ }
322
+
323
+ return ( <Box
324
+ className={ [
325
+ style.BB,
326
+ className
327
+ ].join( ' ' ) }
328
+
329
+ transition='long'
330
+ opacity='trans'
331
+ { ...SysStyles }
332
+ { ...styles }
333
+ freeCSS={ {
334
+ width: {
335
+ 'S': '26rem',
336
+ 'R': '36rem',
337
+ 'L': '44rem',
338
+ '2L': '60rem',
339
+ '3L': '72rem',
340
+ 'MAX': '95vw'
341
+ }[ size ],
342
+ maxWidth: '96vw',
343
+ transformOrigin: transformOrigins.join( ' ' ),
344
+ ...freeCSS
345
+ } }
346
+ children={ $.is.function( Content ) ? <Content /> : Content }
347
+ /> );
348
+ },
349
+ Edge: ( params: amotify.fn.Sheet.NormalParams ) => {
350
+ let {
351
+ sheetID,
352
+ type,
353
+ content: Content,
354
+ className = '',
355
+ size = 'R',
356
+ freeCSS,
357
+ ...styles
358
+ } = params;
359
+
360
+ return ( <Box
361
+ opacity='trans'
362
+ transition='long'
363
+ position='relative'
364
+ backgroundColor={ '1.layer.base' }
365
+ flexSizing={ 'none' }
366
+ minHeight={ 'viewHeight' }
367
+ boxShadow={ 3 }
368
+ className={ [
369
+ style.BB,
370
+ className
371
+ ].join( ' ' ) }
372
+ { ...type == 'drawer.right' ? {
373
+ marginLeft: 'auto'
374
+ } : type == 'drawer.left' ? {
375
+ marginRight: 'auto'
376
+ } : {} }
377
+ { ...styles }
378
+ freeCSS={ {
379
+ width: {
380
+ 'S': '20rem',
381
+ 'R': '27rem',
382
+ 'L': '32rem',
383
+ '2L': '40rem',
384
+ '3L': '58rem',
385
+ 'MAX': '95vw'
386
+ }[ size ],
387
+ ...freeCSS
388
+ } }
389
+ children={ $.is.function( Content ) ? <Content /> : Content }
390
+ /> );
391
+ },
392
+ Bottom: ( params: amotify.fn.Sheet.Bottom.Params ) => {
393
+ let {
394
+ componentID,
395
+ sheetID,
396
+ content: Content,
397
+ size = 'R',
398
+ sizeChanged,
399
+ baseStyles,
400
+ closeOption: {
401
+ swipeDown = true,
402
+ } = {},
403
+ ...styles
404
+ } = params;
405
+ let screen = $.getScreenSize();
406
+
407
+ let sizeArray = [ 0,.2,.6,.95 ];
408
+ let SizeSets = {
409
+ 'ZERO': 0,
410
+ 'S': 1,
411
+ 'R': 2,
412
+ 'L': 3
413
+ }
414
+
415
+ let [ val_stableSize,set_stableSize ] = useState( size as any );
416
+ let [ val_edit,set_edit ] = useState( {
417
+ process: false,
418
+ processStart: 0,
419
+ originY: 0,
420
+ originValue: 0,
421
+ viewHeight: 0,
422
+ value: sizeArray[ SizeSets[ size ] ]
423
+ } );
424
+
425
+ useStore.update( {
426
+ key: componentID!,
427
+ value: {
428
+ val_edit,
429
+ resize: ( size: amotify.fn.Sheet.Bottom.Sizes ) => {
430
+ let Size = sizeArray[ SizeSets[ size ] ];
431
+ set_edit( {
432
+ ...val_edit,
433
+ value: Size
434
+ } );
435
+ set_stableSize( size );
436
+ }
437
+ }
438
+ } );
439
+
440
+ const Effects = {
441
+ Start: ( event: any ) => {
442
+ $( document )
443
+ .addEvent( { eventID: 'BottomSheetMouseMove',eventType: 'mousemove',callback: Effects.Move } )
444
+ .addEvent( { eventID: 'BottomSheetTouchMove',eventType: 'touchmove',callback: Effects.Move } )
445
+ .addEvent( { eventID: 'BottomSheetMouseUp',eventType: 'mouseup',callback: Effects.End } )
446
+ .addEvent( { eventID: 'BottomSheetTouchEnd',eventType: 'touchend',callback: Effects.End } );
447
+
448
+ let cursor = $.getCursor( event );
449
+ let newEditInfo = {
450
+ ...val_edit,
451
+ process: true,
452
+ processStart: new Date().getTime(),
453
+ originY: cursor.y,
454
+ originValue: val_edit.value,
455
+ viewHeight: $.getScreenSize().height,
456
+ }
457
+ useStore.update( {
458
+ key: componentID!,
459
+ value: {
460
+ val_edit: newEditInfo
461
+ }
462
+ } );
463
+ set_edit( newEditInfo );
464
+ },
465
+ Move: ( event: any ) => {
466
+ let editInfo = useStore.get( componentID! )?.val_edit as typeof val_edit;
467
+ if ( !editInfo.process ) return;
468
+
469
+ let margin = $.getCursor( event ).y - editInfo.originY;
470
+ let marginRate = margin / editInfo.viewHeight;
471
+ let newRate = editInfo.originValue - marginRate;
472
+
473
+ if ( newRate > .95 ) {
474
+ let margin = newRate - .95;
475
+ newRate = .95 + margin * .5;
476
+ } else if ( newRate < .2 ) {
477
+ let margin = .2 - newRate;
478
+ margin -= .1;
479
+ newRate = .1 + ( .1 - margin ) * .5;
480
+ }
481
+
482
+ set_edit( {
483
+ ...editInfo,
484
+ value: newRate
485
+ } );
486
+ },
487
+ End: ( event: any ) => {
488
+ let editInfo = useStore.get( componentID! )?.val_edit as typeof val_edit;
489
+ if ( !editInfo.process ) return;
490
+ $( document ).removeEvent( [
491
+ 'BottomSheetMouseMove',
492
+ 'BottomSheetTouchMove',
493
+ 'BottomSheetMouseUp',
494
+ 'BottomSheetTouchEnd'
495
+ ] );
496
+
497
+ let sizeIndex = 0;
498
+ if ( editInfo.value < .1 ) {
499
+ } else if ( editInfo.value < .5 ) {
500
+ sizeIndex = 1;
501
+ } else if ( editInfo.value > .75 ) {
502
+ sizeIndex = 3;
503
+ } else {
504
+ sizeIndex = 2;
505
+ }
506
+
507
+ let ms = new Date().getTime() - editInfo.processStart;
508
+ if ( ms < 300 ) {
509
+ let margin = $.getCursor( event ).y - editInfo.originY;
510
+ if ( Math.abs( margin ) >= 20 ) {
511
+ let dir = Number( margin < 0 ) * 2 - 1;
512
+ sizeIndex += dir;
513
+ sizeIndex = Math.min( Math.max( sizeIndex,0 ),sizeArray.length - 1 );
514
+ }
515
+ }
516
+
517
+ if ( sizeIndex == 0 ) {
518
+ if ( !swipeDown ) sizeIndex = 1;
519
+ }
520
+ set_stableSize( [ 'ZERO','S','R','L' ][ sizeIndex ] as any );
521
+ set_edit( {
522
+ ...editInfo,
523
+ value: sizeArray[ sizeIndex ],
524
+ process: false
525
+ } );
526
+ }
527
+ }
528
+
529
+ const mounted = React.useRef( false );
530
+ useEffect( () => {
531
+ if ( mounted.current ) {
532
+ if ( val_stableSize == 'ZERO' ) {
533
+ if ( swipeDown ) Sheet.close( sheetID! );
534
+ } else {
535
+ setTimeout( () => {
536
+ if ( params.sizeChanged ) params.sizeChanged( val_stableSize );
537
+ },250 );
538
+ }
539
+ } else {
540
+ mounted.current = true;
541
+ }
542
+ },[ val_stableSize ] );
543
+
544
+ return ( <Box
545
+ className={ style.BB }
546
+ margin={ [ 0,'auto' ] }
547
+ marginTop={ 'auto' }
548
+ opacity='trans'
549
+ width={ 1 }
550
+ transition='long'
551
+ freeCSS={ {
552
+ maxWidth: 12 * 60,
553
+ height: screen.height * val_edit.value,
554
+ ...val_edit.process ? {
555
+ transition: '0s'
556
+ } : {},
557
+ } }
558
+ >
559
+ <Column
560
+ gap={ 0 }
561
+ flexSizing={ 'none' }
562
+ borderTopLeftRadius={ '1.tone.primary' }
563
+ borderTopRightRadius={ '1.tone.primary' }
564
+ border
565
+ borderBottom='unset'
566
+ boxShadow={ 3 }
567
+ position='relative'
568
+ overflow={ 'hidden' }
569
+ height={ 1 }
570
+ { ...baseStyles }
571
+ >
572
+ <Flex
573
+ verticalAlign='center'
574
+ flexChilds='even'
575
+ padding={ '1/2' }
576
+ backgroundColor='1.layer.base'
577
+ position='relative'
578
+ freeCSS={ {
579
+ userSelect: 'none'
580
+ } }
581
+ >
582
+ <Row.Center>
583
+ <Box
584
+ padding={ '2/3' }
585
+ onMouseDown={ Effects.Start }
586
+ onTouchStart={ Effects.Start }
587
+ ssPushable
588
+ isRounded
589
+ freeCSS={ {
590
+ cursor: 'grab',
591
+ userSelect: 'none'
592
+ } }
593
+ >
594
+ <Box
595
+ unitWidth={ 6 }
596
+ unitHeight={ '1/2' }
597
+ backgroundColor='5.layer.darker'
598
+ isRounded
599
+ className={ style.DragBar }
600
+ />
601
+ </Box>
602
+ </Row.Center>
603
+ <Row.Right>
604
+ <Buttons.Button.Sub.R
605
+ color='cloud'
606
+ ssSphere={ 2 }
607
+ onClick={ () => {
608
+ Sheet.close( sheetID! );
609
+ } }
610
+ >
611
+ <FAIcon.Times />
612
+ </Buttons.Button.Sub.R>
613
+ </Row.Right>
614
+ </Flex>
615
+ <Box
616
+ backgroundColor={ '1.layer.base' }
617
+ flexSizing={ 0 }
618
+ overflow={ 'auto' }
619
+ { ...styles }
620
+ children={ $.is.function( Content ) ? <Content /> : Content }
621
+ />
622
+ </Column>
623
+ </Box> );
624
+ },
625
+ Custom: ( params: amotify.fn.Sheet.CustomParams ) => {
626
+ let {
627
+ sheetID,
628
+ parent,
629
+ gravityPoint: GPT = 22,
630
+ content: Content,
631
+ ...others
632
+ } = params;
633
+
634
+ let [ val_componentID ] = React.useState( $.uuidGen() );
635
+ let Parent = $( parent );
636
+ let Query = '[data-sheet-id="' + val_componentID + '"]';
637
+ let ContentQuery = '[data-sheet-content="' + val_componentID + '"]';
638
+
639
+ GPT = GPT!;
640
+ let column = GPT % 5 || 5;
641
+ let row = Math.ceil( GPT / 5 );
642
+
643
+ const getWrapperCSS = () => {
644
+ let WrapperCSS: React.CSSProperties = {}
645
+ let { top,right,bottom,left,height,width } = Parent.position();
646
+
647
+ if ( [ 1,2 ].includes( column ) ) {
648
+ WrapperCSS.left = left;
649
+ } else if ( column == 3 ) {
650
+ WrapperCSS.left = left + width / 2;
651
+ } else if ( [ 4,5 ].includes( column ) ) {
652
+ WrapperCSS.left = right;
653
+ }
654
+
655
+ if ( GPT <= 10 ) {
656
+ WrapperCSS.top = top;
657
+ } else if ( GPT <= 15 ) {
658
+ WrapperCSS.top = top + height / 2;
659
+ } else if ( GPT <= 25 ) {
660
+ WrapperCSS.top = bottom;
661
+ }
662
+ return WrapperCSS;
663
+ }
664
+ let [ val_Styles,set_Styles ] = React.useState( getWrapperCSS() );
665
+ const AdjustExtrusion = () => {
666
+ let ContentRect = $( ContentQuery ).position();
667
+ let screen = $.getScreenSize();
668
+
669
+ let newStyles = { ...val_Styles }
670
+ if ( ContentRect.top < 0 ) {
671
+ if ( ContentRect.height < screen.height ) {
672
+ newStyles.top = ContentRect.top - ContentRect.top;
673
+ }
674
+ }
675
+ if ( ContentRect.left < 0 ) {
676
+ if ( ContentRect.width < screen.width ) {
677
+ newStyles.left = ContentRect.left - ContentRect.left;
678
+ }
679
+ }
680
+ if ( ContentRect.right > screen.width ) {
681
+ if ( ContentRect.width < screen.width ) {
682
+ let shift = ContentRect.right - screen.width;
683
+ newStyles.left = ContentRect.left - shift;
684
+ }
685
+ }
686
+ if ( ContentRect.bottom > screen.height ) {
687
+ if ( ContentRect.height < screen.height ) {
688
+ let shift = ContentRect.bottom - screen.height;
689
+ newStyles.top = ContentRect.top - shift;
690
+ }
691
+ }
692
+ return newStyles;
693
+ }
694
+
695
+ React.useEffect( () => {
696
+ $( Query )
697
+ .await( 10 )
698
+ .addClass( style.Open )
699
+ .await( 250 )
700
+ .callback( () => {
701
+ set_Styles( AdjustExtrusion() );
702
+ } );
703
+
704
+ useStore.update( {
705
+ key: 'customSheet-' + params.sheetID!,
706
+ value: {
707
+ reposition: () => {
708
+ setTimeout( () => {
709
+ set_Styles( AdjustExtrusion() );
710
+ },200 );
711
+ }
712
+ }
713
+ } );
714
+ },[] );
715
+
716
+ if ( !Parent[ 0 ] ) return ( null );
717
+
718
+ return ( <Box
719
+ className={ [
720
+ style.BB,
721
+ style.CustomSheet
722
+ ].join( ' ' ) }
723
+ data-sheet-id={ val_componentID }
724
+ transition='long'
725
+ opacity='trans'
726
+ position='absolute'
727
+ width={ 0 }
728
+ height={ 0 }
729
+ flexCenter
730
+ freeCSS={ val_Styles }
731
+ >
732
+ <Flex
733
+ className={ [
734
+ style.GPT,
735
+ style[ 'GPT_' + GPT ],
736
+ style[ 'Col_' + column ],
737
+ style[ 'Row_' + row ],
738
+ ].join( ' ' ) }
739
+ position='absolute'
740
+ >
741
+ <Box
742
+ flexSizing={ 'none' }
743
+ data-sheet-content={ val_componentID }
744
+ { ...others }
745
+ children={ $.is.function( Content ) ? <Content /> : Content }
746
+ />
747
+ </Flex>
748
+ </Box> );
749
+ },
750
+ },
751
+ TapSensor: ( params: {
752
+ sheetID: string
753
+ delegateAroundClick?: boolean
754
+ } ) => ( <Buttons.Button.Plain
755
+ className={ style.TapSensor }
756
+ onClick={ () => {
757
+ if ( params.delegateAroundClick ?? false ) Sheet.close( params.sheetID );
758
+ } }
759
+ freeCSS={ {
760
+ cursor: 'default'
761
+ } }
762
+ >
763
+ <Box
764
+ className={ style.TapContent }
765
+ />
766
+ </Buttons.Button.Plain> )
767
+ }
768
+
769
+ $( document )
770
+ .addEvent( {
771
+ eventType: 'keyup',
772
+ callback: function ( event ) {
773
+ let { key,metaKey } = event as any;
774
+ if ( key == 'Escape' || key == ',' && metaKey ) {
775
+ let OpenSheets = Object.values( Comps.contents ).filter( ( elm ) => elm.open );
776
+ if ( !OpenSheets.length ) return;
777
+ let latestSheet = OpenSheets.reduce( ( a,b ) => {
778
+ return a.created_at.value > b.created_at.value ? a : b;
779
+ } );
780
+ Sheet.close( latestSheet.params.sheetID! );
781
+ }
782
+ }
783
+ } )
784
+ .addEvent( {
785
+ eventType: 'click',
786
+ callback: function ( event ) {
787
+ let customSheets = Object.values( Comps.contents ).filter( ( elm ) => elm.params.type == 'custom' );
788
+ if ( !customSheets.length ) return;
789
+ let isParent = !!customSheets.find( ( customSheet ) => {
790
+ let { params } = customSheet;
791
+ let Parent = $( ( params as amotify.fn.Sheet.CustomParams ).parent );
792
+ let Target = $( event.target );
793
+ return Parent[ 0 ] == Target[ 0 ] || !!Parent.find( Target ).length;
794
+ } );
795
+ if ( isParent ) return;
796
+ if ( event.target?.closest( '.' + style.CustomSheet ) ) return;
797
+
798
+ customSheets.forEach( ( customSheets ) => {
799
+ if ( !!customSheets.params.closeOption?.aroundClick ) {
800
+ Sheet.close( customSheets.params.sheetID! );
801
+ }
802
+ } );
803
+ }
804
+ } );
805
+
806
+ const Sheet: amotify.fn.Sheet.Methods = {
807
+ open: ( params ) => {
808
+ params.sheetID = ( params.sheetID || '' ).replace( /\./g,'-' );
809
+ if ( params.type == 'image' ) {
810
+ let {
811
+ type,
812
+ sheetID = $.uuidGen(),
813
+ src,
814
+ ...others
815
+ } = params as amotify.fn.Sheet.ImageParams;
816
+
817
+ Sheet.open( {
818
+ type: 'normal.topCenter',
819
+ sheetID: sheetID,
820
+ backgroundColor: 'trans',
821
+ boxShadow: 'none',
822
+ ...others,
823
+ closeOption: {
824
+ ...params.closeOption,
825
+ },
826
+ freeCSS: {
827
+ maxWidth: '96vw',
828
+ transformOrigin: 'top'
829
+ },
830
+ content: () => {
831
+ let [ val_image ] = useState( $.flatArray( src ) );
832
+ let [ val_viewIndex,set_viewIndex ] = useState( 0 );
833
+
834
+ let Radio: amotify.fn.Input.List.OptionParams[] = [];
835
+ let Slides: ReactElement[] = [];
836
+ val_image.forEach( ( src,index ) => {
837
+ Radio.push( {
838
+ value: index,
839
+ label: <Img
840
+ src={ $.flatArray( src )[ 0 ] }
841
+ width={ 'auto' }
842
+ height={ 1 }
843
+ freeCSS={ {
844
+ maxHeight: 12 * 3
845
+ } }
846
+ />
847
+ } );
848
+ Slides.push( <Img
849
+ width={ 1 }
850
+ height={ 'auto' }
851
+ src={ $.flatArray( src )[ 0 ] }
852
+ /> );
853
+ } )
854
+ return ( <Column
855
+ gap={ 0 }
856
+ >
857
+ <Row.Separate
858
+ gap={ 2 }
859
+ padding={ 1 }
860
+ backgroundColor='1.layer.base'
861
+ borderTopLeftRadius={ '1.tone.primary' }
862
+ borderTopRightRadius={ '1.tone.primary' }
863
+ >
864
+ <Input.Radio
865
+ tone='border'
866
+ icon={ false }
867
+ value={ val_viewIndex }
868
+ override='force'
869
+ horizontalAlign='center'
870
+ onUpdateValidValue={ ( { value } ) => {
871
+ set_viewIndex( value[ 0 ] );
872
+ } }
873
+ cellStyles={ {
874
+ borderWidth: 2,
875
+ padding: '1/3'
876
+ } }
877
+ options={ Radio }
878
+ />
879
+ <Buttons.Button.Sub.R
880
+ color='cloud'
881
+ ssSphere={ 3 }
882
+ fontSize={ '4.thirdTitle' }
883
+ onClick={ () => {
884
+ Sheet.close( sheetID! );
885
+ } }
886
+ >
887
+ <FAIcon.Times />
888
+ </Buttons.Button.Sub.R>
889
+ </Row.Separate>
890
+ <Layout.SwipeView
891
+ slideIndex={ val_viewIndex }
892
+ options={ {
893
+ loop: val_image.length > 1,
894
+ onSlideCallback: ( index ) => {
895
+ set_viewIndex( index );
896
+ }
897
+ } }
898
+ slides={ Slides }
899
+ wrapper={ ( View ) => ( <Box
900
+ borderBottomLeftRadius={ '1.tone.primary' }
901
+ borderBottomRightRadius={ '1.tone.primary' }
902
+ >
903
+ { View }
904
+ </Box> ) }
905
+ />
906
+ </Column> );
907
+ },
908
+ } );
909
+ return;
910
+ }
911
+ Comps.Launch( params );
912
+ },
913
+ refresh: ( params,open ) => {
914
+ params.sheetID = ( params.sheetID || '' ).replace( /\./g,'-' );
915
+
916
+ let component = useStore.get( params.sheetID! );
917
+ if ( component && component.refresh ) component.refresh( params,open );
918
+ },
919
+ resize: ( params ) => {
920
+ params.sheetID = ( params.sheetID || '' ).replace( /\./g,'-' );
921
+ let component = useStore.get( params.sheetID! );
922
+ if ( component && component.resize ) component.resize( params.size );
923
+ },
924
+ reposition: ( sheetID ) => {
925
+ let Comps = useStore.get( 'customSheet-' + sheetID );
926
+ if ( Comps && Comps.reposition ) Comps.reposition();
927
+ },
928
+ close: function ( sheetID,et ) {
929
+ let Content;
930
+ sheetID = sheetID?.replace( /\./g,'-' );
931
+ Content = Comps.contents[ sheetID ];
932
+
933
+ if ( !Content ) return;
934
+ if ( et == 'escape' && !Content.params.closeOption?.escapeKeyDown ) return;
935
+
936
+ {
937
+ let { params } = Content;
938
+ let { sheetID } = params;
939
+
940
+ let component = useStore.get( sheetID! );
941
+ if ( component && component.close ) component.close();
942
+ }
943
+ },
944
+ closeGroup: ( sheetGroup ) => {
945
+ sheetGroup = ( sheetGroup || '' ).replace( /\./g,'-' );
946
+
947
+ for ( let [ key,value ] of Object.entries( Comps.contents ) ) {
948
+ if ( value.params.sheetGroups?.includes( sheetGroup ) ) Sheet.close( key );
949
+ }
950
+ },
951
+ closeAll: ( pageTransit ) => {
952
+ for ( let [ key,value ] of Object.entries( Comps.contents ) ) {
953
+ if ( pageTransit ) {
954
+ if ( value.params.closeOption?.pageTransit == false ) continue;
955
+ }
956
+ Sheet.close( key,'pageTransit' );
957
+ }
958
+ },
959
+ Comps: {
960
+ Body: ( params ) => ( <Box
961
+ className={ style.BaseBody }
962
+ backgroundColor='1.layer.base'
963
+ borderRadius={ '1.tone.primary' }
964
+ position='relative'
965
+ boxShadow={ 3 }
966
+ transition='long'
967
+ { ...params }
968
+ /> ),
969
+ }
970
+ }
971
+
972
+ export { Sheet }