@nectary/components 2.4.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 +168 -0
- package/button/types.d.ts +45 -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/colors.json +88 -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 +1 -0
- package/emoji/utils.js +42 -0
- package/emoji-picker/data.json +1 -0
- package/emoji-picker/index.d.ts +22 -0
- package/emoji-picker/index.js +304 -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 +112 -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 +173 -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 +620 -0
- package/input/types.d.ts +80 -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 +132 -0
- package/link/types.d.ts +55 -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 +30 -0
- 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 +140 -0
- package/popover/types.d.ts +40 -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 +17 -0
- package/radio-option/types.js +1 -0
- package/readme.md +179 -0
- package/rich-text/index.d.ts +11 -0
- package/rich-text/index.js +48 -0
- package/rich-text/types.d.ts +12 -0
- package/rich-text/types.js +1 -0
- package/rich-text/utils.d.ts +2 -0
- package/rich-text/utils.js +1 -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 +200 -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 +307 -0
- package/select-menu/types.d.ts +29 -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/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 +228 -0
- package/textarea/types.d.ts +57 -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 +35 -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 +14 -0
- package/toast/index.js +87 -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 +163 -0
- package/toast-manager/types.d.ts +7 -0
- package/toast-manager/types.js +1 -0
- package/toggle/index.d.ts +11 -0
- package/toggle/index.js +126 -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 +258 -0
- package/tooltip/tooltip-state.d.ts +19 -0
- package/tooltip/tooltip-state.js +126 -0
- package/tooltip/types.d.ts +35 -0
- package/tooltip/types.js +1 -0
- package/tooltip/utils.d.ts +5 -0
- package/tooltip/utils.js +17 -0
- package/types.d.ts +14 -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/countries.json +1217 -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 +1 -0
- package/utils/markdown.js +128 -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/dialog/index.js
ADDED
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import '../icon-button';
|
|
2
|
+
import '../icon';
|
|
3
|
+
import '../stop-events';
|
|
4
|
+
import '../title';
|
|
5
|
+
import { defineCustomElement, getAttribute, getBooleanAttribute, getRect, isAttrTrue, updateAttribute, getReactEventHandler, NectaryElement, updateBooleanAttribute, setClass, isTargetEqual, isAttrEqual } from '../utils';
|
|
6
|
+
const templateHTML = '<style>:host{display:contents;--sinch-comp-dialog-max-width:512px;--sinch-comp-dialog-max-height:50vh}#dialog{position:fixed;left:0;right:0;margin:auto;display:flex;flex-direction:column;padding:24px 0;max-width:var(--sinch-comp-dialog-max-width);max-height:unset;border-radius:var(--sinch-comp-dialog-shape-radius);box-sizing:border-box;contain:content;background-color:var(--sinch-comp-dialog-color-default-background-initial);border:none;box-shadow:var(--sinch-comp-dialog-shadow);outline:0}#dialog:not([open]){display:none}dialog::backdrop{background-color:#000;opacity:.55}#header{display:flex;flex-direction:row;justify-content:space-between;align-items:flex-start;margin-bottom:12px;padding:0 24px}#caption{--sinch-global-color-text:var(--sinch-comp-dialog-color-default-title-initial);--sinch-comp-title-font:var(--sinch-comp-dialog-font-title)}#content{min-height:0;overflow:auto;max-height:var(--sinch-comp-dialog-max-height);padding:4px 24px}#action{display:flex;flex-direction:row;justify-content:flex-end;gap:16px;margin-top:20px;padding:0 24px}#action.empty{display:none}#close{position:relative;left:4px;top:-4px;--sinch-global-color-icon:var(--sinch-comp-dialog-color-default-icon-initial)}</style><dialog id="dialog"><div id="header"><sinch-title id="caption" type="m" level="3" ellipsis></sinch-title><sinch-icon-button id="close" size="s"><sinch-icon id="icon-close" slot="icon" name="close"></sinch-icon></sinch-icon-button></div><div id="content"><sinch-stop-events events="close"><slot name="content"></slot></sinch-stop-events></div><div id="action"><sinch-stop-events events="close"><slot name="buttons"></slot></sinch-stop-events></div></dialog>';
|
|
7
|
+
import { disableScroll, enableScroll } from './utils';
|
|
8
|
+
const template = document.createElement('template');
|
|
9
|
+
template.innerHTML = templateHTML;
|
|
10
|
+
defineCustomElement('sinch-dialog', class extends NectaryElement {
|
|
11
|
+
#$dialog;
|
|
12
|
+
#$closeButton;
|
|
13
|
+
#$caption;
|
|
14
|
+
#$actionWrapper;
|
|
15
|
+
#$actionSlot;
|
|
16
|
+
#controller = null;
|
|
17
|
+
constructor() {
|
|
18
|
+
super();
|
|
19
|
+
const shadowRoot = this.attachShadow();
|
|
20
|
+
shadowRoot.appendChild(template.content.cloneNode(true));
|
|
21
|
+
this.#$dialog = shadowRoot.querySelector('#dialog');
|
|
22
|
+
this.#$closeButton = shadowRoot.querySelector('#close');
|
|
23
|
+
this.#$caption = shadowRoot.querySelector('#caption');
|
|
24
|
+
this.#$actionWrapper = shadowRoot.querySelector('#action');
|
|
25
|
+
this.#$actionSlot = shadowRoot.querySelector('slot[name="buttons"]');
|
|
26
|
+
}
|
|
27
|
+
connectedCallback() {
|
|
28
|
+
super.connectedCallback();
|
|
29
|
+
this.#controller = new AbortController();
|
|
30
|
+
const options = {
|
|
31
|
+
signal: this.#controller.signal
|
|
32
|
+
};
|
|
33
|
+
this.role = 'dialog';
|
|
34
|
+
this.#$closeButton.addEventListener('click', this.#onCloseClick, options);
|
|
35
|
+
this.#$dialog.addEventListener('mousedown', this.#onBackdropMouseDown, options);
|
|
36
|
+
this.#$dialog.addEventListener('cancel', this.#onCancel, options);
|
|
37
|
+
this.#$actionSlot.addEventListener('slotchange', this.#onActionSlotChange, options);
|
|
38
|
+
this.addEventListener('-close', this.#onCloseReactHandler, options);
|
|
39
|
+
this.#onActionSlotChange();
|
|
40
|
+
if (this.open) {
|
|
41
|
+
this.#onExpand();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
disconnectedCallback() {
|
|
45
|
+
super.disconnectedCallback();
|
|
46
|
+
this.#onCollapse();
|
|
47
|
+
this.#controller.abort();
|
|
48
|
+
this.#controller = null;
|
|
49
|
+
}
|
|
50
|
+
static get observedAttributes() {
|
|
51
|
+
return ['caption', 'open', 'close-aria-label'];
|
|
52
|
+
}
|
|
53
|
+
attributeChangedCallback(name, oldVal, newVal) {
|
|
54
|
+
if (isAttrEqual(oldVal, newVal)) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
switch (name) {
|
|
58
|
+
case 'caption':
|
|
59
|
+
{
|
|
60
|
+
updateAttribute(this.#$caption, 'text', newVal);
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
case 'open':
|
|
64
|
+
{
|
|
65
|
+
const shouldOpen = isAttrTrue(newVal);
|
|
66
|
+
if (shouldOpen) {
|
|
67
|
+
requestAnimationFrame(() => {
|
|
68
|
+
this.#onExpand();
|
|
69
|
+
});
|
|
70
|
+
} else {
|
|
71
|
+
this.#onCollapse();
|
|
72
|
+
}
|
|
73
|
+
updateBooleanAttribute(this, 'open', shouldOpen);
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
case 'close-aria-label':
|
|
77
|
+
{
|
|
78
|
+
updateAttribute(this.#$closeButton, 'aria-label', newVal);
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
set caption(caption) {
|
|
84
|
+
updateAttribute(this, 'caption', caption);
|
|
85
|
+
}
|
|
86
|
+
get caption() {
|
|
87
|
+
return getAttribute(this, 'caption', '');
|
|
88
|
+
}
|
|
89
|
+
set open(isOpen) {
|
|
90
|
+
updateBooleanAttribute(this, 'open', isOpen);
|
|
91
|
+
}
|
|
92
|
+
get open() {
|
|
93
|
+
return getBooleanAttribute(this, 'open');
|
|
94
|
+
}
|
|
95
|
+
get dialogRect() {
|
|
96
|
+
return getRect(this.#$dialog);
|
|
97
|
+
}
|
|
98
|
+
get closeButtonRect() {
|
|
99
|
+
return getRect(this.#$closeButton);
|
|
100
|
+
}
|
|
101
|
+
#onCancel = e => {
|
|
102
|
+
e.preventDefault();
|
|
103
|
+
e.stopPropagation();
|
|
104
|
+
this.#dispatchCloseEvent('escape');
|
|
105
|
+
};
|
|
106
|
+
#onCloseClick = () => {
|
|
107
|
+
this.#dispatchCloseEvent('close');
|
|
108
|
+
};
|
|
109
|
+
#onBackdropMouseDown = e => {
|
|
110
|
+
if (isTargetEqual(e, this.#$dialog)) {
|
|
111
|
+
const rect = this.dialogRect;
|
|
112
|
+
const isInside = e.x >= rect.x && e.x < rect.x + rect.width && e.y >= rect.y && e.y < rect.y + rect.height;
|
|
113
|
+
if (!isInside) {
|
|
114
|
+
e.stopPropagation();
|
|
115
|
+
this.#dispatchCloseEvent('backdrop');
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
#onCloseReactHandler = e => {
|
|
120
|
+
getReactEventHandler(this, 'on-close')?.(e);
|
|
121
|
+
};
|
|
122
|
+
#dispatchCloseEvent(detail) {
|
|
123
|
+
this.dispatchEvent(new CustomEvent('-close', {
|
|
124
|
+
detail
|
|
125
|
+
}));
|
|
126
|
+
}
|
|
127
|
+
#onExpand() {
|
|
128
|
+
if (!this.isDomConnected || this.#$dialog.open || !this.open) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
this.#$dialog.showModal();
|
|
132
|
+
disableScroll();
|
|
133
|
+
}
|
|
134
|
+
#onCollapse() {
|
|
135
|
+
if (!this.#$dialog.open) {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
this.#$dialog.close?.();
|
|
139
|
+
enableScroll();
|
|
140
|
+
}
|
|
141
|
+
#onActionSlotChange = () => {
|
|
142
|
+
setClass(this.#$actionWrapper, 'empty', this.#$actionSlot.assignedElements().length === 0);
|
|
143
|
+
};
|
|
144
|
+
});
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { TRect, TSinchElementReact } from '../types';
|
|
2
|
+
export type TSinchDialogCloseDetail = 'close' | 'escape' | 'backdrop';
|
|
3
|
+
export type TSinchDialogElement = HTMLElement & {
|
|
4
|
+
/** Open/close state */
|
|
5
|
+
open: boolean;
|
|
6
|
+
/** Dialog caption */
|
|
7
|
+
caption: string;
|
|
8
|
+
readonly dialogRect: TRect;
|
|
9
|
+
readonly closeButtonRect: TRect;
|
|
10
|
+
/** close event handler */
|
|
11
|
+
addEventListener(type: '-close', listener: (e: CustomEvent<TSinchDialogCloseDetail>) => void): void;
|
|
12
|
+
/** Dialog caption */
|
|
13
|
+
setAttribute(name: 'caption', value: string): void;
|
|
14
|
+
/** Close button label that is used for a11y */
|
|
15
|
+
setAttribute(name: 'close-aria-label', value: string): void;
|
|
16
|
+
};
|
|
17
|
+
export type TSinchDialogReact = TSinchElementReact<TSinchDialogElement> & {
|
|
18
|
+
/** Controls whether the dialog should be open */
|
|
19
|
+
open: boolean;
|
|
20
|
+
/** Dialog caption */
|
|
21
|
+
caption: string;
|
|
22
|
+
/** Label that is used for a11y */
|
|
23
|
+
'aria-label': string;
|
|
24
|
+
/** Close button label that is used for a11y */
|
|
25
|
+
'close-aria-label': string;
|
|
26
|
+
/** close event handler */
|
|
27
|
+
'on-close'?: (e: CustomEvent<TSinchDialogCloseDetail>) => void;
|
|
28
|
+
};
|
package/dialog/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dialog/utils.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const bodyEl = document.body;
|
|
2
|
+
export const disableScroll = () => {
|
|
3
|
+
bodyEl.__dialog_counter__ = (bodyEl.__dialog_counter__ ?? 0) + 1;
|
|
4
|
+
if (bodyEl.__dialog_counter__ === 1) {
|
|
5
|
+
const scrollWidth = window.innerWidth - document.documentElement.clientWidth;
|
|
6
|
+
bodyEl.style.overflow = 'hidden';
|
|
7
|
+
if (scrollWidth > 0) {
|
|
8
|
+
bodyEl.style.setProperty('padding-right', `${scrollWidth}px`);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
export const enableScroll = () => {
|
|
13
|
+
bodyEl.__dialog_counter__ = Math.max(0, (bodyEl.__dialog_counter__ ?? 0) - 1);
|
|
14
|
+
if (bodyEl.__dialog_counter__ === 0) {
|
|
15
|
+
bodyEl.style.overflow = '';
|
|
16
|
+
bodyEl.style.removeProperty('padding-right');
|
|
17
|
+
}
|
|
18
|
+
};
|
package/emoji/index.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { TSinchEmojiElement, TSinchEmojiReact } from './types';
|
|
2
|
+
declare global {
|
|
3
|
+
namespace JSX {
|
|
4
|
+
interface IntrinsicElements {
|
|
5
|
+
'sinch-emoji': TSinchEmojiReact;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
interface HTMLElementTagNameMap {
|
|
9
|
+
'sinch-emoji': TSinchEmojiElement;
|
|
10
|
+
}
|
|
11
|
+
}
|
package/emoji/index.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { defineCustomElement, getAttribute, NectaryElement, updateAttribute } from '../utils';
|
|
2
|
+
const templateHTML = '<style>:host{display:contents}#image{pointer-events:none;width:var(--sinch-global-size-icon,48px);height:var(--sinch-global-size-icon,48px)}</style><img id="image" src="" alt="" loading="lazy"/>';
|
|
3
|
+
import { getEmojiUrl } from './utils';
|
|
4
|
+
const template = document.createElement('template');
|
|
5
|
+
template.innerHTML = templateHTML;
|
|
6
|
+
defineCustomElement('sinch-emoji', class extends NectaryElement {
|
|
7
|
+
#$img;
|
|
8
|
+
constructor() {
|
|
9
|
+
super();
|
|
10
|
+
const shadowRoot = this.attachShadow();
|
|
11
|
+
shadowRoot.appendChild(template.content.cloneNode(true));
|
|
12
|
+
this.#$img = shadowRoot.querySelector('#image');
|
|
13
|
+
}
|
|
14
|
+
connectedCallback() {
|
|
15
|
+
super.connectedCallback();
|
|
16
|
+
this.#updateChar();
|
|
17
|
+
}
|
|
18
|
+
disconnectedCallback() {
|
|
19
|
+
super.disconnectedCallback();
|
|
20
|
+
}
|
|
21
|
+
static get observedAttributes() {
|
|
22
|
+
return ['char'];
|
|
23
|
+
}
|
|
24
|
+
attributeChangedCallback(name, _, newVal) {
|
|
25
|
+
switch (name) {
|
|
26
|
+
case 'char':
|
|
27
|
+
{
|
|
28
|
+
this.#$img.alt = newVal ?? '';
|
|
29
|
+
this.#updateChar();
|
|
30
|
+
break;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
set char(value) {
|
|
35
|
+
updateAttribute(this, 'char', value);
|
|
36
|
+
}
|
|
37
|
+
get char() {
|
|
38
|
+
return getAttribute(this, 'char', '');
|
|
39
|
+
}
|
|
40
|
+
#updateChar() {
|
|
41
|
+
if (!this.isDomConnected) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
this.#$img.src = getEmojiUrl(this, this.char);
|
|
45
|
+
}
|
|
46
|
+
});
|
package/emoji/types.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { TSinchElementReact } from '../types';
|
|
2
|
+
export type TSinchEmojiElement = HTMLElement & {
|
|
3
|
+
/** Emoji character */
|
|
4
|
+
char: string;
|
|
5
|
+
/** Emoji character */
|
|
6
|
+
setAttribute(name: 'char', value: string): void;
|
|
7
|
+
};
|
|
8
|
+
export type TSinchEmojiReact = TSinchElementReact<TSinchEmojiElement> & {
|
|
9
|
+
/** Emoji character */
|
|
10
|
+
char: string;
|
|
11
|
+
};
|
package/emoji/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/emoji/utils.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const getEmojiUrl: (root: Element, char: string | null) => string;
|
package/emoji/utils.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { getCssVar } from '../utils';
|
|
2
|
+
const vs16RegExp = /\uFE0F/g;
|
|
3
|
+
const zeroWidthJoiner = String.fromCharCode(0x200d);
|
|
4
|
+
const removeVS16s = rawEmoji => rawEmoji.indexOf(zeroWidthJoiner) < 0 ? rawEmoji.replace(vs16RegExp, '') : rawEmoji;
|
|
5
|
+
function toCodePoints(unicodeSurrogates) {
|
|
6
|
+
const points = [];
|
|
7
|
+
let char = 0;
|
|
8
|
+
let previous = 0;
|
|
9
|
+
let i = 0;
|
|
10
|
+
while (i < unicodeSurrogates.length) {
|
|
11
|
+
char = unicodeSurrogates.charCodeAt(i++);
|
|
12
|
+
if (previous !== 0) {
|
|
13
|
+
points.push((0x10000 + (previous - 0xd800 << 10) + (char - 0xdc00)).toString(16));
|
|
14
|
+
previous = 0;
|
|
15
|
+
} else if (char > 0xd800 && char <= 0xdbff) {
|
|
16
|
+
previous = char;
|
|
17
|
+
} else {
|
|
18
|
+
points.push(char.toString(16));
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return points;
|
|
22
|
+
}
|
|
23
|
+
let emojiUrl = null;
|
|
24
|
+
export const getEmojiUrl = (root, char) => {
|
|
25
|
+
if (char === null || char.length === 0) {
|
|
26
|
+
return '';
|
|
27
|
+
}
|
|
28
|
+
if (emojiUrl === null) {
|
|
29
|
+
emojiUrl = getCssVar(root, '--sinch-emoji-src-url');
|
|
30
|
+
if (emojiUrl !== null) {
|
|
31
|
+
emojiUrl = emojiUrl.replaceAll('"', '').trim();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (emojiUrl === null) {
|
|
35
|
+
return '';
|
|
36
|
+
}
|
|
37
|
+
let codepoints = toCodePoints(removeVS16s(char)).join('-');
|
|
38
|
+
if (codepoints === '1f441-fe0f-200d-1f5e8-fe0f') {
|
|
39
|
+
codepoints = '1f441-200d-1f5e8';
|
|
40
|
+
}
|
|
41
|
+
return emojiUrl.replace('%s', codepoints);
|
|
42
|
+
};
|