@thx/controls 17.0.0-mantine.0 → 17.0.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 (174) hide show
  1. package/dist/esm/date/DatePicker/styles.css.js +7 -0
  2. package/dist/esm/date/DatePicker/styles.css.js.map +1 -0
  3. package/dist/esm/date/LocalDatePicker/LocalDatePicker.js +140 -17
  4. package/dist/esm/date/LocalDatePicker/LocalDatePicker.js.map +1 -1
  5. package/dist/esm/date/LocalDatePicker/MaskedDateInput.js +22 -0
  6. package/dist/esm/date/LocalDatePicker/MaskedDateInput.js.map +1 -0
  7. package/dist/esm/date/LocalMonthSelect/LocalMonthSelect.js +23 -19
  8. package/dist/esm/date/LocalMonthSelect/LocalMonthSelect.js.map +1 -1
  9. package/dist/esm/date/LocalTimePicker/LocalTimePicker.js +55 -6
  10. package/dist/esm/date/LocalTimePicker/LocalTimePicker.js.map +1 -1
  11. package/dist/esm/date/LocalTimePicker/MaskedTimeInput.js +21 -0
  12. package/dist/esm/date/LocalTimePicker/MaskedTimeInput.js.map +1 -0
  13. package/dist/esm/date/MonthDayPicker/MonthDayPicker.js +69 -13
  14. package/dist/esm/date/MonthDayPicker/MonthDayPicker.js.map +1 -1
  15. package/dist/esm/date/MonthYearPicker/MonthYearPicker.js +57 -14
  16. package/dist/esm/date/MonthYearPicker/MonthYearPicker.js.map +1 -1
  17. package/dist/esm/date/YearSelect/YearSelect.js +39 -25
  18. package/dist/esm/date/YearSelect/YearSelect.js.map +1 -1
  19. package/dist/esm/external/style-inject/dist/style-inject.es.js +29 -0
  20. package/dist/esm/external/style-inject/dist/style-inject.es.js.map +1 -0
  21. package/dist/esm/form/TForm/useTForm.js +8 -12
  22. package/dist/esm/form/TForm/useTForm.js.map +1 -1
  23. package/dist/esm/index.js +23 -1
  24. package/dist/esm/index.js.map +1 -1
  25. package/dist/esm/inputs/CreditCardInput/CreditCardInput.js +71 -0
  26. package/dist/esm/inputs/CreditCardInput/CreditCardInput.js.map +1 -0
  27. package/dist/esm/inputs/CreditCardInput/CreditCardNumberInput.js +76 -0
  28. package/dist/esm/inputs/CreditCardInput/CreditCardNumberInput.js.map +1 -0
  29. package/dist/esm/inputs/CreditCardInput/styles.css.js +7 -0
  30. package/dist/esm/inputs/CreditCardInput/styles.css.js.map +1 -0
  31. package/dist/esm/inputs/MaskedInput/MaskedInput.js +19 -8
  32. package/dist/esm/inputs/MaskedInput/MaskedInput.js.map +1 -1
  33. package/dist/esm/inputs/MaskedInput/useMaskedInput.js +3 -2
  34. package/dist/esm/inputs/MaskedInput/useMaskedInput.js.map +1 -1
  35. package/dist/esm/inputs/PhoneInput/PhoneInput.js.map +1 -1
  36. package/dist/esm/inputs/RadioGroup/RadioGroup.js +25 -0
  37. package/dist/esm/inputs/RadioGroup/RadioGroup.js.map +1 -0
  38. package/dist/esm/inputs/Scriptel/Scriptel.js +52 -0
  39. package/dist/esm/inputs/Scriptel/Scriptel.js.map +1 -0
  40. package/dist/esm/inputs/Scriptel/ScriptelContext.js +6 -0
  41. package/dist/esm/inputs/Scriptel/ScriptelContext.js.map +1 -0
  42. package/dist/esm/inputs/Scriptel/scriptel/enums.js +21 -0
  43. package/dist/esm/inputs/Scriptel/scriptel/enums.js.map +1 -0
  44. package/dist/esm/inputs/Scriptel/scriptel/index.js +93 -0
  45. package/dist/esm/inputs/Scriptel/scriptel/index.js.map +1 -0
  46. package/dist/esm/inputs/Scriptel/withScriptel.js +15 -0
  47. package/dist/esm/inputs/Scriptel/withScriptel.js.map +1 -0
  48. package/dist/esm/inputs/ScriptelInput/ScriptelInput.js +67 -0
  49. package/dist/esm/inputs/ScriptelInput/ScriptelInput.js.map +1 -0
  50. package/dist/esm/inputs/SinInput/SinInput.js +54 -0
  51. package/dist/esm/inputs/SinInput/SinInput.js.map +1 -0
  52. package/dist/esm/inputs/TableInput/CheckboxEditCell.js +32 -0
  53. package/dist/esm/inputs/TableInput/CheckboxEditCell.js.map +1 -0
  54. package/dist/esm/inputs/TableInput/DropdownCell.js +26 -0
  55. package/dist/esm/inputs/TableInput/DropdownCell.js.map +1 -0
  56. package/dist/esm/inputs/TableInput/HoverCell.js +20 -0
  57. package/dist/esm/inputs/TableInput/HoverCell.js.map +1 -0
  58. package/dist/esm/inputs/TableInput/LocalDateCell.js +13 -0
  59. package/dist/esm/inputs/TableInput/LocalDateCell.js.map +1 -0
  60. package/dist/esm/inputs/TableInput/LocalDateEditCell.js +33 -0
  61. package/dist/esm/inputs/TableInput/LocalDateEditCell.js.map +1 -0
  62. package/dist/esm/inputs/TableInput/MoneyCell.js +13 -0
  63. package/dist/esm/inputs/TableInput/MoneyCell.js.map +1 -0
  64. package/dist/esm/inputs/TableInput/MoneyEditCell.js +32 -0
  65. package/dist/esm/inputs/TableInput/MoneyEditCell.js.map +1 -0
  66. package/dist/esm/inputs/TableInput/MoneySumFooter.js +20 -0
  67. package/dist/esm/inputs/TableInput/MoneySumFooter.js.map +1 -0
  68. package/dist/esm/inputs/TableInput/StringEditCell.js +34 -0
  69. package/dist/esm/inputs/TableInput/StringEditCell.js.map +1 -0
  70. package/dist/esm/inputs/TableInput/TableInput.js +75 -0
  71. package/dist/esm/inputs/TableInput/TableInput.js.map +1 -0
  72. package/dist/esm/inputs/TableInput/addRowOnTab.js +13 -0
  73. package/dist/esm/inputs/TableInput/addRowOnTab.js.map +1 -0
  74. package/dist/esm/money/MoneyCurrencyInput/MoneyCurrencyInput.js +51 -0
  75. package/dist/esm/money/MoneyCurrencyInput/MoneyCurrencyInput.js.map +1 -0
  76. package/dist/esm/money/MoneyInput/MoneyInput.js +31 -0
  77. package/dist/esm/money/MoneyInput/MoneyInput.js.map +1 -0
  78. package/dist/esm/money/useMoneyInput.js +75 -0
  79. package/dist/esm/money/useMoneyInput.js.map +1 -0
  80. package/dist/esm/step/FormStep.js +17 -0
  81. package/dist/esm/step/FormStep.js.map +1 -0
  82. package/dist/esm/step/Step.js +10 -0
  83. package/dist/esm/step/Step.js.map +1 -0
  84. package/dist/esm/step/StepProvider.js +95 -0
  85. package/dist/esm/step/StepProvider.js.map +1 -0
  86. package/dist/esm/step/stepContext.js +10 -0
  87. package/dist/esm/step/stepContext.js.map +1 -0
  88. package/dist/esm/step/useStep.js +10 -0
  89. package/dist/esm/step/useStep.js.map +1 -0
  90. package/dist/stats.html +1 -1
  91. package/dist/stats.txt +89 -27
  92. package/dist/types/date/DatePicker/index.d.ts +3 -0
  93. package/dist/types/date/LocalDatePicker/LocalDatePicker.d.ts +11 -5
  94. package/dist/types/date/LocalDatePicker/MaskedDateInput.d.ts +14 -0
  95. package/dist/types/date/LocalMonthSelect/LocalMonthSelect.d.ts +3 -2
  96. package/dist/types/date/LocalTimePicker/LocalTimePicker.d.ts +6 -2
  97. package/dist/types/date/LocalTimePicker/MaskedTimeInput.d.ts +11 -0
  98. package/dist/types/date/MonthDayPicker/MonthDayPicker.d.ts +6 -7
  99. package/dist/types/date/MonthYearPicker/MonthYearPicker.d.ts +11 -10
  100. package/dist/types/date/YearSelect/YearSelect.d.ts +3 -1
  101. package/dist/types/form/TForm/useTForm.d.ts +4 -4
  102. package/dist/types/index.d.ts +18 -2
  103. package/dist/types/inputs/CreditCardInput/CreditCardInput.d.ts +2 -3
  104. package/dist/types/inputs/CreditCardInput/CreditCardNumberInput.d.ts +2 -2
  105. package/dist/types/inputs/CreditCardInput/index.d.ts +2 -0
  106. package/dist/types/inputs/MaskedInput/MaskedInput.d.ts +8 -3
  107. package/dist/types/inputs/MaskedInput/useMaskedInput.d.ts +1 -2
  108. package/dist/types/inputs/PhoneInput/PhoneInput.d.ts +2 -1
  109. package/dist/types/inputs/RadioGroup/RadioGroup.d.ts +8 -0
  110. package/dist/types/inputs/RadioGroup/index.d.ts +2 -0
  111. package/dist/types/inputs/Scriptel/Scriptel.d.ts +11 -0
  112. package/dist/types/inputs/Scriptel/ScriptelContext.d.ts +9 -0
  113. package/dist/types/inputs/Scriptel/index.d.ts +4 -0
  114. package/dist/types/inputs/Scriptel/scriptel/classes.d.ts +144 -0
  115. package/dist/types/inputs/Scriptel/scriptel/enums.d.ts +16 -0
  116. package/dist/types/inputs/Scriptel/scriptel/index.d.ts +17 -0
  117. package/dist/types/inputs/Scriptel/scriptel/messages.d.ts +52 -0
  118. package/dist/types/inputs/Scriptel/withScriptel.d.ts +9 -0
  119. package/dist/types/inputs/ScriptelInput/ScriptelInput.d.ts +8 -0
  120. package/dist/types/inputs/ScriptelInput/index.d.ts +2 -0
  121. package/dist/types/inputs/SinInput/SinInput.d.ts +1 -0
  122. package/dist/types/inputs/SinInput/index.d.ts +2 -0
  123. package/dist/types/inputs/TableInput/CheckboxEditCell.d.ts +12 -0
  124. package/dist/types/inputs/TableInput/DropdownCell.d.ts +2 -2
  125. package/dist/types/inputs/TableInput/HoverCell.d.ts +2 -1
  126. package/dist/types/inputs/TableInput/LocalDateCell.d.ts +9 -0
  127. package/dist/types/inputs/TableInput/LocalDateEditCell.d.ts +4 -0
  128. package/dist/types/inputs/TableInput/MoneyCell.d.ts +1 -0
  129. package/dist/types/inputs/TableInput/MoneyEditCell.d.ts +4 -4
  130. package/dist/types/inputs/TableInput/MoneySumFooter.d.ts +1 -0
  131. package/dist/types/inputs/TableInput/StringEditCell.d.ts +3 -2
  132. package/dist/types/inputs/TableInput/TableInput.d.ts +3 -5
  133. package/dist/types/inputs/TableInput/addRowOnTab.d.ts +0 -1
  134. package/dist/types/inputs/TableInput/index.d.ts +12 -0
  135. package/dist/types/money/MoneyCurrencyInput/MoneyCurrencyInput.d.ts +4 -2
  136. package/dist/types/money/MoneyCurrencyInput/index.d.ts +2 -0
  137. package/dist/types/money/MoneyInput/MoneyInput.d.ts +5 -4
  138. package/dist/types/step/FormStep.d.ts +9 -0
  139. package/dist/types/step/Step.d.ts +9 -0
  140. package/dist/types/step/StepProvider.d.ts +10 -0
  141. package/dist/types/step/index.d.ts +4 -0
  142. package/dist/types/step/stepContext.d.ts +5 -0
  143. package/dist/types/step/useStep.d.ts +1 -0
  144. package/package.json +66 -69
  145. package/dist/esm/form/TMForm/TMForm.js +0 -55
  146. package/dist/esm/form/TMForm/TMForm.js.map +0 -1
  147. package/dist/esm/form/TMForm/errorMessages.js +0 -39
  148. package/dist/esm/form/TMForm/errorMessages.js.map +0 -1
  149. package/dist/esm/form/TMForm/graphqlErrorTypes.js +0 -6
  150. package/dist/esm/form/TMForm/graphqlErrorTypes.js.map +0 -1
  151. package/dist/types/commonTypes.d.ts +0 -1
  152. package/dist/types/date/LocalDatePicker/localdatepicker.stories.d.ts +0 -6
  153. package/dist/types/date/LocalMonthSelect/localmonthselect.stories.d.ts +0 -5
  154. package/dist/types/date/LocalTimePicker/localtimepicker.stories.d.ts +0 -5
  155. package/dist/types/date/MonthDayPicker/monthdaypicker.stories.d.ts +0 -5
  156. package/dist/types/date/MonthYearPicker/monthyearpicker.stories.d.ts +0 -6
  157. package/dist/types/date/YearSelect/yearselect.stories.d.ts +0 -7
  158. package/dist/types/form/TForm/tform.stories.d.ts +0 -19
  159. package/dist/types/form/TMForm/TMForm.d.ts +0 -8
  160. package/dist/types/form/TMForm/errorMessages.d.ts +0 -5
  161. package/dist/types/form/TMForm/graphqlErrorTypes.d.ts +0 -50
  162. package/dist/types/form/TMForm/tmform.stories.d.ts +0 -12
  163. package/dist/types/inputs/CreditCardInput/creditcardinput.stories.d.ts +0 -5
  164. package/dist/types/inputs/CreditCardInput/creditcardnumberinput.stories.d.ts +0 -5
  165. package/dist/types/inputs/MaskedInput/maskedinput.stories.d.ts +0 -6
  166. package/dist/types/inputs/PhoneInput/phoneinput.stories.d.ts +0 -5
  167. package/dist/types/inputs/RadioGroup/radiogroup.stories.d.ts +0 -5
  168. package/dist/types/inputs/SinInput/sininput.stories.d.ts +0 -5
  169. package/dist/types/inputs/TableInput/main.story.d.ts +0 -7
  170. package/dist/types/inputs/TableInput/tableinput.stories.d.ts +0 -5
  171. package/dist/types/inputs/TableInput/withHover.story.d.ts +0 -7
  172. package/dist/types/money/MoneyCurrencyInput/moneycurrencyinput.stories.d.ts +0 -5
  173. package/dist/types/money/MoneyInput/moneyinput.stories.d.ts +0 -6
  174. package/dist/types/storyDecorator.d.ts +0 -6
@@ -1,28 +1,71 @@
1
1
  import React from 'react';
2
- import { DatePicker } from '@mantine/dates';
2
+ import { LocalDate } from '@js-joda/core';
3
3
  import { toDate, toLocalDate } from '@thx/date';
4
4
  import debug from 'debug';
5
+ import { Input } from 'semantic-ui-react';
6
+ import DatePicker from 'react-datepicker';
7
+ import '../DatePicker/styles.css.js';
5
8
 
6
9
  debug("thx.controls.date.MonthYearPicker");
7
10
  function MonthYearPicker(props) {
8
- const { defaultValue, initialMonth, minDate, maxDate, value, onChange, onChangeRaw, ...rest } = props;
11
+ const {
12
+ value,
13
+ onChange,
14
+ as,
15
+ action,
16
+ actionPosition,
17
+ className,
18
+ disabled,
19
+ error,
20
+ fluid,
21
+ focus,
22
+ icon,
23
+ iconPosition,
24
+ inverted,
25
+ label,
26
+ labelPosition,
27
+ loading,
28
+ size,
29
+ tabIndex,
30
+ transparent,
31
+ minDate,
32
+ maxDate,
33
+ ...rest
34
+ } = props;
9
35
  const selected = value ? toDate(value) : null;
36
+ const inputProps = {
37
+ as,
38
+ action,
39
+ actionPosition,
40
+ className,
41
+ disabled,
42
+ error,
43
+ fluid,
44
+ focus,
45
+ icon,
46
+ iconPosition,
47
+ inverted,
48
+ label,
49
+ labelPosition,
50
+ loading,
51
+ size,
52
+ tabIndex,
53
+ transparent
54
+ };
10
55
  return /* @__PURE__ */ React.createElement(DatePicker, {
11
- inputFormat: "MMMM YYYY",
12
- labelFormat: "MMMM YYYY",
13
- defaultValue: defaultValue ? toDate(defaultValue) : void 0,
14
- initialMonth: initialMonth ? toDate(initialMonth) : void 0,
15
- allowFreeInput: true,
16
- minDate: minDate ? toDate(minDate) : void 0,
17
- maxDate: maxDate ? toDate(maxDate) : void 0,
18
- value: selected,
56
+ ...rest,
57
+ selected,
19
58
  onChange: (date) => {
20
59
  if (onChange)
21
- onChange(date ? toLocalDate(date) : null);
22
- if (onChangeRaw)
23
- onChangeRaw(date);
60
+ onChange(date ? toLocalDate(date) : void 0);
24
61
  },
25
- ...rest
62
+ customInput: /* @__PURE__ */ React.createElement(Input, {
63
+ ...inputProps
64
+ }),
65
+ dateFormat: "MMMM yyyy",
66
+ showMonthYearPicker: true,
67
+ minDate: toDate(minDate?.withDayOfMonth(1) || LocalDate.ofEpochDay(0)),
68
+ maxDate: toDate(maxDate?.plusMonths(1).withDayOfMonth(1).minusDays(1) || LocalDate.now().plusYears(20))
26
69
  });
27
70
  }
28
71
 
@@ -1 +1 @@
1
- {"version":3,"file":"MonthYearPicker.js","sources":["../../../../src/date/MonthYearPicker/MonthYearPicker.tsx"],"sourcesContent":["import type {LocalDate} from '@js-joda/core';\nimport {DatePicker} from '@mantine/dates';\nimport type {DatePickerProps} from '@mantine/dates';\nimport {toDate, toLocalDate} from '@thx/date';\nimport debug from 'debug';\n\nconst d = debug('thx.controls.date.MonthYearPicker');\n\ninterface IMonthYearPickerProps {\n\tdefaultValue?: LocalDate | number | null;\n\tinitialMonth?: LocalDate | number | null;\n\tvalue?: LocalDate | number | null;\n\tonChange?: (value: LocalDate | null) => void;\n\tonChangeRaw?: (value: Date | null) => void;\n\tminDate?: LocalDate;\n\tmaxDate?: LocalDate;\n}\n\nexport type MonthYearPickerProps = IMonthYearPickerProps & Omit<DatePickerProps, 'onChange' | 'value' | 'minDate' | 'maxDate'>;\n\nexport function MonthYearPicker(props: MonthYearPickerProps): JSX.Element {\n\tconst {defaultValue, initialMonth, minDate, maxDate, value, onChange, onChangeRaw, ...rest} = props;\n\n\tconst selected = value ? toDate(value) : null;\n\n\treturn (\n\t\t<DatePicker\n\t\t\tinputFormat=\"MMMM YYYY\"\n\t\t\tlabelFormat=\"MMMM YYYY\"\n\t\t\tdefaultValue={defaultValue ? toDate(defaultValue) : undefined}\n\t\t\tinitialMonth={initialMonth ? toDate(initialMonth) : undefined}\n\t\t\tallowFreeInput\n\t\t\tminDate={minDate ? toDate(minDate) : undefined}\n\t\t\tmaxDate={maxDate ? toDate(maxDate) : undefined}\n\t\t\tvalue={selected}\n\t\t\tonChange={date => {\n\t\t\t\tif (onChange) onChange(date ? toLocalDate(date) : null);\n\t\t\t\tif (onChangeRaw) onChangeRaw(date);\n\t\t\t}}\n\t\t\t{...rest}\n\t\t/>\n\t);\n}\n"],"names":[],"mappings":";;;;;AAMU,MAAM,mCAAmC,EAAA;AAc5C,SAAA,eAAA,CAAyB,KAA0C,EAAA;AACzE,EAAM,MAAA,EAAC,cAAc,YAAc,EAAA,OAAA,EAAS,SAAS,KAAO,EAAA,QAAA,EAAU,gBAAgB,IAAQ,EAAA,GAAA,KAAA,CAAA;AAE9F,EAAA,MAAM,QAAW,GAAA,KAAA,GAAQ,MAAO,CAAA,KAAK,CAAI,GAAA,IAAA,CAAA;AAEzC,EAAA,uBACE,KAAA,CAAA,aAAA,CAAA,UAAA,EAAA;AAAA,IACA,WAAY,EAAA,WAAA;AAAA,IACZ,WAAY,EAAA,WAAA;AAAA,IACZ,YAAc,EAAA,YAAA,GAAe,MAAO,CAAA,YAAY,CAAI,GAAA,KAAA,CAAA;AAAA,IACpD,YAAc,EAAA,YAAA,GAAe,MAAO,CAAA,YAAY,CAAI,GAAA,KAAA,CAAA;AAAA,IACpD,cAAc,EAAA,IAAA;AAAA,IACd,OAAS,EAAA,OAAA,GAAU,MAAO,CAAA,OAAO,CAAI,GAAA,KAAA,CAAA;AAAA,IACrC,OAAS,EAAA,OAAA,GAAU,MAAO,CAAA,OAAO,CAAI,GAAA,KAAA,CAAA;AAAA,IACrC,KAAO,EAAA,QAAA;AAAA,IACP,UAAU,CAAQ,IAAA,KAAA;AACjB,MAAI,IAAA,QAAA;AAAU,QAAA,QAAA,CAAS,IAAO,GAAA,WAAA,CAAY,IAAI,CAAA,GAAI,IAAI,CAAA,CAAA;AACtD,MAAI,IAAA,WAAA;AAAa,QAAA,WAAA,CAAY,IAAI,CAAA,CAAA;AAAA,KAClC;AAAA,IACI,GAAA,IAAA;AAAA,GACL,CAAA,CAAA;AAEF;;;;"}
1
+ {"version":3,"file":"MonthYearPicker.js","sources":["../../../../src/date/MonthYearPicker/MonthYearPicker.tsx"],"sourcesContent":["import {LocalDate} from '@js-joda/core';\nimport {toDate, toLocalDate} from '@thx/date';\nimport debug from 'debug';\nimport type {ReactDatePickerProps} from 'react-datepicker';\nimport {InputProps, Input} from 'semantic-ui-react';\nimport {DatePicker} from '../DatePicker/index';\n\nconst d = debug('thx.controls.date.MonthYearPicker');\n\ninterface IMonthYearPickerProps {\n\tvalue?: LocalDate | number | undefined;\n\tonChange?: (value: LocalDate | undefined) => void;\n\tonChangeRaw?: () => void;\n\tminDate?: LocalDate | undefined;\n\tmaxDate?: LocalDate | undefined;\n}\n\ntype InputPropsOmitted = Omit<InputProps, 'onChange'>;\ntype ReactDatePickerPropsOmitted = Omit<Omit<ReactDatePickerProps, 'value' | 'minDate' | 'maxDate'>, 'onChange'>;\nexport type MonthYearPickerProps = IMonthYearPickerProps & InputPropsOmitted & ReactDatePickerPropsOmitted;\n\nexport function MonthYearPicker(props: MonthYearPickerProps): JSX.Element {\n\tconst {\n\t\tvalue,\n\t\tonChange,\n\t\tas,\n\t\taction,\n\t\tactionPosition,\n\t\tclassName,\n\t\tdisabled,\n\t\terror,\n\t\tfluid,\n\t\tfocus,\n\t\ticon,\n\t\ticonPosition,\n\t\tinverted,\n\t\tlabel,\n\t\tlabelPosition,\n\t\tloading,\n\t\tsize,\n\t\ttabIndex,\n\t\ttransparent,\n\t\tminDate,\n\t\tmaxDate,\n\t\t...rest\n\t} = props;\n\n\tconst selected = value ? toDate(value) : null;\n\n\tconst inputProps = {\n\t\tas,\n\t\taction,\n\t\tactionPosition,\n\t\tclassName,\n\t\tdisabled,\n\t\terror,\n\t\tfluid,\n\t\tfocus,\n\t\ticon,\n\t\ticonPosition,\n\t\tinverted,\n\t\tlabel,\n\t\tlabelPosition,\n\t\tloading,\n\t\tsize,\n\t\ttabIndex,\n\t\ttransparent,\n\t};\n\n\treturn (\n\t\t<DatePicker\n\t\t\t{...rest}\n\t\t\tselected={selected}\n\t\t\tonChange={date => {\n\t\t\t\tif (onChange) onChange(date ? toLocalDate(date) : undefined);\n\t\t\t}}\n\t\t\tcustomInput={<Input {...inputProps} />}\n\t\t\tdateFormat=\"MMMM yyyy\"\n\t\t\tshowMonthYearPicker\n\t\t\tminDate={toDate(minDate?.withDayOfMonth(1) || LocalDate.ofEpochDay(0))}\n\t\t\tmaxDate={toDate(maxDate?.plusMonths(1).withDayOfMonth(1).minusDays(1) || LocalDate.now().plusYears(20))}\n\t\t/>\n\t);\n}\n"],"names":[],"mappings":";;;;;;;;AAOU,MAAM,mCAAmC,EAAA;AAc5C,SAAA,eAAA,CAAyB,KAA0C,EAAA;AACzE,EAAM,MAAA;AAAA,IACL,KAAA;AAAA,IACA,QAAA;AAAA,IACA,EAAA;AAAA,IACA,MAAA;AAAA,IACA,cAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,YAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA;AAAA,IACA,aAAA;AAAA,IACA,OAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACG,GAAA,IAAA;AAAA,GACA,GAAA,KAAA,CAAA;AAEJ,EAAA,MAAM,QAAW,GAAA,KAAA,GAAQ,MAAO,CAAA,KAAK,CAAI,GAAA,IAAA,CAAA;AAEzC,EAAA,MAAM,UAAa,GAAA;AAAA,IAClB,EAAA;AAAA,IACA,MAAA;AAAA,IACA,cAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,YAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA;AAAA,IACA,aAAA;AAAA,IACA,OAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,GACD,CAAA;AAEA,EAAA,uBACE,KAAA,CAAA,aAAA,CAAA,UAAA,EAAA;AAAA,IACI,GAAA,IAAA;AAAA,IACJ,QAAA;AAAA,IACA,UAAU,CAAQ,IAAA,KAAA;AACjB,MAAI,IAAA,QAAA;AAAU,QAAA,QAAA,CAAS,IAAO,GAAA,WAAA,CAAY,IAAI,CAAA,GAAI,KAAS,CAAA,CAAA,CAAA;AAAA,KAC5D;AAAA,IACA,6BAAc,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA;AAAA,MAAU,GAAA,UAAA;AAAA,KAAY,CAAA;AAAA,IACpC,UAAW,EAAA,WAAA;AAAA,IACX,mBAAmB,EAAA,IAAA;AAAA,IACnB,OAAA,EAAS,OAAO,OAAS,EAAA,cAAA,CAAe,CAAC,CAAK,IAAA,SAAA,CAAU,UAAW,CAAA,CAAC,CAAC,CAAA;AAAA,IACrE,SAAS,MAAO,CAAA,OAAA,EAAS,UAAW,CAAA,CAAC,EAAE,cAAe,CAAA,CAAC,CAAE,CAAA,SAAA,CAAU,CAAC,CAAK,IAAA,SAAA,CAAU,KAAM,CAAA,SAAA,CAAU,EAAE,CAAC,CAAA;AAAA,GACvG,CAAA,CAAA;AAEF;;;;"}
@@ -1,47 +1,61 @@
1
1
  import React from 'react';
2
- import { Group, Button, NumberInput } from '@mantine/core';
3
2
  import debug from 'debug';
4
- import { ArrowLeft, ArrowRight } from 'tabler-icons-react';
3
+ import { Segment, Button, Icon, Dropdown } from 'semantic-ui-react';
5
4
 
6
5
  debug("thx.controls.date.YearSelect");
7
6
  function YearSelect(props) {
8
7
  const thisYear = new Date().getFullYear();
9
- const { value, minYear = 1970, maxYear = thisYear, onChange, error } = props;
10
- const buttonProps = {
11
- size: "sm",
8
+ const { value, minYear = 1970, maxYear = thisYear, onChange, onBlur, error, ...rest } = props;
9
+ const availableYears = [];
10
+ for (let i = maxYear; i >= minYear; i--) {
11
+ availableYears.push({ value: i, text: i.toString(), key: i });
12
+ }
13
+ return /* @__PURE__ */ React.createElement(Segment, {
14
+ basic: true,
12
15
  compact: true,
13
- variant: "outline",
14
- sx: { height: 36 }
15
- };
16
- return /* @__PURE__ */ React.createElement(Group, {
17
- spacing: 2
16
+ style: { padding: 0, margin: 0 },
17
+ ...rest
18
18
  }, /* @__PURE__ */ React.createElement(Button, {
19
- ...buttonProps,
19
+ basic: true,
20
+ icon: true,
21
+ type: "button",
22
+ color: error ? "red" : "green",
20
23
  disabled: value <= minYear,
21
24
  onClick: () => {
22
25
  if (onChange)
23
26
  onChange(value - 1);
24
- }
25
- }, /* @__PURE__ */ React.createElement(ArrowLeft, null)), /* @__PURE__ */ React.createElement(NumberInput, {
26
- hideControls: true,
27
+ },
28
+ onBlur
29
+ }, /* @__PURE__ */ React.createElement(Icon, {
30
+ name: "arrow left"
31
+ })), /* @__PURE__ */ React.createElement(Dropdown, {
32
+ icon: /* @__PURE__ */ React.createElement("div", null),
33
+ button: true,
34
+ basic: true,
35
+ scrolling: true,
27
36
  value,
28
- max: maxYear,
29
- min: minYear,
30
- onChange: (v) => {
31
- if (v && onChange) {
32
- onChange(v);
33
- }
37
+ options: availableYears,
38
+ onChange: (e, val) => {
39
+ if (typeof val.value === "number" && onChange)
40
+ onChange(val.value);
34
41
  },
35
- sx: { width: "4rem" },
36
- styles: { input: { borderColor: error ? "red" : void 0, textAlign: "center" } }
42
+ error,
43
+ onBlur
37
44
  }), /* @__PURE__ */ React.createElement(Button, {
38
- ...buttonProps,
45
+ basic: true,
46
+ icon: true,
47
+ type: "button",
48
+ color: error ? "red" : "green",
39
49
  disabled: value >= maxYear,
40
50
  onClick: () => {
41
51
  if (onChange)
42
52
  onChange(value + 1);
43
- }
44
- }, /* @__PURE__ */ React.createElement(ArrowRight, null)));
53
+ },
54
+ onBlur,
55
+ style: { marginRight: 0 }
56
+ }, /* @__PURE__ */ React.createElement(Icon, {
57
+ name: "arrow right"
58
+ })));
45
59
  }
46
60
 
47
61
  export { YearSelect };
@@ -1 +1 @@
1
- {"version":3,"file":"YearSelect.js","sources":["../../../../src/date/YearSelect/YearSelect.tsx"],"sourcesContent":["import {Button, ButtonProps, Group, NumberInput} from '@mantine/core';\nimport debug from 'debug';\nimport {ArrowLeft, ArrowRight} from 'tabler-icons-react';\n\nconst d = debug('thx.controls.date.YearSelect');\n\nexport interface YearSelectProps {\n\tonChange?: (value: number) => void;\n\tvalue: number;\n\tminYear?: number; // Defaults to 1970\n\tmaxYear?: number; // Defaults to current year\n\terror?: boolean; // Defaults to false\n}\n\nexport function YearSelect(props: YearSelectProps) {\n\tconst thisYear = new Date().getFullYear();\n\tconst {value, minYear = 1970, maxYear = thisYear, onChange, error} = props;\n\n\tconst buttonProps: ButtonProps<any> = {\n\t\tsize: 'sm',\n\t\tcompact: true,\n\t\tvariant: 'outline',\n\t\tsx: {height: 36},\n\t};\n\n\treturn (\n\t\t<Group spacing={2}>\n\t\t\t<Button\n\t\t\t\t{...buttonProps}\n\t\t\t\tdisabled={value <= minYear}\n\t\t\t\tonClick={() => {\n\t\t\t\t\tif (onChange) onChange(value - 1);\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<ArrowLeft />\n\t\t\t</Button>\n\t\t\t<NumberInput\n\t\t\t\thideControls\n\t\t\t\tvalue={value}\n\t\t\t\tmax={maxYear}\n\t\t\t\tmin={minYear}\n\t\t\t\tonChange={v => {\n\t\t\t\t\tif (v && onChange) {\n\t\t\t\t\t\tonChange(v);\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\tsx={{width: '4rem'}}\n\t\t\t\tstyles={{input: {borderColor: error ? 'red' : undefined, textAlign: 'center'}}}\n\t\t\t/>\n\t\t\t<Button\n\t\t\t\t{...buttonProps}\n\t\t\t\tdisabled={value >= maxYear}\n\t\t\t\tonClick={() => {\n\t\t\t\t\tif (onChange) onChange(value + 1);\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<ArrowRight />\n\t\t\t</Button>\n\t\t</Group>\n\t);\n}\n"],"names":[],"mappings":";;;;;AAIU,MAAM,8BAA8B,EAAA;AAUvC,SAAA,UAAA,CAAoB,KAAwB,EAAA;AAClD,EAAA,MAAM,QAAW,GAAA,IAAI,IAAK,EAAA,CAAE,WAAY,EAAA,CAAA;AACxC,EAAA,MAAM,EAAC,KAAO,EAAA,OAAA,GAAU,MAAM,OAAU,GAAA,QAAA,EAAU,UAAU,KAAS,EAAA,GAAA,KAAA,CAAA;AAErE,EAAA,MAAM,WAAgC,GAAA;AAAA,IACrC,IAAM,EAAA,IAAA;AAAA,IACN,OAAS,EAAA,IAAA;AAAA,IACT,OAAS,EAAA,SAAA;AAAA,IACT,EAAA,EAAI,EAAC,MAAA,EAAQ,EAAE,EAAA;AAAA,GAChB,CAAA;AAEA,EAAA,uBACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA;AAAA,IAAM,OAAS,EAAA,CAAA;AAAA,GAAA,kBACd,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA;AAAA,IACI,GAAA,WAAA;AAAA,IACJ,UAAU,KAAS,IAAA,OAAA;AAAA,IACnB,SAAS,MAAM;AACd,MAAI,IAAA,QAAA;AAAU,QAAA,QAAA,CAAS,QAAQ,CAAC,CAAA,CAAA;AAAA,KACjC;AAAA,GAAA,kBAEC,KAAA,CAAA,aAAA,CAAA,SAAA,EAAA,IAAU,CACZ,CAAA,kBACC,KAAA,CAAA,aAAA,CAAA,WAAA,EAAA;AAAA,IACA,YAAY,EAAA,IAAA;AAAA,IACZ,KAAA;AAAA,IACA,GAAK,EAAA,OAAA;AAAA,IACL,GAAK,EAAA,OAAA;AAAA,IACL,UAAU,CAAK,CAAA,KAAA;AACd,MAAA,IAAI,KAAK,QAAU,EAAA;AAClB,QAAA,QAAA,CAAS,CAAC,CAAA,CAAA;AAAA,OACX;AAAA,KACD;AAAA,IACA,EAAA,EAAI,EAAC,KAAA,EAAO,MAAM,EAAA;AAAA,IAClB,MAAA,EAAQ,EAAC,KAAA,EAAO,EAAC,WAAA,EAAa,QAAQ,KAAQ,GAAA,KAAA,CAAA,EAAW,SAAW,EAAA,QAAA,EAAS,EAAA;AAAA,GAC9E,mBACC,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA;AAAA,IACI,GAAA,WAAA;AAAA,IACJ,UAAU,KAAS,IAAA,OAAA;AAAA,IACnB,SAAS,MAAM;AACd,MAAI,IAAA,QAAA;AAAU,QAAA,QAAA,CAAS,QAAQ,CAAC,CAAA,CAAA;AAAA,KACjC;AAAA,GAEA,kBAAA,KAAA,CAAA,aAAA,CAAC,UAAW,EAAA,IAAA,CACb,CACD,CAAA,CAAA;AAEF;;;;"}
1
+ {"version":3,"file":"YearSelect.js","sources":["../../../../src/date/YearSelect/YearSelect.tsx"],"sourcesContent":["import debug from 'debug';\nimport {Icon, Button, Dropdown, DropdownItemProps, Segment, SegmentProps} from 'semantic-ui-react';\n\nconst d = debug('thx.controls.date.YearSelect');\n\nexport interface YearSelectProps {\n\tonChange?: (value: number) => void;\n\tonBlur?: (ev: any) => void;\n\tvalue: number;\n\tminYear?: number; // Defaults to 1970\n\tmaxYear?: number; // Defaults to current year\n\terror?: boolean; // Defaults to false\n}\n\nexport function YearSelect(props: YearSelectProps & Omit<SegmentProps, 'onChange'>) {\n\tconst thisYear = new Date().getFullYear();\n\tconst {value, minYear = 1970, maxYear = thisYear, onChange, onBlur, error, ...rest} = props;\n\n\tconst availableYears: DropdownItemProps[] = [];\n\tfor (let i = maxYear; i >= minYear; i--) {\n\t\tavailableYears.push({value: i, text: i.toString(), key: i});\n\t}\n\n\treturn (\n\t\t<Segment basic compact style={{padding: 0, margin: 0}} {...rest}>\n\t\t\t<Button\n\t\t\t\tbasic\n\t\t\t\ticon\n\t\t\t\ttype=\"button\"\n\t\t\t\tcolor={error ? 'red' : 'green'}\n\t\t\t\tdisabled={value <= minYear}\n\t\t\t\tonClick={() => {\n\t\t\t\t\tif (onChange) onChange(value - 1);\n\t\t\t\t}}\n\t\t\t\tonBlur={onBlur}\n\t\t\t>\n\t\t\t\t<Icon name=\"arrow left\" />\n\t\t\t</Button>\n\t\t\t<Dropdown\n\t\t\t\ticon={<div />}\n\t\t\t\tbutton\n\t\t\t\tbasic\n\t\t\t\tscrolling\n\t\t\t\tvalue={value}\n\t\t\t\toptions={availableYears}\n\t\t\t\tonChange={(e, val) => {\n\t\t\t\t\tif (typeof val.value === 'number' && onChange) onChange(val.value);\n\t\t\t\t}}\n\t\t\t\terror={error}\n\t\t\t\tonBlur={onBlur}\n\t\t\t/>\n\t\t\t<Button\n\t\t\t\tbasic\n\t\t\t\ticon\n\t\t\t\ttype=\"button\"\n\t\t\t\tcolor={error ? 'red' : 'green'}\n\t\t\t\tdisabled={value >= maxYear}\n\t\t\t\tonClick={() => {\n\t\t\t\t\tif (onChange) onChange(value + 1);\n\t\t\t\t}}\n\t\t\t\tonBlur={onBlur}\n\t\t\t\tstyle={{marginRight: 0}}\n\t\t\t>\n\t\t\t\t<Icon name=\"arrow right\" />\n\t\t\t</Button>\n\t\t</Segment>\n\t);\n}\n"],"names":[],"mappings":";;;;AAGU,MAAM,8BAA8B,EAAA;AAWvC,SAAA,UAAA,CAAoB,KAAyD,EAAA;AACnF,EAAA,MAAM,QAAW,GAAA,IAAI,IAAK,EAAA,CAAE,WAAY,EAAA,CAAA;AACxC,EAAM,MAAA,EAAC,OAAO,OAAU,GAAA,IAAA,EAAM,UAAU,QAAU,EAAA,QAAA,EAAU,MAAQ,EAAA,KAAA,EAAA,GAAU,IAAQ,EAAA,GAAA,KAAA,CAAA;AAEtF,EAAA,MAAM,iBAAsC,EAAC,CAAA;AAC7C,EAAA,KAAA,IAAS,CAAI,GAAA,OAAA,EAAS,CAAK,IAAA,OAAA,EAAS,CAAK,EAAA,EAAA;AACxC,IAAe,cAAA,CAAA,IAAA,CAAK,EAAC,KAAA,EAAO,CAAG,EAAA,IAAA,EAAM,EAAE,QAAS,EAAA,EAAG,GAAK,EAAA,CAAA,EAAE,CAAA,CAAA;AAAA,GAC3D;AAEA,EAAA,uBACE,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA;AAAA,IAAQ,KAAK,EAAA,IAAA;AAAA,IAAC,OAAO,EAAA,IAAA;AAAA,IAAC,KAAO,EAAA,EAAC,OAAS,EAAA,CAAA,EAAG,QAAQ,CAAC,EAAA;AAAA,IAAO,GAAA,IAAA;AAAA,GAAA,kBACzD,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA;AAAA,IACA,KAAK,EAAA,IAAA;AAAA,IACL,IAAI,EAAA,IAAA;AAAA,IACJ,IAAK,EAAA,QAAA;AAAA,IACL,KAAA,EAAO,QAAQ,KAAQ,GAAA,OAAA;AAAA,IACvB,UAAU,KAAS,IAAA,OAAA;AAAA,IACnB,SAAS,MAAM;AACd,MAAI,IAAA,QAAA;AAAU,QAAA,QAAA,CAAS,QAAQ,CAAC,CAAA,CAAA;AAAA,KACjC;AAAA,IACA,MAAA;AAAA,GAAA,kBAEC,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA;AAAA,IAAK,IAAK,EAAA,YAAA;AAAA,GAAa,CACzB,mBACC,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA;AAAA,IACA,IAAA,sCAAO,KAAI,EAAA,IAAA,CAAA;AAAA,IACX,MAAM,EAAA,IAAA;AAAA,IACN,KAAK,EAAA,IAAA;AAAA,IACL,SAAS,EAAA,IAAA;AAAA,IACT,KAAA;AAAA,IACA,OAAS,EAAA,cAAA;AAAA,IACT,QAAA,EAAU,CAAC,CAAA,EAAG,GAAQ,KAAA;AACrB,MAAI,IAAA,OAAO,GAAI,CAAA,KAAA,KAAU,QAAY,IAAA,QAAA;AAAU,QAAA,QAAA,CAAS,IAAI,KAAK,CAAA,CAAA;AAAA,KAClE;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,GACD,mBACC,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA;AAAA,IACA,KAAK,EAAA,IAAA;AAAA,IACL,IAAI,EAAA,IAAA;AAAA,IACJ,IAAK,EAAA,QAAA;AAAA,IACL,KAAA,EAAO,QAAQ,KAAQ,GAAA,OAAA;AAAA,IACvB,UAAU,KAAS,IAAA,OAAA;AAAA,IACnB,SAAS,MAAM;AACd,MAAI,IAAA,QAAA;AAAU,QAAA,QAAA,CAAS,QAAQ,CAAC,CAAA,CAAA;AAAA,KACjC;AAAA,IACA,MAAA;AAAA,IACA,KAAA,EAAO,EAAC,WAAA,EAAa,CAAC,EAAA;AAAA,GAAA,kBAErB,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA;AAAA,IAAK,IAAK,EAAA,aAAA;AAAA,GAAc,CAC1B,CACD,CAAA,CAAA;AAEF;;;;"}
@@ -0,0 +1,29 @@
1
+ function styleInject(css, ref) {
2
+ if ( ref === void 0 ) ref = {};
3
+ var insertAt = ref.insertAt;
4
+
5
+ if (!css || typeof document === 'undefined') { return; }
6
+
7
+ var head = document.head || document.getElementsByTagName('head')[0];
8
+ var style = document.createElement('style');
9
+ style.type = 'text/css';
10
+
11
+ if (insertAt === 'top') {
12
+ if (head.firstChild) {
13
+ head.insertBefore(style, head.firstChild);
14
+ } else {
15
+ head.appendChild(style);
16
+ }
17
+ } else {
18
+ head.appendChild(style);
19
+ }
20
+
21
+ if (style.styleSheet) {
22
+ style.styleSheet.cssText = css;
23
+ } else {
24
+ style.appendChild(document.createTextNode(css));
25
+ }
26
+ }
27
+
28
+ export { styleInject as default };
29
+ //# sourceMappingURL=style-inject.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style-inject.es.js","sources":["../../../../../../../node_modules/style-inject/dist/style-inject.es.js"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n"],"names":[],"mappings":"AAAA,SAAS,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE;AAC/B,EAAE,KAAK,GAAG,KAAK,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC;AACjC,EAAE,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;AAC9B;AACA,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,EAAE,OAAO,EAAE;AAC1D;AACA,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACvE,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAC9C,EAAE,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC;AAC1B;AACA,EAAE,IAAI,QAAQ,KAAK,KAAK,EAAE;AAC1B,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AACzB,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAChD,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC9B,KAAK;AACL,GAAG,MAAM;AACT,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC5B,GAAG;AACH;AACA,EAAE,IAAI,KAAK,CAAC,UAAU,EAAE;AACxB,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,GAAG,GAAG,CAAC;AACnC,GAAG,MAAM;AACT,IAAI,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;AACpD,GAAG;AACH;;;;"}
@@ -1,9 +1,8 @@
1
1
  import React, { useEffect, useState } from 'react';
2
- import { Alert } from '@mantine/core';
3
2
  import flatten from 'flat';
4
3
  import { useFormik } from 'formik';
5
4
  import { uniq, get, property } from 'lodash-es';
6
- import { AlertCircle } from 'tabler-icons-react';
5
+ import { Message, Segment } from 'semantic-ui-react';
7
6
 
8
7
  function useTForm(config) {
9
8
  const { render, children, ...rest } = config;
@@ -53,20 +52,17 @@ function useTForm(config) {
53
52
  errors = uniq(errors);
54
53
  const hasWarnings = !(formik.isValid || warnings.length === 0);
55
54
  const hasErrors = errors.length > 0;
56
- const formError = hasErrors && !hasWarnings && !errorCleared && !formik.isSubmitting;
57
55
  function renderWarnings() {
58
56
  if (!hasWarnings && !hasErrors)
59
57
  return null;
60
- return /* @__PURE__ */ React.createElement(Alert, {
61
- icon: /* @__PURE__ */ React.createElement(AlertCircle, {
62
- size: 16
63
- }),
64
- title: hasWarnings ? "Some fields are not complete:" : `${errorHeader}:`,
65
- my: "1em",
66
- color: hasErrors ? "red" : "yellow"
58
+ return /* @__PURE__ */ React.createElement(Message, {
59
+ warning: hasWarnings,
60
+ error: hasErrors && !hasWarnings
61
+ }, /* @__PURE__ */ React.createElement(Message.Header, null, hasWarnings ? "Some fields are not complete:" : `${errorHeader}:`), /* @__PURE__ */ React.createElement(Segment, {
62
+ style: { overflow: "auto", maxHeight: 100 }
67
63
  }, (hasWarnings ? warnings : errors).map((msg) => /* @__PURE__ */ React.createElement("div", {
68
64
  key: msg
69
- }, msg)));
65
+ }, msg))));
70
66
  }
71
67
  function fieldError(fieldName) {
72
68
  return (!!property(fieldName)(formik.touched) || formik.submitCount > 0) && !!property(fieldName)(formik.errors);
@@ -83,7 +79,7 @@ function useTForm(config) {
83
79
  loading: config.loading ? config.loading : false,
84
80
  submitDisabled: hasWarnings || formik.isSubmitting,
85
81
  errorMarkedCleared: errorCleared,
86
- formError,
82
+ formError: hasErrors && !hasWarnings && !errorCleared && !formik.isSubmitting,
87
83
  renderWarnings,
88
84
  fieldError,
89
85
  handleSubmit
@@ -1 +1 @@
1
- {"version":3,"file":"useTForm.js","sources":["../../../../src/form/TForm/useTForm.tsx"],"sourcesContent":["import {Alert} from '@mantine/core';\nimport flatten from 'flat';\nimport {FormikValues, useFormik, FormikErrors, FormikTouched} from 'formik';\nimport {get, property, uniq} from 'lodash-es';\nimport {FormEvent, useEffect, useState} from 'react';\nimport {AlertCircle} from 'tabler-icons-react';\nimport type {TFormConfig} from './types';\n\nexport function useTForm<Values extends FormikValues = FormikValues, InitialValues = any>(config: TFormConfig<Values, InitialValues>) {\n\tconst {render, children, ...rest} = config;\n\t// @ts-ignore\n\tconst formik = useFormik(rest);\n\n\tuseEffect(() => {\n\t\tif (config.onValidate) config.onValidate(formik.isValid);\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [formik.isValid, config.onValidate]);\n\n\t// Get submit function\n\tuseEffect(() => {\n\t\tif (config.getSubmitFn) config.getSubmitFn(formik.submitForm);\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [formik.submitForm, config.getSubmitFn]);\n\n\t// On change event (if this ends up changing values it will cycle)\n\tuseEffect(() => {\n\t\tif (config.onChange) config.onChange(formik.values);\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [formik.values]);\n\n\t// Mark the error cleared if the form has been edited after an error\n\tconst [errorCleared, setErrorCleared] = useState(false);\n\tuseEffect(() => {\n\t\tif (config.error && config.error.message && !formik.isSubmitting) {\n\t\t\tsetErrorCleared(true);\n\t\t}\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [formik.values, config.error]);\n\n\t// Flatten the warnings (formik errors) and touch objects.\n\tconst flatWarnings = flatten<FormikErrors<Values>, {[key: string]: string}>(formik.errors);\n\tconst flatTouched = flatten<FormikTouched<Values>, {[key: string]: string}>(formik.touched);\n\n\t// Create an array of strings that are warnings (formik errors). If the submit count is greater than 0\n\t// then it will show all warnings. Otherwise only touched field warnings will be added to this array.\n\tconst warnings: string[] = uniq(\n\t\tObject.keys(flatWarnings).reduce<string[]>((memo, value) => {\n\t\t\tconst isTouched = flatTouched[value];\n\t\t\tif (isTouched || formik.submitCount > 0) {\n\t\t\t\treturn [...memo, get(flatWarnings, value)];\n\t\t\t}\n\t\t\treturn memo;\n\t\t}, []),\n\t);\n\n\t// Create an array of strings that are errors (graphql errors).\n\tlet errors: string[] = [];\n\tlet errorHeader = '';\n\tif (config.error && config.error.message) {\n\t\tif (config.error.graphQLErrors) {\n\t\t\terrors = config.error.graphQLErrors.reduce((memo, v) => {\n\t\t\t\tif (v.message) return [...memo, v.message];\n\t\t\t\treturn memo;\n\t\t\t}, [] as string[]);\n\t\t} else {\n\t\t\tconst errorMessage = config.error.message.slice(config.error.message.indexOf(': ') + 1);\n\t\t\terrors.push(errorMessage);\n\t\t}\n\t\terrorHeader = config.error.message.slice(0, config.error.message.indexOf(': '));\n\t}\n\terrors = uniq(errors);\n\n\t// Check if there are warnings or errors\n\tconst hasWarnings = !(formik.isValid || warnings.length === 0);\n\tconst hasErrors = errors.length > 0;\n\n\tconst formError = hasErrors && !hasWarnings && !errorCleared && !formik.isSubmitting;\n\n\t// Render the warnings\n\tfunction renderWarnings() {\n\t\tif (!hasWarnings && !hasErrors) return null;\n\t\treturn (\n\t\t\t<Alert\n\t\t\t\ticon={<AlertCircle size={16} />}\n\t\t\t\ttitle={hasWarnings ? 'Some fields are not complete:' : `${errorHeader}:`}\n\t\t\t\tmy=\"1em\"\n\t\t\t\tcolor={hasErrors ? 'red' : 'yellow'}\n\t\t\t>\n\t\t\t\t{(hasWarnings ? warnings : errors).map(msg => (\n\t\t\t\t\t<div key={msg}>{msg}</div>\n\t\t\t\t))}\n\t\t\t</Alert>\n\t\t);\n\t}\n\n\t// Returns true if the field has an error\n\tfunction fieldError(fieldName: keyof Values | string | number) {\n\t\treturn (!!property(fieldName)(formik.touched) || formik.submitCount > 0) && !!property(fieldName)(formik.errors);\n\t}\n\n\t// Handles the form submit\n\tfunction handleSubmit(e?: FormEvent<HTMLFormElement>) {\n\t\tsetErrorCleared(false);\n\t\tformik.handleSubmit(e);\n\t}\n\n\treturn {\n\t\t...formik,\n\t\thasErrors: hasErrors && !errorCleared,\n\t\thasWarnings,\n\t\tisValid: !hasWarnings,\n\t\tloading: config.loading ? config.loading : false,\n\t\tsubmitDisabled: hasWarnings || formik.isSubmitting,\n\t\terrorMarkedCleared: errorCleared,\n\t\tformError, // Convenience\n\t\trenderWarnings,\n\t\tfieldError,\n\t\thandleSubmit,\n\t};\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useTForm.js","sources":["../../../../src/form/TForm/useTForm.tsx"],"sourcesContent":["import flatten from 'flat';\nimport {FormikValues, useFormik, FormikErrors, FormikTouched} from 'formik';\nimport {get, property, uniq} from 'lodash-es';\nimport {FormEvent, useEffect, useState} from 'react';\nimport {Message, Segment} from 'semantic-ui-react';\nimport type {TFormConfig} from './types';\n\nexport function useTForm<Values extends FormikValues = FormikValues, InitialValues = any>(config: TFormConfig<Values, InitialValues>) {\n\tconst {render, children, ...rest} = config;\n\t// @ts-ignore\n\tconst formik = useFormik(rest);\n\n\tuseEffect(() => {\n\t\tif (config.onValidate) config.onValidate(formik.isValid);\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [formik.isValid, config.onValidate]);\n\n\t// Get submit function\n\tuseEffect(() => {\n\t\tif (config.getSubmitFn) config.getSubmitFn(formik.submitForm);\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [formik.submitForm, config.getSubmitFn]);\n\n\t// On change event (if this ends up changing values it will cycle)\n\tuseEffect(() => {\n\t\tif (config.onChange) config.onChange(formik.values);\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [formik.values]);\n\n\t// Mark the error cleared if the form has been edited after an error\n\tconst [errorCleared, setErrorCleared] = useState(false);\n\tuseEffect(() => {\n\t\tif (config.error && config.error.message && !formik.isSubmitting) {\n\t\t\tsetErrorCleared(true);\n\t\t}\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [formik.values, config.error]);\n\n\t// Flatten the warnings (formik errors) and touch objects.\n\tconst flatWarnings = flatten<FormikErrors<Values>, {[key: string]: string}>(formik.errors);\n\tconst flatTouched = flatten<FormikTouched<Values>, {[key: string]: string}>(formik.touched);\n\n\t// Create an array of strings that are warnings (formik errors). If the submit count is greater than 0\n\t// then it will show all warnings. Otherwise only touched field warnings will be added to this array.\n\tconst warnings: string[] = uniq(\n\t\tObject.keys(flatWarnings).reduce<string[]>((memo, value) => {\n\t\t\tconst isTouched = flatTouched[value];\n\t\t\tif (isTouched || formik.submitCount > 0) {\n\t\t\t\treturn [...memo, get(flatWarnings, value)];\n\t\t\t}\n\t\t\treturn memo;\n\t\t}, []),\n\t);\n\n\t// Create an array of strings that are errors (graphql errors).\n\tlet errors: string[] = [];\n\tlet errorHeader = '';\n\tif (config.error && config.error.message) {\n\t\tif (config.error.graphQLErrors) {\n\t\t\terrors = config.error.graphQLErrors.reduce((memo, v) => {\n\t\t\t\tif (v.message) return [...memo, v.message];\n\t\t\t\treturn memo;\n\t\t\t}, [] as string[]);\n\t\t} else {\n\t\t\tconst errorMessage = config.error.message.slice(config.error.message.indexOf(': ') + 1);\n\t\t\terrors.push(errorMessage);\n\t\t}\n\t\terrorHeader = config.error.message.slice(0, config.error.message.indexOf(': '));\n\t}\n\terrors = uniq(errors);\n\n\t// Check if there are warnings or errors\n\tconst hasWarnings = !(formik.isValid || warnings.length === 0);\n\tconst hasErrors = errors.length > 0;\n\n\t// Render the warnings\n\tfunction renderWarnings() {\n\t\tif (!hasWarnings && !hasErrors) return null;\n\t\treturn (\n\t\t\t<Message warning={hasWarnings} error={hasErrors && !hasWarnings}>\n\t\t\t\t<Message.Header>{hasWarnings ? 'Some fields are not complete:' : `${errorHeader}:`}</Message.Header>\n\t\t\t\t{/* Put it in a segment to make sure the errorMessage isn't too big when there are a lot of errors */}\n\t\t\t\t<Segment style={{overflow: 'auto', maxHeight: 100}}>\n\t\t\t\t\t{(hasWarnings ? warnings : errors).map(msg => (\n\t\t\t\t\t\t<div key={msg}>{msg}</div>\n\t\t\t\t\t))}\n\t\t\t\t</Segment>\n\t\t\t</Message>\n\t\t);\n\t}\n\n\t// Returns true if the field has an error\n\tfunction fieldError(fieldName: keyof Values | string | number) {\n\t\treturn (!!property(fieldName)(formik.touched) || formik.submitCount > 0) && !!property(fieldName)(formik.errors);\n\t}\n\n\t// Handles the form submit\n\tfunction handleSubmit(e?: FormEvent<HTMLFormElement>) {\n\t\tsetErrorCleared(false);\n\t\tformik.handleSubmit(e);\n\t}\n\n\treturn {\n\t\t...formik,\n\t\thasErrors: hasErrors && !errorCleared,\n\t\thasWarnings,\n\t\tisValid: !hasWarnings,\n\t\tloading: config.loading ? config.loading : false,\n\t\tsubmitDisabled: hasWarnings || formik.isSubmitting,\n\t\terrorMarkedCleared: errorCleared,\n\t\tformError: hasErrors && !hasWarnings && !errorCleared && !formik.isSubmitting, // Convenience\n\t\trenderWarnings,\n\t\tfieldError,\n\t\thandleSubmit,\n\t};\n}\n"],"names":[],"mappings":"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"}
package/dist/esm/index.js CHANGED
@@ -6,8 +6,30 @@ export { MonthYearPicker } from './date/MonthYearPicker/MonthYearPicker.js';
6
6
  export { YearSelect } from './date/YearSelect/YearSelect.js';
7
7
  export { TForm } from './form/TForm/TForm.js';
8
8
  export { useTForm } from './form/TForm/useTForm.js';
9
- export { TMForm } from './form/TMForm/TMForm.js';
10
9
  export { MaskedInput } from './inputs/MaskedInput/MaskedInput.js';
11
10
  import './inputs/MaskedInput/useMaskedInput.js';
11
+ export { RadioGroup } from './inputs/RadioGroup/RadioGroup.js';
12
+ export { Scriptel } from './inputs/Scriptel/Scriptel.js';
13
+ export { withScriptel } from './inputs/Scriptel/withScriptel.js';
14
+ export { ScriptelInput } from './inputs/ScriptelInput/ScriptelInput.js';
12
15
  export { PhoneInput } from './inputs/PhoneInput/PhoneInput.js';
16
+ export { CreditCardInput } from './inputs/CreditCardInput/CreditCardInput.js';
17
+ export { SinInput } from './inputs/SinInput/SinInput.js';
18
+ export { TableInput } from './inputs/TableInput/TableInput.js';
19
+ export { MoneyCell } from './inputs/TableInput/MoneyCell.js';
20
+ export { MoneyEditCell } from './inputs/TableInput/MoneyEditCell.js';
21
+ export { LocalDateCell } from './inputs/TableInput/LocalDateCell.js';
22
+ export { CheckboxEditCell } from './inputs/TableInput/CheckboxEditCell.js';
23
+ export { LocalDateEditCell } from './inputs/TableInput/LocalDateEditCell.js';
24
+ export { MoneySumFooter } from './inputs/TableInput/MoneySumFooter.js';
25
+ export { StringEditCell } from './inputs/TableInput/StringEditCell.js';
26
+ export { DropdownCell } from './inputs/TableInput/DropdownCell.js';
27
+ export { HoverCell } from './inputs/TableInput/HoverCell.js';
28
+ export { addRowOnTab } from './inputs/TableInput/addRowOnTab.js';
29
+ export { MoneyInput } from './money/MoneyInput/MoneyInput.js';
30
+ export { MoneyCurrencyInput } from './money/MoneyCurrencyInput/MoneyCurrencyInput.js';
31
+ export { Step } from './step/Step.js';
32
+ export { useStep } from './step/useStep.js';
33
+ export { FormStep } from './step/FormStep.js';
34
+ export { StepProvider } from './step/StepProvider.js';
13
35
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,71 @@
1
+ import React, { useState } from 'react';
2
+ import { formatDate } from '@thx/date';
3
+ import debug from 'debug';
4
+ import CreditCards from 'react-credit-cards';
5
+ import 'react-credit-cards/es/styles-compiled.css';
6
+ import { Grid, Form, Input } from 'semantic-ui-react';
7
+ import { MonthYearPicker } from '../../date/MonthYearPicker/MonthYearPicker.js';
8
+ import { CreditCardNumberInput } from './CreditCardNumberInput.js';
9
+ import './styles.css.js';
10
+
11
+ const d = debug("thx.controls.inputs.CreditCardInput");
12
+ function CreditCardInput(props) {
13
+ const { onBlur, disabled, onChange, value } = props;
14
+ const { name, number, cvc, expiry } = value || {};
15
+ const [focus, setFocus] = useState("number");
16
+ return /* @__PURE__ */ React.createElement(Grid, null, /* @__PURE__ */ React.createElement(Grid.Column, {
17
+ width: 4
18
+ }, /* @__PURE__ */ React.createElement(Form, null, /* @__PURE__ */ React.createElement(Form.Group, null, /* @__PURE__ */ React.createElement(Form.Field, {
19
+ width: 9
20
+ }, /* @__PURE__ */ React.createElement("label", null, "Number"), /* @__PURE__ */ React.createElement(CreditCardNumberInput, {
21
+ onFocus: () => setFocus("number"),
22
+ onBlur,
23
+ onChange: (v) => {
24
+ onChange && onChange({ name, number: v, cvc, expiry });
25
+ },
26
+ disabled
27
+ })), /* @__PURE__ */ React.createElement(Form.Field, {
28
+ width: 4
29
+ }, /* @__PURE__ */ React.createElement("label", null, "CVC"), /* @__PURE__ */ React.createElement(Input, {
30
+ value: cvc || "",
31
+ onChange: (ev, v) => {
32
+ onChange && onChange({ name, number, cvc: v.value, expiry });
33
+ },
34
+ onFocus: () => setFocus("cvc"),
35
+ onBlur: () => setFocus("name"),
36
+ disabled
37
+ }))), /* @__PURE__ */ React.createElement(Form.Group, null, /* @__PURE__ */ React.createElement(Form.Field, {
38
+ width: 9
39
+ }, /* @__PURE__ */ React.createElement("label", null, "Name"), /* @__PURE__ */ React.createElement(Input, {
40
+ value: name || "",
41
+ onChange: (ev, v) => {
42
+ onChange && onChange({ name: v.value, number, cvc, expiry });
43
+ },
44
+ onFocus: () => setFocus("name"),
45
+ disabled,
46
+ fluid: true
47
+ })), /* @__PURE__ */ React.createElement(Form.Field, {
48
+ width: 6
49
+ }, /* @__PURE__ */ React.createElement("label", null, "Expiry"), /* @__PURE__ */ React.createElement(MonthYearPicker, {
50
+ value: expiry,
51
+ onChange: (v) => {
52
+ onChange && onChange({ name, number, cvc, expiry: v });
53
+ },
54
+ onFocus: () => setFocus("expiry"),
55
+ disabled
56
+ }))))), /* @__PURE__ */ React.createElement(Grid.Column, {
57
+ width: 12
58
+ }, /* @__PURE__ */ React.createElement(CreditCards, {
59
+ cvc: cvc || "",
60
+ expiry: formatDate(expiry, { format: "MMuu" }) || "",
61
+ name: name || "",
62
+ number: number || "",
63
+ focused: focus,
64
+ callback: (a, b) => {
65
+ d(a, b);
66
+ }
67
+ })));
68
+ }
69
+
70
+ export { CreditCardInput };
71
+ //# sourceMappingURL=CreditCardInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreditCardInput.js","sources":["../../../../src/inputs/CreditCardInput/CreditCardInput.tsx"],"sourcesContent":["import type {LocalDate} from '@js-joda/core';\nimport {formatDate} from '@thx/date';\nimport debug from 'debug';\nimport {useState} from 'react';\nimport CreditCards, {Focused} from 'react-credit-cards';\nimport 'react-credit-cards/es/styles-compiled.css';\nimport {Form, Grid, Input, InputProps} from 'semantic-ui-react';\nimport {MonthYearPicker} from '../../date/MonthYearPicker';\nimport {CreditCardNumberInput} from './CreditCardNumberInput';\nimport './styles.css';\n\nconst d = debug('thx.controls.inputs.CreditCardInput');\n\nexport interface CreditCardData {\n\tnumber?: string;\n\tname?: string;\n\tcvc?: string;\n\texpiry?: LocalDate;\n}\n\nexport type CreditCardInputProps = {\n\tvalue?: CreditCardData;\n\tonChange?: (data: CreditCardData) => void;\n} & Pick<InputProps, 'disabled' | 'onBlur'>;\n\nexport function CreditCardInput(props: CreditCardInputProps) {\n\tconst {onBlur, disabled, onChange, value} = props;\n\tconst {name, number, cvc, expiry} = value || {};\n\n\tconst [focus, setFocus] = useState<Focused>('number');\n\n\treturn (\n\t\t<Grid>\n\t\t\t<Grid.Column width={4}>\n\t\t\t\t<Form>\n\t\t\t\t\t<Form.Group>\n\t\t\t\t\t\t<Form.Field width={9}>\n\t\t\t\t\t\t\t<label>Number</label>\n\t\t\t\t\t\t\t<CreditCardNumberInput\n\t\t\t\t\t\t\t\tonFocus={() => setFocus('number')}\n\t\t\t\t\t\t\t\tonBlur={onBlur}\n\t\t\t\t\t\t\t\tonChange={v => {\n\t\t\t\t\t\t\t\t\tonChange && onChange({name, number: v, cvc, expiry});\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Form.Field>\n\t\t\t\t\t\t<Form.Field width={4}>\n\t\t\t\t\t\t\t<label>CVC</label>\n\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\tvalue={cvc || ''}\n\t\t\t\t\t\t\t\tonChange={(ev, v) => {\n\t\t\t\t\t\t\t\t\tonChange && onChange({name, number, cvc: v.value, expiry});\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonFocus={() => setFocus('cvc')}\n\t\t\t\t\t\t\t\tonBlur={() => setFocus('name')}\n\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Form.Field>\n\t\t\t\t\t</Form.Group>\n\t\t\t\t\t<Form.Group>\n\t\t\t\t\t\t<Form.Field width={9}>\n\t\t\t\t\t\t\t<label>Name</label>\n\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\tvalue={name || ''}\n\t\t\t\t\t\t\t\tonChange={(ev, v) => {\n\t\t\t\t\t\t\t\t\tonChange && onChange({name: v.value, number, cvc, expiry});\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonFocus={() => setFocus('name')}\n\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\tfluid\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Form.Field>\n\t\t\t\t\t\t<Form.Field width={6}>\n\t\t\t\t\t\t\t<label>Expiry</label>\n\t\t\t\t\t\t\t<MonthYearPicker\n\t\t\t\t\t\t\t\tvalue={expiry}\n\t\t\t\t\t\t\t\tonChange={v => {\n\t\t\t\t\t\t\t\t\tonChange && onChange({name, number, cvc, expiry: v});\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonFocus={() => setFocus('expiry')}\n\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Form.Field>\n\t\t\t\t\t</Form.Group>\n\t\t\t\t</Form>\n\t\t\t</Grid.Column>\n\t\t\t<Grid.Column width={12}>\n\t\t\t\t<CreditCards\n\t\t\t\t\tcvc={cvc || ''}\n\t\t\t\t\texpiry={formatDate(expiry, {format: 'MMuu'}) || ''}\n\t\t\t\t\tname={name || ''}\n\t\t\t\t\tnumber={number || ''}\n\t\t\t\t\tfocused={focus}\n\t\t\t\t\tcallback={(a, b) => {\n\t\t\t\t\t\td(a, b);\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</Grid.Column>\n\t\t</Grid>\n\t);\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ import React, { useState, useCallback, useMemo } from 'react';
2
+ import creditCardType from 'credit-card-type';
3
+ import debug from 'debug';
4
+ import { validate } from 'luhn';
5
+ import { Input, Icon } from 'semantic-ui-react';
6
+ import { useMaskedInput } from '../MaskedInput/useMaskedInput.js';
7
+
8
+ const d = debug("thx.controls.inputs.CreditCardInput.CreditCardNumberInput");
9
+ function getIcon(type) {
10
+ switch (type) {
11
+ case "visa":
12
+ return "cc visa";
13
+ case "mastercard":
14
+ return "cc mastercard";
15
+ case "american-express":
16
+ return "cc amex";
17
+ case "diners-club":
18
+ return "cc diners club";
19
+ case "jcb":
20
+ return "cc jcb";
21
+ default:
22
+ return "credit card";
23
+ }
24
+ }
25
+ function CreditCardNumberInput(props) {
26
+ const { value, onChange, ...rest } = props;
27
+ const [icon, setIcon] = useState("credit card");
28
+ const [color, setColor] = useState("black");
29
+ const checkValidation = useCallback((valueArray) => {
30
+ const num = valueArray.join("").replaceAll(/(_|\s)/g, "");
31
+ const typ = creditCardType(num);
32
+ const isValid = validate(num);
33
+ if (typ.length === 1) {
34
+ setIcon(getIcon(typ[0].type));
35
+ } else {
36
+ setIcon("credit card");
37
+ }
38
+ if (num.length > 0) {
39
+ if (isValid) {
40
+ setColor("green");
41
+ } else {
42
+ setColor("red");
43
+ }
44
+ } else {
45
+ setColor("black");
46
+ }
47
+ return isValid;
48
+ }, []);
49
+ const creditCardMask = useMemo(() => ({
50
+ mask: "9999 9999 9999 9999",
51
+ isComplete: checkValidation,
52
+ autoUnmask: true
53
+ }), [checkValidation]);
54
+ const cardNumberRef = useMaskedInput({
55
+ mask: creditCardMask,
56
+ value,
57
+ onChange: (v) => {
58
+ const typ = creditCardType(v || "");
59
+ d(v, typ);
60
+ onChange && onChange(v);
61
+ }
62
+ });
63
+ return /* @__PURE__ */ React.createElement(Input, {
64
+ ...rest,
65
+ icon: true
66
+ }, /* @__PURE__ */ React.createElement("input", {
67
+ ref: cardNumberRef
68
+ }), /* @__PURE__ */ React.createElement(Icon, {
69
+ name: icon,
70
+ color,
71
+ size: "large"
72
+ }));
73
+ }
74
+
75
+ export { CreditCardNumberInput };
76
+ //# sourceMappingURL=CreditCardNumberInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreditCardNumberInput.js","sources":["../../../../src/inputs/CreditCardInput/CreditCardNumberInput.tsx"],"sourcesContent":["import creditCardType from 'credit-card-type';\nimport debug from 'debug';\nimport {validate} from 'luhn';\nimport {useCallback, useMemo, useState} from 'react';\nimport {Icon, Input, InputProps, SemanticICONS, SemanticCOLORS} from 'semantic-ui-react';\nimport type {MaskedInputProps} from '../MaskedInput';\nimport {useMaskedInput} from '../MaskedInput/useMaskedInput';\n\nconst d = debug('thx.controls.inputs.CreditCardInput.CreditCardNumberInput');\n\ninterface CreditCardNumberInputProps {\n\tonChange?: (value: string | undefined) => void;\n\tvalue?: string;\n}\n\nfunction getIcon(type: string): SemanticICONS {\n\tswitch (type) {\n\t\tcase 'visa':\n\t\t\treturn 'cc visa';\n\t\tcase 'mastercard':\n\t\t\treturn 'cc mastercard';\n\t\tcase 'american-express':\n\t\t\treturn 'cc amex';\n\t\tcase 'diners-club':\n\t\t\treturn 'cc diners club';\n\t\tcase 'jcb':\n\t\t\treturn 'cc jcb';\n\t\tdefault:\n\t\t\treturn 'credit card';\n\t}\n}\n\nexport function CreditCardNumberInput(props: CreditCardNumberInputProps & Omit<InputProps, 'onChange'>) {\n\tconst {value, onChange, ...rest} = props;\n\tconst [icon, setIcon] = useState<SemanticICONS>('credit card');\n\tconst [color, setColor] = useState<SemanticCOLORS>('black');\n\n\tconst checkValidation = useCallback((valueArray: string[]) => {\n\t\tconst num = valueArray.join('').replaceAll(/(_|\\s)/g, '');\n\t\tconst typ = creditCardType(num);\n\t\tconst isValid = validate(num);\n\n\t\tif (typ.length === 1) {\n\t\t\tsetIcon(getIcon(typ[0].type));\n\t\t} else {\n\t\t\tsetIcon('credit card');\n\t\t}\n\n\t\tif (num.length > 0) {\n\t\t\tif (isValid) {\n\t\t\t\tsetColor('green');\n\t\t\t} else {\n\t\t\t\tsetColor('red');\n\t\t\t}\n\t\t} else {\n\t\t\tsetColor('black');\n\t\t}\n\n\t\treturn isValid;\n\t}, []);\n\n\tconst creditCardMask: MaskedInputProps['mask'] = useMemo(\n\t\t() => ({\n\t\t\tmask: '9999 9999 9999 9999',\n\t\t\tisComplete: checkValidation,\n\t\t\tautoUnmask: true,\n\t\t}),\n\t\t[checkValidation],\n\t);\n\n\tconst cardNumberRef = useMaskedInput({\n\t\tmask: creditCardMask,\n\t\tvalue,\n\t\tonChange: v => {\n\t\t\tconst typ = creditCardType(v || '');\n\t\t\td(v, typ);\n\t\t\t// checkValidation([v || '']);\n\t\t\tonChange && onChange(v);\n\t\t},\n\t});\n\n\treturn (\n\t\t<Input {...rest} icon>\n\t\t\t<input ref={cardNumberRef} />\n\t\t\t<Icon name={icon} color={color} size=\"large\" />\n\t\t</Input>\n\t);\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import styleInject from './../../external/style-inject/dist/style-inject.es.js';
2
+
3
+ var css_248z = ".rccs {\n\tmargin: 0 !important;\n}\n";
4
+ styleInject(css_248z);
5
+
6
+ export { css_248z as default };
7
+ //# sourceMappingURL=styles.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA,wBAAwB,uDAAyD;AACjF;AACA;AACA;AACA;AACA;"}
@@ -1,18 +1,29 @@
1
- import React from 'react';
2
- import { TextInput } from '@mantine/core';
1
+ import React, { forwardRef, useImperativeHandle } from 'react';
3
2
  import debug from 'debug';
3
+ import { Input } from 'semantic-ui-react';
4
4
  import { useMaskedInput } from './useMaskedInput.js';
5
5
 
6
6
  debug("thx.controls.inputs.MaskedInput");
7
- function MaskedInput(props) {
8
- const { name, onChange, mask, value, ...rest } = props;
7
+ const MaskedInput = forwardRef((props, ref) => {
8
+ const { name, onBlur, disabled, onChange, mask, value, ...rest } = props;
9
9
  const inputRef = useMaskedInput({ mask, value, onChange });
10
- return /* @__PURE__ */ React.createElement(TextInput, {
10
+ useImperativeHandle(ref, () => ({
11
+ focus: () => {
12
+ inputRef.current?.focus();
13
+ },
14
+ select: () => {
15
+ inputRef.current?.select();
16
+ }
17
+ }), [inputRef]);
18
+ return /* @__PURE__ */ React.createElement(Input, {
19
+ ...rest
20
+ }, /* @__PURE__ */ React.createElement("input", {
21
+ disabled,
11
22
  name,
12
23
  ref: inputRef,
13
- ...rest
14
- });
15
- }
24
+ onBlur
25
+ }));
26
+ });
16
27
 
17
28
  export { MaskedInput };
18
29
  //# sourceMappingURL=MaskedInput.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MaskedInput.js","sources":["../../../../src/inputs/MaskedInput/MaskedInput.tsx"],"sourcesContent":["import {TextInput, TextInputProps} from '@mantine/core';\nimport debug from 'debug';\nimport {useMaskedInput, UseMaskedInputProps} from './useMaskedInput';\n\nconst d = debug('thx.controls.inputs.MaskedInput');\n\nexport type MaskedInputProps = {\n\tname?: string;\n} & UseMaskedInputProps &\n\tOmit<TextInputProps, 'onChange' | 'value'>;\n\nexport function MaskedInput(props: MaskedInputProps) {\n\tconst {name, onChange, mask, value, ...rest} = props;\n\n\tconst inputRef = useMaskedInput({mask, value, onChange});\n\n\treturn <TextInput name={name} ref={inputRef} {...rest} />;\n}\n"],"names":[],"mappings":";;;;;AAIU,MAAM,iCAAiC,EAAA;AAO1C,SAAA,WAAA,CAAqB,KAAyB,EAAA;AACpD,EAAA,MAAM,EAAC,IAAA,EAAM,QAAU,EAAA,IAAA,EAAM,UAAU,IAAQ,EAAA,GAAA,KAAA,CAAA;AAE/C,EAAA,MAAM,WAAW,cAAe,CAAA,EAAC,IAAM,EAAA,KAAA,EAAO,UAAS,CAAA,CAAA;AAEvD,EAAA,uBAAQ,KAAA,CAAA,aAAA,CAAA,SAAA,EAAA;AAAA,IAAU,IAAA;AAAA,IAAY,GAAK,EAAA,QAAA;AAAA,IAAc,GAAA,IAAA;AAAA,GAAM,CAAA,CAAA;AACxD;;;;"}
1
+ {"version":3,"file":"MaskedInput.js","sources":["../../../../src/inputs/MaskedInput/MaskedInput.tsx"],"sourcesContent":["import debug from 'debug';\nimport {forwardRef, useImperativeHandle} from 'react';\nimport {Input, InputProps} from 'semantic-ui-react';\nimport {useMaskedInput, UseMaskedInputProps} from './useMaskedInput';\n\nconst d = debug('thx.controls.inputs.MaskedInput');\n\nexport interface MaskedInputRef {\n\tfocus: () => void;\n\tselect: () => void;\n}\n\nexport type MaskedInputProps = {\n\tname?: string;\n\tonBlur?: (event: any) => void;\n} & UseMaskedInputProps &\n\tOmit<InputProps, 'onChange'>;\n\nexport const MaskedInput = forwardRef<MaskedInputRef, MaskedInputProps>((props, ref) => {\n\tconst {name, onBlur, disabled, onChange, mask, value, ...rest} = props;\n\n\tconst inputRef = useMaskedInput({mask, value, onChange});\n\n\tuseImperativeHandle(\n\t\tref,\n\t\t() => ({\n\t\t\tfocus: () => {\n\t\t\t\tinputRef.current?.focus();\n\t\t\t},\n\t\t\tselect: () => {\n\t\t\t\tinputRef.current?.select();\n\t\t\t},\n\t\t}),\n\t\t[inputRef],\n\t);\n\n\treturn (\n\t\t<Input {...rest}>\n\t\t\t<input disabled={disabled} name={name} ref={inputRef} onBlur={onBlur} />\n\t\t</Input>\n\t);\n});\n"],"names":[],"mappings":";;;;;AAKU,MAAM,iCAAiC,EAAA;AAa1C,MAAM,WAAc,GAAA,UAAA,CAA6C,CAAC,KAAA,EAAO,GAAQ,KAAA;AACvF,EAAA,MAAM,EAAC,IAAM,EAAA,MAAA,EAAQ,UAAU,QAAU,EAAA,IAAA,EAAM,UAAU,IAAQ,EAAA,GAAA,KAAA,CAAA;AAEjE,EAAA,MAAM,WAAW,cAAe,CAAA,EAAC,IAAM,EAAA,KAAA,EAAO,UAAS,CAAA,CAAA;AAEvD,EAAA,mBAAA,CACC,KACA,OAAO;AAAA,IACN,OAAO,MAAM;AACZ,MAAA,QAAA,CAAS,SAAS,KAAM,EAAA,CAAA;AAAA,KACzB;AAAA,IACA,QAAQ,MAAM;AACb,MAAA,QAAA,CAAS,SAAS,MAAO,EAAA,CAAA;AAAA,KAC1B;AAAA,GACD,CAAA,EACA,CAAC,QAAQ,CACV,CAAA,CAAA;AAEA,EAAA,uBACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA;AAAA,IAAU,GAAA,IAAA;AAAA,GAAA,kBACT,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA;AAAA,IAAM,QAAA;AAAA,IAAoB,IAAA;AAAA,IAAY,GAAK,EAAA,QAAA;AAAA,IAAU,MAAA;AAAA,GAAgB,CACvE,CAAA,CAAA;AAEF,CAAC;;;;"}