@neko-os/ui 0.5.4 → 0.6.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 (135) hide show
  1. package/dist/NekoUI.js +12 -9
  2. package/dist/abstractions/WindowOverlay.js +3 -0
  3. package/dist/abstractions/WindowOverlay.native.js +21 -0
  4. package/dist/abstractions/helpers/storage.js +14 -4
  5. package/dist/abstractions/helpers/storage.native.js +9 -1
  6. package/dist/components/feedback/notifications/NotificationsHandler.js +10 -6
  7. package/dist/components/index.js +3 -1
  8. package/dist/components/inputs/DateInput.js +10 -6
  9. package/dist/components/inputs/InputWrapper.js +2 -3
  10. package/dist/components/inputs/NumberWheelInput.js +50 -0
  11. package/dist/components/inputs/NumberWheelPicker.js +43 -0
  12. package/dist/components/inputs/UploadInput.js +4 -4
  13. package/dist/components/inputs/WheelPicker.js +49 -0
  14. package/dist/components/inputs/WheelPicker.native.js +88 -0
  15. package/dist/components/inputs/WheelPicker.web.js +1 -0
  16. package/dist/components/inputs/dateWheelPicker/DateWheelPicker.js +24 -0
  17. package/dist/components/inputs/dateWheelPicker/DayWheelPicker.js +48 -0
  18. package/dist/components/inputs/dateWheelPicker/MonthWheelPicker.js +19 -0
  19. package/dist/components/inputs/dateWheelPicker/QuarterWheelPicker.js +61 -0
  20. package/dist/components/inputs/dateWheelPicker/WeekWheelPicker.js +66 -0
  21. package/dist/components/inputs/dateWheelPicker/YearWheelPicker.js +35 -0
  22. package/dist/components/inputs/index.js +5 -1
  23. package/dist/components/inputs/upload/Upload.native.js +60 -52
  24. package/dist/components/inputs/upload/useUploadState.js +11 -3
  25. package/dist/components/measurements/FeetInchesInput.js +91 -0
  26. package/dist/components/measurements/LengthInput.js +32 -0
  27. package/dist/components/measurements/LengthText.js +10 -0
  28. package/dist/components/measurements/MeasurementHandler.js +26 -0
  29. package/dist/components/measurements/WeightInput.js +25 -0
  30. package/dist/components/measurements/WeightText.js +10 -0
  31. package/dist/components/measurements/helpers/detectMeasurementSystem.js +15 -0
  32. package/dist/components/measurements/helpers/detectMeasurementSystem.native.js +9 -0
  33. package/dist/components/measurements/helpers/index.js +2 -0
  34. package/dist/components/measurements/helpers/length.js +112 -0
  35. package/dist/components/measurements/helpers/weight.js +56 -0
  36. package/dist/components/measurements/index.js +9 -0
  37. package/dist/components/measurements/useLengthFormatter.js +35 -0
  38. package/dist/components/measurements/useLocalInputValue.js +32 -0
  39. package/dist/components/measurements/useWeightFormatter.js +29 -0
  40. package/dist/components/routing/ReturnButton.js +20 -0
  41. package/dist/components/routing/ReturnButton.native.js +20 -0
  42. package/dist/components/routing/ReturnButton.web.js +2 -0
  43. package/dist/components/routing/ReturnLink.js +25 -0
  44. package/dist/components/routing/ReturnLink.native.js +25 -0
  45. package/dist/components/routing/ReturnLink.web.js +2 -0
  46. package/dist/components/routing/RoutedStepsContent.js +21 -0
  47. package/dist/components/routing/RoutedStepsContent.native.js +94 -0
  48. package/dist/components/routing/RoutedStepsContent.web.js +3 -0
  49. package/dist/components/routing/index.js +3 -0
  50. package/dist/components/state/StatePresenter.js +1 -1
  51. package/dist/components/steps/StepsHandler.js +2 -0
  52. package/dist/components/structure/TopBar.js +18 -16
  53. package/dist/components/theme/ThemePickerDrawer.js +1 -1
  54. package/dist/helpers/compress.js +61 -0
  55. package/dist/helpers/compress.native.js +49 -0
  56. package/dist/helpers/files.js +7 -0
  57. package/dist/helpers/files.native.js +55 -0
  58. package/dist/helpers/index.js +6 -1
  59. package/dist/helpers/media.js +4 -0
  60. package/dist/helpers/media.native.js +41 -0
  61. package/dist/helpers/numbers.js +13 -0
  62. package/dist/helpers/pickAssets.js +7 -0
  63. package/dist/helpers/pickAssets.native.js +66 -0
  64. package/dist/helpers/storage.js +17 -0
  65. package/dist/i18n/I18n.js +4 -4
  66. package/dist/index.js +1 -1
  67. package/dist/responsive/responsiveHooks.js +17 -0
  68. package/package.json +2 -14
  69. package/src/NekoUI.js +16 -13
  70. package/src/abstractions/WindowOverlay.js +3 -0
  71. package/src/abstractions/WindowOverlay.native.js +21 -0
  72. package/src/abstractions/helpers/storage.js +13 -3
  73. package/src/abstractions/helpers/storage.native.js +8 -0
  74. package/src/components/feedback/notifications/NotificationsHandler.js +12 -8
  75. package/src/components/index.js +2 -0
  76. package/src/components/inputs/DateInput.js +8 -4
  77. package/src/components/inputs/InputWrapper.js +1 -2
  78. package/src/components/inputs/NumberWheelInput.js +50 -0
  79. package/src/components/inputs/NumberWheelPicker.js +43 -0
  80. package/src/components/inputs/UploadInput.js +2 -2
  81. package/src/components/inputs/WheelPicker.js +49 -0
  82. package/src/components/inputs/WheelPicker.native.js +88 -0
  83. package/src/components/inputs/WheelPicker.web.js +1 -0
  84. package/src/components/inputs/dateWheelPicker/DateWheelPicker.js +24 -0
  85. package/src/components/inputs/dateWheelPicker/DayWheelPicker.js +48 -0
  86. package/src/components/inputs/dateWheelPicker/MonthWheelPicker.js +19 -0
  87. package/src/components/inputs/dateWheelPicker/QuarterWheelPicker.js +61 -0
  88. package/src/components/inputs/dateWheelPicker/WeekWheelPicker.js +66 -0
  89. package/src/components/inputs/dateWheelPicker/YearWheelPicker.js +35 -0
  90. package/src/components/inputs/index.js +4 -0
  91. package/src/components/inputs/upload/Upload.native.js +58 -50
  92. package/src/components/inputs/upload/useUploadState.js +11 -3
  93. package/src/components/measurements/FeetInchesInput.js +91 -0
  94. package/src/components/measurements/LengthInput.js +32 -0
  95. package/src/components/measurements/LengthText.js +10 -0
  96. package/src/components/measurements/MeasurementHandler.js +26 -0
  97. package/src/components/measurements/WeightInput.js +25 -0
  98. package/src/components/measurements/WeightText.js +10 -0
  99. package/src/components/measurements/helpers/detectMeasurementSystem.js +15 -0
  100. package/src/components/measurements/helpers/detectMeasurementSystem.native.js +9 -0
  101. package/src/components/measurements/helpers/index.js +2 -0
  102. package/src/components/measurements/helpers/length.js +112 -0
  103. package/src/components/measurements/helpers/weight.js +56 -0
  104. package/src/components/measurements/index.js +9 -0
  105. package/src/components/measurements/useLengthFormatter.js +35 -0
  106. package/src/components/measurements/useLocalInputValue.js +32 -0
  107. package/src/components/measurements/useWeightFormatter.js +29 -0
  108. package/src/components/routing/ReturnButton.js +20 -0
  109. package/src/components/routing/ReturnButton.native.js +20 -0
  110. package/src/components/routing/ReturnButton.web.js +2 -0
  111. package/src/components/routing/ReturnLink.js +25 -0
  112. package/src/components/routing/ReturnLink.native.js +25 -0
  113. package/src/components/routing/ReturnLink.web.js +2 -0
  114. package/src/components/routing/RoutedStepsContent.js +21 -0
  115. package/src/components/routing/RoutedStepsContent.native.js +94 -0
  116. package/src/components/routing/RoutedStepsContent.web.js +3 -0
  117. package/src/components/routing/index.js +3 -0
  118. package/src/components/state/StatePresenter.js +1 -1
  119. package/src/components/steps/StepsHandler.js +2 -0
  120. package/src/components/structure/TopBar.js +16 -14
  121. package/src/components/theme/ThemePickerDrawer.js +1 -1
  122. package/src/helpers/compress.js +61 -0
  123. package/src/helpers/compress.native.js +49 -0
  124. package/src/helpers/files.js +7 -0
  125. package/src/helpers/files.native.js +55 -0
  126. package/src/helpers/index.js +6 -1
  127. package/src/helpers/media.js +4 -0
  128. package/src/helpers/media.native.js +41 -0
  129. package/src/helpers/numbers.js +13 -0
  130. package/src/helpers/pickAssets.js +7 -0
  131. package/src/helpers/pickAssets.native.js +66 -0
  132. package/src/helpers/storage.js +17 -0
  133. package/src/i18n/I18n.js +2 -2
  134. package/src/index.js +1 -1
  135. package/src/responsive/responsiveHooks.js +17 -0
@@ -0,0 +1,19 @@
1
+ var _excluded = ["value"];var _this = this,_jsxFileName = "/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/inputs/dateWheelPicker/MonthWheelPicker.js";function _objectWithoutProperties(e, t) {if (null == e) return {};var o,r,i = _objectWithoutPropertiesLoose(e, t);if (Object.getOwnPropertySymbols) {var n = Object.getOwnPropertySymbols(e);for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);}return i;}function _objectWithoutPropertiesLoose(r, e) {if (null == r) return {};var t = {};for (var n in r) if ({}.hasOwnProperty.call(r, n)) {if (-1 !== e.indexOf(n)) continue;t[n] = r[n];}return t;}import { View } from "../../structure";
2
+ import { DayWheelPicker } from "./DayWheelPicker";import { jsx as _jsx } from "react/jsx-runtime";
3
+
4
+ var DatePickerDate;
5
+ try {
6
+ DatePickerDate = require('@quidone/react-native-wheel-picker').DatePicker.Date;
7
+ } catch (_unused) {
8
+ DatePickerDate = null;
9
+ }
10
+
11
+ var renderHiddenDate = function renderHiddenDate() {return (
12
+ _jsx(View, { width: 0, hiddenOverflow: true, pointerEvents: "none", children:
13
+ DatePickerDate ? _jsx(DatePickerDate, {}) : null }
14
+ ));};
15
+
16
+
17
+ export function MonthWheelPicker(_ref) {var _value$startOf;var value = _ref.value,props = _objectWithoutProperties(_ref, _excluded);
18
+ return _jsx(DayWheelPicker, Object.assign({}, props, { value: (_value$startOf = value == null ? void 0 : value.startOf == null ? void 0 : value.startOf('month')) != null ? _value$startOf : value, renderDate: renderHiddenDate }));
19
+ }
@@ -0,0 +1,61 @@
1
+ var _jsxFileName = "/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/inputs/dateWheelPicker/QuarterWheelPicker.js";import { useMemo } from 'react';
2
+ import dayjs from 'dayjs';
3
+
4
+ import { ClearLink } from "../../actions/ClearLink";
5
+ import { View } from "../../structure";
6
+ import { WheelPicker } from "../WheelPicker";import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
7
+
8
+ var QUARTERS = [
9
+ { value: 1, label: 'Q1' },
10
+ { value: 2, label: 'Q2' },
11
+ { value: 3, label: 'Q3' },
12
+ { value: 4, label: 'Q4' }];
13
+
14
+
15
+ function getYearOptions(min, max) {
16
+ var minYear = min ? dayjs(min).year() : dayjs().year() - 100;
17
+ var maxYear = max ? dayjs(max).year() : dayjs().year() + 100;
18
+ var options = [];
19
+ for (var y = minYear; y <= maxYear; y++) options.push({ value: y, label: String(y) });
20
+ return options;
21
+ }
22
+
23
+ export function QuarterWheelPicker(_ref) {var value = _ref.value,onChange = _ref.onChange,min = _ref.min,max = _ref.max,allowClear = _ref.allowClear;
24
+ var current = value ? dayjs(value) : dayjs();
25
+ var quarter = Math.floor(current.month() / 3) + 1;
26
+ var year = current.year();
27
+
28
+ var yearOptions = useMemo(function () {return getYearOptions(min, max);}, [min, max]);
29
+
30
+ var handleQuarterChange = function handleQuarterChange(q) {
31
+ onChange == null ? void 0 : onChange(
32
+ dayjs().
33
+ year(year).
34
+ month((q - 1) * 3).
35
+ startOf('month')
36
+ );
37
+ };
38
+
39
+ var handleYearChange = function handleYearChange(y) {
40
+ onChange == null ? void 0 : onChange(
41
+ dayjs().
42
+ year(y).
43
+ month((quarter - 1) * 3).
44
+ startOf('month')
45
+ );
46
+ };
47
+
48
+ return (
49
+ _jsxs(View, { children: [
50
+ _jsxs(View, { row: true, children: [
51
+ _jsx(View, { flex: true, children:
52
+ _jsx(WheelPicker, { options: QUARTERS, value: quarter, onChange: handleQuarterChange }) }
53
+ ),
54
+ _jsx(View, { flex: true, children:
55
+ _jsx(WheelPicker, { options: yearOptions, value: year, onChange: handleYearChange }) }
56
+ )] }
57
+ ),
58
+ _jsx(ClearLink, { hide: !allowClear, value: value, onChange: onChange })] }
59
+ ));
60
+
61
+ }
@@ -0,0 +1,66 @@
1
+ var _jsxFileName = "/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/inputs/dateWheelPicker/WeekWheelPicker.js";import { useMemo } from 'react';
2
+ import dayjs from 'dayjs';
3
+ import weekOfYear from 'dayjs/esm/plugin/weekOfYear';
4
+
5
+ import { ClearLink } from "../../actions/ClearLink";
6
+ import { View } from "../../structure";
7
+ import { WheelPicker } from "../WheelPicker";import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
+
9
+ dayjs.extend(weekOfYear);
10
+
11
+ function getWeekOptions(year) {
12
+ var options = [];
13
+ var d = dayjs().year(year).startOf('year').startOf('week');
14
+
15
+ while (d.year() <= year) {
16
+ var weekStart = d;
17
+ var weekEnd = d.endOf('week');
18
+ var label = `W${d.week()} ${weekStart.format('MMM D')} - ${weekEnd.format('MMM D')}`;
19
+ options.push({ value: d.week(), label: label, date: weekStart });
20
+ d = d.add(1, 'week');
21
+ }
22
+
23
+ return options;
24
+ }
25
+
26
+ function getYearOptions(min, max) {
27
+ var minYear = min ? dayjs(min).year() : dayjs().year() - 100;
28
+ var maxYear = max ? dayjs(max).year() : dayjs().year() + 100;
29
+ var options = [];
30
+ for (var y = minYear; y <= maxYear; y++) options.push({ value: y, label: String(y) });
31
+ return options;
32
+ }
33
+
34
+ export function WeekWheelPicker(_ref) {var value = _ref.value,onChange = _ref.onChange,min = _ref.min,max = _ref.max,allowClear = _ref.allowClear;
35
+ var current = value ? dayjs(value) : dayjs();
36
+ var week = current.week();
37
+ var year = current.year();
38
+
39
+ var weekOptions = useMemo(function () {return getWeekOptions(year);}, [year]);
40
+ var yearOptions = useMemo(function () {return getYearOptions(min, max);}, [min, max]);
41
+
42
+ var handleWeekChange = function handleWeekChange(w) {
43
+ var opt = weekOptions.find(function (o) {return o.value === w;});
44
+ if (opt) onChange == null ? void 0 : onChange(opt.date.startOf('week'));
45
+ };
46
+
47
+ var handleYearChange = function handleYearChange(y) {
48
+ var newWeeks = getWeekOptions(y);
49
+ var closest = newWeeks.find(function (o) {return o.value === week;}) || newWeeks[0];
50
+ onChange == null ? void 0 : onChange(closest.date.startOf('week'));
51
+ };
52
+
53
+ return (
54
+ _jsxs(View, { children: [
55
+ _jsxs(View, { row: true, children: [
56
+ _jsx(View, { flex: true, children:
57
+ _jsx(WheelPicker, { options: weekOptions, value: week, onChange: handleWeekChange }) }
58
+ ),
59
+ _jsx(View, { width: 120, children:
60
+ _jsx(WheelPicker, { options: yearOptions, value: year, onChange: handleYearChange }) }
61
+ )] }
62
+ ),
63
+ _jsx(ClearLink, { hide: !allowClear, value: value, onChange: onChange })] }
64
+ ));
65
+
66
+ }
@@ -0,0 +1,35 @@
1
+ var _excluded = ["value"];var _this = this,_jsxFileName = "/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/inputs/dateWheelPicker/YearWheelPicker.js";function _objectWithoutProperties(e, t) {if (null == e) return {};var o,r,i = _objectWithoutPropertiesLoose(e, t);if (Object.getOwnPropertySymbols) {var n = Object.getOwnPropertySymbols(e);for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);}return i;}function _objectWithoutPropertiesLoose(r, e) {if (null == r) return {};var t = {};for (var n in r) if ({}.hasOwnProperty.call(r, n)) {if (-1 !== e.indexOf(n)) continue;t[n] = r[n];}return t;}import { View } from "../../structure";
2
+ import { DayWheelPicker } from "./DayWheelPicker";import { jsx as _jsx } from "react/jsx-runtime";
3
+
4
+ var DatePickerDate, DatePickerMonth;
5
+ try {
6
+ var dp = require('@quidone/react-native-wheel-picker').DatePicker;
7
+ DatePickerDate = dp.Date;
8
+ DatePickerMonth = dp.Month;
9
+ } catch (_unused) {
10
+ DatePickerDate = null;
11
+ DatePickerMonth = null;
12
+ }
13
+
14
+ var renderHiddenDate = function renderHiddenDate() {return (
15
+ _jsx(View, { width: 0, hiddenOverflow: true, pointerEvents: "none", children:
16
+ DatePickerDate ? _jsx(DatePickerDate, {}) : null }
17
+ ));};
18
+
19
+
20
+ var renderHiddenMonth = function renderHiddenMonth() {return (
21
+ _jsx(View, { width: 0, hiddenOverflow: true, pointerEvents: "none", children:
22
+ DatePickerMonth ? _jsx(DatePickerMonth, {}) : null }
23
+ ));};
24
+
25
+
26
+ export function YearWheelPicker(_ref) {var _value$startOf;var value = _ref.value,props = _objectWithoutProperties(_ref, _excluded);
27
+ return (
28
+ _jsx(DayWheelPicker, Object.assign({},
29
+ props, {
30
+ value: (_value$startOf = value == null ? void 0 : value.startOf == null ? void 0 : value.startOf('year')) != null ? _value$startOf : value,
31
+ renderDate: renderHiddenDate,
32
+ renderMonth: renderHiddenMonth })
33
+ ));
34
+
35
+ }
@@ -20,4 +20,8 @@ export * from "./RateInput";
20
20
  export * from "./SegmentedPicker";
21
21
  export * from "./Editable";
22
22
  export * from "./upload/Upload";
23
- export * from "./UploadInput";
23
+ export * from "./UploadInput";
24
+ export * from "./WheelPicker";
25
+ export * from "./dateWheelPicker/DateWheelPicker";
26
+ export * from "./NumberWheelInput";
27
+ export * from "./NumberWheelPicker";
@@ -1,21 +1,19 @@
1
- var _jsxFileName = "/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/inputs/upload/Upload.native.js";var _excluded = ["children", "onChange", "onUpload", "value", "accept", "multiple", "maxCount", "disabled"];function asyncGeneratorStep(n, t, e, r, o, a, c) {try {var i = n[a](c),u = i.value;} catch (n) {return void e(n);}i.done ? t(u) : Promise.resolve(u).then(r, o);}function _asyncToGenerator(n) {return function () {var t = this,e = arguments;return new Promise(function (r, o) {var a = n.apply(t, e);function _next(n) {asyncGeneratorStep(a, r, o, _next, _throw, "next", n);}function _throw(n) {asyncGeneratorStep(a, r, o, _next, _throw, "throw", n);}_next(void 0);});};}function _slicedToArray(r, e) {return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();}function _nonIterableRest() {throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}function _unsupportedIterableToArray(r, a) {if (r) {if ("string" == typeof r) return _arrayLikeToArray(r, a);var t = {}.toString.call(r).slice(8, -1);return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;}}function _arrayLikeToArray(r, a) {(null == a || a > r.length) && (a = r.length);for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];return n;}function _iterableToArrayLimit(r, l) {var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];if (null != t) {var e,n,i,u,a = [],f = !0,o = !1;try {if (i = (t = t.call(r)).next, 0 === l) {if (Object(t) !== t) return;f = !1;} else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);} catch (r) {o = !0, n = r;} finally {try {if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;} finally {if (o) throw n;}}return a;}}function _arrayWithHoles(r) {if (Array.isArray(r)) return r;}function _objectWithoutProperties(e, t) {if (null == e) return {};var o,r,i = _objectWithoutPropertiesLoose(e, t);if (Object.getOwnPropertySymbols) {var n = Object.getOwnPropertySymbols(e);for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);}return i;}function _objectWithoutPropertiesLoose(r, e) {if (null == r) return {};var t = {};for (var n in r) if ({}.hasOwnProperty.call(r, n)) {if (-1 !== e.indexOf(n)) continue;t[n] = r[n];}return t;}import React, { useState, useCallback } from 'react';
1
+ var _jsxFileName = "/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/inputs/upload/Upload.native.js";var _excluded = ["children", "onChange", "onUpload", "value", "accept", "multiple", "maxCount", "disabled", "persistTo", "saveToLibrary", "compress"];function asyncGeneratorStep(n, t, e, r, o, a, c) {try {var i = n[a](c),u = i.value;} catch (n) {return void e(n);}i.done ? t(u) : Promise.resolve(u).then(r, o);}function _asyncToGenerator(n) {return function () {var t = this,e = arguments;return new Promise(function (r, o) {var a = n.apply(t, e);function _next(n) {asyncGeneratorStep(a, r, o, _next, _throw, "next", n);}function _throw(n) {asyncGeneratorStep(a, r, o, _next, _throw, "throw", n);}_next(void 0);});};}function _slicedToArray(r, e) {return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();}function _nonIterableRest() {throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}function _unsupportedIterableToArray(r, a) {if (r) {if ("string" == typeof r) return _arrayLikeToArray(r, a);var t = {}.toString.call(r).slice(8, -1);return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;}}function _arrayLikeToArray(r, a) {(null == a || a > r.length) && (a = r.length);for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];return n;}function _iterableToArrayLimit(r, l) {var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];if (null != t) {var e,n,i,u,a = [],f = !0,o = !1;try {if (i = (t = t.call(r)).next, 0 === l) {if (Object(t) !== t) return;f = !1;} else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);} catch (r) {o = !0, n = r;} finally {try {if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;} finally {if (o) throw n;}}return a;}}function _arrayWithHoles(r) {if (Array.isArray(r)) return r;}function _objectWithoutProperties(e, t) {if (null == e) return {};var o,r,i = _objectWithoutPropertiesLoose(e, t);if (Object.getOwnPropertySymbols) {var n = Object.getOwnPropertySymbols(e);for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);}return i;}function _objectWithoutPropertiesLoose(r, e) {if (null == r) return {};var t = {};for (var n in r) if ({}.hasOwnProperty.call(r, n)) {if (-1 !== e.indexOf(n)) continue;t[n] = r[n];}return t;}import React, { useState, useCallback } from 'react';
2
2
 
3
3
  import { BottomDrawer } from "../../modals/bottomDrawer";
4
4
  import { Icon } from "../../presentation/Icon";
5
5
  import { Link } from "../../actions/Link";
6
6
  import { Text } from "../../text/Text";
7
7
  import { View } from "../../structure/View";
8
+ import { compressAssets } from "../../../helpers/compress";
9
+ import { persistFile } from "../../../helpers/files";
10
+ import { pickFromCamera, pickFromLibrary } from "../../../helpers/pickAssets";
8
11
  import { useUploadState } from "./useUploadState";import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
9
12
 
10
- var ImagePicker;
11
- try {
12
- ImagePicker = require('expo-image-picker');
13
- } catch (_unused) {}
14
-
15
13
  var DocumentPicker;
16
14
  try {
17
15
  DocumentPicker = require('expo-document-picker');
18
- } catch (_unused2) {}
16
+ } catch (_unused) {}
19
17
 
20
18
  function acceptsImages(accept) {
21
19
  if (!accept) return true;
@@ -28,17 +26,6 @@ function needsFilePicker(accept) {
28
26
  return parts.some(function (p) {return !p.startsWith('image/');});
29
27
  }
30
28
 
31
- function normalizeImageResult(asset) {
32
- return {
33
- uri: asset.uri,
34
- name: asset.fileName || asset.uri.split('/').pop(),
35
- type: asset.mimeType || asset.type || 'image/jpeg',
36
- size: asset.fileSize || asset.filesize,
37
- width: asset.width,
38
- height: asset.height
39
- };
40
- }
41
-
42
29
  function normalizeDocumentResult(doc) {
43
30
  return {
44
31
  uri: doc.uri,
@@ -56,53 +43,74 @@ function getMediaTypes(accept) {
56
43
  return undefined;
57
44
  }
58
45
 
59
- export function Upload(_ref) {var children = _ref.children,onChange = _ref.onChange,onUpload = _ref.onUpload,valueProp = _ref.value,accept = _ref.accept,_ref$multiple = _ref.multiple,multiple = _ref$multiple === void 0 ? false : _ref$multiple,maxCount = _ref.maxCount,_ref$disabled = _ref.disabled,disabled = _ref$disabled === void 0 ? false : _ref$disabled,props = _objectWithoutProperties(_ref, _excluded);
46
+ export function Upload(_ref) {var children = _ref.children,onChange = _ref.onChange,onUpload = _ref.onUpload,valueProp = _ref.value,accept = _ref.accept,_ref$multiple = _ref.multiple,multiple = _ref$multiple === void 0 ? false : _ref$multiple,maxCount = _ref.maxCount,_ref$disabled = _ref.disabled,disabled = _ref$disabled === void 0 ? false : _ref$disabled,persistTo = _ref.persistTo,saveToLibrary = _ref.saveToLibrary,_ref$compress = _ref.compress,compress = _ref$compress === void 0 ? true : _ref$compress,props = _objectWithoutProperties(_ref, _excluded);
60
47
  var _useUploadState = useUploadState({ onUpload: onUpload, onChange: onChange, multiple: multiple, maxCount: maxCount, value: valueProp }),value = _useUploadState.value,addFiles = _useUploadState.addFiles,remove = _useUploadState.remove;
61
48
  var _useState = useState(false),_useState2 = _slicedToArray(_useState, 2),open = _useState2[0],setOpen = _useState2[1];
62
49
 
50
+ var commitFiles = useCallback(function () {var _ref2 = _asyncToGenerator(
51
+ function* (assets) {
52
+ var compressOpts = typeof compress === 'object' ? compress : {};
53
+ var processed = compress !== false ? yield compressAssets(assets, compressOpts) : assets;
54
+ if (persistTo && !onUpload) {
55
+ addFiles(processed.map(function (a) {return Object.assign({}, a, { uri: persistFile(a.uri, persistTo, { name: a.name }) });}));
56
+ } else {
57
+ addFiles(processed);
58
+ }
59
+ });return function (_x) {return _ref2.apply(this, arguments);};}(),
60
+ [compress, persistTo, onUpload, addFiles]
61
+ );
62
+
63
63
  var handlePress = useCallback(function () {
64
64
  if (disabled) return;
65
65
  setOpen(true);
66
66
  }, [disabled]);
67
67
 
68
+
69
+
70
+
71
+
72
+
68
73
  var handleCamera = useCallback(_asyncToGenerator(function* () {
69
- setOpen(false);
70
- if (!ImagePicker) return;
71
- var permission = yield ImagePicker.requestCameraPermissionsAsync();
72
- if (!permission.granted) return;
73
- var result = yield ImagePicker.launchCameraAsync({
74
- allowsMultipleSelection: multiple,
75
- selectionLimit: maxCount || 0,
76
- mediaTypes: getMediaTypes(accept)
77
- });
78
- if (result.canceled) return;
79
- addFiles(result.assets.map(normalizeImageResult));
80
- }), [multiple, maxCount, accept, addFiles]);
74
+ try {
75
+ var result = yield pickFromCamera({
76
+ multiple: multiple, maxCount: maxCount, compress: compress, saveToLibrary: saveToLibrary,
77
+ mediaTypes: getMediaTypes(accept),
78
+ persistTo: !onUpload ? persistTo : undefined
79
+ });
80
+ if (multiple ? !result.length : !result) return;
81
+ addFiles(multiple ? result : [result]);
82
+ } finally {
83
+ setOpen(false);
84
+ }
85
+ }), [multiple, maxCount, accept, compress, saveToLibrary, onUpload, persistTo, addFiles]);
81
86
 
82
87
  var handleLibrary = useCallback(_asyncToGenerator(function* () {
83
- setOpen(false);
84
- if (!ImagePicker) return;
85
- var permission = yield ImagePicker.requestMediaLibraryPermissionsAsync();
86
- if (!permission.granted) return;
87
- var result = yield ImagePicker.launchImageLibraryAsync({
88
- allowsMultipleSelection: multiple,
89
- selectionLimit: maxCount || 0,
90
- mediaTypes: getMediaTypes(accept)
91
- });
92
- if (result.canceled) return;
93
- addFiles(result.assets.map(normalizeImageResult));
94
- }), [multiple, maxCount, accept, addFiles]);
88
+ try {
89
+ var result = yield pickFromLibrary({
90
+ multiple: multiple, maxCount: maxCount, compress: compress,
91
+ mediaTypes: getMediaTypes(accept),
92
+ persistTo: !onUpload ? persistTo : undefined
93
+ });
94
+ if (multiple ? !result.length : !result) return;
95
+ addFiles(multiple ? result : [result]);
96
+ } finally {
97
+ setOpen(false);
98
+ }
99
+ }), [multiple, maxCount, accept, compress, onUpload, persistTo, addFiles]);
95
100
 
96
101
  var handleFiles = useCallback(_asyncToGenerator(function* () {
97
- setOpen(false);
98
- if (!DocumentPicker) return;
99
- var result = yield DocumentPicker.getDocumentAsync({
100
- multiple: multiple,
101
- type: accept || '*/*'
102
- });
103
- if (result.canceled) return;
104
- addFiles(result.assets.map(normalizeDocumentResult));
105
- }), [multiple, accept, addFiles]);
102
+ if (!DocumentPicker) return setOpen(false);
103
+ try {
104
+ var result = yield DocumentPicker.getDocumentAsync({
105
+ multiple: multiple,
106
+ type: accept || '*/*'
107
+ });
108
+ if (result.canceled) return;
109
+ commitFiles(result.assets.map(normalizeDocumentResult));
110
+ } finally {
111
+ setOpen(false);
112
+ }
113
+ }), [multiple, accept, commitFiles]);
106
114
 
107
115
  var showCamera = acceptsImages(accept);
108
116
  var showLibrary = acceptsImages(accept);
@@ -5,6 +5,13 @@ function toArray(val) {
5
5
  return Array.isArray(val) ? val : [val];
6
6
  }
7
7
 
8
+
9
+
10
+
11
+ function keyOf(file) {var _file$_id;
12
+ return (_file$_id = file == null ? void 0 : file._id) != null ? _file$_id : file == null ? void 0 : file.id;
13
+ }
14
+
8
15
  export function useUploadState(_ref) {var onUpload = _ref.onUpload,onChange = _ref.onChange,multiple = _ref.multiple,maxCount = _ref.maxCount,valueProp = _ref.value;
9
16
  var _useState = useState([]),_useState2 = _slicedToArray(_useState, 2),inFlight = _useState2[0],setInFlight = _useState2[1];
10
17
  var _useState3 = useState(null),_useState4 = _slicedToArray(_useState3, 2),committed = _useState4[0],setCommitted = _useState4[1];
@@ -125,12 +132,13 @@ export function useUploadState(_ref) {var onUpload = _ref.onUpload,onChange = _r
125
132
  var remove = useCallback(
126
133
  function (file) {
127
134
  if (!file) return;
135
+ var key = keyOf(file);
128
136
 
129
- setInFlight(function (prev) {return prev.filter(function (f) {return f._id !== file._id;});});
137
+ setInFlight(function (prev) {return prev.filter(function (f) {return keyOf(f) !== key;});});
130
138
 
131
139
  var ext = externalArrayRef.current;
132
- if (ext.some(function (f) {return f._id === file._id;})) {
133
- var next = ext.filter(function (f) {return f._id !== file._id;});
140
+ if (ext.some(function (f) {return keyOf(f) === key;})) {
141
+ var next = ext.filter(function (f) {return keyOf(f) !== key;});
134
142
  var val = multiple ? next : next[0] || null;
135
143
  if (!isControlled) setCommitted(val);
136
144
  onChangeRef.current == null ? void 0 : onChangeRef.current(val);
@@ -0,0 +1,91 @@
1
+ var _jsxFileName = "/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/measurements/FeetInchesInput.js";var _excluded = ["value", "onChange", "label"],_excluded2 = ["value", "onChange", "label"];function _slicedToArray(r, e) {return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();}function _nonIterableRest() {throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}function _unsupportedIterableToArray(r, a) {if (r) {if ("string" == typeof r) return _arrayLikeToArray(r, a);var t = {}.toString.call(r).slice(8, -1);return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;}}function _arrayLikeToArray(r, a) {(null == a || a > r.length) && (a = r.length);for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];return n;}function _iterableToArrayLimit(r, l) {var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];if (null != t) {var e,n,i,u,a = [],f = !0,o = !1;try {if (i = (t = t.call(r)).next, 0 === l) {if (Object(t) !== t) return;f = !1;} else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);} catch (r) {o = !0, n = r;} finally {try {if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;} finally {if (o) throw n;}}return a;}}function _arrayWithHoles(r) {if (Array.isArray(r)) return r;}function _objectWithoutProperties(e, t) {if (null == e) return {};var o,r,i = _objectWithoutPropertiesLoose(e, t);if (Object.getOwnPropertySymbols) {var n = Object.getOwnPropertySymbols(e);for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);}return i;}function _objectWithoutPropertiesLoose(r, e) {if (null == r) return {};var t = {};for (var n in r) if ({}.hasOwnProperty.call(r, n)) {if (-1 !== e.indexOf(n)) continue;t[n] = r[n];}return t;}import React from 'react';
2
+
3
+ import { BottomDrawer } from "../modals/bottomDrawer";
4
+ import { LinkInput } from "../inputs/LinkInput";
5
+ import { NumberInput } from "../inputs";
6
+ import { View } from "../structure";
7
+ import { WheelPicker } from "../inputs/WheelPicker";
8
+ import { useResponsiveValue } from "../../responsive";import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
9
+
10
+ var USE_BOTTOM_DRAWER = { native: true, sm: true, md: true };
11
+
12
+ function formatFeetInches(value) {
13
+ var _ref = value || {},_ref$feet = _ref.feet,feet = _ref$feet === void 0 ? 0 : _ref$feet,_ref$inches = _ref.inches,inches = _ref$inches === void 0 ? 0 : _ref$inches;
14
+ if (!value || !feet && !inches) return '';
15
+ return `${feet}'${inches}"`;
16
+ }
17
+
18
+ function FeetInchesInline(_ref2) {var value = _ref2.value,_onChange = _ref2.onChange,label = _ref2.label,props = _objectWithoutProperties(_ref2, _excluded);
19
+ var _ref3 = value || {},feet = _ref3.feet,inches = _ref3.inches;
20
+
21
+ return (
22
+ _jsxs(View, { row: true, gap: "sm", toBottom: true, children: [
23
+ _jsx(NumberInput, Object.assign({
24
+ value: feet,
25
+ onChange: function onChange(newFeet) {return _onChange({ feet: newFeet, inches: inches });},
26
+ min: 0,
27
+ precision: 0,
28
+ flex: true,
29
+ label: label },
30
+ props, {
31
+ suffix: "ft" })
32
+ ),
33
+ _jsx(NumberInput, Object.assign({
34
+ value: inches,
35
+ onChange: function onChange(newInches) {return _onChange({ feet: feet, inches: newInches });},
36
+ min: 0,
37
+ max: 11,
38
+ precision: 0,
39
+ flex: true },
40
+ props, {
41
+ suffix: "in" })
42
+ )] }
43
+ ));
44
+
45
+ }
46
+
47
+ var FEET_OPTIONS = Array.from({ length: 9 }, function (_, i) {return { label: i, value: i };});
48
+ var INCH_OPTIONS = Array.from({ length: 12 }, function (_, i) {return { label: i, value: i };});
49
+
50
+ function FeetInchesDrawer(_ref4) {var value = _ref4.value,_onChange2 = _ref4.onChange,label = _ref4.label,props = _objectWithoutProperties(_ref4, _excluded2);
51
+ var _React$useState = React.useState(false),_React$useState2 = _slicedToArray(_React$useState, 2),open = _React$useState2[0],setOpen = _React$useState2[1];
52
+ var _ref5 = value || {},_ref5$feet = _ref5.feet,feet = _ref5$feet === void 0 ? 0 : _ref5$feet,_ref5$inches = _ref5.inches,inches = _ref5$inches === void 0 ? 0 : _ref5$inches;
53
+
54
+ return (
55
+ _jsxs(_Fragment, { children: [
56
+ _jsx(LinkInput, Object.assign({
57
+ value: formatFeetInches(value),
58
+ placeholder: label || props.placeholder,
59
+ onPress: function onPress() {return setOpen(true);} },
60
+ props)
61
+ ),
62
+ _jsx(BottomDrawer, { open: open, onClose: function onClose() {return setOpen(false);}, snapPoints: [350], children:
63
+ _jsxs(View, { row: true, gap: "sm", center: true, flex: true, padding: "md", children: [
64
+ _jsx(View, { flex: true, children:
65
+ _jsx(WheelPicker, {
66
+ options: FEET_OPTIONS,
67
+ value: feet,
68
+ suffix: "ft",
69
+ onChange: function onChange(f) {return _onChange2({ feet: f, inches: inches });} }
70
+ ) }
71
+ ),
72
+ _jsx(View, { flex: true, children:
73
+ _jsx(WheelPicker, {
74
+ options: INCH_OPTIONS,
75
+ value: inches,
76
+ suffix: "in",
77
+ onChange: function onChange(i) {return _onChange2({ feet: feet, inches: i });} }
78
+ ) }
79
+ )] }
80
+ ) }
81
+ )] }
82
+ ));
83
+
84
+ }
85
+
86
+ export function FeetInchesInput(props) {
87
+ var shouldUseDrawer = useResponsiveValue(USE_BOTTOM_DRAWER);
88
+
89
+ if (shouldUseDrawer) return _jsx(FeetInchesDrawer, Object.assign({}, props));
90
+ return _jsx(FeetInchesInline, Object.assign({}, props));
91
+ }
@@ -0,0 +1,32 @@
1
+ var _jsxFileName = "/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/measurements/LengthInput.js";var _excluded = ["value", "onChange", "measurementSystem", "metricPrecision", "imperialPrecision"];function _slicedToArray(r, e) {return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();}function _nonIterableRest() {throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}function _unsupportedIterableToArray(r, a) {if (r) {if ("string" == typeof r) return _arrayLikeToArray(r, a);var t = {}.toString.call(r).slice(8, -1);return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;}}function _arrayLikeToArray(r, a) {(null == a || a > r.length) && (a = r.length);for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];return n;}function _iterableToArrayLimit(r, l) {var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];if (null != t) {var e,n,i,u,a = [],f = !0,o = !1;try {if (i = (t = t.call(r)).next, 0 === l) {if (Object(t) !== t) return;f = !1;} else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);} catch (r) {o = !0, n = r;} finally {try {if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;} finally {if (o) throw n;}}return a;}}function _arrayWithHoles(r) {if (Array.isArray(r)) return r;}function _objectWithoutProperties(e, t) {if (null == e) return {};var o,r,i = _objectWithoutPropertiesLoose(e, t);if (Object.getOwnPropertySymbols) {var n = Object.getOwnPropertySymbols(e);for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);}return i;}function _objectWithoutPropertiesLoose(r, e) {if (null == r) return {};var t = {};for (var n in r) if ({}.hasOwnProperty.call(r, n)) {if (-1 !== e.indexOf(n)) continue;t[n] = r[n];}return t;}import { NumberInput } from "../inputs";
2
+ import { fixedDecimals } from "../../helpers/numbers";
3
+ import { LENGTH_CONVERTERS, LENGTH_IMPERIAL_DEFAULTS } from "./helpers/length";
4
+ import { useIsImperial } from "./MeasurementHandler";
5
+ import { useLocalInputValue } from "./useLocalInputValue";
6
+ import { FeetInchesInput } from "./FeetInchesInput";import { jsx as _jsx } from "react/jsx-runtime";
7
+
8
+ export function LengthInput(_ref)
9
+
10
+
11
+
12
+
13
+
14
+
15
+ {var _LENGTH_CONVERTERS$me;var value = _ref.value,onChange = _ref.onChange,measurementSystem = _ref.measurementSystem,_ref$metricPrecision = _ref.metricPrecision,metricPrecision = _ref$metricPrecision === void 0 ? 'cm' : _ref$metricPrecision,imperialPrecision = _ref.imperialPrecision,props = _objectWithoutProperties(_ref, _excluded);
16
+ var isImperial = useIsImperial(measurementSystem);
17
+ var impPrec = imperialPrecision || LENGTH_IMPERIAL_DEFAULTS[metricPrecision] || 'ft+in';
18
+ var converter = isImperial ? (_LENGTH_CONVERTERS$me = LENGTH_CONVERTERS[metricPrecision]) == null ? void 0 : _LENGTH_CONVERTERS$me[impPrec] : null;
19
+ var isFtIn = isImperial && impPrec === 'ft+in' && !!converter;
20
+
21
+ var Input = isFtIn ? FeetInchesInput : NumberInput;
22
+ var suffix = isFtIn ? false : converter ? impPrec : metricPrecision;
23
+
24
+ var formattedValue;
25
+ if (isFtIn) formattedValue = converter.to(value);else
26
+ if (converter) formattedValue = fixedDecimals(converter.to(value));else
27
+ formattedValue = fixedDecimals(value);
28
+
29
+ var _useLocalInputValue = useLocalInputValue({ value: value, formattedValue: formattedValue, suffix: suffix, onChange: onChange, converter: converter }),_useLocalInputValue2 = _slicedToArray(_useLocalInputValue, 2),localValue = _useLocalInputValue2[0],handleChange = _useLocalInputValue2[1];
30
+
31
+ return _jsx(Input, Object.assign({}, props, { value: localValue, onChange: handleChange, suffix: suffix }));
32
+ }
@@ -0,0 +1,10 @@
1
+ var _jsxFileName = "/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/measurements/LengthText.js";var _excluded = ["value", "measurementSystem", "metricPrecision", "imperialPrecision", "withoutSuffix"];function _objectWithoutProperties(e, t) {if (null == e) return {};var o,r,i = _objectWithoutPropertiesLoose(e, t);if (Object.getOwnPropertySymbols) {var n = Object.getOwnPropertySymbols(e);for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);}return i;}function _objectWithoutPropertiesLoose(r, e) {if (null == r) return {};var t = {};for (var n in r) if ({}.hasOwnProperty.call(r, n)) {if (-1 !== e.indexOf(n)) continue;t[n] = r[n];}return t;}import { Text } from "../text";
2
+ import { useLengthFormatter } from "./useLengthFormatter";import { jsx as _jsx } from "react/jsx-runtime";
3
+
4
+ export function LengthText(_ref) {var value = _ref.value,measurementSystem = _ref.measurementSystem,metricPrecision = _ref.metricPrecision,imperialPrecision = _ref.imperialPrecision,withoutSuffix = _ref.withoutSuffix,props = _objectWithoutProperties(_ref, _excluded);
5
+ var format = useLengthFormatter({ measurementSystem: measurementSystem, metricPrecision: metricPrecision, imperialPrecision: imperialPrecision, withoutSuffix: withoutSuffix });
6
+
7
+ if (!value && value !== 0) return false;
8
+
9
+ return _jsx(Text, Object.assign({}, props, { children: format(value) }));
10
+ }
@@ -0,0 +1,26 @@
1
+ var _jsxFileName = "/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/measurements/MeasurementHandler.js";import React from 'react';
2
+
3
+ import { detectMeasurementSystem } from "./helpers/detectMeasurementSystem";import { jsx as _jsx } from "react/jsx-runtime";
4
+
5
+ var MeasurementContext = React.createContext(null);
6
+
7
+ export function MeasurementHandler(_ref) {var children = _ref.children,measurementSystem = _ref.measurementSystem;
8
+ var value = React.useMemo(function () {return { measurementSystem: measurementSystem };}, [measurementSystem]);
9
+
10
+ return _jsx(MeasurementContext.Provider, { value: value, children: children });
11
+ }
12
+
13
+ export function useMeasurementSystem(override) {
14
+ var ctx = React.useContext(MeasurementContext);
15
+
16
+ return React.useMemo(function () {
17
+ if (override) return override;
18
+ if (ctx != null && ctx.measurementSystem) return ctx.measurementSystem;
19
+ return detectMeasurementSystem();
20
+ }, [override, ctx == null ? void 0 : ctx.measurementSystem]);
21
+ }
22
+
23
+ export function useIsImperial(override) {
24
+ var system = useMeasurementSystem(override);
25
+ return system === 'imperial';
26
+ }
@@ -0,0 +1,25 @@
1
+ var _jsxFileName = "/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/measurements/WeightInput.js";var _excluded = ["value", "onChange", "measurementSystem", "metricPrecision", "imperialPrecision"];function _slicedToArray(r, e) {return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();}function _nonIterableRest() {throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}function _unsupportedIterableToArray(r, a) {if (r) {if ("string" == typeof r) return _arrayLikeToArray(r, a);var t = {}.toString.call(r).slice(8, -1);return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;}}function _arrayLikeToArray(r, a) {(null == a || a > r.length) && (a = r.length);for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];return n;}function _iterableToArrayLimit(r, l) {var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];if (null != t) {var e,n,i,u,a = [],f = !0,o = !1;try {if (i = (t = t.call(r)).next, 0 === l) {if (Object(t) !== t) return;f = !1;} else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);} catch (r) {o = !0, n = r;} finally {try {if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;} finally {if (o) throw n;}}return a;}}function _arrayWithHoles(r) {if (Array.isArray(r)) return r;}function _objectWithoutProperties(e, t) {if (null == e) return {};var o,r,i = _objectWithoutPropertiesLoose(e, t);if (Object.getOwnPropertySymbols) {var n = Object.getOwnPropertySymbols(e);for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);}return i;}function _objectWithoutPropertiesLoose(r, e) {if (null == r) return {};var t = {};for (var n in r) if ({}.hasOwnProperty.call(r, n)) {if (-1 !== e.indexOf(n)) continue;t[n] = r[n];}return t;}import { NumberInput } from "../inputs";
2
+ import { fixedDecimals } from "../../helpers/numbers";
3
+ import { WEIGHT_CONVERTERS, WEIGHT_IMPERIAL_DEFAULTS } from "./helpers/weight";
4
+ import { useIsImperial } from "./MeasurementHandler";
5
+ import { useLocalInputValue } from "./useLocalInputValue";import { jsx as _jsx } from "react/jsx-runtime";
6
+
7
+ export function WeightInput(_ref)
8
+
9
+
10
+
11
+
12
+
13
+
14
+ {var _WEIGHT_CONVERTERS$me;var value = _ref.value,onChange = _ref.onChange,measurementSystem = _ref.measurementSystem,_ref$metricPrecision = _ref.metricPrecision,metricPrecision = _ref$metricPrecision === void 0 ? 'kg' : _ref$metricPrecision,imperialPrecision = _ref.imperialPrecision,props = _objectWithoutProperties(_ref, _excluded);
15
+ var isImperial = useIsImperial(measurementSystem);
16
+ var impPrec = imperialPrecision || WEIGHT_IMPERIAL_DEFAULTS[metricPrecision] || 'lbs';
17
+ var converter = isImperial ? (_WEIGHT_CONVERTERS$me = WEIGHT_CONVERTERS[metricPrecision]) == null ? void 0 : _WEIGHT_CONVERTERS$me[impPrec] : null;
18
+
19
+ var suffix = converter ? impPrec : metricPrecision;
20
+ var formattedValue = converter ? fixedDecimals(converter.to(value)) : fixedDecimals(value);
21
+
22
+ var _useLocalInputValue = useLocalInputValue({ value: value, formattedValue: formattedValue, suffix: suffix, onChange: onChange, converter: converter }),_useLocalInputValue2 = _slicedToArray(_useLocalInputValue, 2),localValue = _useLocalInputValue2[0],handleChange = _useLocalInputValue2[1];
23
+
24
+ return _jsx(NumberInput, Object.assign({}, props, { value: localValue, onChange: handleChange, suffix: suffix }));
25
+ }
@@ -0,0 +1,10 @@
1
+ var _jsxFileName = "/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/measurements/WeightText.js";var _excluded = ["value", "measurementSystem", "metricPrecision", "imperialPrecision", "withoutSuffix"];function _objectWithoutProperties(e, t) {if (null == e) return {};var o,r,i = _objectWithoutPropertiesLoose(e, t);if (Object.getOwnPropertySymbols) {var n = Object.getOwnPropertySymbols(e);for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);}return i;}function _objectWithoutPropertiesLoose(r, e) {if (null == r) return {};var t = {};for (var n in r) if ({}.hasOwnProperty.call(r, n)) {if (-1 !== e.indexOf(n)) continue;t[n] = r[n];}return t;}import { Text } from "../text";
2
+ import { useWeightFormatter } from "./useWeightFormatter";import { jsx as _jsx } from "react/jsx-runtime";
3
+
4
+ export function WeightText(_ref) {var value = _ref.value,measurementSystem = _ref.measurementSystem,metricPrecision = _ref.metricPrecision,imperialPrecision = _ref.imperialPrecision,withoutSuffix = _ref.withoutSuffix,props = _objectWithoutProperties(_ref, _excluded);
5
+ var format = useWeightFormatter({ measurementSystem: measurementSystem, metricPrecision: metricPrecision, imperialPrecision: imperialPrecision, withoutSuffix: withoutSuffix });
6
+
7
+ if (!value && value !== 0) return false;
8
+
9
+ return _jsx(Text, Object.assign({}, props, { children: format(value) }));
10
+ }
@@ -0,0 +1,15 @@
1
+ export function detectMeasurementSystem() {
2
+ try {var _locale$textInfo, _locale$measurementSy;
3
+ var locale = new Intl.Locale(navigator.language);
4
+ var info = (_locale$textInfo = locale.textInfo) != null ? _locale$textInfo : locale.getTextInfo == null ? void 0 : locale.getTextInfo();
5
+ var ms = (_locale$measurementSy = locale.measurementSystem) != null ? _locale$measurementSy : info == null ? void 0 : info.measurementSystem;
6
+ if (ms) return ['us', 'imperial'].includes(ms) ? 'imperial' : 'metric';
7
+
8
+
9
+ var lang = navigator.language || '';
10
+ if (lang.startsWith('en-US') || lang.startsWith('my-MM') || lang.startsWith('en-LR')) {
11
+ return 'imperial';
12
+ }
13
+ } catch (_unused) {}
14
+ return 'metric';
15
+ }
@@ -0,0 +1,9 @@
1
+ export function detectMeasurementSystem() {
2
+ try {var _locales$;
3
+ var Localization = require('expo-localization');
4
+ var locales = Localization.getLocales();
5
+ var ms = locales == null ? void 0 : (_locales$ = locales[0]) == null ? void 0 : _locales$.measurementSystem;
6
+ if (ms) return ['us', 'imperial'].includes(ms) ? 'imperial' : 'metric';
7
+ } catch (_unused) {}
8
+ return 'metric';
9
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./length";
2
+ export * from "./weight";