@nectary/components 2.9.0 → 2.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/accordion/index.d.ts +11 -0
- package/accordion/index.js +86 -0
- package/accordion/types.d.ts +21 -0
- package/accordion/types.js +1 -0
- package/accordion-item/index.d.ts +14 -0
- package/accordion-item/index.js +95 -0
- package/accordion-item/types.d.ts +36 -0
- package/accordion-item/types.js +1 -0
- package/accordion-item/utils.d.ts +2 -0
- package/accordion-item/utils.js +1 -0
- package/action-menu/index.d.ts +11 -0
- package/action-menu/index.js +195 -0
- package/action-menu/types.d.ts +13 -0
- package/action-menu/types.js +1 -0
- package/action-menu-option/index.d.ts +12 -0
- package/action-menu-option/index.js +82 -0
- package/action-menu-option/types.d.ts +23 -0
- package/action-menu-option/types.js +1 -0
- package/action-menu-option/utils.d.ts +2 -0
- package/action-menu-option/utils.js +3 -0
- package/alert/index.d.ts +14 -0
- package/alert/index.js +48 -0
- package/alert/types.d.ts +18 -0
- package/alert/types.js +1 -0
- package/alert/utils.d.ts +2 -0
- package/alert/utils.js +1 -0
- package/avatar/index.d.ts +11 -0
- package/avatar/index.js +94 -0
- package/avatar/types.d.ts +37 -0
- package/avatar/types.js +1 -0
- package/avatar/utils.d.ts +4 -0
- package/avatar/utils.js +7 -0
- package/badge/index.d.ts +11 -0
- package/badge/index.js +114 -0
- package/badge/types.d.ts +34 -0
- package/badge/types.js +1 -0
- package/badge/utils.d.ts +2 -0
- package/badge/utils.js +1 -0
- package/button/index.d.ts +11 -0
- package/button/index.js +182 -0
- package/button/types.d.ts +53 -0
- package/button/types.js +1 -0
- package/button/utils.d.ts +2 -0
- package/button/utils.js +1 -0
- package/card/index.d.ts +13 -0
- package/card/index.js +133 -0
- package/card/types.d.ts +28 -0
- package/card/types.js +1 -0
- package/card-container/index.d.ts +11 -0
- package/card-container/index.js +11 -0
- package/card-container/types.d.ts +3 -0
- package/card-container/types.js +1 -0
- package/chat/index.d.ts +11 -0
- package/chat/index.js +11 -0
- package/chat/types.d.ts +3 -0
- package/chat/types.js +1 -0
- package/chat-block/index.d.ts +11 -0
- package/chat-block/index.js +86 -0
- package/chat-block/types.d.ts +30 -0
- package/chat-block/types.js +1 -0
- package/chat-bubble/index.d.ts +11 -0
- package/chat-bubble/index.js +41 -0
- package/chat-bubble/types.d.ts +20 -0
- package/chat-bubble/types.js +1 -0
- package/chat-bubble/utils.d.ts +3 -0
- package/chat-bubble/utils.js +2 -0
- package/checkbox/index.d.ts +11 -0
- package/checkbox/index.js +126 -0
- package/checkbox/types.d.ts +49 -0
- package/checkbox/types.js +1 -0
- package/chip/index.d.ts +13 -0
- package/chip/index.js +144 -0
- package/chip/types.d.ts +37 -0
- package/chip/types.js +1 -0
- package/chip/utils.d.ts +2 -0
- package/chip/utils.js +6 -0
- package/code-tag/index.d.ts +11 -0
- package/code-tag/index.js +31 -0
- package/code-tag/types.d.ts +11 -0
- package/code-tag/types.js +1 -0
- package/color-menu/index.d.ts +11 -0
- package/color-menu/index.js +308 -0
- package/color-menu/types.d.ts +32 -0
- package/color-menu/types.js +1 -0
- package/color-menu/utils.d.ts +1 -0
- package/color-menu/utils.js +11 -0
- package/color-menu-option/index.d.ts +13 -0
- package/color-menu-option/index.js +48 -0
- package/color-menu-option/types.d.ts +11 -0
- package/color-menu-option/types.js +1 -0
- package/color-menu-option/utils.d.ts +1 -0
- package/color-menu-option/utils.js +11 -0
- package/color-swatch/index.d.ts +12 -0
- package/color-swatch/index.js +54 -0
- package/color-swatch/types.d.ts +11 -0
- package/color-swatch/types.js +1 -0
- package/color-swatch/utils.d.ts +2 -0
- package/color-swatch/utils.js +6 -0
- package/date-picker/index.d.ts +14 -0
- package/date-picker/index.js +381 -0
- package/date-picker/types.d.ts +70 -0
- package/date-picker/types.js +1 -0
- package/date-picker/utils.d.ts +28 -0
- package/date-picker/utils.js +142 -0
- package/dialog/index.d.ts +15 -0
- package/dialog/index.js +144 -0
- package/dialog/types.d.ts +28 -0
- package/dialog/types.js +1 -0
- package/dialog/utils.d.ts +2 -0
- package/dialog/utils.js +18 -0
- package/emoji/index.d.ts +11 -0
- package/emoji/index.js +46 -0
- package/emoji/types.d.ts +11 -0
- package/emoji/types.js +1 -0
- package/emoji/utils.d.ts +3 -0
- package/emoji/utils.js +47 -0
- package/emoji-picker/index.d.ts +22 -0
- package/emoji-picker/index.js +308 -0
- package/emoji-picker/types.d.ts +26 -0
- package/emoji-picker/types.js +1 -0
- package/field/index.d.ts +11 -0
- package/field/index.js +120 -0
- package/field/types.d.ts +35 -0
- package/field/types.js +1 -0
- package/file-drop/index.d.ts +13 -0
- package/file-drop/index.js +205 -0
- package/file-drop/types.d.ts +50 -0
- package/file-drop/types.js +1 -0
- package/file-drop/utils.d.ts +2 -0
- package/file-drop/utils.js +31 -0
- package/file-picker/index.d.ts +11 -0
- package/file-picker/index.js +103 -0
- package/file-picker/types.d.ts +32 -0
- package/file-picker/types.js +1 -0
- package/file-picker/utils.d.ts +1 -0
- package/file-picker/utils.js +8 -0
- package/file-status/index.d.ts +14 -0
- package/file-status/index.js +61 -0
- package/file-status/types.d.ts +18 -0
- package/file-status/types.js +1 -0
- package/file-status/utils.d.ts +2 -0
- package/file-status/utils.js +1 -0
- package/flag/index.d.ts +11 -0
- package/flag/index.js +46 -0
- package/flag/types.d.ts +11 -0
- package/flag/types.js +1 -0
- package/flag/utils.d.ts +1 -0
- package/flag/utils.js +17 -0
- package/grid/index.d.ts +11 -0
- package/grid/index.js +11 -0
- package/grid/types.d.ts +3 -0
- package/grid/types.js +1 -0
- package/grid-item/index.d.ts +11 -0
- package/grid-item/index.js +35 -0
- package/grid-item/types.d.ts +17 -0
- package/grid-item/types.js +1 -0
- package/help-tooltip/index.d.ts +13 -0
- package/help-tooltip/index.js +74 -0
- package/help-tooltip/types.d.ts +3 -0
- package/help-tooltip/types.js +1 -0
- package/horizontal-stepper/index.d.ts +11 -0
- package/horizontal-stepper/index.js +61 -0
- package/horizontal-stepper/types.d.ts +13 -0
- package/horizontal-stepper/types.js +1 -0
- package/horizontal-stepper-item/index.d.ts +14 -0
- package/horizontal-stepper-item/index.js +61 -0
- package/horizontal-stepper-item/types.d.ts +24 -0
- package/horizontal-stepper-item/types.js +1 -0
- package/horizontal-stepper-item/utils.d.ts +2 -0
- package/horizontal-stepper-item/utils.js +1 -0
- package/icon/index.d.ts +11 -0
- package/icon/index.js +32 -0
- package/icon/types.d.ts +11 -0
- package/icon/types.js +1 -0
- package/icon-button/index.d.ts +12 -0
- package/icon-button/index.js +175 -0
- package/icon-button/types.d.ts +44 -0
- package/icon-button/types.js +1 -0
- package/icon-button/utils.d.ts +2 -0
- package/icon-button/utils.js +1 -0
- package/inline-alert/index.d.ts +15 -0
- package/inline-alert/index.js +83 -0
- package/inline-alert/types.d.ts +15 -0
- package/inline-alert/types.js +1 -0
- package/inline-alert/utils.d.ts +2 -0
- package/inline-alert/utils.js +1 -0
- package/input/index.d.ts +11 -0
- package/input/index.js +642 -0
- package/input/types.d.ts +86 -0
- package/input/types.js +1 -0
- package/input/utils.d.ts +26 -0
- package/input/utils.js +302 -0
- package/link/index.d.ts +12 -0
- package/link/index.js +150 -0
- package/link/types.d.ts +59 -0
- package/link/types.js +1 -0
- package/list/index.d.ts +11 -0
- package/list/index.js +14 -0
- package/list/types.d.ts +3 -0
- package/list/types.js +1 -0
- package/list-item/index.d.ts +11 -0
- package/list-item/index.js +14 -0
- package/list-item/types.d.ts +3 -0
- package/list-item/types.js +1 -0
- package/package.json +1 -1
- package/pagination/index.d.ts +12 -0
- package/pagination/index.js +147 -0
- package/pagination/types.d.ts +16 -0
- package/pagination/types.js +1 -0
- package/pop/index.d.ts +11 -0
- package/pop/index.js +425 -0
- package/pop/types.d.ts +35 -0
- package/pop/types.js +1 -0
- package/pop/utils.d.ts +4 -0
- package/pop/utils.js +16 -0
- package/popover/index.d.ts +12 -0
- package/popover/index.js +146 -0
- package/popover/types.d.ts +38 -0
- package/popover/types.js +1 -0
- package/popover/utils.d.ts +4 -0
- package/popover/utils.js +10 -0
- package/progress/index.d.ts +12 -0
- package/progress/index.js +58 -0
- package/progress/types.d.ts +12 -0
- package/progress/types.js +1 -0
- package/progress-stepper/index.d.ts +11 -0
- package/progress-stepper/index.js +206 -0
- package/progress-stepper/types.d.ts +22 -0
- package/progress-stepper/types.js +1 -0
- package/progress-stepper-item/index.d.ts +12 -0
- package/progress-stepper-item/index.js +82 -0
- package/progress-stepper-item/types.d.ts +23 -0
- package/progress-stepper-item/types.js +1 -0
- package/progress-stepper-item/utils.d.ts +11 -0
- package/progress-stepper-item/utils.js +13 -0
- package/radio/index.d.ts +11 -0
- package/radio/index.js +154 -0
- package/radio/types.d.ts +14 -0
- package/radio/types.js +1 -0
- package/radio-option/index.d.ts +11 -0
- package/radio-option/index.js +79 -0
- package/radio-option/types.d.ts +18 -0
- package/radio-option/types.js +1 -0
- package/rich-text/index.d.ts +14 -0
- package/rich-text/index.js +75 -0
- package/rich-text/types.d.ts +12 -0
- package/rich-text/types.js +1 -0
- package/rich-text/utils.d.ts +7 -0
- package/rich-text/utils.js +107 -0
- package/rich-textarea/index.d.ts +11 -0
- package/rich-textarea/index.js +464 -0
- package/rich-textarea/types.d.ts +48 -0
- package/rich-textarea/types.js +1 -0
- package/rich-textarea/utils.d.ts +39 -0
- package/rich-textarea/utils.js +1730 -0
- package/segment/index.d.ts +12 -0
- package/segment/index.js +109 -0
- package/segment/types.d.ts +16 -0
- package/segment/types.js +1 -0
- package/segment/utils.d.ts +3 -0
- package/segment/utils.js +16 -0
- package/segment-collapse/index.d.ts +13 -0
- package/segment-collapse/index.js +60 -0
- package/segment-collapse/types.d.ts +11 -0
- package/segment-collapse/types.js +1 -0
- package/segmented-control/index.d.ts +11 -0
- package/segmented-control/index.js +85 -0
- package/segmented-control/types.d.ts +11 -0
- package/segmented-control/types.js +1 -0
- package/segmented-control-option/index.d.ts +11 -0
- package/segmented-control-option/index.js +95 -0
- package/segmented-control-option/types.d.ts +19 -0
- package/segmented-control-option/types.js +1 -0
- package/segmented-icon-control/index.d.ts +11 -0
- package/segmented-icon-control/index.js +101 -0
- package/segmented-icon-control/types.d.ts +14 -0
- package/segmented-icon-control/types.js +1 -0
- package/segmented-icon-control-option/index.d.ts +11 -0
- package/segmented-icon-control-option/index.js +82 -0
- package/segmented-icon-control-option/types.d.ts +16 -0
- package/segmented-icon-control-option/types.js +1 -0
- package/select-button/index.d.ts +13 -0
- package/select-button/index.js +202 -0
- package/select-button/types.d.ts +50 -0
- package/select-button/types.js +1 -0
- package/select-menu/index.d.ts +15 -0
- package/select-menu/index.js +339 -0
- package/select-menu/types.d.ts +41 -0
- package/select-menu/types.js +1 -0
- package/select-menu-option/index.d.ts +28 -0
- package/select-menu-option/index.js +65 -0
- package/select-menu-option/types.d.ts +26 -0
- package/select-menu-option/types.js +1 -0
- package/skeleton/index.d.ts +11 -0
- package/skeleton/index.js +108 -0
- package/skeleton/types.d.ts +9 -0
- package/skeleton/types.js +1 -0
- package/skeleton-item/index.d.ts +11 -0
- package/skeleton-item/index.js +11 -0
- package/skeleton-item/types.d.ts +13 -0
- package/skeleton-item/types.js +1 -0
- package/spinner/index.d.ts +11 -0
- package/spinner/index.js +58 -0
- package/spinner/types.d.ts +12 -0
- package/spinner/types.js +1 -0
- package/standalone.d.ts +85 -0
- package/standalone.js +87 -0
- package/stop-events/index.d.ts +1 -0
- package/stop-events/index.js +27 -0
- package/table/index.d.ts +11 -0
- package/table/index.js +14 -0
- package/table/types.d.ts +3 -0
- package/table/types.js +1 -0
- package/table-body/index.d.ts +11 -0
- package/table-body/index.js +14 -0
- package/table-body/types.d.ts +3 -0
- package/table-body/types.js +1 -0
- package/table-cell/index.d.ts +11 -0
- package/table-cell/index.js +21 -0
- package/table-cell/types.d.ts +9 -0
- package/table-cell/types.js +1 -0
- package/table-cell/utils.d.ts +2 -0
- package/table-cell/utils.js +1 -0
- package/table-head/index.d.ts +11 -0
- package/table-head/index.js +14 -0
- package/table-head/types.d.ts +3 -0
- package/table-head/types.js +1 -0
- package/table-head-cell/index.d.ts +12 -0
- package/table-head-cell/index.js +57 -0
- package/table-head-cell/types.d.ts +15 -0
- package/table-head-cell/types.js +1 -0
- package/table-row/index.d.ts +11 -0
- package/table-row/index.js +42 -0
- package/table-row/types.d.ts +11 -0
- package/table-row/types.js +1 -0
- package/tabs/index.d.ts +11 -0
- package/tabs/index.js +80 -0
- package/tabs/types.d.ts +18 -0
- package/tabs/types.js +1 -0
- package/tabs-icon-option/index.d.ts +11 -0
- package/tabs-icon-option/index.js +79 -0
- package/tabs-icon-option/types.d.ts +19 -0
- package/tabs-icon-option/types.js +1 -0
- package/tabs-option/index.d.ts +12 -0
- package/tabs-option/index.js +86 -0
- package/tabs-option/types.d.ts +25 -0
- package/tabs-option/types.js +1 -0
- package/tag/index.d.ts +12 -0
- package/tag/index.js +84 -0
- package/tag/types.d.ts +23 -0
- package/tag/types.js +1 -0
- package/tag/utils.d.ts +2 -0
- package/tag/utils.js +6 -0
- package/text/index.d.ts +11 -0
- package/text/index.js +64 -0
- package/text/types.d.ts +30 -0
- package/text/types.js +1 -0
- package/text/utils.d.ts +2 -0
- package/text/utils.js +1 -0
- package/textarea/index.d.ts +11 -0
- package/textarea/index.js +322 -0
- package/textarea/types.d.ts +60 -0
- package/textarea/types.js +1 -0
- package/tile-control/index.d.ts +11 -0
- package/tile-control/index.js +110 -0
- package/tile-control/types.d.ts +37 -0
- package/tile-control/types.js +1 -0
- package/tile-control-option/index.d.ts +11 -0
- package/tile-control-option/index.js +98 -0
- package/tile-control-option/types.d.ts +37 -0
- package/tile-control-option/types.js +1 -0
- package/time-picker/index.d.ts +15 -0
- package/time-picker/index.js +337 -0
- package/time-picker/types.d.ts +34 -0
- package/time-picker/types.js +1 -0
- package/time-picker/utils.d.ts +11 -0
- package/time-picker/utils.js +75 -0
- package/title/index.d.ts +11 -0
- package/title/index.js +60 -0
- package/title/types.d.ts +31 -0
- package/title/types.js +1 -0
- package/title/utils.d.ts +3 -0
- package/title/utils.js +17 -0
- package/toast/index.d.ts +13 -0
- package/toast/index.js +86 -0
- package/toast/types.d.ts +28 -0
- package/toast/types.js +1 -0
- package/toast/utils.d.ts +2 -0
- package/toast/utils.js +1 -0
- package/toast-manager/index.d.ts +13 -0
- package/toast-manager/index.js +170 -0
- package/toast-manager/types.d.ts +13 -0
- package/toast-manager/types.js +1 -0
- package/toast-manager/utils.d.ts +2 -0
- package/toast-manager/utils.js +1 -0
- package/toggle/index.d.ts +11 -0
- package/toggle/index.js +141 -0
- package/toggle/types.d.ts +23 -0
- package/toggle/types.js +1 -0
- package/tooltip/index.d.ts +13 -0
- package/tooltip/index.js +275 -0
- package/tooltip/tooltip-state.d.ts +19 -0
- package/tooltip/tooltip-state.js +126 -0
- package/tooltip/types.d.ts +42 -0
- package/tooltip/types.js +1 -0
- package/tooltip/utils.d.ts +6 -0
- package/tooltip/utils.js +18 -0
- package/utils/context.d.ts +20 -0
- package/utils/context.js +84 -0
- package/utils/countries.d.ts +6 -0
- package/utils/countries.js +2 -0
- package/utils/csv.d.ts +5 -0
- package/utils/csv.js +22 -0
- package/utils/debounce.d.ts +8 -0
- package/utils/debounce.js +22 -0
- package/utils/dom.d.ts +34 -0
- package/utils/dom.js +154 -0
- package/utils/element.d.ts +16 -0
- package/utils/element.js +48 -0
- package/utils/event-target.d.ts +4 -0
- package/utils/event-target.js +26 -0
- package/utils/get-react-event-handler.d.ts +1 -0
- package/utils/get-react-event-handler.js +8 -0
- package/utils/index.d.ts +12 -0
- package/utils/index.js +12 -0
- package/utils/markdown.d.ts +19 -0
- package/utils/markdown.js +143 -0
- package/utils/rect.d.ts +4 -0
- package/utils/rect.js +28 -0
- package/utils/size.d.ts +5 -0
- package/utils/size.js +3 -0
- package/utils/slot.d.ts +4 -0
- package/utils/slot.js +38 -0
- package/utils/throttle.d.ts +4 -0
- package/utils/throttle.js +20 -0
- package/utils/uid.d.ts +1 -0
- package/utils/uid.js +13 -0
- package/vertical-stepper/index.d.ts +11 -0
- package/vertical-stepper/index.js +57 -0
- package/vertical-stepper/types.d.ts +13 -0
- package/vertical-stepper/types.js +1 -0
- package/vertical-stepper-item/index.d.ts +14 -0
- package/vertical-stepper-item/index.js +61 -0
- package/vertical-stepper-item/types.d.ts +24 -0
- package/vertical-stepper-item/types.js +1 -0
- package/vertical-stepper-item/utils.d.ts +2 -0
- package/vertical-stepper-item/utils.js +1 -0
package/input/types.d.ts
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import type { TSinchElementReact } from '../types';
|
|
2
|
+
import type { TSinchSize } from '../utils/size';
|
|
3
|
+
export type TSinchInputType = 'text' | 'password' | 'number';
|
|
4
|
+
export type TSinchInputClipboardEvent = CustomEvent<{
|
|
5
|
+
value: string;
|
|
6
|
+
replaceWith: (value: string) => void;
|
|
7
|
+
}>;
|
|
8
|
+
export type TSinchInputElement = HTMLElement & {
|
|
9
|
+
/** Text field type, `text` by default */
|
|
10
|
+
type: TSinchInputType;
|
|
11
|
+
/** Value */
|
|
12
|
+
value: string;
|
|
13
|
+
/** Mask */
|
|
14
|
+
mask: string | null;
|
|
15
|
+
/** Text that appears in the text field when it has no value set */
|
|
16
|
+
placeholder: string | null;
|
|
17
|
+
/** The HTML autocomplete attribute */
|
|
18
|
+
autocomplete: string;
|
|
19
|
+
/** Invalid state */
|
|
20
|
+
invalid: boolean;
|
|
21
|
+
/** Disabled */
|
|
22
|
+
disabled: boolean;
|
|
23
|
+
/** Whether the input should be autocofused */
|
|
24
|
+
autofocus: boolean;
|
|
25
|
+
/** Size, `m` by default */
|
|
26
|
+
size: TSinchSize;
|
|
27
|
+
selectionStart: number | null;
|
|
28
|
+
selectionEnd: number | null;
|
|
29
|
+
selectionDirection: 'forward' | 'backward' | 'none' | null;
|
|
30
|
+
setSelectionRange(selectionStart: number, selectionEnd: number): void;
|
|
31
|
+
/** Change value event */
|
|
32
|
+
addEventListener(type: '-change', listener: (e: CustomEvent<string>) => void): void;
|
|
33
|
+
/** Focus event */
|
|
34
|
+
addEventListener(type: '-focus', listener: (e: CustomEvent<void>) => void): void;
|
|
35
|
+
/** Blur event */
|
|
36
|
+
addEventListener(type: '-blur', listener: (e: CustomEvent<void>) => void): void;
|
|
37
|
+
/** Text field type, `text` by default */
|
|
38
|
+
setAttribute(name: 'type', value: TSinchInputType): void;
|
|
39
|
+
/** Value */
|
|
40
|
+
setAttribute(name: 'value', value: string): void;
|
|
41
|
+
/** Mask */
|
|
42
|
+
setAttribute(name: 'mask', value: string): void;
|
|
43
|
+
/** Text that appears in the text field when it has no value set */
|
|
44
|
+
setAttribute(name: 'placeholder', value: string): void;
|
|
45
|
+
/** The HTML autocomplete attribute */
|
|
46
|
+
setAttribute(name: 'autocomplete', value: string): void;
|
|
47
|
+
/** Invalid state */
|
|
48
|
+
setAttribute(name: 'invalid', value: ''): void;
|
|
49
|
+
/** Disabled */
|
|
50
|
+
setAttribute(name: 'disabled', value: ''): void;
|
|
51
|
+
/** Autofocus */
|
|
52
|
+
setAttribute(name: 'autofocus', value: ''): void;
|
|
53
|
+
/** Size, `m` by default */
|
|
54
|
+
setAttribute(name: 'size', value: TSinchSize): void;
|
|
55
|
+
};
|
|
56
|
+
export type TSinchInputReact = TSinchElementReact<TSinchInputElement> & {
|
|
57
|
+
/** Controlled value, doesn't change on its own and requres an onChange-value state loop */
|
|
58
|
+
value: string;
|
|
59
|
+
/** Mask */
|
|
60
|
+
mask?: string;
|
|
61
|
+
/** Label that is used for a11y – might be different from `label` */
|
|
62
|
+
'aria-label': string;
|
|
63
|
+
/** Text field type, `text` by default */
|
|
64
|
+
type?: TSinchInputType;
|
|
65
|
+
/** The HTML autocomplete attribute */
|
|
66
|
+
autocomplete?: string;
|
|
67
|
+
/** Text that appears in the text field when it has no value set */
|
|
68
|
+
placeholder?: string;
|
|
69
|
+
/** Invalid state */
|
|
70
|
+
invalid?: boolean;
|
|
71
|
+
/** Disabled */
|
|
72
|
+
disabled?: boolean;
|
|
73
|
+
/** Autofocus */
|
|
74
|
+
autofocus?: boolean;
|
|
75
|
+
/** Size, `m` by default */
|
|
76
|
+
size?: TSinchSize;
|
|
77
|
+
/** Change value handler */
|
|
78
|
+
'on-change'?: (e: CustomEvent<string>) => void;
|
|
79
|
+
/** Focus handler */
|
|
80
|
+
'on-focus'?: (e: CustomEvent<void>) => void;
|
|
81
|
+
/** Blur handler */
|
|
82
|
+
'on-blur'?: (e: CustomEvent<void>) => void;
|
|
83
|
+
'on-cut'?: (e: TSinchInputClipboardEvent) => void;
|
|
84
|
+
'on-copy'?: (e: TSinchInputClipboardEvent) => void;
|
|
85
|
+
'on-paste'?: (e: TSinchInputClipboardEvent) => void;
|
|
86
|
+
};
|
package/input/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/input/utils.d.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { TSinchInputType } from './types';
|
|
2
|
+
type TSInchInputMaskSymbolModeDigit = 0;
|
|
3
|
+
type TSInchInputMaskSymbolModeLetter = 1;
|
|
4
|
+
type TSInchInputMaskSymbolModeExact = 2;
|
|
5
|
+
type TSinchInputMaskSymbol = {
|
|
6
|
+
value: string;
|
|
7
|
+
mode: TSInchInputMaskSymbolModeDigit | TSInchInputMaskSymbolModeLetter | TSInchInputMaskSymbolModeExact;
|
|
8
|
+
placeholder: string;
|
|
9
|
+
};
|
|
10
|
+
type TSinchMaskInputResult = {
|
|
11
|
+
value: string;
|
|
12
|
+
placeholder: string;
|
|
13
|
+
cursorPos: number;
|
|
14
|
+
mergedValue: string;
|
|
15
|
+
};
|
|
16
|
+
export declare const inputTypes: readonly TSinchInputType[];
|
|
17
|
+
export declare const getMaskSymbols: (maskValue: string) => TSinchInputMaskSymbol[];
|
|
18
|
+
export declare const deleteContentBackward: (inputValue: string, maskSymbols: readonly TSinchInputMaskSymbol[], selectionStart: number, selectionEnd: number) => TSinchMaskInputResult | null;
|
|
19
|
+
export declare const deleteContentForward: (inputValue: string, maskSymbols: readonly TSinchInputMaskSymbol[], selectionStart: number, selectionEnd: number) => TSinchMaskInputResult | null;
|
|
20
|
+
export declare const beginMaskedComposition: (inputValue: string, maskSymbols: readonly TSinchInputMaskSymbol[], selectionStart: number) => Pick<TSinchMaskInputResult, 'value' | 'placeholder'>;
|
|
21
|
+
export declare const endMaskedComposition: (inputValue: string, data: string, maskSymbols: readonly TSinchInputMaskSymbol[], selectionStart: number, wasValueInserted: boolean) => TSinchMaskInputResult | null;
|
|
22
|
+
export declare const insertText: (inputValue: string, data: string, maskSymbols: readonly TSinchInputMaskSymbol[], selectionStart: number, selectionEnd: number) => TSinchMaskInputResult | null;
|
|
23
|
+
export declare const insertFromPaste: (inputValue: string, data: string, maskSymbols: readonly TSinchInputMaskSymbol[], selectionStart: number, selectionEnd: number) => TSinchMaskInputResult | null;
|
|
24
|
+
export declare const splitValueAndMask: (inputValue: string, maskSymbols: readonly TSinchInputMaskSymbol[]) => TSinchMaskInputResult;
|
|
25
|
+
export declare const getMergedValueSliced: (inputValue: string, maskSymbols: readonly TSinchInputMaskSymbol[], selectionStart: number, selectionEnd: number) => string;
|
|
26
|
+
export {};
|
package/input/utils.js
ADDED
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
export const inputTypes = ['text', 'password', 'number'];
|
|
2
|
+
const MASK_SYMBOL_LETTER = 'A';
|
|
3
|
+
const MASK_SYMBOL_DIGIT = '0';
|
|
4
|
+
const EMPTY_CHAR = ' ';
|
|
5
|
+
const MASK_MODE_DIGIT = 0;
|
|
6
|
+
const MASK_MODE_LETTER = 1;
|
|
7
|
+
const MASK_MODE_EXACT = 2;
|
|
8
|
+
const MASK_PLACEHOLDER_DELIMITER = '@@';
|
|
9
|
+
const MASK_PLACEHOLDER = '_';
|
|
10
|
+
const testMaskedValue = (maskSymbol, inputChar) => {
|
|
11
|
+
switch (maskSymbol.mode) {
|
|
12
|
+
case MASK_MODE_DIGIT:
|
|
13
|
+
{
|
|
14
|
+
return /\d/.test(inputChar);
|
|
15
|
+
}
|
|
16
|
+
case MASK_MODE_LETTER:
|
|
17
|
+
{
|
|
18
|
+
return /\p{Letter}/u.test(inputChar);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return false;
|
|
22
|
+
};
|
|
23
|
+
const isExactMode = maskSymbol => maskSymbol.mode === MASK_MODE_EXACT;
|
|
24
|
+
const isEmptyChar = char => char === EMPTY_CHAR;
|
|
25
|
+
export const getMaskSymbols = maskValue => {
|
|
26
|
+
const res = [];
|
|
27
|
+
const [mask, placeholder] = maskValue.split(MASK_PLACEHOLDER_DELIMITER);
|
|
28
|
+
const maskSymbols = [...mask];
|
|
29
|
+
const placeholderChars = placeholder != null ? [...placeholder] : [];
|
|
30
|
+
for (let maskIndex = 0, placeholderIndex = 0; maskIndex < maskSymbols.length; maskIndex++, placeholderIndex++) {
|
|
31
|
+
if (maskSymbols[maskIndex] === '\\') {
|
|
32
|
+
maskIndex += 1;
|
|
33
|
+
res.push({
|
|
34
|
+
value: maskSymbols[maskIndex],
|
|
35
|
+
mode: MASK_MODE_EXACT,
|
|
36
|
+
placeholder: placeholderChars[placeholderIndex] ?? maskSymbols[maskIndex]
|
|
37
|
+
});
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
if (maskSymbols[maskIndex] === MASK_SYMBOL_LETTER || maskSymbols[maskIndex] === MASK_SYMBOL_DIGIT) {
|
|
41
|
+
res.push({
|
|
42
|
+
value: maskSymbols[maskIndex],
|
|
43
|
+
mode: maskSymbols[maskIndex] === MASK_SYMBOL_LETTER ? MASK_MODE_LETTER : MASK_MODE_DIGIT,
|
|
44
|
+
placeholder: placeholderChars[placeholderIndex] ?? MASK_PLACEHOLDER
|
|
45
|
+
});
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
res.push({
|
|
49
|
+
value: maskSymbols[maskIndex],
|
|
50
|
+
mode: MASK_MODE_EXACT,
|
|
51
|
+
placeholder: placeholderChars[placeholderIndex] ?? maskSymbols[maskIndex]
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
return res;
|
|
55
|
+
};
|
|
56
|
+
const clearCharsSelection = (chars, selectionStart, selectionEnd) => {
|
|
57
|
+
for (let i = selectionStart; i < selectionEnd && i < chars.length; i++) {
|
|
58
|
+
chars[i] = EMPTY_CHAR;
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
const getPlaceholder = (chars, maskSymbols) => {
|
|
62
|
+
const res = new Array(maskSymbols.length);
|
|
63
|
+
for (let i = 0; i < maskSymbols.length; i++) {
|
|
64
|
+
res[i] = i >= chars.length || isEmptyChar(chars[i]) || isExactMode(maskSymbols[i]) ? maskSymbols[i].placeholder : EMPTY_CHAR;
|
|
65
|
+
}
|
|
66
|
+
return res.join('');
|
|
67
|
+
};
|
|
68
|
+
const isMaskedInputComplete = (chars, maskSymbols) => {
|
|
69
|
+
if (chars.length > maskSymbols.length) {
|
|
70
|
+
throw new Error('chars.length > maskSymbols.length');
|
|
71
|
+
}
|
|
72
|
+
if (chars.length < maskSymbols.length) {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
for (let i = 0; i < maskSymbols.length; i++) {
|
|
76
|
+
if (i >= chars.length || !isExactMode(maskSymbols[i]) && !testMaskedValue(maskSymbols[i], chars[i])) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return true;
|
|
81
|
+
};
|
|
82
|
+
const getCharsFromInputValue = (inputValue, maskSymbols) => {
|
|
83
|
+
const chars = new Array(maskSymbols.length);
|
|
84
|
+
let i = 0;
|
|
85
|
+
for (const c of inputValue) {
|
|
86
|
+
chars[i++] = c;
|
|
87
|
+
}
|
|
88
|
+
chars.fill(EMPTY_CHAR, i);
|
|
89
|
+
return chars;
|
|
90
|
+
};
|
|
91
|
+
const isCursorAtTheBeginning = (maskSymbols, selectoinStart) => {
|
|
92
|
+
if (selectoinStart >= maskSymbols.length) {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
for (let i = 0; i < selectoinStart; i++) {
|
|
96
|
+
if (!isExactMode(maskSymbols[i])) {
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return true;
|
|
101
|
+
};
|
|
102
|
+
const getMergedValue = (chars, maskSymbols) => {
|
|
103
|
+
if (!isMaskedInputComplete(chars, maskSymbols)) {
|
|
104
|
+
return '';
|
|
105
|
+
}
|
|
106
|
+
const res = new Array(chars.length);
|
|
107
|
+
for (let i = 0; i < chars.length; i++) {
|
|
108
|
+
res[i] = isExactMode(maskSymbols[i]) ? maskSymbols[i].value : chars[i];
|
|
109
|
+
}
|
|
110
|
+
return res.join('');
|
|
111
|
+
};
|
|
112
|
+
const findLastNonEmptyCharIndex = chars => {
|
|
113
|
+
for (let i = chars.length - 1; i >= 0; i--) {
|
|
114
|
+
if (!isEmptyChar(chars[i])) {
|
|
115
|
+
return i;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return -1;
|
|
119
|
+
};
|
|
120
|
+
const compileResult = (chars, maskSymbols, cursorPos) => {
|
|
121
|
+
if (chars.length > maskSymbols.length) {
|
|
122
|
+
chars.length = maskSymbols.length;
|
|
123
|
+
}
|
|
124
|
+
let lastEmptyPos = findLastNonEmptyCharIndex(chars) + 1;
|
|
125
|
+
while (lastEmptyPos < maskSymbols.length && isExactMode(maskSymbols[lastEmptyPos])) {
|
|
126
|
+
++lastEmptyPos;
|
|
127
|
+
}
|
|
128
|
+
if (lastEmptyPos < chars.length) {
|
|
129
|
+
chars.length = lastEmptyPos;
|
|
130
|
+
}
|
|
131
|
+
return {
|
|
132
|
+
value: chars.join(''),
|
|
133
|
+
placeholder: getPlaceholder(chars, maskSymbols),
|
|
134
|
+
cursorPos: Math.min(cursorPos, chars.length),
|
|
135
|
+
mergedValue: getMergedValue(chars, maskSymbols)
|
|
136
|
+
};
|
|
137
|
+
};
|
|
138
|
+
export const deleteContentBackward = (inputValue, maskSymbols, selectionStart, selectionEnd) => {
|
|
139
|
+
if (selectionEnd === 0) {
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
const chars = getCharsFromInputValue(inputValue, maskSymbols);
|
|
143
|
+
if (selectionStart !== selectionEnd) {
|
|
144
|
+
clearCharsSelection(chars, selectionStart, selectionEnd);
|
|
145
|
+
return compileResult(chars, maskSymbols, selectionStart);
|
|
146
|
+
}
|
|
147
|
+
let cusrsorPos = selectionStart;
|
|
148
|
+
while (cusrsorPos > 0 && isExactMode(maskSymbols[cusrsorPos - 1])) {
|
|
149
|
+
--cusrsorPos;
|
|
150
|
+
}
|
|
151
|
+
if (cusrsorPos > 0) {
|
|
152
|
+
clearCharsSelection(chars, cusrsorPos - 1, cusrsorPos);
|
|
153
|
+
do {
|
|
154
|
+
--cusrsorPos;
|
|
155
|
+
} while (cusrsorPos > 0 && isExactMode(maskSymbols[cusrsorPos - 1]));
|
|
156
|
+
}
|
|
157
|
+
return compileResult(chars, maskSymbols, cusrsorPos);
|
|
158
|
+
};
|
|
159
|
+
export const deleteContentForward = (inputValue, maskSymbols, selectionStart, selectionEnd) => {
|
|
160
|
+
if (selectionStart >= maskSymbols.length) {
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
const chars = getCharsFromInputValue(inputValue, maskSymbols);
|
|
164
|
+
if (selectionStart !== selectionEnd) {
|
|
165
|
+
clearCharsSelection(chars, selectionStart, selectionEnd);
|
|
166
|
+
return compileResult(chars, maskSymbols, selectionEnd);
|
|
167
|
+
}
|
|
168
|
+
let cursorPos = selectionStart;
|
|
169
|
+
while (cursorPos < maskSymbols.length && isExactMode(maskSymbols[cursorPos])) {
|
|
170
|
+
cursorPos++;
|
|
171
|
+
}
|
|
172
|
+
if (cursorPos < chars.length) {
|
|
173
|
+
clearCharsSelection(chars, cursorPos, cursorPos + 1);
|
|
174
|
+
}
|
|
175
|
+
return compileResult(chars, maskSymbols, cursorPos + 1);
|
|
176
|
+
};
|
|
177
|
+
export const beginMaskedComposition = (inputValue, maskSymbols, selectionStart) => {
|
|
178
|
+
const chars = getCharsFromInputValue(inputValue, maskSymbols);
|
|
179
|
+
const placeholder = new Array(chars.length);
|
|
180
|
+
for (let i = 0; i < maskSymbols.length; i++) {
|
|
181
|
+
placeholder[i] = isEmptyChar(chars[i]) || isExactMode(maskSymbols[i]) ? maskSymbols[i].placeholder : EMPTY_CHAR;
|
|
182
|
+
}
|
|
183
|
+
placeholder[selectionStart] = EMPTY_CHAR;
|
|
184
|
+
chars.splice(selectionStart, 1);
|
|
185
|
+
return {
|
|
186
|
+
value: chars.join(''),
|
|
187
|
+
placeholder: placeholder.join('')
|
|
188
|
+
};
|
|
189
|
+
};
|
|
190
|
+
export const endMaskedComposition = (inputValue, data, maskSymbols, selectionStart, wasValueInserted) => {
|
|
191
|
+
let cursorPos = selectionStart;
|
|
192
|
+
const chars = getCharsFromInputValue(inputValue, maskSymbols);
|
|
193
|
+
const dataChars = [...data];
|
|
194
|
+
if (!wasValueInserted) {
|
|
195
|
+
chars.splice(cursorPos, 0, ...dataChars);
|
|
196
|
+
chars.length = maskSymbols.length;
|
|
197
|
+
cursorPos += dataChars.length;
|
|
198
|
+
}
|
|
199
|
+
cursorPos -= dataChars.length;
|
|
200
|
+
clearCharsSelection(chars, cursorPos, cursorPos + dataChars.length);
|
|
201
|
+
while (cursorPos < maskSymbols.length && isExactMode(maskSymbols[cursorPos])) {
|
|
202
|
+
cursorPos++;
|
|
203
|
+
}
|
|
204
|
+
if (cursorPos >= maskSymbols.length) {
|
|
205
|
+
return compileResult(chars, maskSymbols, cursorPos);
|
|
206
|
+
}
|
|
207
|
+
for (let dataPos = 0; dataPos < dataChars.length && cursorPos < maskSymbols.length; ++dataPos, ++cursorPos) {
|
|
208
|
+
const data = dataChars[dataPos];
|
|
209
|
+
if (isEmptyChar(chars[cursorPos]) && testMaskedValue(maskSymbols[cursorPos], data)) {
|
|
210
|
+
chars[cursorPos] = data;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
while (cursorPos < maskSymbols.length && isExactMode(maskSymbols[cursorPos])) {
|
|
214
|
+
cursorPos++;
|
|
215
|
+
}
|
|
216
|
+
return compileResult(chars, maskSymbols, cursorPos);
|
|
217
|
+
};
|
|
218
|
+
export const insertText = (inputValue, data, maskSymbols, selectionStart, selectionEnd) => {
|
|
219
|
+
const chars = getCharsFromInputValue(inputValue, maskSymbols);
|
|
220
|
+
let cursorPos = selectionStart;
|
|
221
|
+
clearCharsSelection(chars, selectionStart, selectionEnd);
|
|
222
|
+
while (cursorPos < maskSymbols.length && isExactMode(maskSymbols[cursorPos])) {
|
|
223
|
+
cursorPos++;
|
|
224
|
+
}
|
|
225
|
+
if (cursorPos >= maskSymbols.length) {
|
|
226
|
+
return compileResult(chars, maskSymbols, cursorPos);
|
|
227
|
+
}
|
|
228
|
+
if (testMaskedValue(maskSymbols[cursorPos], data)) {
|
|
229
|
+
if (cursorPos >= chars.length) {
|
|
230
|
+
chars.length = cursorPos + 1;
|
|
231
|
+
}
|
|
232
|
+
chars[cursorPos] = data;
|
|
233
|
+
do {
|
|
234
|
+
cursorPos++;
|
|
235
|
+
} while (cursorPos < maskSymbols.length && isExactMode(maskSymbols[cursorPos]));
|
|
236
|
+
}
|
|
237
|
+
return compileResult(chars, maskSymbols, cursorPos);
|
|
238
|
+
};
|
|
239
|
+
export const insertFromPaste = (inputValue, data, maskSymbols, selectionStart, selectionEnd) => {
|
|
240
|
+
const chars = getCharsFromInputValue(inputValue, maskSymbols);
|
|
241
|
+
let cursorPos = selectionStart;
|
|
242
|
+
clearCharsSelection(chars, selectionStart, selectionEnd);
|
|
243
|
+
if (isCursorAtTheBeginning(maskSymbols, cursorPos)) {
|
|
244
|
+
cursorPos = 0;
|
|
245
|
+
} else {
|
|
246
|
+
while (cursorPos < maskSymbols.length && isExactMode(maskSymbols[cursorPos])) {
|
|
247
|
+
cursorPos++;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
if (cursorPos >= maskSymbols.length) {
|
|
251
|
+
return compileResult(chars, maskSymbols, cursorPos);
|
|
252
|
+
}
|
|
253
|
+
const dataChars = [...data];
|
|
254
|
+
for (let dataPos = 0; dataPos < dataChars.length && cursorPos < maskSymbols.length;) {
|
|
255
|
+
const data = dataChars[dataPos];
|
|
256
|
+
const maskSymbol = maskSymbols[cursorPos];
|
|
257
|
+
if (isExactMode(maskSymbol)) {
|
|
258
|
+
if (maskSymbol.value === data) {
|
|
259
|
+
++dataPos;
|
|
260
|
+
}
|
|
261
|
+
++cursorPos;
|
|
262
|
+
} else {
|
|
263
|
+
if (testMaskedValue(maskSymbol, data)) {
|
|
264
|
+
chars[cursorPos] = data;
|
|
265
|
+
++cursorPos;
|
|
266
|
+
}
|
|
267
|
+
++dataPos;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
return compileResult(chars, maskSymbols, cursorPos);
|
|
271
|
+
};
|
|
272
|
+
export const splitValueAndMask = (inputValue, maskSymbols) => {
|
|
273
|
+
const chars = getCharsFromInputValue('', maskSymbols);
|
|
274
|
+
const dataChars = getCharsFromInputValue(inputValue, maskSymbols);
|
|
275
|
+
let cursorPos = 0;
|
|
276
|
+
for (let dataPos = 0; dataPos < dataChars.length && cursorPos < maskSymbols.length;) {
|
|
277
|
+
const data = dataChars[dataPos];
|
|
278
|
+
const maskSymbol = maskSymbols[cursorPos];
|
|
279
|
+
if (isExactMode(maskSymbol)) {
|
|
280
|
+
if (maskSymbol.value === data) {
|
|
281
|
+
++dataPos;
|
|
282
|
+
}
|
|
283
|
+
++cursorPos;
|
|
284
|
+
} else {
|
|
285
|
+
if (testMaskedValue(maskSymbol, data)) {
|
|
286
|
+
chars[cursorPos] = data;
|
|
287
|
+
++cursorPos;
|
|
288
|
+
}
|
|
289
|
+
++dataPos;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
return compileResult(chars, maskSymbols, chars.length);
|
|
293
|
+
};
|
|
294
|
+
export const getMergedValueSliced = (inputValue, maskSymbols, selectionStart, selectionEnd) => {
|
|
295
|
+
const chars = getCharsFromInputValue(inputValue, maskSymbols);
|
|
296
|
+
for (let i = selectionStart; i < selectionEnd && i < maskSymbols.length; i++) {
|
|
297
|
+
if (isExactMode(maskSymbols[i])) {
|
|
298
|
+
chars[i] = maskSymbols[i].value;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
return chars.slice(selectionStart, selectionEnd).join('');
|
|
302
|
+
};
|
package/link/index.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import '../icon';
|
|
2
|
+
import type { TSinchLinkElement, TSinchLinkReact } from './types';
|
|
3
|
+
declare global {
|
|
4
|
+
namespace JSX {
|
|
5
|
+
interface IntrinsicElements {
|
|
6
|
+
'sinch-link': TSinchLinkReact;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
interface HTMLElementTagNameMap {
|
|
10
|
+
'sinch-link': TSinchLinkElement;
|
|
11
|
+
}
|
|
12
|
+
}
|
package/link/index.js
ADDED
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import '../icon';
|
|
2
|
+
import { defineCustomElement, getBooleanAttribute, getAttribute, updateBooleanAttribute, updateAttribute, NectaryElement, isAttrTrue, getReactEventHandler, isAttrEqual } from '../utils';
|
|
3
|
+
const templateHTML = '<style>:host{display:inline}a{font:var(--sinch-comp-link-default-font-initial);font-size:inherit;line-height:inherit;text-decoration:var(--sinch-comp-link-default-text-decoration-initial);color:var(--sinch-comp-link-color-default-text-initial);border-radius:.5em;white-space:nowrap;--sinch-global-color-icon:var(--sinch-comp-link-color-default-icon-initial)}a:hover{text-decoration:var(--sinch-comp-link-default-text-decoration-hover);color:var(--sinch-comp-link-color-default-text-hover);--sinch-global-color-icon:var(--sinch-comp-link-color-default-icon-hover)}a:focus-visible{outline:2px solid var(--sinch-comp-link-color-default-outline-focus);outline-offset:2px}:host([standalone]){display:block}:host([standalone]) a{display:block;font:var(--sinch-comp-link-standalone-font-initial);font-size:inherit;line-height:inherit;text-decoration:none;width:fit-content}#external-icon,#standalone-icon{display:none;height:1em}#icon-prefix{display:none;margin-left:-.25em}:host([external]:not([standalone])) #external-icon{display:inline-block;margin-left:.25em;vertical-align:-.2em;--sinch-global-size-icon:1em}:host([standalone][external]) #external-icon{display:inline-block;vertical-align:-.4em;--sinch-global-size-icon:1.5em}:host([standalone]) #icon-prefix{display:inline}:host([standalone]:not([external])) #standalone-icon{display:inline-block;vertical-align:-.4em;--sinch-global-size-icon:1.5em}:host([disabled]) a{color:var(--sinch-comp-link-color-disabled-text-initial);pointer-events:none;cursor:initial;text-decoration:var(--sinch-comp-link-default-text-decoration-disabled);--sinch-global-color-icon:var(--sinch-comp-link-color-disabled-icon-initial)}#content{white-space:var(--sinch-global-text-white-space,normal)}</style><a referrerpolicy="no-referer" aria-hidden="true"><span id="content"></span><span id="icon-prefix"> </span><sinch-icon id="external-icon" name="open_in_new"></sinch-icon><sinch-icon id="standalone-icon" name="arrow_forward"></sinch-icon></a>';
|
|
4
|
+
const template = document.createElement('template');
|
|
5
|
+
template.innerHTML = templateHTML;
|
|
6
|
+
defineCustomElement('sinch-link', class extends NectaryElement {
|
|
7
|
+
#$anchor;
|
|
8
|
+
#$text;
|
|
9
|
+
constructor() {
|
|
10
|
+
super();
|
|
11
|
+
const shadowRoot = this.attachShadow();
|
|
12
|
+
shadowRoot.appendChild(template.content.cloneNode(true));
|
|
13
|
+
this.#$anchor = shadowRoot.querySelector('a');
|
|
14
|
+
this.#$text = shadowRoot.querySelector('#content');
|
|
15
|
+
}
|
|
16
|
+
connectedCallback() {
|
|
17
|
+
this.setAttribute('role', 'link');
|
|
18
|
+
this.#$anchor.addEventListener('click', this.#onAnchorClick);
|
|
19
|
+
this.#$anchor.addEventListener('focus', this.#onAnchorFocus);
|
|
20
|
+
this.#$anchor.addEventListener('blur', this.#onAnchorBlur);
|
|
21
|
+
this.addEventListener('-click', this.#onClickReactHandler);
|
|
22
|
+
this.addEventListener('-focus', this.#onFocusReactHandler);
|
|
23
|
+
this.addEventListener('-blur', this.#onBlurReactHandler);
|
|
24
|
+
}
|
|
25
|
+
disconnectedCallback() {
|
|
26
|
+
this.#$anchor.removeEventListener('click', this.#onAnchorClick);
|
|
27
|
+
this.#$anchor.removeEventListener('focus', this.#onAnchorFocus);
|
|
28
|
+
this.#$anchor.removeEventListener('blur', this.#onAnchorBlur);
|
|
29
|
+
this.removeEventListener('-click', this.#onClickReactHandler);
|
|
30
|
+
this.removeEventListener('-focus', this.#onFocusReactHandler);
|
|
31
|
+
this.removeEventListener('-blur', this.#onBlurReactHandler);
|
|
32
|
+
}
|
|
33
|
+
static get observedAttributes() {
|
|
34
|
+
return ['text', 'href', 'use-history', 'external', 'standalone', 'disabled'];
|
|
35
|
+
}
|
|
36
|
+
attributeChangedCallback(name, oldVal, newVal) {
|
|
37
|
+
if (isAttrEqual(oldVal, newVal)) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
switch (name) {
|
|
41
|
+
case 'text':
|
|
42
|
+
{
|
|
43
|
+
this.#$text.textContent = newVal;
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
case 'href':
|
|
47
|
+
{
|
|
48
|
+
updateAttribute(this.#$anchor, 'href', newVal);
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
case 'use-history':
|
|
52
|
+
{
|
|
53
|
+
const shouldUseHistory = isAttrTrue(newVal);
|
|
54
|
+
if (shouldUseHistory) {
|
|
55
|
+
updateBooleanAttribute(this, 'preventdefault', true);
|
|
56
|
+
}
|
|
57
|
+
updateBooleanAttribute(this, name, shouldUseHistory);
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
case 'standalone':
|
|
61
|
+
case 'disabled':
|
|
62
|
+
{
|
|
63
|
+
updateBooleanAttribute(this, name, isAttrTrue(newVal));
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
case 'external':
|
|
67
|
+
{
|
|
68
|
+
const isExternal = isAttrTrue(newVal);
|
|
69
|
+
updateAttribute(this.#$anchor, 'target', isExternal ? '_blank' : null);
|
|
70
|
+
updateBooleanAttribute(this, name, isExternal);
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
get text() {
|
|
76
|
+
return getAttribute(this, 'text', '');
|
|
77
|
+
}
|
|
78
|
+
set text(value) {
|
|
79
|
+
updateAttribute(this, 'text', value);
|
|
80
|
+
}
|
|
81
|
+
get href() {
|
|
82
|
+
return getAttribute(this, 'href', '');
|
|
83
|
+
}
|
|
84
|
+
set href(value) {
|
|
85
|
+
updateAttribute(this, 'href', value);
|
|
86
|
+
}
|
|
87
|
+
set 'use-history'(value) {
|
|
88
|
+
updateBooleanAttribute(this, 'use-history', value);
|
|
89
|
+
}
|
|
90
|
+
get 'use-history'() {
|
|
91
|
+
return getBooleanAttribute(this, 'use-history');
|
|
92
|
+
}
|
|
93
|
+
set disabled(isDisabled) {
|
|
94
|
+
updateBooleanAttribute(this, 'disabled', isDisabled);
|
|
95
|
+
}
|
|
96
|
+
get disabled() {
|
|
97
|
+
return getBooleanAttribute(this, 'disabled');
|
|
98
|
+
}
|
|
99
|
+
set external(isExternal) {
|
|
100
|
+
updateBooleanAttribute(this, 'external', isExternal);
|
|
101
|
+
}
|
|
102
|
+
get external() {
|
|
103
|
+
return getBooleanAttribute(this, 'external');
|
|
104
|
+
}
|
|
105
|
+
set standalone(isstandalone) {
|
|
106
|
+
updateBooleanAttribute(this, 'standalone', isstandalone);
|
|
107
|
+
}
|
|
108
|
+
get standalone() {
|
|
109
|
+
return getBooleanAttribute(this, 'standalone');
|
|
110
|
+
}
|
|
111
|
+
set preventDefault(isPrevented) {
|
|
112
|
+
updateBooleanAttribute(this, 'preventdefault', isPrevented);
|
|
113
|
+
}
|
|
114
|
+
get preventDefault() {
|
|
115
|
+
return getBooleanAttribute(this, 'preventdefault');
|
|
116
|
+
}
|
|
117
|
+
get focusable() {
|
|
118
|
+
return true;
|
|
119
|
+
}
|
|
120
|
+
focus() {
|
|
121
|
+
this.#$anchor.focus();
|
|
122
|
+
}
|
|
123
|
+
blur() {
|
|
124
|
+
this.#$anchor.blur();
|
|
125
|
+
}
|
|
126
|
+
#onAnchorClick = e => {
|
|
127
|
+
if (this.preventDefault) {
|
|
128
|
+
e.preventDefault();
|
|
129
|
+
if (this['use-history']) {
|
|
130
|
+
history.pushState({}, '', this.href);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
this.dispatchEvent(new CustomEvent('-click'));
|
|
134
|
+
};
|
|
135
|
+
#onAnchorFocus = () => {
|
|
136
|
+
this.dispatchEvent(new CustomEvent('-focus'));
|
|
137
|
+
};
|
|
138
|
+
#onAnchorBlur = () => {
|
|
139
|
+
this.dispatchEvent(new CustomEvent('-blur'));
|
|
140
|
+
};
|
|
141
|
+
#onFocusReactHandler = () => {
|
|
142
|
+
getReactEventHandler(this, 'on-focus')?.();
|
|
143
|
+
};
|
|
144
|
+
#onBlurReactHandler = () => {
|
|
145
|
+
getReactEventHandler(this, 'on-blur')?.();
|
|
146
|
+
};
|
|
147
|
+
#onClickReactHandler = e => {
|
|
148
|
+
getReactEventHandler(this, 'on-click')?.(e);
|
|
149
|
+
};
|
|
150
|
+
});
|
package/link/types.d.ts
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { TSinchElementReact } from '../types';
|
|
2
|
+
export type TSinchLinkElement = HTMLElement & {
|
|
3
|
+
/** Text content of hyperlink */
|
|
4
|
+
text: string;
|
|
5
|
+
/** URL that hyperlink point to */
|
|
6
|
+
href: string;
|
|
7
|
+
/** Disabled */
|
|
8
|
+
disabled: boolean;
|
|
9
|
+
/** Replaces the anchor tag behaviour to use history instead */
|
|
10
|
+
'use-history': boolean;
|
|
11
|
+
/** Sets `target="_blank" and a special external icon on the left side */
|
|
12
|
+
external: boolean;
|
|
13
|
+
/** Special standalone (`display: block`) mode with an arrow icon on the right side */
|
|
14
|
+
standalone: boolean;
|
|
15
|
+
/** Prevents default behaviour on hyperlink click */
|
|
16
|
+
preventDefault: boolean;
|
|
17
|
+
/** Click event */
|
|
18
|
+
addEventListener(type: '-click', listener: (e: CustomEvent<void>) => void): void;
|
|
19
|
+
/** Focus event */
|
|
20
|
+
addEventListener(type: '-focus', listener: (e: CustomEvent<void>) => void): void;
|
|
21
|
+
/** Blur event */
|
|
22
|
+
addEventListener(type: '-blur', listener: (e: CustomEvent<void>) => void): void;
|
|
23
|
+
/** Text content of hyperlink */
|
|
24
|
+
setAttribute(name: 'text', value: string): void;
|
|
25
|
+
/** URL that hyperlink point to */
|
|
26
|
+
setAttribute(name: 'href', value: string): void;
|
|
27
|
+
/** Disabled */
|
|
28
|
+
setAttribute(name: 'disabled', value: ''): void;
|
|
29
|
+
/** Sets `target="_blank" and a special external icon on the left side */
|
|
30
|
+
setAttribute(name: 'external', value: ''): void;
|
|
31
|
+
/** Special standalone (`display: block`) mode with an arrow icon on the right side */
|
|
32
|
+
setAttribute(name: 'standalone', value: ''): void;
|
|
33
|
+
/** Prevents default behaviour on hyperlink click */
|
|
34
|
+
setAttribute(name: 'preventdefault', value: ''): void;
|
|
35
|
+
};
|
|
36
|
+
export type TSinchLinkReact = TSinchElementReact<TSinchLinkElement> & {
|
|
37
|
+
/** Text content of hyperlink */
|
|
38
|
+
text: string;
|
|
39
|
+
/** URL that hyperlink point to */
|
|
40
|
+
href: string;
|
|
41
|
+
/** Replaces the anchor tag behaviour to use history instead */
|
|
42
|
+
'use-history'?: boolean;
|
|
43
|
+
/** Disabled */
|
|
44
|
+
disabled?: boolean;
|
|
45
|
+
/** Sets `target="_blank" and a special external icon on the left side */
|
|
46
|
+
external?: boolean;
|
|
47
|
+
/** Special standalone (`display: block`) mode with an arrow icon on the right side */
|
|
48
|
+
standalone?: boolean;
|
|
49
|
+
/** Prevents default behaviour on hyperlink click */
|
|
50
|
+
preventDefault?: boolean;
|
|
51
|
+
/** Label that is used for a11y – might be different from `text` */
|
|
52
|
+
'aria-label': string;
|
|
53
|
+
/** Click even handler */
|
|
54
|
+
'on-click'?: (e: CustomEvent<void>) => void;
|
|
55
|
+
/** Focus even handler */
|
|
56
|
+
'on-focus'?: (e: CustomEvent<void>) => void;
|
|
57
|
+
/** Blur even handler */
|
|
58
|
+
'on-blur'?: (e: CustomEvent<void>) => void;
|
|
59
|
+
};
|
package/link/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/list/index.d.ts
ADDED
package/list/index.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { defineCustomElement, NectaryElement } from '../utils';
|
|
2
|
+
const templateHTML = '<style>:host{display:block;height:100%}#wrapper{display:flex;flex-direction:column;box-sizing:border-box;width:100%;height:100%;overflow-y:auto}</style><div id="wrapper"><slot></slot></div>';
|
|
3
|
+
const template = document.createElement('template');
|
|
4
|
+
template.innerHTML = templateHTML;
|
|
5
|
+
defineCustomElement('sinch-list', class extends NectaryElement {
|
|
6
|
+
constructor() {
|
|
7
|
+
super();
|
|
8
|
+
const shadowRoot = this.attachShadow();
|
|
9
|
+
shadowRoot.appendChild(template.content.cloneNode(true));
|
|
10
|
+
}
|
|
11
|
+
connectedCallback() {
|
|
12
|
+
this.setAttribute('role', 'list');
|
|
13
|
+
}
|
|
14
|
+
});
|
package/list/types.d.ts
ADDED
package/list/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|