@sb1/ffe-datepicker-react 100.11.0 → 100.12.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.
@@ -20,10 +20,15 @@ var __rest = (this && this.__rest) || function (s, e) {
20
20
  }
21
21
  return t;
22
22
  };
23
- import React from 'react';
23
+ import React, { useMemo } from 'react';
24
24
  import classNames from 'classnames';
25
25
  import i18n from '../i18n/i18n';
26
+ import { isIOSSafari } from '../util/isIOSSafari';
26
27
  export var DateInput = React.forwardRef(function (_a, ref) {
27
28
  var ariaInvalid = _a.ariaInvalid, value = _a.value, className = _a.className, _b = _a.locale, locale = _b === void 0 ? 'nb' : _b, rest = __rest(_a, ["ariaInvalid", "value", "className", "locale"]);
28
- return (React.createElement("input", __assign({}, rest, { "aria-invalid": ariaInvalid, maxLength: 10, ref: ref, "aria-placeholder": i18n[locale].DATE_FORMAT, value: value, className: classNames('ffe-input-field ffe-dateinput__field', className) })));
29
+ // VoiceOver on iOS Safari blocks interaction with date-related inputs.
30
+ // Using role="textbox" as a workaround on that platform.
31
+ // https://dev.to/mfranzke/voiceover-bug-on-ios-safari-blocks-date-time-related-inputs-especially-in-react-4f61
32
+ var role = useMemo(function () { return (isIOSSafari() ? 'textbox' : undefined); }, []);
33
+ return (React.createElement("input", __assign({ type: "date", role: role, "aria-invalid": ariaInvalid, maxLength: 10, ref: ref, "aria-placeholder": i18n[locale].DATE_FORMAT, value: value, className: classNames('ffe-input-field ffe-dateinput__field', className) }, rest)));
29
34
  });
@@ -1 +1 @@
1
- {"root":["../src/index.ts","../src/types.ts","../src/button/Button.tsx","../src/button/index.ts","../src/calendar/Calendar.tsx","../src/calendar/ClickableDate.tsx","../src/calendar/Header.tsx","../src/calendar/NonClickableDate.tsx","../src/calendar/index.ts","../src/datelogic/simplecalendar.ts","../src/datelogic/simpledate.ts","../src/datelogic/types.ts","../src/datepicker/Datepicker.tsx","../src/datepicker/DatepickerComp.tsx","../src/datepicker/DatepickerContext.tsx","../src/datepicker/SpinButton.tsx","../src/datepicker/index.ts","../src/datepicker/padZero.ts","../src/datepicker/testHelper.ts","../src/datepicker/toNumber.ts","../src/i18n/en.ts","../src/i18n/i18n.ts","../src/i18n/nb.ts","../src/i18n/nn.ts","../src/input/DateInput.tsx","../src/input/index.ts","../src/util/dateRangeUtils.ts","../src/util/dateUtil.ts"],"version":"5.9.3"}
1
+ {"root":["../src/index.ts","../src/types.ts","../src/button/Button.tsx","../src/button/index.ts","../src/calendar/Calendar.tsx","../src/calendar/ClickableDate.tsx","../src/calendar/Header.tsx","../src/calendar/NonClickableDate.tsx","../src/calendar/index.ts","../src/datelogic/simplecalendar.ts","../src/datelogic/simpledate.ts","../src/datelogic/types.ts","../src/datepicker/Datepicker.tsx","../src/datepicker/DatepickerComp.tsx","../src/datepicker/DatepickerContext.tsx","../src/datepicker/SpinButton.tsx","../src/datepicker/index.ts","../src/datepicker/padZero.ts","../src/datepicker/testHelper.ts","../src/datepicker/toNumber.ts","../src/i18n/en.ts","../src/i18n/i18n.ts","../src/i18n/nb.ts","../src/i18n/nn.ts","../src/input/DateInput.tsx","../src/input/index.ts","../src/util/dateRangeUtils.ts","../src/util/dateUtil.ts","../src/util/isIOSSafari.ts"],"version":"5.9.3"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Detects iOS/iPadOS Safari to work around a VoiceOver bug that blocks
3
+ * interaction with date-related inputs.
4
+ * @see https://dev.to/mfranzke/voiceover-bug-on-ios-safari-blocks-date-time-related-inputs-especially-in-react-4f61
5
+ *
6
+ * Known limitations:
7
+ * - iOS WebViews (in-app browsers like Instagram, Facebook) use WebKit and may
8
+ * be affected by the same bug, but are not detected here since they don't
9
+ * include "Safari" in the user agent string.
10
+ */
11
+ export var isIOSSafari = function () {
12
+ if (typeof navigator === 'undefined') {
13
+ return false;
14
+ }
15
+ var ua = navigator.userAgent;
16
+ // iPadOS 13+ in desktop mode reports as Macintosh, but can be identified
17
+ // by having touch points (real Macs have maxTouchPoints === 0).
18
+ var isIOS = /iP(ad|hone|od)/.test(ua) ||
19
+ (/Macintosh/.test(ua) && navigator.maxTouchPoints > 1);
20
+ var isSafari = !!ua.match(/Safari/) && !ua.match(/CriOS|FxiOS|OPiOS|EdgiOS/);
21
+ return isIOS && isSafari;
22
+ };
@@ -10,6 +10,39 @@ var __assign = (this && this.__assign) || function () {
10
10
  };
11
11
  return __assign.apply(this, arguments);
12
12
  };
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || (function () {
30
+ var ownKeys = function(o) {
31
+ ownKeys = Object.getOwnPropertyNames || function (o) {
32
+ var ar = [];
33
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
34
+ return ar;
35
+ };
36
+ return ownKeys(o);
37
+ };
38
+ return function (mod) {
39
+ if (mod && mod.__esModule) return mod;
40
+ var result = {};
41
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
42
+ __setModuleDefault(result, mod);
43
+ return result;
44
+ };
45
+ })();
13
46
  var __rest = (this && this.__rest) || function (s, e) {
14
47
  var t = {};
15
48
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
@@ -26,10 +59,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
26
59
  };
27
60
  Object.defineProperty(exports, "__esModule", { value: true });
28
61
  exports.DateInput = void 0;
29
- var react_1 = __importDefault(require("react"));
62
+ var react_1 = __importStar(require("react"));
30
63
  var classnames_1 = __importDefault(require("classnames"));
31
64
  var i18n_1 = __importDefault(require("../i18n/i18n"));
65
+ var isIOSSafari_1 = require("../util/isIOSSafari");
32
66
  exports.DateInput = react_1.default.forwardRef(function (_a, ref) {
33
67
  var ariaInvalid = _a.ariaInvalid, value = _a.value, className = _a.className, _b = _a.locale, locale = _b === void 0 ? 'nb' : _b, rest = __rest(_a, ["ariaInvalid", "value", "className", "locale"]);
34
- return (react_1.default.createElement("input", __assign({}, rest, { "aria-invalid": ariaInvalid, maxLength: 10, ref: ref, "aria-placeholder": i18n_1.default[locale].DATE_FORMAT, value: value, className: (0, classnames_1.default)('ffe-input-field ffe-dateinput__field', className) })));
68
+ // VoiceOver on iOS Safari blocks interaction with date-related inputs.
69
+ // Using role="textbox" as a workaround on that platform.
70
+ // https://dev.to/mfranzke/voiceover-bug-on-ios-safari-blocks-date-time-related-inputs-especially-in-react-4f61
71
+ var role = (0, react_1.useMemo)(function () { return ((0, isIOSSafari_1.isIOSSafari)() ? 'textbox' : undefined); }, []);
72
+ return (react_1.default.createElement("input", __assign({ type: "date", role: role, "aria-invalid": ariaInvalid, maxLength: 10, ref: ref, "aria-placeholder": i18n_1.default[locale].DATE_FORMAT, value: value, className: (0, classnames_1.default)('ffe-input-field ffe-dateinput__field', className) }, rest)));
35
73
  });
@@ -1 +1 @@
1
- {"root":["../src/index.ts","../src/types.ts","../src/button/Button.tsx","../src/button/index.ts","../src/calendar/Calendar.tsx","../src/calendar/ClickableDate.tsx","../src/calendar/Header.tsx","../src/calendar/NonClickableDate.tsx","../src/calendar/index.ts","../src/datelogic/simplecalendar.ts","../src/datelogic/simpledate.ts","../src/datelogic/types.ts","../src/datepicker/Datepicker.tsx","../src/datepicker/DatepickerComp.tsx","../src/datepicker/DatepickerContext.tsx","../src/datepicker/SpinButton.tsx","../src/datepicker/index.ts","../src/datepicker/padZero.ts","../src/datepicker/testHelper.ts","../src/datepicker/toNumber.ts","../src/i18n/en.ts","../src/i18n/i18n.ts","../src/i18n/nb.ts","../src/i18n/nn.ts","../src/input/DateInput.tsx","../src/input/index.ts","../src/util/dateRangeUtils.ts","../src/util/dateUtil.ts"],"version":"5.9.3"}
1
+ {"root":["../src/index.ts","../src/types.ts","../src/button/Button.tsx","../src/button/index.ts","../src/calendar/Calendar.tsx","../src/calendar/ClickableDate.tsx","../src/calendar/Header.tsx","../src/calendar/NonClickableDate.tsx","../src/calendar/index.ts","../src/datelogic/simplecalendar.ts","../src/datelogic/simpledate.ts","../src/datelogic/types.ts","../src/datepicker/Datepicker.tsx","../src/datepicker/DatepickerComp.tsx","../src/datepicker/DatepickerContext.tsx","../src/datepicker/SpinButton.tsx","../src/datepicker/index.ts","../src/datepicker/padZero.ts","../src/datepicker/testHelper.ts","../src/datepicker/toNumber.ts","../src/i18n/en.ts","../src/i18n/i18n.ts","../src/i18n/nb.ts","../src/i18n/nn.ts","../src/input/DateInput.tsx","../src/input/index.ts","../src/util/dateRangeUtils.ts","../src/util/dateUtil.ts","../src/util/isIOSSafari.ts"],"version":"5.9.3"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isIOSSafari = void 0;
4
+ /**
5
+ * Detects iOS/iPadOS Safari to work around a VoiceOver bug that blocks
6
+ * interaction with date-related inputs.
7
+ * @see https://dev.to/mfranzke/voiceover-bug-on-ios-safari-blocks-date-time-related-inputs-especially-in-react-4f61
8
+ *
9
+ * Known limitations:
10
+ * - iOS WebViews (in-app browsers like Instagram, Facebook) use WebKit and may
11
+ * be affected by the same bug, but are not detected here since they don't
12
+ * include "Safari" in the user agent string.
13
+ */
14
+ var isIOSSafari = function () {
15
+ if (typeof navigator === 'undefined') {
16
+ return false;
17
+ }
18
+ var ua = navigator.userAgent;
19
+ // iPadOS 13+ in desktop mode reports as Macintosh, but can be identified
20
+ // by having touch points (real Macs have maxTouchPoints === 0).
21
+ var isIOS = /iP(ad|hone|od)/.test(ua) ||
22
+ (/Macintosh/.test(ua) && navigator.maxTouchPoints > 1);
23
+ var isSafari = !!ua.match(/Safari/) && !ua.match(/CriOS|FxiOS|OPiOS|EdgiOS/);
24
+ return isIOS && isSafari;
25
+ };
26
+ exports.isIOSSafari = isIOSSafari;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sb1/ffe-datepicker-react",
3
- "version": "100.11.0",
3
+ "version": "100.12.1",
4
4
  "license": "MIT",
5
5
  "author": "SpareBank 1",
6
6
  "files": [
@@ -24,11 +24,11 @@
24
24
  "test:watch": "ffe-buildtool jest --watch"
25
25
  },
26
26
  "dependencies": {
27
- "@sb1/ffe-datepicker": "^100.11.0",
28
- "@sb1/ffe-dropdown-react": "^100.11.0",
29
- "@sb1/ffe-form": "^100.11.0",
30
- "@sb1/ffe-form-react": "^100.11.0",
31
- "@sb1/ffe-icons-react": "^100.11.0",
27
+ "@sb1/ffe-datepicker": "^100.12.1",
28
+ "@sb1/ffe-dropdown-react": "^100.12.1",
29
+ "@sb1/ffe-form": "^100.12.1",
30
+ "@sb1/ffe-form-react": "^100.12.1",
31
+ "@sb1/ffe-icons-react": "^100.12.1",
32
32
  "@testing-library/react": "^16.0.0",
33
33
  "@types/lodash.debounce": "^4.0.9",
34
34
  "classnames": "^2.3.1",
@@ -36,7 +36,7 @@
36
36
  "uuid": "^9.0.0"
37
37
  },
38
38
  "devDependencies": {
39
- "@sb1/ffe-buildtool": "^100.11.0",
39
+ "@sb1/ffe-buildtool": "^100.12.1",
40
40
  "eslint": "^9.22.0",
41
41
  "react": "^18.2.0",
42
42
  "react-dom": "^18.2.0"
@@ -47,5 +47,5 @@
47
47
  "publishConfig": {
48
48
  "access": "public"
49
49
  },
50
- "gitHead": "8d6488be9b6820620bf7c3b6d267f344ce5cb0d6"
50
+ "gitHead": "d51dcc5967ccdc3f0f947fc0ba8c6ef016800255"
51
51
  }
@@ -1 +1 @@
1
- {"root":["../src/index.ts","../src/types.ts","../src/button/Button.tsx","../src/button/index.ts","../src/calendar/Calendar.tsx","../src/calendar/ClickableDate.tsx","../src/calendar/Header.tsx","../src/calendar/NonClickableDate.tsx","../src/calendar/index.ts","../src/datelogic/simplecalendar.ts","../src/datelogic/simpledate.ts","../src/datelogic/types.ts","../src/datepicker/Datepicker.tsx","../src/datepicker/DatepickerComp.tsx","../src/datepicker/DatepickerContext.tsx","../src/datepicker/SpinButton.tsx","../src/datepicker/index.ts","../src/datepicker/padZero.ts","../src/datepicker/testHelper.ts","../src/datepicker/toNumber.ts","../src/i18n/en.ts","../src/i18n/i18n.ts","../src/i18n/nb.ts","../src/i18n/nn.ts","../src/input/DateInput.tsx","../src/input/index.ts","../src/util/dateRangeUtils.ts","../src/util/dateUtil.ts"],"version":"5.9.3"}
1
+ {"root":["../src/index.ts","../src/types.ts","../src/button/Button.tsx","../src/button/index.ts","../src/calendar/Calendar.tsx","../src/calendar/ClickableDate.tsx","../src/calendar/Header.tsx","../src/calendar/NonClickableDate.tsx","../src/calendar/index.ts","../src/datelogic/simplecalendar.ts","../src/datelogic/simpledate.ts","../src/datelogic/types.ts","../src/datepicker/Datepicker.tsx","../src/datepicker/DatepickerComp.tsx","../src/datepicker/DatepickerContext.tsx","../src/datepicker/SpinButton.tsx","../src/datepicker/index.ts","../src/datepicker/padZero.ts","../src/datepicker/testHelper.ts","../src/datepicker/toNumber.ts","../src/i18n/en.ts","../src/i18n/i18n.ts","../src/i18n/nb.ts","../src/i18n/nn.ts","../src/input/DateInput.tsx","../src/input/index.ts","../src/util/dateRangeUtils.ts","../src/util/dateUtil.ts","../src/util/isIOSSafari.ts"],"version":"5.9.3"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Detects iOS/iPadOS Safari to work around a VoiceOver bug that blocks
3
+ * interaction with date-related inputs.
4
+ * @see https://dev.to/mfranzke/voiceover-bug-on-ios-safari-blocks-date-time-related-inputs-especially-in-react-4f61
5
+ *
6
+ * Known limitations:
7
+ * - iOS WebViews (in-app browsers like Instagram, Facebook) use WebKit and may
8
+ * be affected by the same bug, but are not detected here since they don't
9
+ * include "Safari" in the user agent string.
10
+ */
11
+ export declare const isIOSSafari: () => boolean;