@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
|
@@ -155,6 +155,7 @@ If you do not use backstage, you must import default Whitelabel styles.
|
|
|
155
155
|
import { ime } from '@24i/bigscreen-sdk/ime';
|
|
156
156
|
import { CircularDirection } from '@24i/bigscreen-sdk/focus';
|
|
157
157
|
import { Keyboard } from '@24i/bigscreen-sdk/keyboard/WhitelabelKeyboard';
|
|
158
|
+
import { hebrew } from '@24i/bigscreen-sdk/keyboard/Whitelabel/layouts';
|
|
158
159
|
import { NumericKeyboard } from '@24i/bigscreen-sdk/keyboard/WhitelabelNumericKeyboard';
|
|
159
160
|
|
|
160
161
|
// default styles import
|
|
@@ -196,6 +197,7 @@ class App extends Component {
|
|
|
196
197
|
continue: 'Continue',
|
|
197
198
|
}}
|
|
198
199
|
initialFocus={{ x: 5, y: 2 }}
|
|
200
|
+
languageLayout={hebrew} // Switchable language layout
|
|
199
201
|
/>
|
|
200
202
|
<NumericKeyboard
|
|
201
203
|
ref={this.numericKeyboard}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
.keyboard-backdrop {
|
|
2
2
|
position: fixed;
|
|
3
3
|
left: 0;
|
|
4
|
+
right: 0;
|
|
4
5
|
top: 0;
|
|
5
6
|
width: $backdrop-width;
|
|
6
7
|
height: $backdrop-height;
|
|
@@ -9,6 +10,7 @@
|
|
|
9
10
|
.keyboard-backdrop-disabled {
|
|
10
11
|
position: absolute;
|
|
11
12
|
left: 0;
|
|
13
|
+
right: 0;
|
|
12
14
|
top: 0;
|
|
13
15
|
width: 100%;
|
|
14
16
|
height: 100%;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Component, createRef, Reference } from '@24i/bigscreen-sdk/jsx';
|
|
2
|
-
import { getKeyDigit } from '@24i/bigscreen-sdk/device';
|
|
2
|
+
import { getKeyDigit, device } from '@24i/bigscreen-sdk/device';
|
|
3
|
+
import { isRtl } from '@24i/bigscreen-sdk/i18n';
|
|
3
4
|
import { EventsManager } from '@24i/bigscreen-sdk/events-manager';
|
|
4
5
|
import {
|
|
5
6
|
Matrix,
|
|
@@ -120,8 +121,15 @@ export abstract class KeyboardBase<
|
|
|
120
121
|
*/
|
|
121
122
|
onKeyDown(event: KeyboardEvent) {
|
|
122
123
|
const { handleRemoteDigits, handleHWKeyboard } = this.props;
|
|
124
|
+
const preventBack = 'backAsBackspaceInSearch' in device && !!device.backAsBackspaceInSearch;
|
|
125
|
+
const inputLength = this.inputElement?.value?.length;
|
|
126
|
+
|
|
123
127
|
if (BACK.is(event)) {
|
|
124
|
-
|
|
128
|
+
if (preventBack && inputLength) {
|
|
129
|
+
this.onBackspace();
|
|
130
|
+
} else {
|
|
131
|
+
this.onCancel();
|
|
132
|
+
}
|
|
125
133
|
} else {
|
|
126
134
|
let char: string | null = null;
|
|
127
135
|
if (handleHWKeyboard) {
|
|
@@ -208,7 +216,9 @@ export abstract class KeyboardBase<
|
|
|
208
216
|
* Moves caret 1 position to the left.
|
|
209
217
|
*/
|
|
210
218
|
onLeft() {
|
|
211
|
-
const newPosition =
|
|
219
|
+
const newPosition = !isRtl()
|
|
220
|
+
? caretLeft(this.inputElement)
|
|
221
|
+
: caretRight(this.inputElement);
|
|
212
222
|
if (typeof newPosition === 'number') {
|
|
213
223
|
this.updateCaretPosition(newPosition);
|
|
214
224
|
}
|
|
@@ -218,7 +228,9 @@ export abstract class KeyboardBase<
|
|
|
218
228
|
* Moves caret 1 position to the right.
|
|
219
229
|
*/
|
|
220
230
|
onRight() {
|
|
221
|
-
const newPosition =
|
|
231
|
+
const newPosition = !isRtl()
|
|
232
|
+
? caretRight(this.inputElement)
|
|
233
|
+
: caretLeft(this.inputElement);
|
|
222
234
|
if (typeof newPosition === 'number') {
|
|
223
235
|
this.updateCaretPosition(newPosition);
|
|
224
236
|
}
|
|
@@ -23,6 +23,10 @@
|
|
|
23
23
|
padding-bottom: $keyboard-padding-bottom;
|
|
24
24
|
height: 100%;
|
|
25
25
|
width: 100%;
|
|
26
|
+
|
|
27
|
+
&.wide .key.key-space {
|
|
28
|
+
width: $key-space-wide-width;
|
|
29
|
+
}
|
|
26
30
|
}
|
|
27
31
|
|
|
28
32
|
.keys-container {
|
|
@@ -109,6 +113,12 @@
|
|
|
109
113
|
width: $key-space-width;
|
|
110
114
|
}
|
|
111
115
|
|
|
116
|
+
&.key-language {
|
|
117
|
+
.key-mask-icon {
|
|
118
|
+
@include mask-svg-icon('./icons/key_language.svg');
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
112
122
|
&.key-shift {
|
|
113
123
|
.key-mask-icon {
|
|
114
124
|
@include mask-svg-icon('./icons/key_shift.svg');
|
|
@@ -1,46 +1,25 @@
|
|
|
1
|
-
import { clearNode, DeclareProps } from '@24i/bigscreen-sdk/jsx';
|
|
1
|
+
import { clearNode, DeclareProps, Reference } from '@24i/bigscreen-sdk/jsx';
|
|
2
2
|
import { Matrix } from '@24i/bigscreen-sdk/focus';
|
|
3
3
|
import { Interactable } from '@24i/bigscreen-sdk/interactable';
|
|
4
4
|
import { map } from '@24i/bigscreen-sdk/perf-utils/array';
|
|
5
|
+
import { generateFocusMatrixFromStringMatrix } from '../utils/generateFocusMatrixFromStringMatrix';
|
|
5
6
|
import { Backdrop } from '../Backdrop/Backdrop';
|
|
6
|
-
import {
|
|
7
|
+
import { KeyboardBase } from '../KeyboardBase';
|
|
7
8
|
import { KeyMatrixCell } from '../types';
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
9
|
+
import { latin, special } from './layouts';
|
|
10
|
+
import { Layouts, Props } from './types';
|
|
10
11
|
import './Keyboard.styles';
|
|
11
12
|
|
|
12
|
-
type Layouts = 'normal' | 'special';
|
|
13
|
-
|
|
14
|
-
export type Props = BaseProps<Layouts> & {
|
|
15
|
-
texts?: KeyTexts;
|
|
16
|
-
makeFocusStrings?: Record<Layouts, (base: KeyMatrixCell[][]) => KeyMatrixCell[][]>,
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
const NORMAL_LAYOUT = [
|
|
20
|
-
['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'],
|
|
21
|
-
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'],
|
|
22
|
-
['k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't'],
|
|
23
|
-
['u', 'v', 'w', 'x', 'y', 'z', '.', '@', '-', '_'],
|
|
24
|
-
];
|
|
25
|
-
|
|
26
|
-
const SPECIAL_LAYOUT = [
|
|
27
|
-
['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'],
|
|
28
|
-
['{', '}', '[', ']', '^', '%', '*', '#', '+', '='],
|
|
29
|
-
['<', '>', '~', '/', '|', '\\', '(', ')', '&', '“'],
|
|
30
|
-
[';', ':', '‘', '!', '?', ',', '.', '@', '-', '_'],
|
|
31
|
-
['$', '€'], ['£', '¥'],
|
|
32
|
-
];
|
|
33
|
-
|
|
34
13
|
export class Keyboard extends KeyboardBase<Layouts, Props> {
|
|
35
14
|
static defaultProps = {
|
|
36
15
|
...KeyboardBase.defaultProps,
|
|
37
16
|
layouts: {
|
|
38
|
-
normal:
|
|
39
|
-
special:
|
|
17
|
+
normal: latin.layout,
|
|
18
|
+
special: special.layout,
|
|
40
19
|
},
|
|
41
20
|
makeFocusStrings: {
|
|
42
|
-
normal:
|
|
43
|
-
special:
|
|
21
|
+
normal: latin.makeFocusStrings,
|
|
22
|
+
special: special.makeFocusStrings,
|
|
44
23
|
},
|
|
45
24
|
texts: {
|
|
46
25
|
toNormalLayout: 'Abc',
|
|
@@ -53,22 +32,43 @@ export class Keyboard extends KeyboardBase<Layouts, Props> {
|
|
|
53
32
|
initialFocus: { x: 5, y: 2 },
|
|
54
33
|
};
|
|
55
34
|
|
|
35
|
+
languageFocusMatrix: Reference<HTMLDivElement>[][] = [[]];
|
|
36
|
+
|
|
56
37
|
renderedLayout: Layouts | undefined = undefined;
|
|
57
38
|
|
|
39
|
+
isLanguageLayoutActive = false;
|
|
40
|
+
|
|
58
41
|
declare props: DeclareProps<Props, typeof Keyboard.defaultProps>;
|
|
59
42
|
|
|
43
|
+
constructor(props: Props) {
|
|
44
|
+
super(props);
|
|
45
|
+
if (this.props.languageLayout) this.createLanguageFocusMatrix();
|
|
46
|
+
}
|
|
47
|
+
|
|
60
48
|
createFocusMatrices() {
|
|
61
|
-
const { layouts, makeFocusStrings } = this.props;
|
|
49
|
+
const { layouts, makeFocusStrings, languageLayout } = this.props;
|
|
62
50
|
super.createFocusMatrices({
|
|
63
|
-
normal: makeFocusStrings.normal(layouts.normal),
|
|
64
|
-
special: makeFocusStrings.special(layouts.special),
|
|
51
|
+
normal: makeFocusStrings.normal(layouts.normal, !!languageLayout),
|
|
52
|
+
special: makeFocusStrings.special(layouts.special, !!languageLayout),
|
|
65
53
|
});
|
|
66
54
|
}
|
|
67
55
|
|
|
56
|
+
createLanguageFocusMatrix() {
|
|
57
|
+
const { languageLayout } = this.props;
|
|
58
|
+
this.languageFocusMatrix = generateFocusMatrixFromStringMatrix(
|
|
59
|
+
this.keyRefs, languageLayout!.makeFocusStrings(languageLayout!.layout, true),
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
|
|
68
63
|
show() {
|
|
69
64
|
super.show();
|
|
70
65
|
this.renderedLayout = 'normal';
|
|
71
|
-
this.
|
|
66
|
+
const { layouts, languageLayout } = this.props;
|
|
67
|
+
if (this.isLanguageLayoutActive) {
|
|
68
|
+
this.renderLayout(this.languageFocusMatrix, languageLayout!.layout);
|
|
69
|
+
} else {
|
|
70
|
+
this.renderLayout(this.focusMatrices.normal, layouts.normal);
|
|
71
|
+
}
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
hide() {
|
|
@@ -77,21 +77,40 @@ export class Keyboard extends KeyboardBase<Layouts, Props> {
|
|
|
77
77
|
clearNode(this.keyboardWrapper);
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
-
onAbc
|
|
80
|
+
onAbc() {
|
|
81
81
|
if (this.renderedLayout === 'normal') return;
|
|
82
82
|
this.renderedLayout = 'normal';
|
|
83
|
-
this.
|
|
83
|
+
const { layouts, languageLayout } = this.props;
|
|
84
|
+
if (this.isLanguageLayoutActive) {
|
|
85
|
+
this.renderLayout(this.languageFocusMatrix, languageLayout!.layout);
|
|
86
|
+
} else {
|
|
87
|
+
this.renderLayout(this.focusMatrices.normal, layouts.normal);
|
|
88
|
+
}
|
|
84
89
|
this.matrix.current!.setIndex({ x: 0, y: 1 });
|
|
85
90
|
this.matrix.current!.focus();
|
|
86
|
-
}
|
|
91
|
+
}
|
|
87
92
|
|
|
88
|
-
onSpecial
|
|
93
|
+
onSpecial() {
|
|
89
94
|
if (this.renderedLayout === 'special') return;
|
|
90
95
|
this.renderedLayout = 'special';
|
|
91
|
-
this.
|
|
96
|
+
const { layouts } = this.props;
|
|
97
|
+
this.renderLayout(this.focusMatrices.special, layouts.special);
|
|
92
98
|
this.matrix.current!.setIndex({ x: 0, y: 2 });
|
|
93
99
|
this.matrix.current!.focus();
|
|
94
|
-
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
onLanguage() {
|
|
103
|
+
this.renderedLayout = 'normal';
|
|
104
|
+
const { layouts, languageLayout } = this.props;
|
|
105
|
+
this.isLanguageLayoutActive = !this.isLanguageLayoutActive;
|
|
106
|
+
if (this.isLanguageLayoutActive) {
|
|
107
|
+
this.renderLayout(this.languageFocusMatrix, languageLayout!.layout);
|
|
108
|
+
} else {
|
|
109
|
+
this.renderLayout(this.focusMatrices.normal, layouts.normal);
|
|
110
|
+
}
|
|
111
|
+
this.matrix.current!.setIndex({ x: 0, y: 4 });
|
|
112
|
+
this.matrix.current!.focus();
|
|
113
|
+
}
|
|
95
114
|
|
|
96
115
|
generateKey = (char: string) => (
|
|
97
116
|
<Interactable
|
|
@@ -105,111 +124,48 @@ export class Keyboard extends KeyboardBase<Layouts, Props> {
|
|
|
105
124
|
</Interactable>
|
|
106
125
|
);
|
|
107
126
|
|
|
108
|
-
|
|
127
|
+
renderLayout(matrix: Reference<HTMLDivElement>[][], layout: KeyMatrixCell[][]) {
|
|
109
128
|
const { texts, circular } = this.props;
|
|
110
129
|
this.clearMount(
|
|
111
130
|
<Matrix
|
|
112
131
|
ref={this.matrix}
|
|
113
132
|
domRef={this.keyboardWrapper}
|
|
114
|
-
matrix={
|
|
133
|
+
matrix={matrix}
|
|
115
134
|
circular={circular}
|
|
116
135
|
dir="ltr"
|
|
117
136
|
>
|
|
118
137
|
{this.renderKeyboard([
|
|
119
138
|
<>
|
|
120
139
|
<div className="key-row first-row rounded-border-container">
|
|
121
|
-
{map(
|
|
140
|
+
{map(layout[0], this.generateKey)}
|
|
122
141
|
</div>
|
|
123
142
|
<div className="rounded-border-container">
|
|
124
143
|
<div className="key-row key-chars">
|
|
125
|
-
{map(
|
|
144
|
+
{map(layout[1], this.generateKey)}
|
|
126
145
|
</div>
|
|
127
146
|
<div className="key-row key-chars">
|
|
128
|
-
{map(
|
|
147
|
+
{map(layout[2], this.generateKey)}
|
|
129
148
|
</div>
|
|
130
149
|
<div className="key-row key-chars">
|
|
131
150
|
{
|
|
132
151
|
// eslint-disable-next-line no-magic-numbers
|
|
133
|
-
map(
|
|
134
|
-
}
|
|
135
|
-
</div>
|
|
136
|
-
<div className="key-row">
|
|
137
|
-
<Interactable
|
|
138
|
-
ref={this.keyRefs.shift}
|
|
139
|
-
className="key key-wide key-with-icon key-shift"
|
|
140
|
-
onPress={() => this.onShift()}
|
|
141
|
-
>
|
|
142
|
-
<div className="key-background">
|
|
143
|
-
<div className="key-mask-icon" />
|
|
144
|
-
</div>
|
|
145
|
-
</Interactable>
|
|
146
|
-
<Interactable
|
|
147
|
-
ref={this.keyRefs.space}
|
|
148
|
-
className="key key-wide key-space"
|
|
149
|
-
onPress={() => {
|
|
150
|
-
this.onKey(' ');
|
|
151
|
-
}}
|
|
152
|
-
dir="auto"
|
|
153
|
-
>
|
|
154
|
-
<div className="key-background">
|
|
155
|
-
{texts.space}
|
|
156
|
-
</div>
|
|
157
|
-
</Interactable>
|
|
158
|
-
<Interactable
|
|
159
|
-
ref={this.keyRefs.domain}
|
|
160
|
-
className="key key-wide key-domain"
|
|
161
|
-
onPress={() => {
|
|
162
|
-
this.onKey(
|
|
163
|
-
this.keyRefs.domain.current!.firstChild!.textContent!,
|
|
164
|
-
);
|
|
165
|
-
}}
|
|
166
|
-
dir="auto"
|
|
167
|
-
>
|
|
168
|
-
<div className="key-background">
|
|
169
|
-
{texts.domain}
|
|
170
|
-
</div>
|
|
171
|
-
</Interactable>
|
|
172
|
-
</div>
|
|
173
|
-
</div>
|
|
174
|
-
</>,
|
|
175
|
-
])}
|
|
176
|
-
</Matrix>,
|
|
177
|
-
this.keyboardWrapper,
|
|
178
|
-
);
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
renderSpecial() {
|
|
182
|
-
const { texts, circular } = this.props;
|
|
183
|
-
this.clearMount(
|
|
184
|
-
<Matrix
|
|
185
|
-
ref={this.matrix}
|
|
186
|
-
domRef={this.keyboardWrapper}
|
|
187
|
-
matrix={this.focusMatrices.special}
|
|
188
|
-
circular={circular}
|
|
189
|
-
dir="ltr"
|
|
190
|
-
>
|
|
191
|
-
{this.renderKeyboard([
|
|
192
|
-
<>
|
|
193
|
-
<div className="key-row first-row rounded-border-container">
|
|
194
|
-
{map(SPECIAL_LAYOUT[0], this.generateKey)}
|
|
195
|
-
</div>
|
|
196
|
-
<div className="rounded-border-container">
|
|
197
|
-
<div className="key-row">
|
|
198
|
-
{map(SPECIAL_LAYOUT[1], this.generateKey)}
|
|
199
|
-
</div>
|
|
200
|
-
<div className="key-row">
|
|
201
|
-
{map(SPECIAL_LAYOUT[2], this.generateKey)}
|
|
202
|
-
</div>
|
|
203
|
-
<div className="key-row">
|
|
204
|
-
{
|
|
205
|
-
// eslint-disable-next-line no-magic-numbers
|
|
206
|
-
map(SPECIAL_LAYOUT[3], this.generateKey)
|
|
152
|
+
map(layout[3], this.generateKey)
|
|
207
153
|
}
|
|
208
154
|
</div>
|
|
209
155
|
<div className="key-row">
|
|
210
156
|
{
|
|
211
157
|
// eslint-disable-next-line no-magic-numbers
|
|
212
|
-
map(
|
|
158
|
+
layout[4] ? map(layout[4], this.generateKey) : (
|
|
159
|
+
<Interactable
|
|
160
|
+
ref={this.keyRefs.shift}
|
|
161
|
+
className="key key-wide key-with-icon key-shift"
|
|
162
|
+
onPress={() => this.onShift()}
|
|
163
|
+
>
|
|
164
|
+
<div className="key-background">
|
|
165
|
+
<div className="key-mask-icon" />
|
|
166
|
+
</div>
|
|
167
|
+
</Interactable>
|
|
168
|
+
)
|
|
213
169
|
}
|
|
214
170
|
<Interactable
|
|
215
171
|
ref={this.keyRefs.space}
|
|
@@ -225,7 +181,21 @@ export class Keyboard extends KeyboardBase<Layouts, Props> {
|
|
|
225
181
|
</Interactable>
|
|
226
182
|
{
|
|
227
183
|
// eslint-disable-next-line no-magic-numbers
|
|
228
|
-
map(
|
|
184
|
+
layout[5] ? map(layout[5], this.generateKey) : (
|
|
185
|
+
<Interactable
|
|
186
|
+
ref={this.keyRefs.domain}
|
|
187
|
+
className="key key-wide key-domain"
|
|
188
|
+
onPress={() => {
|
|
189
|
+
this.onKey(this.keyRefs.domain.current!
|
|
190
|
+
.firstChild!.textContent!);
|
|
191
|
+
}}
|
|
192
|
+
dir="auto"
|
|
193
|
+
>
|
|
194
|
+
<div className="key-background">
|
|
195
|
+
{texts.domain}
|
|
196
|
+
</div>
|
|
197
|
+
</Interactable>
|
|
198
|
+
)
|
|
229
199
|
}
|
|
230
200
|
</div>
|
|
231
201
|
</div>
|
|
@@ -237,7 +207,8 @@ export class Keyboard extends KeyboardBase<Layouts, Props> {
|
|
|
237
207
|
}
|
|
238
208
|
|
|
239
209
|
renderKeyboard(layout: JSX.Element[]) {
|
|
240
|
-
const { texts, shouldHideOnBackdropClick } = this.props;
|
|
210
|
+
const { texts, shouldHideOnBackdropClick, languageLayout } = this.props;
|
|
211
|
+
const layoutClassName = languageLayout?.className || '';
|
|
241
212
|
const isSpecialLayout = this.renderedLayout === 'special';
|
|
242
213
|
const isNormalLayout = this.renderedLayout === 'normal';
|
|
243
214
|
return (
|
|
@@ -246,7 +217,7 @@ export class Keyboard extends KeyboardBase<Layouts, Props> {
|
|
|
246
217
|
onClick={() => this.onCancel()}
|
|
247
218
|
enableOnClick={shouldHideOnBackdropClick}
|
|
248
219
|
/>
|
|
249
|
-
<div className=
|
|
220
|
+
<div className={`keyboard-wrapper ${layoutClassName}`}>
|
|
250
221
|
<div className="keys-container side-bar layout-selector">
|
|
251
222
|
<div className="key-row first-row">
|
|
252
223
|
<div className="key key-wide key-empty"> </div>
|
|
@@ -258,11 +229,12 @@ export class Keyboard extends KeyboardBase<Layouts, Props> {
|
|
|
258
229
|
className={
|
|
259
230
|
`key key-wide key-abc ${isNormalLayout ? 'active' : ''}`
|
|
260
231
|
}
|
|
261
|
-
onPress={this.onAbc}
|
|
232
|
+
onPress={() => this.onAbc()}
|
|
262
233
|
dir="auto"
|
|
263
234
|
>
|
|
264
235
|
<div className="key-background">
|
|
265
|
-
{
|
|
236
|
+
{this.isLanguageLayoutActive
|
|
237
|
+
? languageLayout?.keyText : texts.toNormalLayout}
|
|
266
238
|
</div>
|
|
267
239
|
</Interactable>
|
|
268
240
|
</div>
|
|
@@ -274,7 +246,7 @@ export class Keyboard extends KeyboardBase<Layouts, Props> {
|
|
|
274
246
|
isSpecialLayout ? 'active' : ''
|
|
275
247
|
}`
|
|
276
248
|
}
|
|
277
|
-
onPress={this.onSpecial}
|
|
249
|
+
onPress={() => this.onSpecial()}
|
|
278
250
|
dir="auto"
|
|
279
251
|
>
|
|
280
252
|
<div className="key-background">
|
|
@@ -286,9 +258,25 @@ export class Keyboard extends KeyboardBase<Layouts, Props> {
|
|
|
286
258
|
<div className="key-row">
|
|
287
259
|
<div className="key key-wide key-empty"> </div>
|
|
288
260
|
</div>
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
261
|
+
{languageLayout
|
|
262
|
+
? (
|
|
263
|
+
<div className="key-row rounded-border-container">
|
|
264
|
+
<Interactable
|
|
265
|
+
ref={this.keyRefs.language}
|
|
266
|
+
className="key key-wide key-with-icon key-language"
|
|
267
|
+
onPress={() => this.onLanguage()}
|
|
268
|
+
>
|
|
269
|
+
<div className="key-background">
|
|
270
|
+
<div className="key-mask-icon" />
|
|
271
|
+
</div>
|
|
272
|
+
</Interactable>
|
|
273
|
+
</div>
|
|
274
|
+
)
|
|
275
|
+
: (
|
|
276
|
+
<div className="key-row">
|
|
277
|
+
<div className="key key-wide key-empty"> </div>
|
|
278
|
+
</div>
|
|
279
|
+
)}
|
|
292
280
|
</div>
|
|
293
281
|
<div className="keys-container key-layout">
|
|
294
282
|
{layout}
|
|
@@ -345,19 +333,17 @@ export class Keyboard extends KeyboardBase<Layouts, Props> {
|
|
|
345
333
|
<div className="key-row">
|
|
346
334
|
<div className="key key-wide key-empty"> </div>
|
|
347
335
|
</div>
|
|
348
|
-
<div className="rounded-border-container">
|
|
349
|
-
<
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
>
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
</Interactable>
|
|
360
|
-
</div>
|
|
336
|
+
<div className="key-row rounded-border-container">
|
|
337
|
+
<Interactable
|
|
338
|
+
ref={this.keyRefs.continue}
|
|
339
|
+
className="key key-wide key-continue"
|
|
340
|
+
onPress={() => this.onDone()}
|
|
341
|
+
dir="auto"
|
|
342
|
+
>
|
|
343
|
+
<div className="key-background">
|
|
344
|
+
{texts.continue}
|
|
345
|
+
</div>
|
|
346
|
+
</Interactable>
|
|
361
347
|
</div>
|
|
362
348
|
</div>
|
|
363
349
|
</div>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<svg width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<defs>
|
|
3
|
+
<clipPath id="kio1mowqva">
|
|
4
|
+
<path d="M1920 0v1080H0V0h1920z"/>
|
|
5
|
+
</clipPath>
|
|
6
|
+
<clipPath id="b7gbx9lplb">
|
|
7
|
+
<path d="M168 0a8 8 0 0 1 8 8v58a8 8 0 0 1-8 8H8a8 8 0 0 1-8-8V8a8 8 0 0 1 8-8h160z"/>
|
|
8
|
+
</clipPath>
|
|
9
|
+
<clipPath id="jjict19bjc">
|
|
10
|
+
<path d="M16.65 0c9.217 0 16.683 7.467 16.683 16.667 0 9.2-7.466 16.666-16.683 16.666C7.45 33.333 0 25.867 0 16.667S7.45 0 16.65 0zm3.2 23.333h-6.367c.717 2.384 1.8 4.6 3.184 6.6 1.383-2 2.466-4.216 3.183-6.6zm-9.8 0H5.133a13.311 13.311 0 0 0 7.217 5.934c-1-1.85-1.767-3.85-2.3-5.934zm18.15 0h-4.917a26.082 26.082 0 0 1-2.3 5.934 13.383 13.383 0 0 0 7.217-5.934zm-18.8-10H3.767a13.736 13.736 0 0 0-.434 3.334c0 1.15.167 2.266.434 3.333H9.4c-.133-1.1-.233-2.2-.233-3.333 0-1.134.1-2.234.233-3.334zm11.167 0h-7.8c-.15 1.084-.267 2.2-.267 3.334 0 1.133.117 2.233.267 3.333h7.8c.15-1.1.266-2.2.266-3.333 0-1.134-.116-2.25-.266-3.334zm9 0h-5.634c.134 1.1.234 2.2.234 3.334 0 1.133-.1 2.233-.234 3.333h5.634c.266-1.067.433-2.183.433-3.333 0-1.15-.167-2.267-.433-3.334zm-8.584-9.266c1 1.85 1.767 3.85 2.3 5.933H28.2a13.383 13.383 0 0 0-7.217-5.933zm-8.633 0A13.311 13.311 0 0 0 5.133 10h4.917a26.082 26.082 0 0 1 2.3-5.933zm4.317-.667a23.478 23.478 0 0 0-3.184 6.6h6.367c-.717-2.383-1.8-4.6-3.183-6.6z"/>
|
|
11
|
+
</clipPath>
|
|
12
|
+
</defs>
|
|
13
|
+
<g clip-path="url(#kio1mowqva)" transform="translate(-388 -969)">
|
|
14
|
+
<g clip-path="url(#b7gbx9lplb)" transform="translate(320 952)">
|
|
15
|
+
<g clip-path="url(#jjict19bjc)" transform="translate(71.333 20.333)">
|
|
16
|
+
<path fill="#FFF" d="M0 0h33.333v33.333H0V0z"/>
|
|
17
|
+
</g>
|
|
18
|
+
</g>
|
|
19
|
+
</g>
|
|
20
|
+
</svg>
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { Keyboard } from './Keyboard';
|
|
2
|
-
export type { Props } from './
|
|
2
|
+
export type { Props } from './types';
|
|
@@ -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 arabic = {
|
|
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 burmese = {
|
|
23
|
+
className: 'wide',
|
|
24
|
+
keyText: 'ကခဂ',
|
|
25
|
+
layout: keyboardLayout,
|
|
26
|
+
makeFocusStrings,
|
|
27
|
+
};
|
|
@@ -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
|
+
'shift', 'shift', 'space', 'space', 'space', 'space', 'space', 'space', 'space', 'domain', 'domain', 'continue', 'continue'],
|
|
21
|
+
];
|
|
22
|
+
|
|
23
|
+
export const dari = {
|
|
24
|
+
className: 'wide',
|
|
25
|
+
keyText: 'ابپ',
|
|
26
|
+
layout: keyboardLayout,
|
|
27
|
+
makeFocusStrings,
|
|
28
|
+
};
|