@colisweb/rescript-toolkit 3.7.1 → 3.7.3

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 (30) hide show
  1. package/.gitlab-ci.yml +1 -1
  2. package/.secure_files/ci-functions-v16.5.0 +2384 -0
  3. package/.secure_files/ci-functions-v16.6.0 +2384 -0
  4. package/.secure_files/ci-functions-v16.7.0 +2422 -0
  5. package/.secure_files/ci-functions-v17.0.0 +2422 -0
  6. package/.secure_files/ci-functions-v17.0.1 +2422 -0
  7. package/.secure_files/ci-functions-v17.0.10 +2525 -0
  8. package/.secure_files/ci-functions-v17.0.2 +2422 -0
  9. package/.secure_files/ci-functions-v17.0.3 +2422 -0
  10. package/.secure_files/ci-functions-v17.0.4 +2422 -0
  11. package/.secure_files/ci-functions-v17.0.5 +2422 -0
  12. package/.secure_files/ci-functions-v17.0.6 +2422 -0
  13. package/.secure_files/ci-functions-v17.0.7 +2422 -0
  14. package/.secure_files/ci-functions-v17.0.8 +2422 -0
  15. package/.secure_files/ci-functions-v17.0.9 +2527 -0
  16. package/.secure_files/ci-functions-v17.1.0 +2525 -0
  17. package/.secure_files/ci-functions-v17.1.1 +2547 -0
  18. package/.secure_files/ci-functions-vTest +2384 -0
  19. package/.yarn/install-state.gz +0 -0
  20. package/locale/fr.json +5 -0
  21. package/package.json +1 -1
  22. package/playground/components/Playground_Checkbox.res +6 -1
  23. package/playground/components/Playground_MultiSelect.res +21 -0
  24. package/src/form/Toolkit__FormValidationFunctions.res +12 -0
  25. package/src/ui/Toolkit__Ui_Checkbox.res +20 -9
  26. package/src/ui/Toolkit__Ui_Checkbox.resi +1 -0
  27. package/src/ui/Toolkit__Ui_MultiSelect.res +26 -4
  28. package/src/ui/Toolkit__Ui_MultiSelect.resi +1 -0
  29. package/src/utils/Toolkit__Utils_UnitMeasure.res +3 -3
  30. package/src/vendors/ReactIcons.res +30 -0
Binary file
package/locale/fr.json CHANGED
@@ -44,6 +44,11 @@
44
44
  "defaultMessage": "Jeudi",
45
45
  "message": "Jeudi"
46
46
  },
47
+ {
48
+ "id": "_435887be",
49
+ "defaultMessage": "Seulement",
50
+ "message": "Seulement"
51
+ },
47
52
  {
48
53
  "id": "_471931e7",
49
54
  "defaultMessage": "Le champ est requis.",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@colisweb/rescript-toolkit",
3
- "version": "3.7.1",
3
+ "version": "3.7.3",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "clean": "rescript clean",
@@ -1,4 +1,3 @@
1
-
2
1
  open Toolkit__Ui
3
2
 
4
3
  @module("@root/src/ui/Toolkit__Ui_Checkbox.resi?raw")
@@ -42,6 +41,12 @@ let make = () => {
42
41
  <h2> {"Checked"->React.string} </h2>
43
42
  <Checkbox checked=true name="test" value="test"> {"children"->React.string} </Checkbox>
44
43
  </div>
44
+ <div>
45
+ <h2> {"IntermediaryChecked"->React.string} </h2>
46
+ <Checkbox checked=true intermediaryChecked=true name="test" value="test">
47
+ {"children"->React.string}
48
+ </Checkbox>
49
+ </div>
45
50
  <div>
46
51
  <Checkbox checked=true name="test" value="test" size=#xs className="mb-4">
47
52
  {"xs"->React.string}
@@ -87,5 +87,26 @@ let make = () => {
87
87
  onChange={Js.log}
88
88
  />
89
89
  </div>
90
+ <div>
91
+ <h3 className="mb-2"> {"Select only button"->React.string} </h3>
92
+ <p className="mb-1">
93
+ {"Select only button is displayed when the displaySelectOnlyOption prop is at true"->React.string}
94
+ </p>
95
+ <Toolkit__Ui_MultiSelect
96
+ searchPlaceholder="Filter"
97
+ buttonClassName={"w-80"}
98
+ dropdownClassName="max-h-[300px] w-80 overflow-auto"
99
+ displaySelectOnlyOption=true
100
+ options={Array.makeBy(10, (i): Toolkit__Ui.MultiSelect.item => {
101
+ {
102
+ itemLabel: <p> {`label ${i->Int.toString}`->React.string} </p>,
103
+ label: `label ${i->Int.toString}`,
104
+ value: `label ${i->Int.toString}`,
105
+ }
106
+ })}
107
+ placeholder={<span> {"Select me"->React.string} </span>}
108
+ onChange={Js.log}
109
+ />
110
+ </div>
90
111
  </div>
91
112
  }
@@ -323,6 +323,18 @@ let optionalPosFloatEnergyCapacityKWh = (intl, value) => {
323
323
  }
324
324
  }
325
325
 
326
+ let optionalPosFloatSpeedKm_h = (intl, value) => {
327
+ switch value {
328
+ | "" => None
329
+ | v =>
330
+ switch v->Toolkit__Decoders.UnitMeasure.Speed.WithUnit.decodeFromString {
331
+ | Ok(#km_h(_)) => None
332
+ | _ =>
333
+ Some(Intl.formatMessageWithValues(intl, Msg.wrongFormat, {"exemple": "'10 km/h' '0.5 km/h'"}))
334
+ }
335
+ }
336
+ }
337
+
326
338
  let requiredPosFloatWeightG = (intl, value) => {
327
339
  switch value {
328
340
  | "" => Some(Intl.formatMessage(intl, Msg.requiredValue))
@@ -9,6 +9,7 @@ let make = (
9
9
  ~name=?,
10
10
  ~checked=?,
11
11
  ~defaultChecked=?,
12
+ ~intermediaryChecked=false,
12
13
  ~className="",
13
14
  ~size: size=#sm,
14
15
  ~checkboxClassName="",
@@ -70,15 +71,25 @@ let make = (
70
71
  checkboxClassName,
71
72
  isChecked ? checkedCheckboxClassName : "",
72
73
  ])}>
73
- <ReactIcons.FaCheck
74
- className="transform transition-all ease-in-out"
75
- size={switch size {
76
- | #xs => 14
77
- | #sm => 16
78
- | #md => 18
79
- | #lg => 24
80
- }}
81
- />
74
+ {intermediaryChecked
75
+ ? <ReactIcons.FaMinus
76
+ className="transform transition-all ease-in-out"
77
+ size={switch size {
78
+ | #xs => 14
79
+ | #sm => 16
80
+ | #md => 18
81
+ | #lg => 24
82
+ }}
83
+ />
84
+ : <ReactIcons.FaCheck
85
+ className="transform transition-all ease-in-out"
86
+ size={switch size {
87
+ | #xs => 14
88
+ | #sm => 16
89
+ | #md => 18
90
+ | #lg => 24
91
+ }}
92
+ />}
82
93
  </span>
83
94
  {children->Option.mapWithDefault(React.null, children => hideLabel ? React.null : children)}
84
95
  </label>
@@ -9,6 +9,7 @@ let make: (
9
9
  ~name: string=?,
10
10
  ~checked: bool=?,
11
11
  ~defaultChecked: bool=?,
12
+ ~intermediaryChecked: bool=?,
12
13
  ~className: string=?,
13
14
  ~size: size=?,
14
15
  ~checkboxClassName: string=?,
@@ -1,3 +1,5 @@
1
+ open ReactIntl
2
+
1
3
  type item = {
2
4
  itemLabel?: React.element,
3
5
  label: string,
@@ -19,6 +21,7 @@ let make = (
19
21
  ~onChange: array<item> => unit,
20
22
  ~disabled: bool=?,
21
23
  ~onClose: unit => unit=?,
24
+ ~displaySelectOnlyOption=false,
22
25
  ) => {
23
26
  let (selectedOptions, setSelectedOptions) = React.useState(() => defaultValue)
24
27
  let previousDefaultValue = Toolkit__Hooks.usePrevious(defaultValue)
@@ -60,9 +63,9 @@ let make = (
60
63
  position=#bottom
61
64
  label={switch selectedOptions {
62
65
  | [] =>
63
- <p className="flex flex-row gap-2 w-full items-center">
66
+ <p className="flex flex-row gap-2 w-full items-center relative">
64
67
  <span className="ml-1"> {placeholder} </span>
65
- <span className="absolute inset-y-0 right-0 flex items-center px-2">
68
+ <span className="absolute inset-y-0 right-0 flex items-center">
66
69
  <ReactIcons.FaAngleDown />
67
70
  </span>
68
71
  </p>
@@ -91,6 +94,7 @@ let make = (
91
94
  })
92
95
  }
93
96
  }}
97
+ value={search}
94
98
  onChange={event => {
95
99
  let target = event->ReactEvent.Form.currentTarget
96
100
  // normalize nfd -> replace by re remove split by commponents the accent letters and deletes the accent component only, leaving the un-accented letter
@@ -120,13 +124,13 @@ let make = (
120
124
  <div
121
125
  key={`multiselectoption-${label}-${value}`}
122
126
  className={cx([
123
- "flex flex-row items-center gap-2 pt-3 text-left",
127
+ "group flex flex-row items-center gap-2 pt-3 text-left relative",
124
128
  i > 0 ? "mt-3" : "",
125
129
  itemClassName,
126
130
  ])}>
127
131
  <Toolkit__Ui_Checkbox
128
132
  value
129
- className="w-full flex-shrink-0"
133
+ className="w-full flex-shrink-0 relative"
130
134
  checked={selectedOptions->Array.some(item =>
131
135
  item.label == label && item.value == value
132
136
  )}
@@ -152,6 +156,24 @@ let make = (
152
156
  }}>
153
157
  {item.itemLabel->Option.getWithDefault(label->React.string)}
154
158
  </Toolkit__Ui_Checkbox>
159
+ {displaySelectOnlyOption
160
+ ? <div className="group-hover:block hidden absolute right-0">
161
+ <Toolkit__Ui_Button
162
+ onClick={_ => {
163
+ setSelectedOptions(_ => {
164
+ let value = [item]
165
+
166
+ onChange(value)
167
+ value
168
+ })
169
+ }}
170
+ color=#neutralLight
171
+ size=#sm
172
+ className="hover:underline hover:!bg-neutral-200 hover:!border-neutral-200 hover:!text-primary-700">
173
+ <FormattedMessage defaultMessage="Seulement" />
174
+ </Toolkit__Ui_Button>
175
+ </div>
176
+ : React.null}
155
177
  </div>
156
178
  })
157
179
  ->React.array}
@@ -19,4 +19,5 @@ let make: (
19
19
  ~onChange: array<item> => unit,
20
20
  ~disabled: bool=?,
21
21
  ~onClose: unit => unit=?,
22
+ ~displaySelectOnlyOption:bool=?
22
23
  ) => React.element
@@ -199,19 +199,19 @@ module Speed = {
199
199
 
200
200
  let toValue = value =>
201
201
  switch value {
202
- | #km_h(value) => v
202
+ | #km_h(v) => v
203
203
  }
204
204
 
205
205
  let display = (value, ~digits=2, ()) => {
206
206
  open Js.Float
207
207
  switch value {
208
- | #km_h(value) => v->toFixedWithPrecision(~digits) ++ " km/h"
208
+ | #km_h(v) => v->toFixedWithPrecision(~digits) ++ " km/h"
209
209
  }
210
210
  }
211
211
 
212
212
  let toString = value => {
213
213
  switch value {
214
- | #km_h(value) => v->Float.toString ++ " km/h"
214
+ | #km_h(v) => v->Float.toString ++ " km/h"
215
215
  }
216
216
  }
217
217
  }
@@ -6045,3 +6045,33 @@ module FaRegTrashAlt = {
6045
6045
  external make: (~size: int=?, ~color: string=?, ~className: string=?) => React.element =
6046
6046
  "FaRegTrashAlt"
6047
6047
  }
6048
+
6049
+ module FaMinus = {
6050
+ @module("react-icons/fa") @react.component
6051
+ external make: (~size: int=?, ~color: string=?, ~className: string=?) => React.element = "FaMinus"
6052
+ }
6053
+
6054
+ module FaBolt = {
6055
+ @module("react-icons/fa") @react.component
6056
+ external make: (~size: int=?, ~color: string=?, ~className: string=?) => React.element = "FaBolt"
6057
+ }
6058
+
6059
+ module FaLeaf = {
6060
+ @module("react-icons/fa") @react.component
6061
+ external make: (~size: int=?, ~color: string=?, ~className: string=?) => React.element = "FaLeaf"
6062
+ }
6063
+ module FaBicycle = {
6064
+ @module("react-icons/fa") @react.component
6065
+ external make: (~size: int=?, ~color: string=?, ~className: string=?) => React.element =
6066
+ "FaBicycle"
6067
+ }
6068
+
6069
+ module FaBoxes = {
6070
+ @module("react-icons/fa") @react.component
6071
+ external make: (~size: int=?, ~color: string=?, ~className: string=?) => React.element = "FaBoxes"
6072
+ }
6073
+ module FaListAlt = {
6074
+ @module("react-icons/fa") @react.component
6075
+ external make: (~size: int=?, ~color: string=?, ~className: string=?) => React.element =
6076
+ "FaListAlt"
6077
+ }