@massimo-cassandro/minimo 0.1.12 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/package.json +8 -4
  2. package/src/{js → components}/dialog-content.js +1 -1
  3. package/src/{css → components/inner-nav}/inner-nav.css +2 -2
  4. package/src/{js → components/inner-nav}/inner-nav.js +8 -0
  5. package/src/components/modal-content/modal-content.js +1 -1
  6. package/src/components/modal-content/modal-content.module.css +4 -4
  7. package/src/components/recaptcha/recaptcha.css +4 -5
  8. package/src/components/recaptcha/recaptcha.minimo.tokens.jsonc +24 -0
  9. package/src/{css/spinners → components/spinner}/TODO spinner-circle.css +1 -1
  10. package/src/components/spinner/readme.md +1 -0
  11. package/src/{css/spinners → components/spinner}/spinner-circle-basic.css +3 -2
  12. package/src/{css/spinners → components/spinner}/spinner-wrapper.css +1 -1
  13. package/src/components/spinner/spinner.minimo.tokens.jsonc +22 -0
  14. package/src/components/toast/toast.js +77 -0
  15. package/src/components/toast/toast.minimo.tokens.jsonc +29 -0
  16. package/src/components/toast/toast.module.css +59 -0
  17. package/src/css/alerts.css +23 -23
  18. package/src/css/anchors.css +17 -16
  19. package/src/css/buttons/btn-close.css +8 -7
  20. package/src/css/buttons/buttons.css +101 -94
  21. package/src/css/buttons/status-buttons.css +43 -43
  22. package/src/css/container.css +3 -12
  23. package/src/css/details.css +1 -1
  24. package/src/css/dialog-content.css +2 -2
  25. package/src/css/flex.css +9 -0
  26. package/src/css/forms/fieldset.css +75 -0
  27. package/src/css/forms/form-group.css +18 -0
  28. package/src/css/forms/form-utilities.css +32 -0
  29. package/src/css/forms/forms.css +37 -202
  30. package/src/css/forms/input-group.css +49 -0
  31. package/src/css/forms/validation.css +25 -0
  32. package/src/css/grid.css +25 -18
  33. package/src/css/headings.css +10 -9
  34. package/src/css/icons.css +1 -40
  35. package/src/css/layout-base.css +3 -3
  36. package/src/css/overlay.css +1 -2
  37. package/src/css/table.css +26 -19
  38. package/src/css/text.css +8 -7
  39. package/src/css/utilities.css +90 -29
  40. package/src/custom-media-default.css +20 -8
  41. package/src/custom-properties-default.css +212 -317
  42. package/src/design-tokens/TODO.md +2 -0
  43. package/src/design-tokens/alerts.minimo.tokens.jsonc +23 -0
  44. package/src/design-tokens/basic.minimo.tokens.jsonc +52 -0
  45. package/src/design-tokens/btn-close.minimo.tokens.jsonc +95 -0
  46. package/src/design-tokens/btn-primary.minimo.tokens.jsonc +100 -0
  47. package/src/design-tokens/btn-secondary.minimo.tokens.jsonc +33 -0
  48. package/src/design-tokens/btn.minimo.tokens.jsonc +200 -0
  49. package/src/design-tokens/color-accent.minimo.tokens.jsonc +13 -0
  50. package/src/design-tokens/color-neutral.minimo.tokens.jsonc +12 -0
  51. package/src/design-tokens/color-primary.minimo.tokens.jsonc +12 -0
  52. package/src/design-tokens/color-secondary.minimo.tokens.jsonc +12 -0
  53. package/src/design-tokens/flex-grid.minimo.tokens.jsonc +18 -0
  54. package/src/design-tokens/form.minimo.tokens.jsonc +295 -0
  55. package/src/design-tokens/gradients-shadowes.minimo.tokens.jsonc +4 -0
  56. package/src/design-tokens/headings.minimo.tokens.jsonc +57 -0
  57. package/src/design-tokens/link.minimo.tokens.jsonc +41 -0
  58. package/src/design-tokens/radius.minimo.tokens.jsonc +45 -0
  59. package/src/design-tokens/size.minimo.tokens.jsonc +101 -0
  60. package/src/design-tokens/status.minimo.tokens.jsonc +69 -0
  61. package/src/design-tokens/table.minimo.tokens.jsonc +66 -0
  62. package/src/design-tokens/typography.minimo.tokens.jsonc +120 -0
  63. package/src/design-tokens/utility.minimo.tokens.jsonc +8 -0
  64. package/src/design-tokens/z-index.minimo.tokens.jsonc +8 -0
  65. package/src/design-tokens-utilities/build-tokens.mjs +501 -0
  66. package/src/design-tokens-utilities/check-unresolved-custom-props.mjs +131 -0
  67. package/src/design-tokens-utilities/config-templates/tokens-config.mjs +34 -0
  68. package/src/design-tokens-utilities/readme.md +16 -0
  69. package/src/fonts-template.css +7 -0
  70. package/src/index-template.css +5 -10
  71. package/src/index.js +1 -0
  72. package/src/utilities/classnames.js +3 -0
  73. package/src/web-components/simple-datatable/icons/arrow-down.svg +1 -0
  74. package/src/web-components/simple-datatable/icons/arrow-up.svg +2 -0
  75. package/src/web-components/simple-datatable/icons/arrows-down-up.svg +1 -0
  76. package/src/web-components/simple-datatable/icons/caret-left.svg +1 -0
  77. package/src/web-components/simple-datatable/icons/caret-right.svg +1 -0
  78. package/src/web-components/simple-datatable/icons/check-bold.svg +1 -0
  79. package/src/web-components/simple-datatable/icons/x-bold.svg +1 -0
  80. package/src/web-components/simple-datatable/simple-datatable.js +219 -0
  81. package/src/web-components/simple-datatable/simple-datatable.minimo.tokens.jsonc +50 -0
  82. package/src/web-components/simple-datatable/simple-datatable.module.css +214 -0
  83. package/src/web-components/simple-datatable/src/parse-cols.js +117 -0
  84. package/src/components/init.js +0 -7
  85. package/src/css/forms/form-edit-info.css +0 -17
  86. /package/src/{js → components}/alert-autoclose.js +0 -0
  87. /package/src/{js → components}/create-blurhash-canvas.js +0 -0
  88. /package/src/{js → components}/dismiss-alerts.js +0 -0
  89. /package/src/{js → components}/forms.js +0 -0
  90. /package/src/{js → components}/img-viewer-dom-builder.js +0 -0
  91. /package/src/{js → components}/overlay.js +0 -0
  92. /package/src/{js → components}/print-icon.js +0 -0
  93. /package/src/{css/spinners → components/spinner}/TODO spinner-three-dots.css +0 -0
  94. /package/src/{css/spinners → components/spinner}/spinner-trailing-dots.css +0 -0
  95. /package/src/{js → components/spinner}/spinner.js +0 -0
@@ -0,0 +1,214 @@
1
+ /* frontend/src/web-components/simple-datatable.module.css */
2
+
3
+ /* import delle custom properties gestito da jit-props */
4
+
5
+
6
+ /* purgecss start ignore */
7
+
8
+ /* .datatable-wrapper.no-header .datatable-container {
9
+ border-top: 1px solid #d9d9d9;
10
+ } */
11
+ .datatableWrapper {
12
+ margin-block: var(--size-md);
13
+ }
14
+
15
+ .topArea {
16
+ display: flex;
17
+ flex-flow: row nowrap;
18
+ /* gap: 1rem; */
19
+ align-items: center;
20
+ justify-content: flex-end;
21
+ padding-block-end: var(--size-xs);
22
+ }
23
+
24
+ .searchWrapper {
25
+ max-width: 50%;
26
+ }
27
+
28
+ .table {
29
+ margin-block: 0;
30
+ border-block: var(--_border); /* definito in minimo table */
31
+
32
+ thead {
33
+ th:has(.sortBtn) {
34
+ padding-inline-end: 0;
35
+ }
36
+ }
37
+
38
+ }
39
+
40
+ /* cella unica per indicare l'assenza di record */
41
+ .empty {
42
+ /* stylelint-disable-next-line declaration-no-important */
43
+ padding: var(--size-sm) !important;
44
+ font-style: italic;
45
+ color: var(--text-muted);
46
+ /* stylelint-disable-next-line declaration-no-important */
47
+ text-align: center !important;
48
+ }
49
+
50
+ .hasIcon {
51
+ /* stylelint-disable-next-line declaration-no-important */
52
+ text-align: center !important;
53
+ svg {
54
+ display: inline-block;
55
+ width: 1.05em;
56
+ }
57
+ }
58
+
59
+
60
+ [data-sortable='true'] {
61
+
62
+ @media (hover: hover) {
63
+ &:hover {
64
+ background-color: var(--sdt-thead-hover-background-color);
65
+ }
66
+ }
67
+
68
+ .sortBtn {
69
+ padding: 0 1.5em 0 0;
70
+ &::after {
71
+ position: absolute;
72
+ top: 50%;
73
+ right: .1em;
74
+ display: block;
75
+ width: 1em;
76
+ height: 1em;
77
+ translate: 0 -50%;
78
+ }
79
+ }
80
+
81
+ &:not(.sortAscending):not(.sortDescending){
82
+ .sortBtn::after {
83
+ content: url('./icons/arrows-down-up.svg?cssInline');
84
+ opacity: .4;
85
+ }
86
+ }
87
+ }
88
+ .sortAscending {
89
+ .sortBtn::after {
90
+ content: url('./icons/arrow-up.svg?cssInline');
91
+ }
92
+ }
93
+ .sortDescending {
94
+ .sortBtn::after {
95
+ content: url('./icons/arrow-down.svg?cssInline');
96
+ }
97
+ }
98
+
99
+ .sortBtn {
100
+ position: relative;
101
+ display: block;
102
+ width: 100%;
103
+ height: 100%;
104
+
105
+ padding: var(--table-cell-padding-block) var(--table-cell-padding-inline);
106
+ line-height: var(--table-cell-line-height);
107
+
108
+ text-align: start;
109
+ }
110
+
111
+ /* stylelint-disable selector-class-pattern */
112
+ :global(.text-start), :global(.text-left) {
113
+ .sortBtn {
114
+ text-align: start;
115
+ }
116
+ }
117
+ :global(.text-end), :global(.text-right) {
118
+ .sortBtn {
119
+ text-align: end;
120
+ }
121
+ }
122
+ :global(.text-center) {
123
+ .sortBtn {
124
+ text-align: center;
125
+ }
126
+ }
127
+ /* stylelint-enable selector-class-pattern */
128
+
129
+ .bottomArea {
130
+ display: flex;
131
+ flex-flow: row wrap;
132
+ gap: var(--size-md);
133
+ align-content: center;
134
+ align-items: center;
135
+ justify-content: space-between;
136
+ margin-block-start: var(--size-xs);
137
+ }
138
+ .info {
139
+ font-size: var(--font-size-sm);
140
+ font-style: italic;
141
+ color: var(--text-muted);
142
+ }
143
+
144
+ /* pagination */
145
+ /* .paginationNav {} */
146
+ .paginationList, .paginationListItem, .paginationListItemBtn {
147
+ padding: 0;
148
+ margin: 0;
149
+ }
150
+
151
+ .paginationList {
152
+ display: flex;
153
+ flex-flow: row wrap;
154
+ gap: 0;
155
+ align-items: stretch;
156
+ justify-content: flex-start;
157
+ list-style: none;
158
+ }
159
+ .paginationListItem {
160
+ border: var(--sdt-pagination-border);
161
+ border-style: solid solid solid none;
162
+
163
+ &:first-child {
164
+ border-inline-start-style: solid;
165
+ border-radius: var(--radius-xxs) 0 0 var(--radius-xxs);
166
+ }
167
+ &:last-child {
168
+ border-radius: 0 var(--radius-xxs) var(--radius-xxs) 0;
169
+ }
170
+
171
+ @media (hover: hover) {
172
+ &:hover {
173
+ color: var(--sdt-hover-color);
174
+ background-color: var(--sdt-hover-background-color);
175
+ }
176
+ }
177
+
178
+ }
179
+
180
+ .paginationDisabled {
181
+ pointer-events: none;
182
+
183
+ .paginationListItemBtn {
184
+ opacity: .7;
185
+ }
186
+ }
187
+
188
+ .paginationActive {
189
+ color: var(--sdt-hover-color);
190
+ background-color: var(--sdt-hover-background-color);
191
+ }
192
+
193
+ .paginationListItemBtn {
194
+ display: flex;
195
+ align-items: center;
196
+ justify-content: center;
197
+ height: 100%;
198
+ padding: var(--sdt-pagination-padding-block) var(--sdt-pagination-padding-inline);
199
+ color: inherit;
200
+ background-color: transparent;
201
+ border: none;
202
+
203
+ &.hasSvg {
204
+ padding-inline: calc(var(--sdt-pagination-padding-inline) / 2);
205
+ }
206
+
207
+ svg {
208
+ width: 1em;
209
+ aspect-ratio: 1;
210
+ fill: currentColor;
211
+ }
212
+ }
213
+
214
+ /* purgecss end ignore */
@@ -0,0 +1,117 @@
1
+
2
+ // pre-elaborazione tipi dati predefiniti
3
+ // le chiavi che cominciano con '_' sono di questa applicazione, le altre sono di simple-datatable
4
+
5
+ import { classnames } from '@massimo-cassandro/js-utilities/index.js';
6
+
7
+ import * as styles from '../simple-datatable.module.css';
8
+
9
+ import checkIcon from '../icons/check-bold.svg?inline';
10
+ import xIcon from '../icons/x-bold.svg?inline';
11
+
12
+ // col_obj è l'oggetto che descrive una singola colonna del datatable
13
+ // vine utilizzato per produrre l'oggetto columns di simple-datatable
14
+ export function parseCols(col_obj){
15
+
16
+
17
+ if(col_obj.render == null) {
18
+
19
+ // campi template
20
+ if(col_obj._renderTpl) {
21
+
22
+ return {
23
+ ...col_obj,
24
+ type: col_obj.type?? 'html',
25
+
26
+ // render: (value, cell /*, dataIndex, rowIndex */) => {
27
+
28
+ // cell.attributes['data-order'] = value.replace(/(<([^>]+)>)/ig,'');
29
+ // return value;
30
+ // // non viene elaborato qui perché non è possibile raggiungere la riga del json
31
+ // // return `<a href="${col_obj._href}">${value}</a>`;
32
+ // }
33
+
34
+ };
35
+
36
+ } else if(col_obj._renderMode === 'id') {
37
+
38
+ return {
39
+ ...col_obj,
40
+ type: 'number',
41
+ searchable: false,
42
+ cellClass: 'text-end',
43
+ headerClass: 'text-end',
44
+ };
45
+
46
+ } else if(col_obj._renderMode === 'email') {
47
+ return {
48
+ ...col_obj,
49
+ type: 'string',
50
+ render: value => value.text?.replace('@', '<wbr />@<wbr />')
51
+ };
52
+
53
+ // campi booleani
54
+ } else if (col_obj.type === 'boolean') {
55
+ // TODO caso in cui il valore è null nel caso si voglia differenziarlo da false
56
+
57
+ return {
58
+ ...col_obj,
59
+ cellClass: styles.hasIcon,
60
+ headerClass: 'text-center',
61
+ render: (value, td) => {
62
+
63
+ if(Boolean(value)) {
64
+ td.attributes.class = classnames(td.attributes.class, 'text-success');
65
+ return checkIcon;
66
+ } else {
67
+ td.attributes.class = classnames(td.attributes.class, 'text-danger');
68
+ return xIcon;
69
+ }
70
+ }
71
+ };
72
+
73
+ // gestione campi data symfony
74
+ } else if(col_obj._renderMode === 'sf_datetime') {
75
+ return {
76
+ ...col_obj,
77
+ type: 'string',
78
+ cellClass: 'text-end',
79
+ headerClass: 'text-end',
80
+
81
+ render: (value, cell /*, dataIndex, rowIndex */) => { // value si riferisce al valore già trasformato nella pre-elaborazione dei dati
82
+ /* {
83
+ "date": "2026-03-31 07:54:31.000000",
84
+ "timezone_type": 3,
85
+ "timezone": "UTC"
86
+ } */
87
+
88
+
89
+ if(value == null) {
90
+ cell.attributes['data-order'] = ' ';
91
+ return '\u2014';
92
+
93
+ } else {
94
+
95
+ cell.attributes['data-order'] = value;
96
+
97
+ const dateObj = new Date(value);
98
+
99
+ return `<span class="text-nowrap">${dateObj.toLocaleString('it-IT', {
100
+ year: '2-digit',
101
+ month: 'short',
102
+ day: 'numeric',
103
+ })}</span>` +
104
+ `\u2009<span class="text-xs">${dateObj.toLocaleString('it-IT', {
105
+ hour12: false,
106
+ hour:'2-digit',
107
+ minute:'2-digit'
108
+ })}</span>`;
109
+ }
110
+
111
+ }
112
+ };
113
+ }
114
+ } // end if not render
115
+
116
+ return col_obj;
117
+ }
@@ -1,7 +0,0 @@
1
- import './modal-alert/flash-alerts.js';
2
-
3
- import '@minimo/utility/inner-nav.js';
4
- import '@minimo/utility/dismiss-alerts.js';
5
-
6
-
7
-
@@ -1,17 +0,0 @@
1
- /*
2
- <div class="form-edit-info" title="Ultima modifica effettuata da Gino Bianchi il xxxx">
3
- <span>13 Aug 2025 <small>11:54</small></span>
4
- <span>Gino Bianchi</span>
5
- </div>
6
- */
7
-
8
- .form-edit-info {
9
- display: flex;
10
- flex-flow: row wrap;
11
- gap: .5rem;
12
- /* align-content: flex-start; */ /* multiline container */
13
- align-items: center;
14
- justify-content: flex-end;
15
- font-size: var(--font-size-xxs);
16
- color: var(--text-muted-color);
17
- }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes