5htp-core 0.5.1-93 → 0.5.1-95

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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "5htp-core",
3
3
  "description": "Convenient TypeScript framework designed for Performance and Productivity.",
4
- "version": "0.5.1-93",
4
+ "version": "0.5.1-95",
5
5
  "author": "Gaetan Le Gac (https://github.com/gaetanlegac)",
6
6
  "repository": "git://github.com/gaetanlegac/5htp-core.git",
7
7
  "license": "MIT",
@@ -17,6 +17,9 @@
17
17
  "@lexical/headless": "^0.18.0",
18
18
  "@lexical/html": "^0.18.0",
19
19
  "@lexical/react": "^0.18.0",
20
+ "@mantine/core": "^7.17.2",
21
+ "@mantine/dates": "^7.17.2",
22
+ "@mantine/hooks": "^7.17.2",
20
23
  "accepts": "^1.3.7",
21
24
  "activity-detector": "^3.0.0",
22
25
  "ansi-to-html": "^0.7.1",
@@ -67,7 +70,6 @@
67
70
  "preact": "^10.22.1",
68
71
  "preact-render-to-string": "^6.5.5",
69
72
  "prettier": "^3.3.3",
70
- "react-datetime-picker": "^5.6.0",
71
73
  "react-scrollbars-custom": "^4.0.27",
72
74
  "react-slider": "^2.0.1",
73
75
  "react-textarea-autosize": "^8.3.3",
@@ -4,6 +4,7 @@
4
4
 
5
5
  // Npm
6
6
  import React from 'react';
7
+ import { ColorSchemeScript, MantineProvider, mantineHtmlProps } from '@mantine/core';
7
8
 
8
9
  // Core
9
10
  import type { Layout } from '@common/router';
@@ -14,9 +15,6 @@ import DialogManager from '@client/components/Dialog/Manager'
14
15
  import RouterComponent from '@client/services/router/components/router';
15
16
  import type { TClientOrServerContextForPage } from '@common/router';
16
17
 
17
- // Resources
18
- import '@client/assets/css/core.less';
19
-
20
18
  /*----------------------------------
21
19
  - COMPOSANT
22
20
  ----------------------------------*/
@@ -35,22 +33,25 @@ export default function App ({ context }: {
35
33
  return (
36
34
  <ReactClientContext.Provider value={context}>
37
35
 
38
- <DialogManager context={context} />
39
-
40
- {!layout ? <>
41
- {/* TODO: move to app, because here, we're not aware that the router service has been defined */}
42
- <RouterComponent service={context.Router} />
43
- </> : <> {/* Same as router/components/Page.tsx */}
44
- <layout.Component
45
- // Services
46
- {...context}
47
- // API data & URL params
48
- data={{
49
- ...apiData,
50
- ...context.request.data
51
- }}
52
- />
53
- </>}
36
+ <MantineProvider>
37
+
38
+ <DialogManager context={context} />
39
+
40
+ {!layout ? <>
41
+ {/* TODO: move to app, because here, we're not aware that the router service has been defined */}
42
+ <RouterComponent service={context.Router} />
43
+ </> : <> {/* Same as router/components/Page.tsx */}
44
+ <layout.Component
45
+ // Services
46
+ {...context}
47
+ // API data & URL params
48
+ data={{
49
+ ...apiData,
50
+ ...context.request.data
51
+ }}
52
+ />
53
+ </>}
54
+ </MantineProvider>
54
55
 
55
56
  </ReactClientContext.Provider>
56
57
  )
@@ -2,6 +2,7 @@
2
2
  - DEPENDANCES
3
3
  ----------------------------------*/
4
4
 
5
+ // Npm
5
6
  import React from 'react';
6
7
 
7
8
  if (typeof window === 'undefined')
@@ -19,6 +20,10 @@ import type { AnyService } from './service';
19
20
 
20
21
  export { default as Service } from './service';
21
22
 
23
+ // Resources
24
+ import '@client/assets/css/core.less';
25
+ import '@mantine/core/styles.css';
26
+
22
27
  /*----------------------------------
23
28
  - TYPES
24
29
  ----------------------------------*/
@@ -101,7 +101,7 @@ body {
101
101
  // FIX: Scrollbars document à cause de custom scrollbar sur barre communautés
102
102
  // TEMPORAIRE
103
103
  overflow-x: hidden;
104
- background: var(--cBg);
104
+ background: var(--cBg) !important; // Override mantine
105
105
  color: var(--cTxtBase);
106
106
 
107
107
  text-align: center;
@@ -1,6 +1,6 @@
1
1
  @import (reference) "@/client/assets/vars.less";
2
2
 
3
- @toast-zindex: 999;
3
+ @toast-zindex: 200;
4
4
 
5
5
  #modals,
6
6
  #toasts {
@@ -27,5 +27,5 @@ export { default as Select } from './Select';
27
27
  export { default as Input } from './inputv3';
28
28
  export { default as Checkbox } from './inputv3/Checkbox';
29
29
  export { default as File } from './inputv3/file';
30
- export { default as DateRangeInput } from './inputv3/Date';
30
+ export { default as Date } from './inputv3/Date';
31
31
  export { default as Rte } from './inputv3/Rte';
@@ -4,7 +4,8 @@
4
4
 
5
5
  // Npm
6
6
  import React from 'react';
7
- import DateRangePicker, { DateTimePickerProps } from 'react-datetime-picker';
7
+ import '@mantine/dates/styles.css';
8
+ import { DateTimePicker, DateTimePickerProps } from '@mantine/dates';
8
9
 
9
10
  // Core
10
11
 
@@ -14,36 +15,13 @@ import DateRangePicker, { DateTimePickerProps } from 'react-datetime-picker';
14
15
  - TYPES
15
16
  ----------------------------------*/
16
17
 
17
- type TValue = [Date, Date]
18
- export type Props = DateTimePickerProps & {
19
- //value: TValue,
20
- //onChange: StateUpdater<TValue>,
21
- placeholder?: string,
22
- min?: string,
23
- max?: string
24
- }
18
+ export type Props = DateTimePickerProps;
25
19
 
26
20
  /*----------------------------------
27
21
  - COMPOSANT
28
22
  ----------------------------------*/
29
- import './DateTimePicker.css';
30
- import './Calendar.css';
31
- import './Clock.css';
32
- export default ({ value, Props, min, max, onChange, ...otherProps }) => {
33
-
34
- const state = React.useState(false);
35
-
36
- /*----------------------------------
37
- - CONSTRUCTION CHAMP
38
- ----------------------------------*/
39
-
40
-
41
- /*----------------------------------
42
- - RENDU DU CHAMP
43
- ----------------------------------*/
23
+ export default ({ ...props }: Props) => {
44
24
  return (
45
- <div>
46
- <DateRangePicker {...otherProps} onChange={onChange} value={value || [null, null]} />
47
- </div>
25
+ <DateTimePicker {...props} />
48
26
  )
49
27
  }
@@ -44,11 +44,17 @@
44
44
  // Since they are not supposed to be on the same row (mobile first design)
45
45
  height: @hInput;
46
46
  align-items: center;
47
-
47
+
48
48
  background: var(--cBg);
49
49
  border-radius: @radius;
50
50
  transition: background .1s linear;
51
51
 
52
+ &.transparent {
53
+ background: none !important;
54
+ border: none !important;
55
+ box-shadow: none !important;
56
+ }
57
+
52
58
  > i {
53
59
  color: var(--cTxtDesc);
54
60
  }
@@ -124,8 +124,6 @@ export default class ServerResponse<
124
124
 
125
125
  // Run controller
126
126
  const content = await this.route.controller( context );
127
-
128
- // Handle content type
129
127
  if (content === undefined)
130
128
  return;
131
129
 
@@ -225,6 +223,11 @@ export default class ServerResponse<
225
223
  - DATA RESPONSE
226
224
  ----------------------------------*/
227
225
 
226
+ public type( mimetype: string ) {
227
+ this.headers['Content-Type'] = mimetype;
228
+ return this;
229
+ }
230
+
228
231
  public async render( page: Page, context: TRouterContext, additionnalData: {} ) {
229
232
 
230
233
  // Set page in context for the client side
@@ -272,19 +275,17 @@ export default class ServerResponse<
272
275
  this.headers['Content-Type'] = 'text/xml';
273
276
  this.data = xml;
274
277
  return this.end();
275
-
276
278
  }
277
279
 
278
- public text(text: string) {
280
+ public text(text: string, mimetype: string = 'text/plain') {
279
281
 
280
- this.headers['Content-Type'] = 'text/plain';
282
+ this.headers['Content-Type'] = mimetype;
281
283
  this.data = text;
282
284
  return this.end();
283
-
284
285
  }
285
286
 
286
287
  // TODO: https://github.com/adonisjs/http-server/blob/develop/src/Response/index.ts#L430
287
- public async file( filename: string ) {
288
+ public async file( filename: string, mimetype?: string ) {
288
289
 
289
290
  // Securité
290
291
  if (filename.includes('..'))
@@ -317,7 +318,8 @@ export default class ServerResponse<
317
318
 
318
319
 
319
320
  // Mimetype
320
- this.headers['Content-Type'] = 'image/jpeg';
321
+ if (mimetype !== undefined)
322
+ this.headers['Content-Type'] = mimetype;
321
323
 
322
324
  return this.end();
323
325
  }
@@ -6,6 +6,7 @@
6
6
  import React from 'react';
7
7
  import renderToString from "preact-render-to-string";
8
8
  const safeStringify = require('fast-safe-stringify'); // remplace les références circulairs par un [Circular]
9
+ import { ColorSchemeScript, mantineHtmlProps } from '@mantine/core';
9
10
 
10
11
  // Core
11
12
  import type { default as Router, Response as ServerResponse } from "@server/services/router";
@@ -31,7 +32,7 @@ export default class DocumentRenderer<TRouter extends Router> {
31
32
  public staticDocument() {
32
33
  const routesForClient = JSON.stringify( this.router.ssrRoutes );
33
34
  return '<!doctype html>' + renderToString(
34
- <html lang="en">
35
+ <html lang="en" {...mantineHtmlProps}>
35
36
  <head>
36
37
  {/* Format */}
37
38
  <meta charSet="utf-8" />
@@ -41,6 +42,7 @@ export default class DocumentRenderer<TRouter extends Router> {
41
42
  <link rel="stylesheet" type="text/css" href="/public/icons.css" />
42
43
  <link rel="preload" href="/public/client.css" as="style" />
43
44
  <link rel="stylesheet" type="text/css" href="/public/client.css" />
45
+ <ColorSchemeScript />
44
46
 
45
47
  {/* JS */}
46
48
  <script type="text/javascript" dangerouslySetInnerHTML={{
@@ -1,156 +0,0 @@
1
- .react-calendar {
2
- width: 350px;
3
- max-width: 100%;
4
- background: white;
5
- border: 1px solid #a0a096;
6
- font-family: Arial, Helvetica, sans-serif;
7
- line-height: 1.125em;
8
- }
9
-
10
- .react-calendar--doubleView {
11
- width: 700px;
12
- }
13
-
14
- .react-calendar--doubleView .react-calendar__viewContainer {
15
- display: flex;
16
- margin: -0.5em;
17
- }
18
-
19
- .react-calendar--doubleView .react-calendar__viewContainer > * {
20
- width: 50%;
21
- margin: 0.5em;
22
- }
23
-
24
- .react-calendar,
25
- .react-calendar *,
26
- .react-calendar *:before,
27
- .react-calendar *:after {
28
- -moz-box-sizing: border-box;
29
- -webkit-box-sizing: border-box;
30
- box-sizing: border-box;
31
- }
32
-
33
- .react-calendar button {
34
- margin: 0;
35
- border: 0;
36
- outline: none;
37
- }
38
-
39
- .react-calendar button:enabled:hover {
40
- cursor: pointer;
41
- }
42
-
43
- .react-calendar__navigation {
44
- display: flex;
45
- height: 44px;
46
- margin-bottom: 1em;
47
- }
48
-
49
- .react-calendar__navigation button {
50
- min-width: 44px;
51
- background: none;
52
- }
53
-
54
- .react-calendar__navigation button:disabled {
55
- background-color: #f0f0f0;
56
- }
57
-
58
- .react-calendar__navigation button:enabled:hover,
59
- .react-calendar__navigation button:enabled:focus {
60
- background-color: #e6e6e6;
61
- }
62
-
63
- .react-calendar__month-view__weekdays {
64
- text-align: center;
65
- text-transform: uppercase;
66
- font: inherit;
67
- font-size: 0.75em;
68
- font-weight: bold;
69
- }
70
-
71
- .react-calendar__month-view__weekdays__weekday {
72
- padding: 0.5em;
73
- }
74
-
75
- .react-calendar__month-view__weekNumbers .react-calendar__tile {
76
- display: flex;
77
- align-items: center;
78
- justify-content: center;
79
- font: inherit;
80
- font-size: 0.75em;
81
- font-weight: bold;
82
- }
83
-
84
- .react-calendar__month-view__days__day--weekend {
85
- color: #d10000;
86
- }
87
-
88
- .react-calendar__month-view__days__day--neighboringMonth,
89
- .react-calendar__decade-view__years__year--neighboringDecade,
90
- .react-calendar__century-view__decades__decade--neighboringCentury {
91
- color: #757575;
92
- }
93
-
94
- .react-calendar__year-view .react-calendar__tile,
95
- .react-calendar__decade-view .react-calendar__tile,
96
- .react-calendar__century-view .react-calendar__tile {
97
- padding: 2em 0.5em;
98
- }
99
-
100
- .react-calendar__tile {
101
- max-width: 100%;
102
- padding: 10px 6.6667px;
103
- background: none;
104
- text-align: center;
105
- line-height: 16px;
106
- font: inherit;
107
- font-size: 0.833em;
108
- }
109
-
110
- .react-calendar__tile:disabled {
111
- background-color: #f0f0f0;
112
- color: #ababab;
113
- }
114
-
115
- .react-calendar__month-view__days__day--neighboringMonth:disabled,
116
- .react-calendar__decade-view__years__year--neighboringDecade:disabled,
117
- .react-calendar__century-view__decades__decade--neighboringCentury:disabled {
118
- color: #cdcdcd;
119
- }
120
-
121
- .react-calendar__tile:enabled:hover,
122
- .react-calendar__tile:enabled:focus {
123
- background-color: #e6e6e6;
124
- }
125
-
126
- .react-calendar__tile--now {
127
- background: #ffff76;
128
- }
129
-
130
- .react-calendar__tile--now:enabled:hover,
131
- .react-calendar__tile--now:enabled:focus {
132
- background: #ffffa9;
133
- }
134
-
135
- .react-calendar__tile--hasActive {
136
- background: #76baff;
137
- }
138
-
139
- .react-calendar__tile--hasActive:enabled:hover,
140
- .react-calendar__tile--hasActive:enabled:focus {
141
- background: #a9d4ff;
142
- }
143
-
144
- .react-calendar__tile--active {
145
- background: #006edc;
146
- color: white;
147
- }
148
-
149
- .react-calendar__tile--active:enabled:hover,
150
- .react-calendar__tile--active:enabled:focus {
151
- background: #1087ff;
152
- }
153
-
154
- .react-calendar--selectRange .react-calendar__tile--hover {
155
- background-color: #e6e6e6;
156
- }
@@ -1,62 +0,0 @@
1
- .react-clock {
2
- display: block;
3
- position: relative;
4
- }
5
-
6
- .react-clock,
7
- .react-clock *,
8
- .react-clock *:before,
9
- .react-clock *:after {
10
- -moz-box-sizing: border-box;
11
- -webkit-box-sizing: border-box;
12
- box-sizing: border-box;
13
- }
14
-
15
- .react-clock__face {
16
- position: absolute;
17
- top: 0;
18
- bottom: 0;
19
- left: 0;
20
- right: 0;
21
- border: 1px solid black;
22
- border-radius: 50%;
23
- }
24
-
25
- .react-clock__hand {
26
- position: absolute;
27
- top: 0;
28
- bottom: 0;
29
- left: 50%;
30
- right: 50%;
31
- }
32
-
33
- .react-clock__hand__body {
34
- position: absolute;
35
- background-color: black;
36
- transform: translateX(-50%);
37
- }
38
-
39
- .react-clock__mark {
40
- position: absolute;
41
- top: 0;
42
- bottom: 0;
43
- left: 50%;
44
- right: 50%;
45
- }
46
-
47
- .react-clock__mark__body {
48
- position: absolute;
49
- background-color: black;
50
- transform: translateX(-50%);
51
- }
52
-
53
- .react-clock__mark__number {
54
- position: absolute;
55
- left: -40px;
56
- width: 80px;
57
- text-align: center;
58
- }
59
-
60
- .react-clock__second-hand__body {
61
- background-color: red;
62
- }
@@ -1,132 +0,0 @@
1
- .react-datetime-picker {
2
- display: inline-flex;
3
- position: relative;
4
- }
5
-
6
- .react-datetime-picker,
7
- .react-datetime-picker *,
8
- .react-datetime-picker *:before,
9
- .react-datetime-picker *:after {
10
- -moz-box-sizing: border-box;
11
- -webkit-box-sizing: border-box;
12
- box-sizing: border-box;
13
- }
14
-
15
- .react-datetime-picker--disabled {
16
- background-color: #f0f0f0;
17
- color: #6d6d6d;
18
- }
19
-
20
- .react-datetime-picker__wrapper {
21
- display: flex;
22
- flex-grow: 1;
23
- flex-shrink: 0;
24
- border: thin solid gray;
25
- }
26
-
27
- .react-datetime-picker__inputGroup {
28
- min-width: calc(4px + (4px * 3) + 0.54em * 6 + 0.217em * 2);
29
- flex-grow: 1;
30
- padding: 0 2px;
31
- }
32
-
33
- .react-datetime-picker__inputGroup__divider {
34
- padding: 1px 0;
35
- white-space: pre;
36
- }
37
-
38
- .react-datetime-picker__inputGroup__divider,
39
- .react-datetime-picker__inputGroup__leadingZero {
40
- display: inline-block;
41
- font: inherit;
42
- }
43
-
44
- .react-datetime-picker__inputGroup__input {
45
- min-width: 0.54em;
46
- height: calc(100% - 2px);
47
- position: relative;
48
- padding: 1px;
49
- border: 0;
50
- background: none;
51
- color: currentColor;
52
- font: inherit;
53
- box-sizing: content-box;
54
- -webkit-appearance: textfield;
55
- -moz-appearance: textfield;
56
- appearance: textfield;
57
- }
58
-
59
- .react-datetime-picker__inputGroup__input::-webkit-outer-spin-button,
60
- .react-datetime-picker__inputGroup__input::-webkit-inner-spin-button {
61
- -webkit-appearance: none;
62
- -moz-appearance: none;
63
- appearance: none;
64
- margin: 0;
65
- }
66
-
67
- .react-datetime-picker__inputGroup__input:invalid {
68
- background: rgba(255, 0, 0, 0.1);
69
- }
70
-
71
- .react-datetime-picker__inputGroup__input--hasLeadingZero {
72
- margin-left: -0.54em;
73
- padding-left: calc(1px + 0.54em);
74
- }
75
-
76
- .react-datetime-picker__inputGroup__amPm {
77
- font: inherit;
78
- -webkit-appearance: menulist;
79
- -moz-appearance: menulist;
80
- appearance: menulist;
81
- }
82
-
83
- .react-datetime-picker__button {
84
- border: 0;
85
- background: transparent;
86
- padding: 4px 6px;
87
- }
88
-
89
- .react-datetime-picker__button:enabled {
90
- cursor: pointer;
91
- }
92
-
93
- .react-datetime-picker__button:enabled:hover .react-datetime-picker__button__icon,
94
- .react-datetime-picker__button:enabled:focus .react-datetime-picker__button__icon {
95
- stroke: #0078d7;
96
- }
97
-
98
- .react-datetime-picker__button:disabled .react-datetime-picker__button__icon {
99
- stroke: #6d6d6d;
100
- }
101
-
102
- .react-datetime-picker__button svg {
103
- display: inherit;
104
- }
105
-
106
- .react-datetime-picker__calendar,
107
- .react-datetime-picker__clock {
108
- z-index: 1;
109
- }
110
-
111
- .react-datetime-picker__calendar--closed,
112
- .react-datetime-picker__clock--closed {
113
- display: none;
114
- }
115
-
116
- .react-datetime-picker__calendar {
117
- width: 350px;
118
- max-width: 100vw;
119
- }
120
-
121
- .react-datetime-picker__calendar .react-calendar {
122
- border-width: thin;
123
- }
124
-
125
- .react-datetime-picker__clock {
126
- width: 200px;
127
- height: 200px;
128
- max-width: 100vw;
129
- padding: 25px;
130
- background-color: white;
131
- border: thin solid #a0a096;
132
- }