@24i/bigscreen-sdk 1.0.4 → 1.0.5-4.alpha-2832
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.
- package/README.md +2 -3
- package/ci/is_ci_job_skippable.sh +153 -0
- package/package.json +55 -34
- package/packages/adobe-heartbeat/src/AdobeHeartbeat.ts +9 -9
- package/packages/analytics/README.md +8 -0
- package/packages/analytics/src/A.ts +1 -0
- package/packages/analytics/src/Analytics.ts +1 -0
- package/packages/analytics/src/analyticsOnScroll.ts +1 -0
- package/packages/analytics/src/clients/ConsoleAnalytics/ConsoleAnalytics.ts +1 -0
- package/packages/analytics/src/clients/ConsoleAnalytics/index.ts +1 -0
- package/packages/analytics/src/clients/GoogleAnalytics/GoogleAnalytics.ts +196 -0
- package/packages/analytics/src/clients/GoogleAnalytics/constants.ts +126 -0
- package/packages/analytics/src/clients/GoogleAnalytics/getUrl.ts +17 -0
- package/packages/analytics/src/clients/GoogleAnalytics/index.ts +2 -0
- package/packages/analytics/src/clients/GoogleAnalytics/interface.ts +82 -0
- package/packages/analytics/src/clients/GoogleAnalytics/mapPayload.ts +51 -0
- package/packages/analytics/src/clients/GoogleAnalytics/prepareBody.ts +14 -0
- package/packages/analytics/src/clients/TealiumAnalytics/TealiumAnalytics.ts +181 -0
- package/packages/analytics/src/clients/TealiumAnalytics/constants.ts +106 -0
- package/packages/analytics/src/clients/TealiumAnalytics/findForLanguage.ts +9 -0
- package/packages/analytics/src/clients/TealiumAnalytics/index.ts +4 -0
- package/packages/analytics/src/clients/TealiumAnalytics/interface.ts +35 -0
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/__mocks__/mediaPayload.ts +72 -0
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/helper.ts +36 -0
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapAppError.ts +13 -0
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapAppOpen.ts +13 -0
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapFavoriteAdd.ts +11 -0
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapFavoriteRemove.ts +11 -0
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapPlayerClose.ts +15 -0
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapPlayerOpen.ts +15 -0
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapSceneView.ts +18 -0
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapSearch.ts +18 -0
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapSearchFailed.ts +8 -0
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapSearchSuccess.ts +8 -0
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapVideoPause.ts +15 -0
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapVideoProgress.ts +18 -0
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapVideoResume.ts +15 -0
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapVideoStart.ts +15 -0
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapVideoStop.ts +15 -0
- package/packages/analytics/src/clients/TealiumAnalytics/types.ts +161 -0
- package/packages/analytics/src/clients/TwentyFourIQ/TwentyFourIQClient.ts +107 -0
- package/packages/analytics/src/clients/TwentyFourIQ/constants.ts +111 -0
- package/packages/analytics/src/clients/TwentyFourIQ/helper.ts +34 -0
- package/packages/analytics/src/clients/TwentyFourIQ/index.ts +2 -0
- package/packages/analytics/src/clients/TwentyFourIQ/interface.ts +34 -0
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapAdEvent.ts +20 -0
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapBase.ts +24 -0
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapBuffering.ts +15 -0
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapPlayerClose.ts +25 -0
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapPlayerOpen.ts +17 -0
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapSceneView.ts +15 -0
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapScroll.ts +17 -0
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoComplete.ts +22 -0
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoPause.ts +25 -0
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoProgress.ts +25 -0
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoStart.ts +34 -0
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoStop.ts +32 -0
- package/packages/analytics/src/clients/TwentyFourIQ/types.ts +132 -0
- package/packages/analytics/src/constants.ts +1 -0
- package/packages/analytics/src/index.ts +3 -0
- package/packages/analytics/src/interface.ts +1 -0
- package/packages/analytics/src/utils/generateSessionId.ts +8 -0
- package/packages/async-image/src/AsyncImage.tsx +15 -10
- package/packages/developer-tools/PlayerDebugWindow/README.md +1 -1
- package/packages/developer-tools/src/DeveloperConsole/DeveloperConsole.tsx +1 -0
- package/packages/developer-tools/src/DeveloperToolsService/DeveloperToolsList.tsx +11 -0
- package/packages/developer-tools/src/PlayerDebugWindow/PlayerDebugWindow.tsx +5 -5
- package/packages/developer-tools/src/PlayerDebugWindow/constants.ts +15 -0
- package/packages/developer-tools/src/TechnicalInfo/TechnicalInfo.tsx +2 -0
- package/packages/developer-tools/src/TechnicalInfo/TechnicalInfoDetail.tsx +2 -1
- package/packages/developer-tools/src/TechnicalInfo/TechnicalInfoProvider.ts +57 -5
- package/packages/developer-tools/src/TechnicalInfo/__mocks__/Device.ts +12 -0
- package/packages/developer-tools/src/TechnicalInfo/translations.ts +8 -0
- package/packages/device/src/driver/index.android.tv.ts +1 -0
- package/packages/device/src/driver/index.firetv.ts +1 -0
- package/packages/device/src/driver/index.smartcast.tv.ts +1 -0
- package/packages/device/src/getKeyDigit.ts +2 -2
- package/packages/device/src/resolver/resolver.ts +19 -0
- package/packages/digital-clock/src/DigitalClock.tsx +15 -4
- package/packages/driver-androidtv/src/DeviceAndroidTV.ts +262 -0
- package/packages/driver-androidtv/src/__mocks__/javaScriptBridge.ts +45 -0
- package/packages/driver-androidtv/src/formatUserAgent.ts +11 -0
- package/packages/driver-androidtv/src/index.ts +2 -0
- package/packages/driver-androidtv/src/keymap.ts +27 -0
- package/packages/driver-androidtv/src/types.ts +155 -0
- package/packages/driver-base/src/DeviceBase.ts +73 -2
- package/packages/driver-base/src/KeyMap/Key.ts +8 -1
- package/packages/driver-base/src/KeyMap/KeyMap.ts +4 -0
- package/packages/driver-base/src/KeyMap/interface.ts +1 -0
- package/packages/driver-base/src/KeyMap/overrideValues.ts +2 -1
- package/packages/driver-base/src/__mocks__/DeviceBase.ts +24 -0
- package/packages/driver-base/src/__mocks__/keyMap.ts +1 -0
- package/packages/driver-base/src/index.ts +3 -0
- package/packages/driver-base/src/types/AdInfo.ts +5 -0
- package/packages/driver-base/src/types/DeviceEvent.ts +2 -0
- package/packages/driver-base/src/types/InAppPurchase.ts +20 -0
- package/packages/driver-base/src/types/KeycodeKeyMap.ts +1 -0
- package/packages/driver-browser/src/DeviceBrowser.ts +26 -0
- package/packages/driver-browser/src/keymap.ts +8 -0
- package/packages/driver-entone/src/DeviceEntone.ts +31 -1
- package/packages/driver-entone/src/keymap.ts +1 -0
- package/packages/driver-firetv/src/DeviceFireTV.ts +86 -0
- package/packages/driver-firetv/src/__mocks__/javaScriptBridge.ts +45 -0
- package/packages/driver-firetv/src/index.ts +1 -0
- package/packages/driver-firetv/src/types.ts +1 -0
- package/packages/driver-hbbtv/src/DeviceHbbTV.ts +26 -0
- package/packages/driver-kreatv/src/DeviceKreaTV.ts +26 -0
- package/packages/driver-saphi/src/DeviceSaphi.ts +26 -0
- package/packages/driver-smartcast/src/DeviceSmartCast.ts +380 -0
- package/packages/driver-smartcast/src/__mocks__/api.ts +69 -0
- package/packages/driver-smartcast/src/index.ts +1 -0
- package/packages/driver-smartcast/src/keymap.ts +9 -0
- package/packages/driver-smartcast/src/types.ts +102 -0
- package/packages/driver-tizen/src/DeviceTizen.ts +121 -7
- package/packages/driver-tizen/src/ITizen.ts +15116 -202
- package/packages/driver-tizen/src/IWebapis.ts +8643 -87
- package/packages/driver-tizen/src/TizenKeys.ts +4 -2
- package/packages/driver-tizen/src/__mocks__/tizen.ts +7 -8
- package/packages/driver-tizen/src/constants.ts +1 -195
- package/packages/driver-vidaa/src/DeviceVidaa.ts +29 -2
- package/packages/driver-vidaa/src/__mocks__/vidaa.ts +1 -1
- package/packages/driver-vidaa/src/keymap.ts +2 -0
- package/packages/driver-webos/src/DeviceWebos.ts +55 -0
- package/packages/driver-webos/src/__mocks__/webos.ts +33 -0
- package/packages/driver-webos/src/constants.ts +1 -0
- package/packages/driver-webos/src/keymap.ts +2 -1
- package/packages/driver-webos/src/types.ts +30 -0
- package/packages/driver-xbox/src/DeviceXbox.ts +30 -1
- package/packages/driver-xbox/src/keymap.ts +1 -1
- package/packages/epg/README.md +3 -1
- package/packages/epg/src/v2/Cell.tsx +16 -2
- package/packages/epg/src/v2/DataManager.ts +112 -41
- package/packages/epg/src/v2/DatePicker.tsx +9 -3
- package/packages/epg/src/v2/DateToast/DateToast.tsx +12 -9
- package/packages/epg/src/v2/Day.tsx +6 -3
- package/packages/epg/src/v2/Epg.tsx +5 -5
- package/packages/epg/src/v2/MockGenerator/generator.ts +3 -2
- package/packages/epg/src/v2/ProgramInfo/utils.ts +4 -3
- package/packages/epg/src/v2/Row.tsx +3 -1
- package/packages/epg/src/v2/TimelineSection.tsx +4 -1
- package/packages/epg/src/v2/basic/CellsManager.tsx +7 -2
- package/packages/epg/src/v2/basic/RowsManager.tsx +3 -1
- package/packages/epg/src/v2/interface.ts +13 -0
- package/packages/events-manager/src/EventsManager.ts +1 -56
- package/packages/focus/README.md +33 -0
- package/packages/focus/src/IFocusable.ts +1 -0
- package/packages/focus/src/Layout/Base.tsx +41 -6
- package/packages/focus/src/Layout/Matrix.tsx +51 -19
- package/packages/focus/src/focusFirstExisting.ts +7 -1
- package/packages/focus/src/hasFocus.ts +36 -0
- package/packages/focus/src/index.ts +2 -1
- package/packages/gallup/src/Gallup.ts +3 -3
- package/packages/grid/src/Base/Base.tsx +15 -10
- package/packages/grid/src/FirstOnlyGrid/FirstOnlyGrid.tsx +4 -2
- package/packages/grid/src/UnifiedGridController/UnifiedGridController.ts +6 -6
- package/packages/icon/src/Icon.tsx +27 -5
- package/packages/input/README.md +1 -1
- package/packages/input/src/Input.tsx +10 -10
- package/packages/interactable/README.md +2 -1
- package/packages/interactable/src/Interactable.tsx +9 -3
- package/packages/interactable/src/interface.ts +1 -0
- package/packages/jsx/src/index.ts +1 -1
- package/packages/jsx/src/test-utils/index.ts +1 -0
- package/packages/jsx/src/test-utils/keyup.ts +27 -0
- package/packages/keyboard/README.md +2 -0
- package/packages/keyboard/src/Backdrop/Backdrop.scss +2 -0
- package/packages/keyboard/src/KeyboardBase.tsx +16 -4
- package/packages/keyboard/src/WhitelabelKeyboard/Keyboard.scss +10 -0
- package/packages/keyboard/src/WhitelabelKeyboard/Keyboard.tsx +128 -142
- package/packages/keyboard/src/WhitelabelKeyboard/WhitelabelStyles/whitelabel.scss +4 -0
- package/packages/keyboard/src/WhitelabelKeyboard/_sizes.1080.scss +1 -0
- package/packages/keyboard/src/WhitelabelKeyboard/_sizes.scss +1 -0
- package/packages/keyboard/src/WhitelabelKeyboard/icons/key_language.svg +20 -0
- package/packages/keyboard/src/WhitelabelKeyboard/index.ts +1 -1
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/arabic.ts +27 -0
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/burmese.ts +27 -0
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/dari.ts +28 -0
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/hebrew.ts +28 -0
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/index.ts +15 -0
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/korean.ts +26 -0
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/latin.ts +26 -0
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/pashto.ts +27 -0
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/persian.ts +27 -0
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/russian.ts +27 -0
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/spanish.ts +26 -0
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/special.ts +28 -0
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/tibetan.ts +26 -0
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/turkish.ts +26 -0
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/ukrainian.ts +27 -0
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/urdu.ts +26 -0
- package/packages/keyboard/src/WhitelabelKeyboard/types.ts +22 -2
- package/packages/keyboard/src/types/index.ts +1 -1
- package/packages/keyboard/src/utils/caret.ts +5 -8
- package/packages/keyboard/src/utils/input.ts +5 -6
- package/packages/keyboard/src/utils/setInputSelectionRange.ts +10 -0
- package/packages/l10n/README.md +18 -0
- package/packages/l10n/src/date/common.ts +18 -6
- package/packages/l10n/src/date/cs.ts +2 -8
- package/packages/l10n/src/date/de.ts +97 -0
- package/packages/l10n/src/date/en-001.ts +3 -3
- package/packages/l10n/src/date/en-common.ts +5 -4
- package/packages/l10n/src/date/en-us.ts +3 -3
- package/packages/l10n/src/date/es.ts +71 -0
- package/packages/l10n/src/date/fr.ts +94 -0
- package/packages/l10n/src/date/he.ts +101 -0
- package/packages/l10n/src/date/iso.ts +12 -13
- package/packages/l10n/src/date/types.ts +9 -0
- package/packages/l10n/src/l10n.ts +61 -3
- package/packages/list/src/Base/Base.tsx +19 -9
- package/packages/list/src/Base/interface.ts +2 -2
- package/packages/list/src/BasicList/BasicList.tsx +7 -7
- package/packages/list/src/CenteredList/CenteredList.tsx +2 -2
- package/packages/list/src/CenteredList/controller.ts +0 -1
- package/packages/list/src/EdgeOffsetList/EdgeOffsetList.tsx +10 -10
- package/packages/list/src/FirstOnlyList/FirstOnlyList.tsx +2 -2
- package/packages/list/src/FirstOnlyVariedList/FirstOnlyVariedList.tsx +2 -2
- package/packages/list/src/FixedToEndList/FixedToEndList.tsx +2 -2
- package/packages/list/src/UnifiedListController/UnifiedListController.ts +6 -2
- package/packages/list/src/interface.ts +2 -2
- package/packages/logger/src/loggers/ConsoleLogger/ConsoleLogger.ts +7 -1
- package/packages/logger/src/loggers/SentryLogger/Sentry.ts +1 -0
- package/packages/logger/src/loggers/SentryLogger/SentryLogger.ts +5 -3
- package/packages/menu/src/MenuAndContentContainer/MenuAndContentContainer.tsx +31 -3
- package/packages/menu/src/MenuAndContentContainer/interface.ts +8 -0
- package/packages/modal-service/README.md +4 -1
- package/packages/modal-service/src/ModalService.tsx +29 -5
- package/packages/perf-utils/README.md +1 -120
- package/packages/perf-utils/src/array/filter.ts +1 -54
- package/packages/perf-utils/src/array/find.ts +1 -43
- package/packages/perf-utils/src/array/findIndex.ts +1 -43
- package/packages/perf-utils/src/array/forEach.ts +1 -48
- package/packages/perf-utils/src/array/includes.ts +1 -41
- package/packages/perf-utils/src/array/includesNaN.ts +1 -32
- package/packages/perf-utils/src/array/index.ts +1 -7
- package/packages/perf-utils/src/array/map.ts +1 -52
- package/packages/player-ui/README.md +1 -1
- package/packages/player-ui/src/CurrentTime.tsx +2 -2
- package/packages/player-ui/src/Duration.tsx +2 -2
- package/packages/player-ui/src/PauseButton.tsx +8 -0
- package/packages/player-ui/src/PlayerInteractable.tsx +1 -0
- package/packages/player-ui/src/PlayerTime.tsx +3 -1
- package/packages/player-ui/src/PlayerUI.tsx +68 -35
- package/packages/player-ui/src/RemainingTime.tsx +2 -2
- package/packages/player-ui/src/Seekbar.tsx +110 -18
- package/packages/player-ui/src/Seeking.ts +57 -16
- package/packages/player-ui/src/Subtitles.tsx +2 -2
- package/packages/player-ui/src/index.ts +1 -0
- package/packages/player-ui/src/mocks.ts +32 -8
- package/packages/player-ui/src/timeUtils.ts +3 -3
- package/packages/player-ui/src/types.ts +9 -3
- package/packages/router/README.md +1 -0
- package/packages/router/src/Route.tsx +61 -27
- package/packages/router/src/Router.tsx +63 -14
- package/packages/router/src/history.ts +8 -1
- package/packages/router/src/index.ts +1 -1
- package/packages/router/src/utils.ts +9 -4
- package/packages/sass-utils/src/linear-gradient.scss +9 -4
- package/packages/sass-utils/src/scale.1080.scss +3 -1
- package/packages/sass-utils/src/scale.720.scss +1 -1
- package/packages/time/README.md +4 -1
- package/packages/time/src/Time.ts +35 -13
- package/packages/time/src/adapters/24iMediaTimeApi.ts +47 -0
- package/packages/time/src/constants.ts +1 -0
- package/packages/time/src/services/24iMediaTimeApi/24iMediaTimeApi.ts +43 -0
- package/packages/time/src/services/24iMediaTimeApi/index.ts +6 -0
- package/packages/toast/src/ToastService.scss +1 -0
- package/packages/toast/src/ToastService.tsx +16 -5
- package/packages/types-bigscreen-jsx/README.md +5 -4
- package/packages/types-bigscreen-jsx/index.d.ts +72 -67
- package/packages/utils/README.md +27 -0
- package/packages/utils/src/elementUtils.ts +25 -0
- package/packages/utils/src/forceReflow.ts +14 -0
- package/packages/utils/src/index.ts +8 -0
- package/packages/utils/src/keyPress/index.ts +6 -0
- package/packages/utils/src/keyPress/keyPressSimulator.ts +74 -0
- package/packages/utils/src/keyPress/simulateKeyPress.ts +25 -0
- package/packages/utils/src/scaledImage.ts +6 -3
- package/packages/utils/src/textUtils.ts +46 -14
- package/packages/utils/src/wait.ts +3 -1
- package/packages/utils/src/xhr/xhrSend.ts +3 -1
- package/packages/utils/src/xhr/xhrSendRetry.ts +3 -1
- package/packages/zapping/src/ChannelZapping.ts +9 -0
- package/packages/zapping/src/Zapping.tsx +10 -0
- package/utils/release/release.ts +156 -0
- package/packages/driver-tizen/src/types.ts +0 -14
- package/packages/focus/src/Layout/__test__/Base.spec.ts +0 -180
- package/packages/focus/src/Layout/__test__/Horizontal.spec.ts +0 -94
- package/packages/focus/src/Layout/__test__/Matrix.spec.ts +0 -261
- package/packages/focus/src/Layout/__test__/Vertical.spec.ts +0 -46
- package/packages/focus/src/Layout/__test__/isRtl.spec.ts +0 -23
- package/packages/focus/src/Layout/__test__/shared.ts +0 -19
- package/packages/keyboard/src/WhitelabelKeyboard/focusMatrix.ts +0 -19
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/* eslint-disable no-magic-numbers */
|
|
2
|
+
import { KeyMatrixCell } from '../../types';
|
|
3
|
+
|
|
4
|
+
const keyboardLayout = [
|
|
5
|
+
['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'],
|
|
6
|
+
['י', 'ט', 'ח', 'ז', 'ו', 'ה', 'ד', 'ג', 'ב', 'א'],
|
|
7
|
+
['פ', 'ע', 'ס', 'ן', 'נ', 'ם', 'מ', 'ל', 'ך', 'כ'],
|
|
8
|
+
['\'', '-', ',', 'ת', 'ש', 'ר', 'ק', 'ץ', 'צ', 'ף'],
|
|
9
|
+
['@', '.'],
|
|
10
|
+
];
|
|
11
|
+
|
|
12
|
+
/* eslint-disable max-len */
|
|
13
|
+
const makeFocusStrings = (layout: KeyMatrixCell[][], hasLanguageLayout: boolean) => [
|
|
14
|
+
['', '', ...layout[0], 'backspace', 'backspace'],
|
|
15
|
+
['abc', 'abc', ...layout[1], 'clear', 'clear'],
|
|
16
|
+
['special', 'special', ...layout[2], 'left', 'right'],
|
|
17
|
+
['', '', ...layout[3], '', ''],
|
|
18
|
+
[
|
|
19
|
+
...(hasLanguageLayout ? ['language', 'language'] : ['', '']),
|
|
20
|
+
...layout[4], 'space', 'space', 'space', 'space', 'space', 'space', 'domain', 'domain', 'continue', 'continue',
|
|
21
|
+
],
|
|
22
|
+
];
|
|
23
|
+
|
|
24
|
+
export const hebrew = {
|
|
25
|
+
keyText: 'אבג',
|
|
26
|
+
layout: keyboardLayout,
|
|
27
|
+
makeFocusStrings,
|
|
28
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export { arabic } from './arabic';
|
|
2
|
+
export { burmese } from './burmese';
|
|
3
|
+
export { dari } from './dari';
|
|
4
|
+
export { hebrew } from './hebrew';
|
|
5
|
+
export { korean } from './korean';
|
|
6
|
+
export { latin } from './latin';
|
|
7
|
+
export { pashto } from './pashto';
|
|
8
|
+
export { persian } from './persian';
|
|
9
|
+
export { russian } from './russian';
|
|
10
|
+
export { spanish } from './spanish';
|
|
11
|
+
export { special } from './special';
|
|
12
|
+
export { tibetan } from './tibetan';
|
|
13
|
+
export { turkish } from './turkish';
|
|
14
|
+
export { ukrainian } from './ukrainian';
|
|
15
|
+
export { urdu } from './urdu';
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/* eslint-disable no-magic-numbers */
|
|
2
|
+
import { KeyMatrixCell } from '../../types';
|
|
3
|
+
|
|
4
|
+
const keyboardLayout = [
|
|
5
|
+
['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'],
|
|
6
|
+
['ᄀ', 'ᄂ', 'ᄃ', 'ᄅ', 'ᄆ', 'ᄇ', 'ᄉ', 'ᄋ', 'ᄌ', 'ᄎ'],
|
|
7
|
+
['ᄏ', 'ᄐ', 'ᄑ', 'ᄒ', 'ᅡ', 'ᅣ', 'ᅥ', 'ᅧ', 'ᅩ', 'ᅭ'],
|
|
8
|
+
['ᅮ', 'ᅲ', 'ᅳ', 'ᅵ', '?', ',', '.', '@', '-', '_'],
|
|
9
|
+
];
|
|
10
|
+
|
|
11
|
+
/* eslint-disable max-len */
|
|
12
|
+
const makeFocusStrings = (layout: KeyMatrixCell[][], hasLanguageLayout: boolean) => [
|
|
13
|
+
['', '', '', ...layout[0], '', 'backspace', 'backspace'],
|
|
14
|
+
['abc', 'abc', ...layout[1], 'clear', 'clear'],
|
|
15
|
+
['special', 'special', ...layout[2], 'left', 'right'],
|
|
16
|
+
['', '', ...layout[3], '', ''],
|
|
17
|
+
[
|
|
18
|
+
...(hasLanguageLayout ? ['language', 'language'] : ['', '']),
|
|
19
|
+
'shift', 'shift', 'space', 'space', 'space', 'space', 'space', 'space', 'domain', 'domain', 'continue', 'continue'],
|
|
20
|
+
];
|
|
21
|
+
|
|
22
|
+
export const korean = {
|
|
23
|
+
keyText: 'ᄀᄂᄃ',
|
|
24
|
+
layout: keyboardLayout,
|
|
25
|
+
makeFocusStrings,
|
|
26
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/* eslint-disable no-magic-numbers */
|
|
2
|
+
import { KeyMatrixCell } from '../../types';
|
|
3
|
+
|
|
4
|
+
const keyboardLayout = [
|
|
5
|
+
['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'],
|
|
6
|
+
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'],
|
|
7
|
+
['k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't'],
|
|
8
|
+
['u', 'v', 'w', 'x', 'y', 'z', '.', '@', '-', '_'],
|
|
9
|
+
];
|
|
10
|
+
|
|
11
|
+
/* eslint-disable max-len */
|
|
12
|
+
const makeFocusStrings = (layout: KeyMatrixCell[][], hasLanguageLayout: boolean) => [
|
|
13
|
+
['', '', ...layout[0], 'backspace', 'backspace'],
|
|
14
|
+
['abc', 'abc', ...layout[1], 'clear', 'clear'],
|
|
15
|
+
['special', 'special', ...layout[2], 'left', 'right'],
|
|
16
|
+
['', '', ...layout[3], '', ''],
|
|
17
|
+
[
|
|
18
|
+
...(hasLanguageLayout ? ['language', 'language'] : ['', '']),
|
|
19
|
+
'shift', 'shift', 'space', 'space', 'space', 'space', 'space', 'space', 'domain', 'domain', 'continue', 'continue'],
|
|
20
|
+
];
|
|
21
|
+
|
|
22
|
+
export const latin = {
|
|
23
|
+
keyText: 'Abc',
|
|
24
|
+
layout: keyboardLayout,
|
|
25
|
+
makeFocusStrings,
|
|
26
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/* eslint-disable no-magic-numbers */
|
|
2
|
+
import { KeyMatrixCell } from '../../types';
|
|
3
|
+
|
|
4
|
+
const keyboardLayout = [
|
|
5
|
+
['1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '.'],
|
|
6
|
+
['ا', 'ب', 'پ', 'ت', 'ث', 'ج', 'چ', 'ح', 'خ', 'د', 'ذ'],
|
|
7
|
+
['ر', 'ز', 'ژ', 'س', 'ش', 'ص', 'ض', 'ط', 'ظ', 'ع', 'غ'],
|
|
8
|
+
['ف', 'ق', 'ک', 'گ', 'ل', 'م', 'ن', 'و', 'ه', 'ی', '-'],
|
|
9
|
+
];
|
|
10
|
+
|
|
11
|
+
/* eslint-disable max-len */
|
|
12
|
+
const makeFocusStrings = (layout: KeyMatrixCell[][], hasLanguageLayout: boolean) => [
|
|
13
|
+
['', '', ...layout[0], 'backspace', 'backspace'],
|
|
14
|
+
['abc', 'abc', ...layout[1], 'clear', 'clear'],
|
|
15
|
+
['special', 'special', ...layout[2], 'left', 'right'],
|
|
16
|
+
['', '', ...layout[3], '', ''],
|
|
17
|
+
[
|
|
18
|
+
...(hasLanguageLayout ? ['language', 'language'] : ['', '']),
|
|
19
|
+
'shift', 'shift', 'space', 'space', 'space', 'space', 'space', 'space', 'space', 'domain', 'domain', 'continue', 'continue'],
|
|
20
|
+
];
|
|
21
|
+
|
|
22
|
+
export const pashto = {
|
|
23
|
+
className: 'wide',
|
|
24
|
+
keyText: 'ابپ',
|
|
25
|
+
layout: keyboardLayout,
|
|
26
|
+
makeFocusStrings,
|
|
27
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/* eslint-disable no-magic-numbers */
|
|
2
|
+
import { KeyMatrixCell } from '../../types';
|
|
3
|
+
|
|
4
|
+
const keyboardLayout = [
|
|
5
|
+
['1', '2', '3', '4', '5', '6', '7', '8', '9', '0', ',', '.'],
|
|
6
|
+
['ا', 'ب', 'ت', 'ث', 'ج', 'ح', 'خ', 'د', 'ذ', 'ر', 'ز', 'س'],
|
|
7
|
+
['ش', 'ص', 'ض', 'ط', 'ظ', 'ع', 'غ', 'ف', 'ق', 'ك', 'ل', 'م'],
|
|
8
|
+
['ن', 'ه', 'و', 'ي', 'ء', 'آ', 'إ', 'ة', 'ؤ', 'ئ', 'ى', 'أ'],
|
|
9
|
+
];
|
|
10
|
+
|
|
11
|
+
/* eslint-disable max-len */
|
|
12
|
+
const makeFocusStrings = (layout: KeyMatrixCell[][], hasLanguageLayout: boolean) => [
|
|
13
|
+
['', '', ...layout[0], 'backspace', 'backspace'],
|
|
14
|
+
['abc', 'abc', ...layout[1], 'clear', 'clear'],
|
|
15
|
+
['special', 'special', ...layout[2], 'left', 'right'],
|
|
16
|
+
['', '', ...layout[3], '', ''],
|
|
17
|
+
[
|
|
18
|
+
...(hasLanguageLayout ? ['language', 'language'] : ['', '']),
|
|
19
|
+
'shift', 'shift', 'space', 'space', 'space', 'space', 'space', 'space', 'space', 'space', 'domain', 'domain', 'continue', 'continue'],
|
|
20
|
+
];
|
|
21
|
+
|
|
22
|
+
export const persian = {
|
|
23
|
+
className: 'wide',
|
|
24
|
+
keyText: 'ابپ',
|
|
25
|
+
layout: keyboardLayout,
|
|
26
|
+
makeFocusStrings,
|
|
27
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/* eslint-disable no-magic-numbers */
|
|
2
|
+
import { KeyMatrixCell } from '../../types';
|
|
3
|
+
|
|
4
|
+
const keyboardLayout = [
|
|
5
|
+
['1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '.'],
|
|
6
|
+
['а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й'],
|
|
7
|
+
['к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф'],
|
|
8
|
+
['х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я'],
|
|
9
|
+
];
|
|
10
|
+
|
|
11
|
+
/* eslint-disable max-len */
|
|
12
|
+
const makeFocusStrings = (layout: KeyMatrixCell[][], hasLanguageLayout: boolean) => [
|
|
13
|
+
['', '', ...layout[0], 'backspace', 'backspace'],
|
|
14
|
+
['abc', 'abc', ...layout[1], 'clear', 'clear'],
|
|
15
|
+
['special', 'special', ...layout[2], 'left', 'right'],
|
|
16
|
+
['', '', ...layout[3], '', ''],
|
|
17
|
+
[
|
|
18
|
+
...(hasLanguageLayout ? ['language', 'language'] : ['', '']),
|
|
19
|
+
'shift', 'shift', 'space', 'space', 'space', 'space', 'space', 'space', 'space', 'domain', 'domain', 'continue', 'continue'],
|
|
20
|
+
];
|
|
21
|
+
|
|
22
|
+
export const russian = {
|
|
23
|
+
className: 'wide',
|
|
24
|
+
keyText: 'абв',
|
|
25
|
+
layout: keyboardLayout,
|
|
26
|
+
makeFocusStrings,
|
|
27
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/* eslint-disable no-magic-numbers */
|
|
2
|
+
import { KeyMatrixCell } from '../../types';
|
|
3
|
+
|
|
4
|
+
const keyboardLayout = [
|
|
5
|
+
['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'],
|
|
6
|
+
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'],
|
|
7
|
+
['k', 'l', 'm', 'n', 'ñ', 'o', 'p', 'q', 'r', 's'],
|
|
8
|
+
['t', 'u', 'v', 'w', 'x', 'y', 'z', '.', '@', '-'],
|
|
9
|
+
];
|
|
10
|
+
|
|
11
|
+
/* eslint-disable max-len */
|
|
12
|
+
const makeFocusStrings = (layout: KeyMatrixCell[][], hasLanguageLayout: boolean) => [
|
|
13
|
+
['', '', ...layout[0], 'backspace', 'backspace'],
|
|
14
|
+
['abc', 'abc', ...layout[1], 'clear', 'clear'],
|
|
15
|
+
['special', 'special', ...layout[2], 'left', 'right'],
|
|
16
|
+
['', '', ...layout[3], '', ''],
|
|
17
|
+
[
|
|
18
|
+
...(hasLanguageLayout ? ['language', 'language'] : ['', '']),
|
|
19
|
+
'shift', 'shift', 'space', 'space', 'space', 'space', 'space', 'space', 'domain', 'domain', 'continue', 'continue'],
|
|
20
|
+
];
|
|
21
|
+
|
|
22
|
+
export const spanish = {
|
|
23
|
+
keyText: 'Abc',
|
|
24
|
+
layout: keyboardLayout,
|
|
25
|
+
makeFocusStrings,
|
|
26
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/* eslint-disable no-magic-numbers */
|
|
2
|
+
import { KeyMatrixCell } from '../../types';
|
|
3
|
+
|
|
4
|
+
const keyboardLayout = [
|
|
5
|
+
['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'],
|
|
6
|
+
['{', '}', '[', ']', '^', '%', '*', '#', '+', '='],
|
|
7
|
+
['<', '>', '~', '/', '|', '\\', '(', ')', '&', '“'],
|
|
8
|
+
[';', ':', '‘', '!', '?', ',', '.', '@', '-', '_'],
|
|
9
|
+
['$', '€'], ['£', '¥'],
|
|
10
|
+
];
|
|
11
|
+
|
|
12
|
+
/* eslint-disable max-len */
|
|
13
|
+
const makeFocusStrings = (layout: KeyMatrixCell[][], hasLanguageLayout: boolean) => [
|
|
14
|
+
['', '', ...layout[0], 'backspace', 'backspace'],
|
|
15
|
+
['abc', 'abc', ...layout[1], 'clear', 'clear'],
|
|
16
|
+
['special', 'special', ...layout[2], 'left', 'right'],
|
|
17
|
+
['', '', ...layout[3], '', ''],
|
|
18
|
+
[
|
|
19
|
+
...(hasLanguageLayout ? ['language', 'language'] : ['', '']),
|
|
20
|
+
...layout[4], 'space', 'space', 'space', 'space', 'space', 'space', ...layout[5], 'continue', 'continue',
|
|
21
|
+
],
|
|
22
|
+
];
|
|
23
|
+
|
|
24
|
+
export const special = {
|
|
25
|
+
keyText: '+/#',
|
|
26
|
+
layout: keyboardLayout,
|
|
27
|
+
makeFocusStrings,
|
|
28
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/* eslint-disable no-magic-numbers */
|
|
2
|
+
import { KeyMatrixCell } from '../../types';
|
|
3
|
+
|
|
4
|
+
const keyboardLayout = [
|
|
5
|
+
['༡', '༢', '༣', '༤', '༥', '༦', '༧', '༨', '༩', '༠'],
|
|
6
|
+
['ཀ', 'ཁ', 'ག ', 'ང ', 'ཅ ', 'ཆ', 'ཇ', 'ཉ', 'ཏ', 'ཐ'],
|
|
7
|
+
['ད', 'ན', 'པ', 'ཕ', 'བ', 'མ', 'ཙ', 'ཚ', 'ཛ', 'ཝ'],
|
|
8
|
+
['ཝ', 'ཟ', 'འ', 'ཡ', 'ར', 'ལ', 'ཤ', 'ས', 'ཧ', 'ཨ'],
|
|
9
|
+
];
|
|
10
|
+
|
|
11
|
+
/* eslint-disable max-len */
|
|
12
|
+
const makeFocusStrings = (layout: KeyMatrixCell[][], hasLanguageLayout: boolean) => [
|
|
13
|
+
['', '', '', ...layout[0], '', 'backspace', 'backspace'],
|
|
14
|
+
['abc', 'abc', ...layout[1], 'clear', 'clear'],
|
|
15
|
+
['special', 'special', ...layout[2], 'left', 'right'],
|
|
16
|
+
['', '', ...layout[3], '', ''],
|
|
17
|
+
[
|
|
18
|
+
...(hasLanguageLayout ? ['language', 'language'] : ['', '']),
|
|
19
|
+
'shift', 'shift', 'space', 'space', 'space', 'space', 'space', 'space', 'domain', 'domain', 'continue', 'continue'],
|
|
20
|
+
];
|
|
21
|
+
|
|
22
|
+
export const tibetan = {
|
|
23
|
+
keyText: 'ཀཁག',
|
|
24
|
+
layout: keyboardLayout,
|
|
25
|
+
makeFocusStrings,
|
|
26
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/* eslint-disable no-magic-numbers */
|
|
2
|
+
import { KeyMatrixCell } from '../../types';
|
|
3
|
+
|
|
4
|
+
const keyboardLayout = [
|
|
5
|
+
['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'],
|
|
6
|
+
['a', 'b', 'c', 'ç', 'd', 'e', 'f', 'g', 'ğ', 'h'],
|
|
7
|
+
['ı', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'ö', 'p'],
|
|
8
|
+
['r', 's', 'ş', 't', 'u', 'ü', 'v', 'y', 'z', '.'],
|
|
9
|
+
];
|
|
10
|
+
|
|
11
|
+
/* eslint-disable max-len */
|
|
12
|
+
const makeFocusStrings = (layout: KeyMatrixCell[][], hasLanguageLayout: boolean) => [
|
|
13
|
+
['', '', ...layout[0], 'backspace', 'backspace'],
|
|
14
|
+
['abc', 'abc', ...layout[1], 'clear', 'clear'],
|
|
15
|
+
['special', 'special', ...layout[2], 'left', 'right'],
|
|
16
|
+
['', '', ...layout[3], '', ''],
|
|
17
|
+
[
|
|
18
|
+
...(hasLanguageLayout ? ['language', 'language'] : ['', '']),
|
|
19
|
+
'shift', 'shift', 'space', 'space', 'space', 'space', 'space', 'space', 'domain', 'domain', 'continue', 'continue'],
|
|
20
|
+
];
|
|
21
|
+
|
|
22
|
+
export const turkish = {
|
|
23
|
+
keyText: 'Abc',
|
|
24
|
+
layout: keyboardLayout,
|
|
25
|
+
makeFocusStrings,
|
|
26
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/* eslint-disable no-magic-numbers */
|
|
2
|
+
import { KeyMatrixCell } from '../../types';
|
|
3
|
+
|
|
4
|
+
const keyboardLayout = [
|
|
5
|
+
['1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '.'],
|
|
6
|
+
['а', 'б', 'в', 'г', 'ґ', 'д', 'е', 'є', 'ж', 'з', 'и'],
|
|
7
|
+
['і', 'ї', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с'],
|
|
8
|
+
['т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ь', 'ю', 'я'],
|
|
9
|
+
];
|
|
10
|
+
|
|
11
|
+
/* eslint-disable max-len */
|
|
12
|
+
const makeFocusStrings = (layout: KeyMatrixCell[][], hasLanguageLayout: boolean) => [
|
|
13
|
+
['', '', ...layout[0], 'backspace', 'backspace'],
|
|
14
|
+
['abc', 'abc', ...layout[1], 'clear', 'clear'],
|
|
15
|
+
['special', 'special', ...layout[2], 'left', 'right'],
|
|
16
|
+
['', '', ...layout[3], '', ''],
|
|
17
|
+
[
|
|
18
|
+
...(hasLanguageLayout ? ['language', 'language'] : ['', '']),
|
|
19
|
+
'shift', 'shift', 'space', 'space', 'space', 'space', 'space', 'space', 'space', 'domain', 'domain', 'continue', 'continue'],
|
|
20
|
+
];
|
|
21
|
+
|
|
22
|
+
export const ukrainian = {
|
|
23
|
+
className: 'wide',
|
|
24
|
+
keyText: 'абв',
|
|
25
|
+
layout: keyboardLayout,
|
|
26
|
+
makeFocusStrings,
|
|
27
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/* eslint-disable no-magic-numbers */
|
|
2
|
+
import { KeyMatrixCell } from '../../types';
|
|
3
|
+
|
|
4
|
+
const keyboardLayout = [
|
|
5
|
+
['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'],
|
|
6
|
+
['الف', 'ب', 'س', 'ڈ', 'ای', 'ایف', 'جی', 'ح', 'آئی', 'ج'],
|
|
7
|
+
['ک', 'ل', 'م', 'ن', 'او', 'پ', 'کیو', 'ر', 'ایس', 'ٹ'],
|
|
8
|
+
['یو', 'وی', 'ڈبلیو', 'ایکس', 'یے', 'ز', 'ڈاٹ', 'ایٹ', '-', '_'],
|
|
9
|
+
];
|
|
10
|
+
|
|
11
|
+
/* eslint-disable max-len */
|
|
12
|
+
const makeFocusStrings = (layout: KeyMatrixCell[][], hasLanguageLayout: boolean) => [
|
|
13
|
+
['', '', ...layout[0], 'backspace', 'backspace'],
|
|
14
|
+
['abc', 'abc', ...layout[1], 'clear', 'clear'],
|
|
15
|
+
['special', 'special', ...layout[2], 'left', 'right'],
|
|
16
|
+
['', '', ...layout[3], '', ''],
|
|
17
|
+
[
|
|
18
|
+
...(hasLanguageLayout ? ['language', 'language'] : ['', '']),
|
|
19
|
+
'shift', 'shift', 'space', 'space', 'space', 'space', 'space', 'space', 'domain', 'domain', 'continue', 'continue'],
|
|
20
|
+
];
|
|
21
|
+
|
|
22
|
+
export const urdu = {
|
|
23
|
+
keyText: 'دوبارہ سے',
|
|
24
|
+
layout: keyboardLayout,
|
|
25
|
+
makeFocusStrings,
|
|
26
|
+
};
|
|
@@ -1,8 +1,28 @@
|
|
|
1
|
+
import { KeyMatrixCell } from '../types';
|
|
2
|
+
import { BaseProps } from '../KeyboardBase';
|
|
3
|
+
|
|
4
|
+
export type Layouts = 'normal' | 'special';
|
|
5
|
+
|
|
1
6
|
export type KeyTexts = {
|
|
2
|
-
toNormalLayout: string
|
|
3
|
-
toSpecialLayout: string
|
|
7
|
+
toNormalLayout: string,
|
|
8
|
+
toSpecialLayout: string,
|
|
4
9
|
space: string | JSX.Element,
|
|
5
10
|
domain: string | JSX.Element,
|
|
6
11
|
clear: string | JSX.Element,
|
|
7
12
|
continue: string | JSX.Element,
|
|
8
13
|
};
|
|
14
|
+
|
|
15
|
+
export type LanguageLayout = {
|
|
16
|
+
className? : string,
|
|
17
|
+
keyText: KeyTexts['toNormalLayout'],
|
|
18
|
+
layout: KeyMatrixCell[][],
|
|
19
|
+
makeFocusStrings: (layout: KeyMatrixCell[][], hasLanguageLayout: boolean) => KeyMatrixCell[][],
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export type Props = BaseProps<Layouts> & {
|
|
23
|
+
texts?: Partial<KeyTexts>;
|
|
24
|
+
makeFocusStrings?: Record<Layouts, (
|
|
25
|
+
layout: KeyMatrixCell[][], hasLanguageLayout: boolean,
|
|
26
|
+
) => KeyMatrixCell[][]>,
|
|
27
|
+
languageLayout?: LanguageLayout,
|
|
28
|
+
};
|
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
input.selectionStart = position;
|
|
3
|
-
input.selectionEnd = position;
|
|
4
|
-
};
|
|
1
|
+
import { setInputSelectionRange } from './setInputSelectionRange';
|
|
5
2
|
|
|
6
3
|
export const caretLeft = (input: HTMLInputElement | null): false | number => {
|
|
7
4
|
if (!input) return false;
|
|
8
5
|
const selectionStart = input.selectionStart!;
|
|
9
6
|
if (selectionStart > 0) {
|
|
10
7
|
const newPosition = selectionStart - 1;
|
|
11
|
-
|
|
8
|
+
setInputSelectionRange(input, newPosition);
|
|
12
9
|
return newPosition;
|
|
13
10
|
}
|
|
14
11
|
return false;
|
|
@@ -20,7 +17,7 @@ export const caretRight = (input: HTMLInputElement | null): false | number => {
|
|
|
20
17
|
const selectionStart = input.selectionStart!;
|
|
21
18
|
if (selectionStart < value.length) {
|
|
22
19
|
const newPosition = selectionStart + 1;
|
|
23
|
-
|
|
20
|
+
setInputSelectionRange(input, newPosition);
|
|
24
21
|
return newPosition;
|
|
25
22
|
}
|
|
26
23
|
return false;
|
|
@@ -30,7 +27,7 @@ export const caretHome = (input: HTMLInputElement | null): false | number => {
|
|
|
30
27
|
if (!input) return false;
|
|
31
28
|
const selectionStart = input.selectionStart!;
|
|
32
29
|
if (selectionStart > 0) {
|
|
33
|
-
|
|
30
|
+
setInputSelectionRange(input, 0);
|
|
34
31
|
return 0;
|
|
35
32
|
}
|
|
36
33
|
return false;
|
|
@@ -41,7 +38,7 @@ export const caretEnd = (input: HTMLInputElement | null): false | number => {
|
|
|
41
38
|
const { value: { length } } = input;
|
|
42
39
|
const selectionStart = input.selectionStart!;
|
|
43
40
|
if (selectionStart < length) {
|
|
44
|
-
|
|
41
|
+
setInputSelectionRange(input, length);
|
|
45
42
|
return length;
|
|
46
43
|
}
|
|
47
44
|
return false;
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { setInputSelectionRange } from './setInputSelectionRange';
|
|
2
|
+
|
|
1
3
|
export const insertCharAtCaret = (input: HTMLInputElement | null, char: string): false | string => {
|
|
2
4
|
if (!input) return false;
|
|
3
5
|
const { value } = input;
|
|
@@ -6,8 +8,7 @@ export const insertCharAtCaret = (input: HTMLInputElement | null, char: string):
|
|
|
6
8
|
const postCaret = value.substring(selectionStart);
|
|
7
9
|
input.value = `${preCaret}${char}${postCaret}`;
|
|
8
10
|
const newCaretPosition = selectionStart + char.length;
|
|
9
|
-
input
|
|
10
|
-
input.selectionEnd = newCaretPosition;
|
|
11
|
+
setInputSelectionRange(input, newCaretPosition);
|
|
11
12
|
return input.value;
|
|
12
13
|
};
|
|
13
14
|
|
|
@@ -20,8 +21,7 @@ export const backspace = (input: HTMLInputElement): false | string => {
|
|
|
20
21
|
const postCaret = value.substring(selectionStart);
|
|
21
22
|
input.value = `${preCaret}${postCaret}`;
|
|
22
23
|
const newCaretPosition = selectionStart - 1;
|
|
23
|
-
input
|
|
24
|
-
input.selectionEnd = newCaretPosition;
|
|
24
|
+
setInputSelectionRange(input, newCaretPosition);
|
|
25
25
|
return input.value;
|
|
26
26
|
};
|
|
27
27
|
|
|
@@ -34,7 +34,6 @@ export const del = (input: HTMLInputElement): false | string => {
|
|
|
34
34
|
const postCaret = value.substring(selectionStart + 1);
|
|
35
35
|
input.value = `${preCaret}${postCaret}`;
|
|
36
36
|
const newCaretPosition = selectionStart;
|
|
37
|
-
input
|
|
38
|
-
input.selectionEnd = newCaretPosition;
|
|
37
|
+
setInputSelectionRange(input, newCaretPosition);
|
|
39
38
|
return input.value;
|
|
40
39
|
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// On some platforms, selectionStart/selectionEnd may change focus.
|
|
2
|
+
// This function ensures that the focus state remains the same.
|
|
3
|
+
export const setInputSelectionRange = (input: HTMLInputElement, position: number) => {
|
|
4
|
+
const { activeElement } = document;
|
|
5
|
+
const wasFocused = activeElement === input;
|
|
6
|
+
if (!wasFocused) input.focus();
|
|
7
|
+
input.selectionStart = position;
|
|
8
|
+
input.selectionEnd = position;
|
|
9
|
+
if (!wasFocused) (activeElement as HTMLElement).focus();
|
|
10
|
+
};
|
package/packages/l10n/README.md
CHANGED
|
@@ -76,6 +76,24 @@ type DateTimeFormatOptions = {
|
|
|
76
76
|
}
|
|
77
77
|
```
|
|
78
78
|
|
|
79
|
+
#### date-fns DateTime format
|
|
80
|
+
It is also possible to use formatting provided by [date-fns](https://date-fns.org/v2.30.0/docs/format) library. First you need to globally configure the formats used (usually from backstage):
|
|
81
|
+
```ts
|
|
82
|
+
l10n.init({
|
|
83
|
+
dateFormatLong?: string | null, // e.g. 'eee, dd MMM' for "Wed, 09 Jul"
|
|
84
|
+
dateFormatNumeric?: string | null, // e.g. 'EEEE, MMMM d' for "Wednesday, July 9"
|
|
85
|
+
dateFormatShort?: string | null, // e.g. 'MM/dd/yyyy' for "07/09/2023"
|
|
86
|
+
timeFormat?: string | null, // e.g. 'h:mm a' for "9:05 PM"
|
|
87
|
+
});
|
|
88
|
+
```
|
|
89
|
+
After that, `timeFormat` and `dateFormatShort` are used automatically where appropriate, in case the format string is _falsy_ the [default formatting implementation](#datetime-format) will be used. You can also specify which format you want to use in `DateTimeFormatOptions`:
|
|
90
|
+
```ts
|
|
91
|
+
type DateTimeFormatOptions = {
|
|
92
|
+
...
|
|
93
|
+
formatType: 'dateFormatLong' | 'dateFormatNumeric' | 'dateFormatShort' | 'timeFormat',
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
79
97
|
You can use both `timestamp` in `ms` or `Date` object directly for formatting.
|
|
80
98
|
|
|
81
99
|
#### Examples
|
|
@@ -7,7 +7,7 @@ const NOON = 12;
|
|
|
7
7
|
|
|
8
8
|
export const SECOND_FROM_END = 2;
|
|
9
9
|
|
|
10
|
-
export const h24 = (date: Date) => date.
|
|
10
|
+
export const h24 = (date: Date) => date.getUTCHours().toString();
|
|
11
11
|
|
|
12
12
|
export const hh24 = (date: Date) => {
|
|
13
13
|
const h = h24(date);
|
|
@@ -15,7 +15,7 @@ export const hh24 = (date: Date) => {
|
|
|
15
15
|
};
|
|
16
16
|
|
|
17
17
|
export const h12 = (date: Date) => {
|
|
18
|
-
const h = date.
|
|
18
|
+
const h = date.getUTCHours() % NOON;
|
|
19
19
|
return h === 0 ? '12' : h.toString();
|
|
20
20
|
};
|
|
21
21
|
|
|
@@ -24,14 +24,14 @@ export const hh12 = (date: Date) => {
|
|
|
24
24
|
return h.length === 1 ? `0${h}` : h;
|
|
25
25
|
};
|
|
26
26
|
|
|
27
|
-
export const m = (date: Date) => date.
|
|
27
|
+
export const m = (date: Date) => date.getUTCMinutes().toString();
|
|
28
28
|
|
|
29
29
|
export const mm = (date: Date) => {
|
|
30
30
|
const min = m(date);
|
|
31
31
|
return min.length === 1 ? `0${min}` : min;
|
|
32
32
|
};
|
|
33
33
|
|
|
34
|
-
export const s = (date: Date) => date.
|
|
34
|
+
export const s = (date: Date) => date.getUTCSeconds().toString();
|
|
35
35
|
|
|
36
36
|
export const ss = (date: Date) => {
|
|
37
37
|
const sec = s(date);
|
|
@@ -39,7 +39,7 @@ export const ss = (date: Date) => {
|
|
|
39
39
|
};
|
|
40
40
|
|
|
41
41
|
export const amOrPm = (date: Date) => (
|
|
42
|
-
date.
|
|
42
|
+
date.getUTCHours() < NOON ? 'AM' : 'PM'
|
|
43
43
|
);
|
|
44
44
|
|
|
45
45
|
export const h24Mm = (date: Date) => `${h24(date)}:${mm(date)}`;
|
|
@@ -107,7 +107,7 @@ export const collonSeparatedHour12MinuteSecond = (date: Date, options: DateTimeF
|
|
|
107
107
|
|
|
108
108
|
export const processYear = (dateStringParts: string[], year: Year | undefined, date: Date) => {
|
|
109
109
|
if (typeof year === 'undefined') return;
|
|
110
|
-
const fullYear = date.
|
|
110
|
+
const fullYear = date.getUTCFullYear().toString();
|
|
111
111
|
dateStringParts.push(
|
|
112
112
|
year === '2-digit'
|
|
113
113
|
? fullYear.substring(fullYear.length - SECOND_FROM_END)
|
|
@@ -151,3 +151,15 @@ export const dateFormatter = (
|
|
|
151
151
|
)(date),
|
|
152
152
|
};
|
|
153
153
|
};
|
|
154
|
+
|
|
155
|
+
export const toTwoDigitLocaleTimeString = (date: Date) => (
|
|
156
|
+
options: DateTimeFormatOptions = {
|
|
157
|
+
hour: '2-digit', minute: '2-digit', second: '2-digit',
|
|
158
|
+
},
|
|
159
|
+
) => collonSeparatedHour24MinuteSecond(date, options);
|
|
160
|
+
|
|
161
|
+
export const toNumericLocaleTimeString = (date: Date) => (
|
|
162
|
+
options: DateTimeFormatOptions = {
|
|
163
|
+
hour: 'numeric', minute: '2-digit', second: '2-digit',
|
|
164
|
+
},
|
|
165
|
+
) => collonSeparatedHour24MinuteSecond(date, options);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { dateFormatter, processYear, toNumericLocaleTimeString } from './common';
|
|
2
2
|
import type { DateTimeFormatOptions, Weekday, Day, Month, Year } from './types';
|
|
3
3
|
|
|
4
4
|
const WEEKDAYS = {
|
|
@@ -86,10 +86,4 @@ const toLocaleDateString = (date: Date) => (
|
|
|
86
86
|
return dateStringParts.join(' ');
|
|
87
87
|
};
|
|
88
88
|
|
|
89
|
-
const
|
|
90
|
-
options: DateTimeFormatOptions = {
|
|
91
|
-
hour: 'numeric', minute: '2-digit', second: '2-digit',
|
|
92
|
-
},
|
|
93
|
-
) => collonSeparatedHour24MinuteSecond(date, options);
|
|
94
|
-
|
|
95
|
-
export const csDateFormatter = dateFormatter(toLocaleTimeString, toLocaleDateString, ' ');
|
|
89
|
+
export const csDateFormatter = dateFormatter(toNumericLocaleTimeString, toLocaleDateString, ' ');
|