@nectary/components 5.0.2 → 5.0.3

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.
Files changed (79) hide show
  1. package/accordion/index.js +1 -1
  2. package/accordion-item/index.js +1 -1
  3. package/action-menu/index.js +1 -1
  4. package/action-menu-option/index.js +1 -1
  5. package/alert/index.js +1 -1
  6. package/avatar/index.js +1 -1
  7. package/badge/index.js +1 -1
  8. package/bundle.js +77 -77
  9. package/button/index.js +1 -1
  10. package/button-group/index.js +1 -1
  11. package/button-group-item/index.js +1 -1
  12. package/card-container/index.js +1 -1
  13. package/card-v2/index.js +1 -1
  14. package/card-v2-title/index.js +1 -1
  15. package/checkbox/index.js +1 -1
  16. package/chip/index.js +1 -1
  17. package/code-tag/index.js +1 -1
  18. package/color-menu/index.js +1 -1
  19. package/color-menu-option/index.js +1 -1
  20. package/color-swatch/index.js +1 -1
  21. package/date-picker/index.js +1 -1
  22. package/dialog/index.js +1 -1
  23. package/emoji/index.js +1 -1
  24. package/emoji-picker/index.js +1 -1
  25. package/field/index.js +1 -1
  26. package/file-drop/index.js +1 -1
  27. package/file-picker/index.js +1 -1
  28. package/file-status/index.js +1 -1
  29. package/flag/index.js +1 -1
  30. package/grid/index.js +1 -1
  31. package/grid-item/index.js +1 -1
  32. package/help-tooltip/index.js +1 -1
  33. package/icon/index.js +1 -1
  34. package/inline-alert/index.js +1 -1
  35. package/input/index.js +1 -1
  36. package/link/index.js +1 -1
  37. package/list/index.js +1 -1
  38. package/list-item/index.js +1 -1
  39. package/package.json +3 -3
  40. package/pagination/index.js +1 -1
  41. package/persistent-overlay/index.js +1 -1
  42. package/pop/index.js +1 -1
  43. package/popover/index.js +1 -1
  44. package/progress/index.js +1 -1
  45. package/progress-stepper/index.js +1 -1
  46. package/progress-stepper-item/index.js +1 -1
  47. package/radio/index.js +1 -1
  48. package/radio-option/index.js +1 -1
  49. package/rich-text/index.js +1 -1
  50. package/rich-textarea/index.js +1 -1
  51. package/segment-collapse/index.js +1 -1
  52. package/segmented-control/index.js +1 -1
  53. package/segmented-control-option/index.js +1 -1
  54. package/segmented-icon-control/index.js +1 -1
  55. package/segmented-icon-control-option/index.js +1 -1
  56. package/select-button/index.js +1 -1
  57. package/select-menu/index.js +1 -1
  58. package/select-menu-option/index.js +1 -1
  59. package/skeleton/index.js +1 -1
  60. package/skeleton-item/index.js +1 -1
  61. package/spinner/index.js +1 -1
  62. package/table/index.js +1 -1
  63. package/table-body/index.js +1 -1
  64. package/table-cell/index.js +1 -1
  65. package/table-head/index.js +1 -1
  66. package/table-head-cell/index.js +1 -1
  67. package/table-row/index.js +1 -1
  68. package/tabs/index.js +1 -1
  69. package/tabs-icon-option/index.js +1 -1
  70. package/tabs-option/index.js +1 -1
  71. package/tag/index.js +1 -1
  72. package/text/index.js +1 -1
  73. package/textarea/index.js +1 -1
  74. package/time-picker/index.js +1 -1
  75. package/title/index.js +1 -1
  76. package/toast/index.js +1 -1
  77. package/toast-manager/index.js +1 -1
  78. package/toggle/index.js +1 -1
  79. package/tooltip/index.js +1 -1
package/field/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { getAttribute, setClass, isAttrEqual, updateBooleanAttribute, isAttrTrue, updateAttribute, getBooleanAttribute } from "../utils/dom.js";
2
2
  import { defineCustomElement, NectaryElement } from "../utils/element.js";
3
3
  import { getFirstSlotElement } from "../utils/slot.js";
4
- const templateHTML = '<style>\n:host {\n display: block;\n}\n\n#wrapper {\n display: flex;\n flex-direction: column;\n width: 100%;\n}\n\n#top,\n#bottom {\n display: flex;\n align-items: baseline;\n}\n\n#top {\n height: 24px;\n margin-bottom: 2px;\n}\n\n#top.empty {\n display: none;\n}\n\n#label,\n#optional,\n#additional,\n#invalid {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n#label {\n font: var(--sinch-comp-field-font-label);\n color: var(--sinch-comp-field-color-default-label-initial);\n}\n\n#optional {\n flex: 1;\n font: var(--sinch-comp-field-font-optional);\n color: var(--sinch-comp-field-color-default-optional-initial);\n text-align: right;\n}\n\n#additional {\n flex: 1;\n text-align: right;\n font: var(--sinch-comp-field-font-additional);\n color: var(--sinch-comp-field-color-default-additional-initial);\n line-height: 20px;\n margin-top: 2px;\n}\n\n#additional:empty {\n display: none;\n}\n\n#invalid {\n font: var(--sinch-comp-field-font-invalid);\n color: var(--sinch-comp-field-color-invalid-text-initial);\n line-height: 20px;\n margin-top: 2px;\n}\n\n#invalid:empty {\n display: none;\n}\n\n#tooltip {\n align-self: center;\n margin: 0 8px;\n display: flex;\n}\n\n#tooltip.empty {\n display: none;\n}\n\n:host([disabled]) #label {\n color: var(--sinch-comp-field-color-disabled-label-initial);\n}\n\n:host([disabled]) #additional {\n color: var(--sinch-comp-field-color-disabled-additional-initial);\n}\n\n:host([disabled]) #optional {\n color: var(--sinch-comp-field-color-disabled-optional-initial);\n}\n\n</style>\n\n<div id="wrapper">\n <div id="top">\n <label id="label" for="input"></label>\n <div id="tooltip">\n <slot name="tooltip"></slot>\n </div>\n <span id="optional"></span>\n </div>\n <slot name="input"></slot>\n <div id="bottom">\n <div id="invalid"></div>\n <div id="additional"></div>\n </div>\n</div>\n';
4
+ const templateHTML = '<style>:host{display:block}#wrapper{display:flex;flex-direction:column;width:100%}#bottom,#top{display:flex;align-items:baseline}#top{height:24px;margin-bottom:2px}#top.empty{display:none}#additional,#invalid,#label,#optional{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#label{font:var(--sinch-comp-field-font-label);color:var(--sinch-comp-field-color-default-label-initial)}#optional{flex:1;font:var(--sinch-comp-field-font-optional);color:var(--sinch-comp-field-color-default-optional-initial);text-align:right}#additional{flex:1;text-align:right;font:var(--sinch-comp-field-font-additional);color:var(--sinch-comp-field-color-default-additional-initial);line-height:20px;margin-top:2px}#additional:empty{display:none}#invalid{font:var(--sinch-comp-field-font-invalid);color:var(--sinch-comp-field-color-invalid-text-initial);line-height:20px;margin-top:2px}#invalid:empty{display:none}#tooltip{align-self:center;margin:0 8px;display:flex}#tooltip.empty{display:none}:host([disabled]) #label{color:var(--sinch-comp-field-color-disabled-label-initial)}:host([disabled]) #additional{color:var(--sinch-comp-field-color-disabled-additional-initial)}:host([disabled]) #optional{color:var(--sinch-comp-field-color-disabled-optional-initial)}</style><div id="wrapper"><div id="top"><label id="label" for="input"></label><div id="tooltip"><slot name="tooltip"></slot></div><span id="optional"></span></div><slot name="input"></slot><div id="bottom"><div id="invalid"></div><div id="additional"></div></div></div>';
5
5
  const template = document.createElement("template");
6
6
  template.innerHTML = templateHTML;
7
7
  class Field extends NectaryElement {
@@ -4,7 +4,7 @@ import { isAttrEqual, updateAttribute, updateBooleanAttribute, isAttrTrue, getBo
4
4
  import { defineCustomElement, NectaryElement } from "../utils/element.js";
5
5
  import { getReactEventHandler } from "../utils/get-react-event-handler.js";
6
6
  import { areItemsAccepted, areFilesAccepted, doFilesSatisfySize } from "./utils.js";
7
- const templateHTML = '<style>\n:host {\n display: block;\n}\n\n#wrapper {\n position: relative;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: center;\n align-content: center;\n gap: 8px;\n min-height: 148px;\n min-width: 148px;\n box-sizing: border-box;\n padding: 16px;\n border-radius: var(--sinch-comp-file-drop-shape-radius);\n background-color: var(--sinch-comp-file-drop-color-default-background-initial);\n}\n\n/* Border */\n#wrapper::after {\n content: "";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 1px dashed var(--sinch-comp-file-drop-color-default-border-initial);\n border-radius: var(--sinch-comp-file-drop-shape-radius);\n pointer-events: none;\n}\n\n#placeholder {\n align-self: center;\n text-align: center;\n\n --sinch-global-color-text: var(--sinch-comp-file-drop-color-default-placeholder-initial);\n --sinch-comp-text-font: var(--sinch-comp-file-drop-font-placeholder);\n}\n\n:host([invalid]) #wrapper {\n background-color: var(--sinch-comp-file-drop-color-invalid-background-initial);\n}\n\n:host([invalid]) #wrapper::after {\n border-color: var(--sinch-comp-file-drop-color-invalid-border-initial);\n border-width: 1px;\n}\n\n#wrapper.drop::after {\n pointer-events: all;\n}\n\n#wrapper.drop.valid {\n background-color: var(--sinch-comp-file-drop-color-default-background-active);\n}\n\n#wrapper.drop.valid::after {\n border-color: var(--sinch-comp-file-drop-color-default-border-active);\n border-width: 2px;\n}\n\n#wrapper.drop.valid > #placeholder {\n --sinch-global-color-text: var(--sinch-comp-file-drop-color-default-placeholder-active);\n}\n\n#wrapper.drop.invalid {\n background-color: var(--sinch-comp-file-drop-color-invalid-background-active);\n}\n\n#wrapper.drop.invalid::after {\n border-color: var(--sinch-comp-file-drop-color-invalid-border-active);\n border-width: 2px;\n}\n\n#wrapper.drop.invalid > #placeholder {\n --sinch-global-color-text: var(--sinch-comp-file-drop-color-invalid-placeholder-active);\n}\n\n:host([disabled]) > #wrapper > #placeholder {\n --sinch-global-color-text: var(--sinch-comp-file-drop-color-disabled-placeholder-initial);\n}\n\n:host([disabled]) > #wrapper {\n background-color: var(--sinch-comp-file-drop-color-disabled-background-initial);\n}\n\n:host([disabled]) > #wrapper::after {\n border-color: var(--sinch-comp-file-drop-color-disabled-border-initial);\n border-width: 1px;\n}\n</style>\n\n<div id="wrapper">\n <sinch-text id="placeholder" type="m" aria-hidden="true"></sinch-text>\n <sinch-file-picker id="file-picker">\n <slot></slot>\n </sinch-file-picker>\n</div>\n';
7
+ const templateHTML = '<style>:host{display:block}#wrapper{position:relative;display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center;align-content:center;gap:8px;min-height:148px;min-width:148px;box-sizing:border-box;padding:16px;border-radius:var(--sinch-comp-file-drop-shape-radius);background-color:var(--sinch-comp-file-drop-color-default-background-initial)}#wrapper::after{content:"";position:absolute;top:0;left:0;right:0;bottom:0;border:1px dashed var(--sinch-comp-file-drop-color-default-border-initial);border-radius:var(--sinch-comp-file-drop-shape-radius);pointer-events:none}#placeholder{align-self:center;text-align:center;--sinch-global-color-text:var(--sinch-comp-file-drop-color-default-placeholder-initial);--sinch-comp-text-font:var(--sinch-comp-file-drop-font-placeholder)}:host([invalid]) #wrapper{background-color:var(--sinch-comp-file-drop-color-invalid-background-initial)}:host([invalid]) #wrapper::after{border-color:var(--sinch-comp-file-drop-color-invalid-border-initial);border-width:1px}#wrapper.drop::after{pointer-events:all}#wrapper.drop.valid{background-color:var(--sinch-comp-file-drop-color-default-background-active)}#wrapper.drop.valid::after{border-color:var(--sinch-comp-file-drop-color-default-border-active);border-width:2px}#wrapper.drop.valid>#placeholder{--sinch-global-color-text:var(--sinch-comp-file-drop-color-default-placeholder-active)}#wrapper.drop.invalid{background-color:var(--sinch-comp-file-drop-color-invalid-background-active)}#wrapper.drop.invalid::after{border-color:var(--sinch-comp-file-drop-color-invalid-border-active);border-width:2px}#wrapper.drop.invalid>#placeholder{--sinch-global-color-text:var(--sinch-comp-file-drop-color-invalid-placeholder-active)}:host([disabled])>#wrapper>#placeholder{--sinch-global-color-text:var(--sinch-comp-file-drop-color-disabled-placeholder-initial)}:host([disabled])>#wrapper{background-color:var(--sinch-comp-file-drop-color-disabled-background-initial)}:host([disabled])>#wrapper::after{border-color:var(--sinch-comp-file-drop-color-disabled-border-initial);border-width:1px}</style><div id="wrapper"><sinch-text id="placeholder" type="m" aria-hidden="true"></sinch-text><sinch-file-picker id="file-picker"><slot></slot></sinch-file-picker></div>';
8
8
  const template = document.createElement("template");
9
9
  template.innerHTML = templateHTML;
10
10
  class FileDrop extends NectaryElement {
@@ -2,7 +2,7 @@ import { updateAttribute, isAttrEqual, updateBooleanAttribute, isAttrTrue, getBo
2
2
  import { defineCustomElement, NectaryElement } from "../utils/element.js";
3
3
  import { getReactEventHandler } from "../utils/get-react-event-handler.js";
4
4
  import { doFilesSatisfySize } from "./utils.js";
5
- const templateHTML = "<style>\n:host {\n display: inline-block;\n}\n\n::slotted(*) {\n display: block;\n}\n</style>\n\n<slot></slot>\n";
5
+ const templateHTML = "<style>:host{display:inline-block}::slotted(*){display:block}</style><slot></slot>";
6
6
  const template = document.createElement("template");
7
7
  template.innerHTML = templateHTML;
8
8
  class FilePicker extends NectaryElement {
@@ -4,7 +4,7 @@ import "../text/index.js";
4
4
  import { getLiteralAttribute, updateLiteralAttribute, getAttribute, updateAttribute, updateBooleanAttribute } from "../utils/dom.js";
5
5
  import { defineCustomElement, NectaryElement } from "../utils/element.js";
6
6
  import { typeValues } from "./utils.js";
7
- const templateHTML = '<style>\n :host {\n display: block;\n }\n\n #wrapper {\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n padding: 12px 16px;\n box-sizing: border-box;\n min-height: 48px;\n min-width: 148px;\n border-radius: var(--sinch-comp-file-status-shape-radius);\n }\n\n :host([type="error"]) #wrapper {\n background-color: var(--sinch-comp-file-status-color-error-background);\n }\n\n :host([type="success"]) #wrapper {\n background-color: var(--sinch-comp-file-status-color-success-background);\n }\n\n :host([type="pending"]) #wrapper {\n background-color: var(--sinch-comp-file-status-color-pending-background);\n }\n\n :host([type="progress"]) #wrapper {\n background-color: var(--sinch-comp-file-status-color-progress-background);\n }\n\n :host([type="loading"]) #wrapper {\n background-color: var(--sinch-comp-file-status-color-loading-background);\n }\n\n #content-wrapper {\n display: flex;\n flex-direction: column;\n gap: 8px;\n flex: 1;\n min-width: 0;\n min-height: 24px;\n margin-left: 16px;\n }\n\n :host([type="error"]) #filename {\n --sinch-global-color-text: var(--sinch-comp-file-status-color-error-text);\n }\n\n :host([type="success"]) #filename {\n --sinch-global-color-text: var(--sinch-comp-file-status-color-success-text);\n }\n\n :host([type="pending"]) #filename {\n --sinch-global-color-text: var(--sinch-comp-file-status-color-pending-text);\n }\n\n :host([type="progress"]) #filename {\n --sinch-global-color-text:\n var(\n --sinch-comp-file-status-color-progress-text\n );\n }\n\n :host([type="loading"]) #filename {\n --sinch-global-color-text: var(--sinch-comp-file-status-color-loading-text);\n }\n\n #action {\n display: flex;\n gap: 4px;\n height: 32px;\n margin-top: -4px;\n margin-bottom: -4px;\n }\n\n #icon-pending,\n #icon-progress,\n #icon-success,\n #icon-error,\n #icon-loading {\n display: none;\n }\n\n #icon-pending {\n --sinch-global-color-icon: var(--sinch-comp-file-status-color-pending-icon);\n }\n\n #icon-success {\n --sinch-global-color-icon: var(--sinch-comp-file-status-color-success-icon);\n }\n\n #icon-progress {\n --sinch-global-color-icon:\n var(\n --sinch-comp-file-status-color-progress-icon\n );\n }\n\n #icon-error {\n --sinch-global-color-icon: var(--sinch-comp-file-status-color-error-icon);\n }\n\n #icon-loading {\n --sinch-global-color-icon: var(--sinch-comp-file-status-color-loading-icon);\n }\n\n :host([type="success"]) #icon-success,\n :host([type="progress"]) #icon-progress,\n :host([type="error"]) #icon-error,\n :host([type="pending"]) #icon-pending,\n :host([type="loading"]) #icon-loading {\n display: block;\n }\n</style>\n\n<div id="wrapper">\n <sinch-spinner id="icon-loading" size="m"></sinch-spinner>\n <sinch-icon icons-version="2" name="fa-clipboard-question"\n id="icon-pending"\n ></sinch-icon>\n <sinch-icon icons-version="2" name="circle-check" id="icon-success"></sinch-icon>\n <sinch-icon icons-version="2" name="fa-file-lines" id="icon-progress"></sinch-icon>\n <sinch-icon icons-version="2" name="octagon-exclamation"\n id="icon-error"\n ></sinch-icon>\n <div id="content-wrapper">\n <sinch-text id="filename" type="m" ellipsis></sinch-text>\n <slot name="content"></slot>\n </div>\n <div id="action">\n <slot name="action"></slot>\n </div>\n</div>\n';
7
+ const templateHTML = '<style>:host{display:block}#wrapper{display:flex;flex-direction:row;align-items:flex-start;padding:12px 16px;box-sizing:border-box;min-height:48px;min-width:148px;border-radius:var(--sinch-comp-file-status-shape-radius)}:host([type=error]) #wrapper{background-color:var(--sinch-comp-file-status-color-error-background)}:host([type=success]) #wrapper{background-color:var(--sinch-comp-file-status-color-success-background)}:host([type=pending]) #wrapper{background-color:var(--sinch-comp-file-status-color-pending-background)}:host([type=progress]) #wrapper{background-color:var(--sinch-comp-file-status-color-progress-background)}:host([type=loading]) #wrapper{background-color:var(--sinch-comp-file-status-color-loading-background)}#content-wrapper{display:flex;flex-direction:column;gap:8px;flex:1;min-width:0;min-height:24px;margin-left:16px}:host([type=error]) #filename{--sinch-global-color-text:var(--sinch-comp-file-status-color-error-text)}:host([type=success]) #filename{--sinch-global-color-text:var(--sinch-comp-file-status-color-success-text)}:host([type=pending]) #filename{--sinch-global-color-text:var(--sinch-comp-file-status-color-pending-text)}:host([type=progress]) #filename{--sinch-global-color-text:var(--sinch-comp-file-status-color-progress-text)}:host([type=loading]) #filename{--sinch-global-color-text:var(--sinch-comp-file-status-color-loading-text)}#action{display:flex;gap:4px;height:32px;margin-top:-4px;margin-bottom:-4px}#icon-error,#icon-loading,#icon-pending,#icon-progress,#icon-success{display:none}#icon-pending{--sinch-global-color-icon:var(--sinch-comp-file-status-color-pending-icon)}#icon-success{--sinch-global-color-icon:var(--sinch-comp-file-status-color-success-icon)}#icon-progress{--sinch-global-color-icon:var(--sinch-comp-file-status-color-progress-icon)}#icon-error{--sinch-global-color-icon:var(--sinch-comp-file-status-color-error-icon)}#icon-loading{--sinch-global-color-icon:var(--sinch-comp-file-status-color-loading-icon)}:host([type=error]) #icon-error,:host([type=loading]) #icon-loading,:host([type=pending]) #icon-pending,:host([type=progress]) #icon-progress,:host([type=success]) #icon-success{display:block}</style><div id="wrapper"><sinch-spinner id="icon-loading" size="m"></sinch-spinner><sinch-icon icons-version="2" name="fa-clipboard-question" id="icon-pending"></sinch-icon><sinch-icon icons-version="2" name="circle-check" id="icon-success"></sinch-icon><sinch-icon icons-version="2" name="fa-file-lines" id="icon-progress"></sinch-icon><sinch-icon icons-version="2" name="octagon-exclamation" id="icon-error"></sinch-icon><div id="content-wrapper"><sinch-text id="filename" type="m" ellipsis></sinch-text><slot name="content"></slot></div><div id="action"><slot name="action"></slot></div></div>';
8
8
  const template = document.createElement("template");
9
9
  template.innerHTML = templateHTML;
10
10
  class FileStatus extends NectaryElement {
package/flag/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { updateAttribute, getAttribute } from "../utils/dom.js";
2
2
  import { defineCustomElement, NectaryElement } from "../utils/element.js";
3
3
  import { getFlagUrl } from "./utils.js";
4
- const templateHTML = '<style>\n:host {\n display: contents;\n}\n\n#image {\n pointer-events: none;\n width: var(--sinch-global-size-icon, 48px);\n height: var(--sinch-global-size-icon, 48px);\n object-fit: contain;\n}\n</style>\n\n<img id="image" src="" alt="" loading="lazy"/>\n';
4
+ const templateHTML = '<style>:host{display:contents}#image{pointer-events:none;width:var(--sinch-global-size-icon,48px);height:var(--sinch-global-size-icon,48px);object-fit:contain}</style><img id="image" src="" alt="" loading="lazy">';
5
5
  const template = document.createElement("template");
6
6
  template.innerHTML = templateHTML;
7
7
  class Flag extends NectaryElement {
package/grid/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { defineCustomElement, NectaryElement } from "../utils/element.js";
2
- const templateHTML = '<style>\n:host {\n display: grid;\n grid-template-columns: repeat(var(--sinch-comp-grid-columns-xl), minmax(0, 1fr));\n grid-column-gap: var(--sinch-comp-grid-gutter-xl);\n grid-row-gap: var(--sinch-comp-grid-gutter-xl);\n padding: var(--sinch-comp-grid-margin-xl);\n}\n\n/* L */\n@media only screen and (max-width: 1439px) {\n :host {\n grid-template-columns: repeat(var(--sinch-comp-grid-columns-l), minmax(0, 1fr));\n grid-column-gap: var(--sinch-comp-grid-gutter-l);\n grid-row-gap: var(--sinch-comp-grid-gutter-l);\n padding: var(--sinch-comp-grid-margin-l);\n }\n}\n\n/* M */\n@media only screen and (max-width: 1023px) {\n :host {\n grid-template-columns: repeat(var(--sinch-comp-grid-columns-m), minmax(0, 1fr));\n grid-column-gap: var(--sinch-comp-grid-gutter-m);\n grid-row-gap: var(--sinch-comp-grid-gutter-m);\n padding: var(--sinch-comp-grid-margin-m);\n }\n}\n\n/* S */\n@media only screen and (max-width: 767px) {\n :host {\n grid-template-columns: repeat(var(--sinch-comp-grid-columns-s), minmax(0, 1fr));\n grid-column-gap: var(--sinch-comp-grid-gutter-s);\n grid-row-gap: var(--sinch-comp-grid-gutter-s);\n padding: var(--sinch-comp-grid-margin-s);\n }\n}\n</style>\n\n<slot name="item"></slot>\n';
2
+ const templateHTML = '<style>:host{display:grid;grid-template-columns:repeat(var(--sinch-comp-grid-columns-xl),minmax(0,1fr));grid-column-gap:var(--sinch-comp-grid-gutter-xl);grid-row-gap:var(--sinch-comp-grid-gutter-xl);padding:var(--sinch-comp-grid-margin-xl)}@media only screen and (max-width:1439px){:host{grid-template-columns:repeat(var(--sinch-comp-grid-columns-l),minmax(0,1fr));grid-column-gap:var(--sinch-comp-grid-gutter-l);grid-row-gap:var(--sinch-comp-grid-gutter-l);padding:var(--sinch-comp-grid-margin-l)}}@media only screen and (max-width:1023px){:host{grid-template-columns:repeat(var(--sinch-comp-grid-columns-m),minmax(0,1fr));grid-column-gap:var(--sinch-comp-grid-gutter-m);grid-row-gap:var(--sinch-comp-grid-gutter-m);padding:var(--sinch-comp-grid-margin-m)}}@media only screen and (max-width:767px){:host{grid-template-columns:repeat(var(--sinch-comp-grid-columns-s),minmax(0,1fr));grid-column-gap:var(--sinch-comp-grid-gutter-s);grid-row-gap:var(--sinch-comp-grid-gutter-s);padding:var(--sinch-comp-grid-margin-s)}}</style><slot name="item"></slot>';
3
3
  const template = document.createElement("template");
4
4
  template.innerHTML = templateHTML;
5
5
  class Grid extends NectaryElement {
@@ -1,6 +1,6 @@
1
1
  import { getIntegerAttribute, updateIntegerAttribute } from "../utils/dom.js";
2
2
  import { defineCustomElement, NectaryElement } from "../utils/element.js";
3
- const templateHTML = '<style>\n:host {\n display: block;\n grid-column: span 12;\n}\n\n:host([xl="2"]) {\n grid-column: span 2;\n}\n\n:host([xl="3"]) {\n grid-column: span 3;\n}\n\n:host([xl="4"]) {\n grid-column: span 4;\n}\n\n:host([xl="5"]) {\n grid-column: span 5;\n}\n\n:host([xl="6"]) {\n grid-column: span 6;\n}\n\n:host([xl="7"]) {\n grid-column: span 7;\n}\n\n:host([xl="8"]) {\n grid-column: span 8;\n}\n\n:host([xl="9"]) {\n grid-column: span 9;\n}\n\n:host([xl="10"]) {\n grid-column: span 10;\n}\n\n:host([xl="11"]) {\n grid-column: span 11;\n}\n\n:host([xl="12"]) {\n grid-column: span 12;\n}\n\n@media only screen and (max-width: 1439px) {\n :host {\n grid-column: span 12;\n }\n\n :host([l="2"]) {\n grid-column: span 2;\n }\n\n :host([l="3"]) {\n grid-column: span 3;\n }\n\n :host([l="4"]) {\n grid-column: span 4;\n }\n\n :host([l="5"]) {\n grid-column: span 5;\n }\n\n :host([l="6"]) {\n grid-column: span 6;\n }\n\n :host([l="7"]) {\n grid-column: span 7;\n }\n\n :host([l="8"]) {\n grid-column: span 8;\n }\n\n :host([l="9"]) {\n grid-column: span 9;\n }\n\n :host([l="10"]) {\n grid-column: span 10;\n }\n\n :host([l="11"]) {\n grid-column: span 11;\n }\n\n :host([l="12"]) {\n grid-column: span 12;\n }\n}\n\n@media only screen and (max-width: 1023px) {\n :host {\n grid-column: span 8;\n }\n\n :host([m="2"]) {\n grid-column: span 2;\n }\n\n :host([m="3"]) {\n grid-column: span 3;\n }\n\n :host([m="4"]) {\n grid-column: span 4;\n }\n\n :host([m="5"]) {\n grid-column: span 5;\n }\n\n :host([m="6"]) {\n grid-column: span 6;\n }\n\n :host([m="7"]) {\n grid-column: span 7;\n }\n\n :host([m="8"]) {\n grid-column: span 8;\n }\n}\n\n@media only screen and (max-width: 767px) {\n :host {\n grid-column: span 4;\n }\n\n :host([s="2"]) {\n grid-column: span 2;\n }\n\n :host([s="3"]) {\n grid-column: span 3;\n }\n\n :host([s="4"]) {\n grid-column: span 4;\n }\n}\n</style>\n\n<slot name="content"></slot>\n';
3
+ const templateHTML = '<style>:host{display:block;grid-column:span 12}:host([xl="2"]){grid-column:span 2}:host([xl="3"]){grid-column:span 3}:host([xl="4"]){grid-column:span 4}:host([xl="5"]){grid-column:span 5}:host([xl="6"]){grid-column:span 6}:host([xl="7"]){grid-column:span 7}:host([xl="8"]){grid-column:span 8}:host([xl="9"]){grid-column:span 9}:host([xl="10"]){grid-column:span 10}:host([xl="11"]){grid-column:span 11}:host([xl="12"]){grid-column:span 12}@media only screen and (max-width:1439px){:host{grid-column:span 12}:host([l="2"]){grid-column:span 2}:host([l="3"]){grid-column:span 3}:host([l="4"]){grid-column:span 4}:host([l="5"]){grid-column:span 5}:host([l="6"]){grid-column:span 6}:host([l="7"]){grid-column:span 7}:host([l="8"]){grid-column:span 8}:host([l="9"]){grid-column:span 9}:host([l="10"]){grid-column:span 10}:host([l="11"]){grid-column:span 11}:host([l="12"]){grid-column:span 12}}@media only screen and (max-width:1023px){:host{grid-column:span 8}:host([m="2"]){grid-column:span 2}:host([m="3"]){grid-column:span 3}:host([m="4"]){grid-column:span 4}:host([m="5"]){grid-column:span 5}:host([m="6"]){grid-column:span 6}:host([m="7"]){grid-column:span 7}:host([m="8"]){grid-column:span 8}}@media only screen and (max-width:767px){:host{grid-column:span 4}:host([s="2"]){grid-column:span 2}:host([s="3"]){grid-column:span 3}:host([s="4"]){grid-column:span 4}}</style><slot name="content"></slot>';
4
4
  const template = document.createElement("template");
5
5
  template.innerHTML = templateHTML;
6
6
  class GridItem extends NectaryElement {
@@ -3,7 +3,7 @@ import "../icon/index.js";
3
3
  import { updateAttribute, getAttribute, getIntegerAttribute, updateIntegerAttribute } from "../utils/dom.js";
4
4
  import { defineCustomElement, NectaryElement } from "../utils/element.js";
5
5
  import { getReactEventHandler } from "../utils/get-react-event-handler.js";
6
- const templateHTML = '<style>\n :host {\n display: contents;\n }\n\n #icon {\n --sinch-global-size-icon: 18px;\n }\n</style>\n\n<sinch-tooltip type="fast">\n <sinch-icon icons-version="2" name="circle-question" id="icon"></sinch-icon>\n</sinch-tooltip>\n';
6
+ const templateHTML = '<style>:host{display:contents}#icon{--sinch-global-size-icon:18px}</style><sinch-tooltip type="fast"><sinch-icon icons-version="2" name="circle-question" id="icon"></sinch-icon></sinch-tooltip>';
7
7
  const template = document.createElement("template");
8
8
  template.innerHTML = templateHTML;
9
9
  class HelpTooltip extends NectaryElement {
package/icon/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { getAttribute, updateAttribute } from "../utils/dom.js";
2
2
  import { defineCustomElement, NectaryElement } from "../utils/element.js";
3
- const templateHTML = '<style>\n:host {\n display: inline-block;\n}\n\n#icon {\n display: block;\n font-weight: var(--sinch-comp-icon-font-weight);\n font-size: var(--sinch-global-size-icon, 24px);\n -webkit-font-smoothing: antialiased;\n line-height: 1;\n white-space: nowrap;\n width: var(--sinch-global-size-icon, 24px);\n height: var(--sinch-global-size-icon, 24px);\n color: var(--sinch-global-color-icon, var(--sinch-sys-color-text-default));\n user-select: none;\n font-family: var(--sinch-comp-icon-font-family);\n font-feature-settings: var(--sinch-comp-icon-font-feature-settings);\n}\n\n#icon.zero-to-d {\n font-family: var(--sinch-comp-icon-font-family-zero-to-d);\n}\n\n#icon.e-to-o {\n font-family: var(--sinch-comp-icon-font-family-e-to-o);\n}\n\n#icon.p-to-z {\n font-family: var(--sinch-comp-icon-font-family-p-to-z);\n}\n</style>\n\n<span id="icon" role="img"></span>\n';
3
+ const templateHTML = '<style>:host{display:inline-block}#icon{display:block;font-weight:var(--sinch-comp-icon-font-weight);font-size:var(--sinch-global-size-icon, 24px);-webkit-font-smoothing:antialiased;line-height:1;white-space:nowrap;width:var(--sinch-global-size-icon,24px);height:var(--sinch-global-size-icon,24px);color:var(--sinch-global-color-icon,var(--sinch-sys-color-text-default));user-select:none;font-family:var(--sinch-comp-icon-font-family);font-feature-settings:var(--sinch-comp-icon-font-feature-settings)}#icon.zero-to-d{font-family:var(--sinch-comp-icon-font-family-zero-to-d)}#icon.e-to-o{font-family:var(--sinch-comp-icon-font-family-e-to-o)}#icon.p-to-z{font-family:var(--sinch-comp-icon-font-family-p-to-z)}</style><span id="icon" role="img"></span>';
4
4
  const template = document.createElement("template");
5
5
  template.innerHTML = templateHTML;
6
6
  class Icon extends NectaryElement {
@@ -5,7 +5,7 @@ import "../title/index.js";
5
5
  import { updateAttribute, getLiteralAttribute, updateLiteralAttribute, getAttribute, setClass } from "../utils/dom.js";
6
6
  import { defineCustomElement, NectaryElement } from "../utils/element.js";
7
7
  import { typeValues } from "./utils.js";
8
- const templateHTML = '<style>\n :host {\n display: block;\n }\n\n #wrapper {\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n padding: 16px;\n border-radius: var(--sinch-comp-inline-alert-shape-radius);\n box-sizing: border-box;\n width: 100%;\n }\n\n :host([type="success"]) #wrapper {\n background-color:\n var(\n --sinch-comp-inline-alert-color-success-default-background\n );\n }\n\n :host([type="warn"]) #wrapper {\n background-color:\n var(\n --sinch-comp-inline-alert-color-warning-default-background\n );\n }\n\n :host([type="error"]) #wrapper {\n background-color:\n var(\n --sinch-comp-inline-alert-color-error-default-background\n );\n }\n\n :host([type="info"]) #wrapper {\n background-color:\n var(\n --sinch-comp-inline-alert-color-info-default-background\n );\n }\n\n #icon-success,\n #icon-warn,\n #icon-error,\n #icon-info {\n display: none;\n }\n\n #icon-success {\n --sinch-global-color-icon:\n var(\n --sinch-comp-inline-alert-color-success-default-icon\n );\n }\n\n #icon-warn {\n --sinch-global-color-icon:\n var(\n --sinch-comp-inline-alert-color-warning-default-icon\n );\n }\n\n #icon-error {\n --sinch-global-color-icon:\n var(\n --sinch-comp-inline-alert-color-error-default-icon\n );\n }\n\n #icon-info {\n --sinch-global-color-icon:\n var(\n --sinch-comp-inline-alert-color-info-default-icon\n );\n }\n\n :host([type="success"]) #icon-success,\n :host([type="warn"]) #icon-warn,\n :host([type="error"]) #icon-error,\n :host([type="info"]) #icon-info {\n display: block;\n }\n\n #body-wrapper {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n margin-left: 8px;\n min-width: 0;\n flex: 1;\n }\n\n #caption {\n align-self: stretch;\n\n --sinch-comp-title-font: var(--sinch-comp-inline-alert-font-title);\n }\n\n :host([type="success"]) #caption {\n --sinch-global-color-text:\n var(\n --sinch-comp-inline-alert-color-success-default-text\n );\n }\n\n :host([type="warn"]) #caption {\n --sinch-global-color-text:\n var(\n --sinch-comp-inline-alert-color-warning-default-text\n );\n }\n\n :host([type="error"]) #caption {\n --sinch-global-color-text:\n var(\n --sinch-comp-inline-alert-color-error-default-text\n );\n }\n\n :host([type="info"]) #caption {\n --sinch-global-color-text:\n var(\n --sinch-comp-inline-alert-color-info-default-text\n );\n }\n\n #text {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-top: 0;\n align-self: stretch;\n\n --sinch-comp-rich-text-font: var(--sinch-comp-inline-alert-font-body);\n }\n\n :host([type="success"]) #text {\n --sinch-global-color-text:\n var(\n --sinch-comp-inline-alert-color-success-default-text\n );\n }\n\n :host([type="warn"]) #text {\n --sinch-global-color-text:\n var(\n --sinch-comp-inline-alert-color-warning-default-text\n );\n }\n\n :host([type="error"]) #text {\n --sinch-global-color-text:\n var(\n --sinch-comp-inline-alert-color-error-default-text\n );\n }\n\n :host([type="info"]) #text {\n --sinch-global-color-text:\n var(\n --sinch-comp-inline-alert-color-info-default-text\n );\n }\n\n :host([caption]) #text,\n :host([caption=""]) #text {\n margin-top: 4px;\n }\n\n #action {\n width: 100%;\n display: flex;\n margin-top: 16px;\n min-width: 0;\n gap: 16px;\n }\n\n #action.empty {\n display: none;\n }\n\n #close {\n margin-left: 16px;\n }\n\n #close.empty {\n display: none;\n }\n</style>\n\n<div id="wrapper">\n <sinch-icon icons-version="2" name="circle-info" id="icon-info"></sinch-icon>\n <sinch-icon icons-version="2" name="circle-check" id="icon-success"></sinch-icon>\n <sinch-icon icons-version="2" name="triangle-exclamation"\n id="icon-warn"\n ></sinch-icon>\n <sinch-icon icons-version="2" name="octagon-exclamation"\n id="icon-error"\n ></sinch-icon>\n <div id="body-wrapper">\n <sinch-title id="caption" level="3" type="s"></sinch-title>\n <sinch-rich-text id="text"></sinch-rich-text>\n <div id="action">\n <slot name="action"></slot>\n </div>\n </div>\n <div id="close">\n <slot name="close"></slot>\n </div>\n</div>\n';
8
+ const templateHTML = '<style>:host{display:block}#wrapper{display:flex;flex-direction:row;align-items:flex-start;padding:16px;border-radius:var(--sinch-comp-inline-alert-shape-radius);box-sizing:border-box;width:100%}:host([type=success]) #wrapper{background-color:var(--sinch-comp-inline-alert-color-success-default-background)}:host([type=warn]) #wrapper{background-color:var(--sinch-comp-inline-alert-color-warning-default-background)}:host([type=error]) #wrapper{background-color:var(--sinch-comp-inline-alert-color-error-default-background)}:host([type=info]) #wrapper{background-color:var(--sinch-comp-inline-alert-color-info-default-background)}#icon-error,#icon-info,#icon-success,#icon-warn{display:none}#icon-success{--sinch-global-color-icon:var(--sinch-comp-inline-alert-color-success-default-icon)}#icon-warn{--sinch-global-color-icon:var(--sinch-comp-inline-alert-color-warning-default-icon)}#icon-error{--sinch-global-color-icon:var(--sinch-comp-inline-alert-color-error-default-icon)}#icon-info{--sinch-global-color-icon:var(--sinch-comp-inline-alert-color-info-default-icon)}:host([type=error]) #icon-error,:host([type=info]) #icon-info,:host([type=success]) #icon-success,:host([type=warn]) #icon-warn{display:block}#body-wrapper{display:flex;flex-direction:column;align-items:flex-start;margin-left:8px;min-width:0;flex:1}#caption{align-self:stretch;--sinch-comp-title-font:var(--sinch-comp-inline-alert-font-title)}:host([type=success]) #caption{--sinch-global-color-text:var(--sinch-comp-inline-alert-color-success-default-text)}:host([type=warn]) #caption{--sinch-global-color-text:var(--sinch-comp-inline-alert-color-warning-default-text)}:host([type=error]) #caption{--sinch-global-color-text:var(--sinch-comp-inline-alert-color-error-default-text)}:host([type=info]) #caption{--sinch-global-color-text:var(--sinch-comp-inline-alert-color-info-default-text)}#text{display:flex;flex-direction:column;gap:8px;margin-top:0;align-self:stretch;--sinch-comp-rich-text-font:var(--sinch-comp-inline-alert-font-body)}:host([type=success]) #text{--sinch-global-color-text:var(--sinch-comp-inline-alert-color-success-default-text)}:host([type=warn]) #text{--sinch-global-color-text:var(--sinch-comp-inline-alert-color-warning-default-text)}:host([type=error]) #text{--sinch-global-color-text:var(--sinch-comp-inline-alert-color-error-default-text)}:host([type=info]) #text{--sinch-global-color-text:var(--sinch-comp-inline-alert-color-info-default-text)}:host([caption=""]) #text,:host([caption]) #text{margin-top:4px}#action{width:100%;display:flex;margin-top:16px;min-width:0;gap:16px}#action.empty{display:none}#close{margin-left:16px}#close.empty{display:none}</style><div id="wrapper"><sinch-icon icons-version="2" name="circle-info" id="icon-info"></sinch-icon><sinch-icon icons-version="2" name="circle-check" id="icon-success"></sinch-icon><sinch-icon icons-version="2" name="triangle-exclamation" id="icon-warn"></sinch-icon><sinch-icon icons-version="2" name="octagon-exclamation" id="icon-error"></sinch-icon><div id="body-wrapper"><sinch-title id="caption" level="3" type="s"></sinch-title><sinch-rich-text id="text"></sinch-rich-text><div id="action"><slot name="action"></slot></div></div><div id="close"><slot name="close"></slot></div></div>';
9
9
  const template = document.createElement("template");
10
10
  template.innerHTML = templateHTML;
11
11
  class InlineAlert extends NectaryElement {
package/input/index.js CHANGED
@@ -6,7 +6,7 @@ import { getReactEventHandler } from "../utils/get-react-event-handler.js";
6
6
  import { setFormValue, requestSubmitForm } from "../utils/form.js";
7
7
  import { sizeValues, DEFAULT_SIZE } from "../utils/size.js";
8
8
  import { splitValueAndMask, inputTypes, beginMaskedComposition, endMaskedComposition, deleteContentForward, deleteContentBackward, insertFromPaste, insertText, getMergedValueSliced, getMaskSymbols } from "./utils.js";
9
- const templateHTML = '<style>\n:host {\n all: initial;\n display: inline-block;\n vertical-align: middle;\n}\n\n#wrapper {\n position: relative;\n display: flex;\n flex-direction: row;\n align-items: center;\n box-sizing: border-box;\n border-radius: var(--sinch-local-shape-radius);\n width: 100%;\n height: var(--sinch-local-size);\n background-color: var(--sinch-comp-input-color-default-background-initial);\n\n /* Default values */\n --sinch-local-size: var(--sinch-comp-input-size-container-m);\n --sinch-global-size-icon: var(--sinch-comp-input-size-icon-m);\n --sinch-local-shape-radius: var(--sinch-comp-input-shape-radius-size-m);\n}\n\n:host([data-size="l"]) > #wrapper {\n --sinch-local-size: var(--sinch-comp-input-size-container-l);\n --sinch-global-size-icon: var(--sinch-comp-input-size-icon-l);\n --sinch-local-shape-radius: var(--sinch-comp-input-shape-radius-size-l);\n}\n\n:host([data-size="m"]) > #wrapper {\n --sinch-local-size: var(--sinch-comp-input-size-container-m);\n --sinch-global-size-icon: var(--sinch-comp-input-size-icon-m);\n --sinch-local-shape-radius: var(--sinch-comp-input-shape-radius-size-m);\n}\n\n:host([data-size="s"]) > #wrapper {\n --sinch-local-size: var(--sinch-comp-input-size-container-s);\n --sinch-global-size-icon: var(--sinch-comp-input-size-icon-s);\n --sinch-local-shape-radius: var(--sinch-comp-input-shape-radius-size-s);\n}\n\n#input-wrapper {\n position: relative;\n flex: 1;\n flex-basis: 0;\n min-width: 0;\n align-self: stretch;\n}\n\n#input {\n all: initial;\n width: 100%;\n height: 100%;\n padding: 0 12px;\n box-sizing: border-box;\n font: var(--sinch-comp-input-font-input);\n color: var(--sinch-comp-input-color-default-text-initial);\n}\n\n#input::placeholder {\n font: var(--sinch-comp-input-font-placeholder) !important;\n color: var(--sinch-comp-input-color-default-text-placeholder);\n opacity: 1;\n}\n\n#input:disabled {\n color: var(--sinch-comp-input-color-disabled-text-initial);\n -webkit-text-fill-color: var(--sinch-comp-input-color-disabled-text-initial);\n}\n\n#input-mask {\n display: none;\n position: absolute;\n inset: 0;\n padding: 0 12px;\n pointer-events: none;\n color: var(--sinch-comp-input-color-default-text-placeholder);\n white-space: pre;\n height: fit-content;\n margin: auto 0;\n overflow: hidden;\n}\n\n#border {\n position: absolute;\n border: 1px solid var(--sinch-comp-input-color-default-border-initial);\n border-radius: var(--sinch-local-shape-radius);\n inset: 0;\n pointer-events: none;\n}\n\n:host([disabled]) #border {\n border-color: var(--sinch-comp-input-color-disabled-border-initial);\n}\n\n#input-wrapper:focus-within + #border {\n border-color: var(--sinch-comp-input-color-default-border-focus);\n border-width: 2px;\n}\n\n:host([mask]) #input,\n#input-mask {\n font: var(--sinch-sys-font-body-monospace-m);\n}\n\n:host([mask]) #input-mask {\n display: block;\n}\n\n:host([invalid]:not([disabled])) #input-wrapper:not(:focus-within) + #border {\n border-color: var(--sinch-comp-input-color-invalid-border-initial);\n}\n\n#input[type="password"]:not(:placeholder-shown) {\n font-size: 1.5em;\n letter-spacing: 0.1em;\n}\n\n#icon-wrapper {\n position: relative;\n height: 100%;\n}\n\n#icon {\n position: absolute;\n display: flex;\n align-items: center;\n left: 12px;\n top: 0;\n bottom: 0;\n pointer-events: none;\n\n --sinch-global-color-icon: var(--sinch-comp-input-color-default-icon-initial);\n}\n\n:host([disabled]) #icon {\n --sinch-global-color-icon: var(--sinch-comp-input-color-disabled-icon-initial);\n}\n\n#icon-wrapper.empty {\n display: none;\n}\n\n#icon-wrapper.empty ~ #input-wrapper > #input,\n#icon-wrapper.empty ~ #input-wrapper > #input-mask {\n padding-left: 12px;\n}\n\n#icon-wrapper:not(.empty) ~ #input-wrapper > #input,\n#icon-wrapper:not(.empty) ~ #input-wrapper > #input-mask {\n padding-left: calc(var(--sinch-global-size-icon) + 20px);\n}\n\n#right {\n display: flex;\n flex-direction: row;\n align-self: stretch;\n align-items: center;\n gap: 4px;\n padding-right: 4px;\n}\n\n#right.empty {\n display: none;\n}\n\n#left {\n display: flex;\n flex-direction: row;\n align-self: stretch;\n align-items: center;\n gap: 4px;\n padding-left: 4px;\n}\n\n#left.empty {\n display: none;\n}\n</style>\n\n<div id="wrapper">\n <div id="left">\n <slot name="left"></slot>\n </div>\n <div id="icon-wrapper">\n <div id="icon">\n <slot name="icon"></slot>\n </div>\n </div>\n <div id="input-wrapper">\n <div id="input-mask"></div>\n <input id="input" type="text"/>\n </div>\n <div id="border"></div>\n <div id="right">\n <slot name="right"></slot>\n </div>\n</div>\n';
9
+ const templateHTML = '<style>:host{all:initial;display:inline-block;vertical-align:middle}#wrapper{position:relative;display:flex;flex-direction:row;align-items:center;box-sizing:border-box;border-radius:var(--sinch-local-shape-radius);width:100%;height:var(--sinch-local-size);background-color:var(--sinch-comp-input-color-default-background-initial);--sinch-local-size:var(--sinch-comp-input-size-container-m);--sinch-global-size-icon:var(--sinch-comp-input-size-icon-m);--sinch-local-shape-radius:var(--sinch-comp-input-shape-radius-size-m)}:host([data-size="l"])>#wrapper{--sinch-local-size:var(--sinch-comp-input-size-container-l);--sinch-global-size-icon:var(--sinch-comp-input-size-icon-l);--sinch-local-shape-radius:var(--sinch-comp-input-shape-radius-size-l)}:host([data-size="m"])>#wrapper{--sinch-local-size:var(--sinch-comp-input-size-container-m);--sinch-global-size-icon:var(--sinch-comp-input-size-icon-m);--sinch-local-shape-radius:var(--sinch-comp-input-shape-radius-size-m)}:host([data-size="s"])>#wrapper{--sinch-local-size:var(--sinch-comp-input-size-container-s);--sinch-global-size-icon:var(--sinch-comp-input-size-icon-s);--sinch-local-shape-radius:var(--sinch-comp-input-shape-radius-size-s)}#input-wrapper{position:relative;flex:1;flex-basis:0;min-width:0;align-self:stretch}#input{all:initial;width:100%;height:100%;padding:0 12px;box-sizing:border-box;font:var(--sinch-comp-input-font-input);color:var(--sinch-comp-input-color-default-text-initial)}#input::placeholder{font:var(--sinch-comp-input-font-placeholder)!important;color:var(--sinch-comp-input-color-default-text-placeholder);opacity:1}#input:disabled{color:var(--sinch-comp-input-color-disabled-text-initial);-webkit-text-fill-color:var(--sinch-comp-input-color-disabled-text-initial)}#input-mask{display:none;position:absolute;inset:0;padding:0 12px;pointer-events:none;color:var(--sinch-comp-input-color-default-text-placeholder);white-space:pre;height:fit-content;margin:auto 0;overflow:hidden}#border{position:absolute;border:1px solid var(--sinch-comp-input-color-default-border-initial);border-radius:var(--sinch-local-shape-radius);inset:0;pointer-events:none}:host([disabled]) #border{border-color:var(--sinch-comp-input-color-disabled-border-initial)}#input-wrapper:focus-within+#border{border-color:var(--sinch-comp-input-color-default-border-focus);border-width:2px}#input-mask,:host([mask]) #input{font:var(--sinch-sys-font-body-monospace-m)}:host([mask]) #input-mask{display:block}:host([invalid]:not([disabled])) #input-wrapper:not(:focus-within)+#border{border-color:var(--sinch-comp-input-color-invalid-border-initial)}#input[type=password]:not(:placeholder-shown){font-size:1.5em;letter-spacing:.1em}#icon-wrapper{position:relative;height:100%}#icon{position:absolute;display:flex;align-items:center;left:12px;top:0;bottom:0;pointer-events:none;--sinch-global-color-icon:var(--sinch-comp-input-color-default-icon-initial)}:host([disabled]) #icon{--sinch-global-color-icon:var(--sinch-comp-input-color-disabled-icon-initial)}#icon-wrapper.empty{display:none}#icon-wrapper.empty~#input-wrapper>#input,#icon-wrapper.empty~#input-wrapper>#input-mask{padding-left:12px}#icon-wrapper:not(.empty)~#input-wrapper>#input,#icon-wrapper:not(.empty)~#input-wrapper>#input-mask{padding-left:calc(var(--sinch-global-size-icon) + 20px)}#right{display:flex;flex-direction:row;align-self:stretch;align-items:center;gap:4px;padding-right:4px}#right.empty{display:none}#left{display:flex;flex-direction:row;align-self:stretch;align-items:center;gap:4px;padding-left:4px}#left.empty{display:none}</style><div id="wrapper"><div id="left"><slot name="left"></slot></div><div id="icon-wrapper"><div id="icon"><slot name="icon"></slot></div></div><div id="input-wrapper"><div id="input-mask"></div><input id="input" type="text"></div><div id="border"></div><div id="right"><slot name="right"></slot></div></div>';
10
10
  const template = document.createElement("template");
11
11
  template.innerHTML = templateHTML;
12
12
  class Input extends NectaryElement {
package/link/index.js CHANGED
@@ -2,7 +2,7 @@ import "../icon/index.js";
2
2
  import { isAttrEqual, updateAttribute, updateBooleanAttribute, isAttrTrue, getAttribute, getBooleanAttribute } from "../utils/dom.js";
3
3
  import { defineCustomElement, NectaryElement } from "../utils/element.js";
4
4
  import { getReactEventHandler } from "../utils/get-react-event-handler.js";
5
- const templateHTML = '<style>\n :host {\n display: inline;\n }\n\n a {\n font: var(--sinch-comp-link-default-font-initial);\n font-size: inherit;\n line-height: inherit;\n text-decoration: var(--sinch-comp-link-default-text-decoration-initial);\n color: var(--sinch-comp-link-color-default-text-initial);\n border-radius: 0.5em;\n white-space: nowrap;\n\n --sinch-global-color-icon: var(--sinch-comp-link-color-default-icon-initial);\n }\n\n a:hover {\n text-decoration: var(--sinch-comp-link-default-text-decoration-hover);\n color: var(--sinch-comp-link-color-default-text-hover);\n\n --sinch-global-color-icon: var(--sinch-comp-link-color-default-icon-hover);\n }\n\n a:focus-visible {\n outline: 2px solid var(--sinch-comp-link-color-default-outline-focus);\n outline-offset: 2px;\n }\n\n :host([standalone]) {\n display: block;\n }\n\n :host([standalone]) a {\n display: block;\n font: var(--sinch-comp-link-standalone-font-initial);\n font-size: inherit;\n line-height: inherit;\n text-decoration: none;\n width: fit-content;\n }\n\n #external-icon,\n #standalone-icon {\n display: none;\n height: 1em;\n }\n\n #icon-prefix {\n display: none;\n margin-left: -0.25em;\n }\n\n :host([external]:not([standalone])) #external-icon {\n display: inline-block;\n margin-left: 0.25em;\n vertical-align: -0.2em;\n\n --sinch-global-size-icon: 1em;\n }\n\n :host([standalone][external]) #external-icon {\n display: inline-block;\n vertical-align: -0.4em;\n\n --sinch-global-size-icon: 1.5em;\n }\n\n :host([standalone]) #icon-prefix {\n display: inline;\n }\n\n :host([standalone]:not([external])) #standalone-icon {\n display: inline-block;\n vertical-align: -0.4em;\n\n --sinch-global-size-icon: 1.5em;\n }\n\n :host([disabled]) a {\n color: var(--sinch-comp-link-color-disabled-text-initial);\n pointer-events: none;\n cursor: initial;\n text-decoration: var(--sinch-comp-link-default-text-decoration-disabled);\n\n --sinch-global-color-icon: var(--sinch-comp-link-color-disabled-icon-initial);\n }\n\n #content {\n white-space: var(--sinch-global-text-white-space, normal);\n }\n</style>\n\n<a referrerpolicy="no-referer" aria-hidden="true">\n <span id="content"></span>\n <span id="icon-prefix">&nbsp;</span>\n <sinch-icon icons-version="2" name="fa-arrow-up-right" id="external-icon"></sinch-icon>\n <sinch-icon icons-version="2" name="fa-arrow-right" id="standalone-icon"></sinch-icon>\n</a>\n';
5
+ 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">&nbsp;</span><sinch-icon icons-version="2" name="fa-arrow-up-right" id="external-icon"></sinch-icon><sinch-icon icons-version="2" name="fa-arrow-right" id="standalone-icon"></sinch-icon></a>';
6
6
  const template = document.createElement("template");
7
7
  template.innerHTML = templateHTML;
8
8
  class Link extends NectaryElement {
package/list/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { defineCustomElement, NectaryElement } from "../utils/element.js";
2
- const templateHTML = '<style>\n:host {\n display: block;\n height: 100%;\n}\n\n#wrapper {\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n overflow-y: auto;\n}\n</style>\n\n<div id="wrapper">\n <slot></slot>\n</div>\n';
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
3
  const template = document.createElement("template");
4
4
  template.innerHTML = templateHTML;
5
5
  class List extends NectaryElement {
@@ -1,5 +1,5 @@
1
1
  import { defineCustomElement, NectaryElement } from "../utils/element.js";
2
- const templateHTML = '<style>\n:host {\n display: block;\n outline: none;\n}\n\n#wrapper {\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n overflow: hidden;\n padding: 8px 0;\n background-color: var(--sinch-comp-list-color-default-background-initial);\n border-bottom: 1px solid var(--sinch-comp-list-color-default-border-initial);\n}\n\n:host(:last-child) > #wrapper {\n border-bottom: none;\n}\n\n:host(:hover) > #wrapper {\n background-color: var(--sinch-comp-list-color-default-background-hover);\n}\n</style>\n\n<div id="wrapper">\n <slot name="content"></slot>\n</div>\n';
2
+ const templateHTML = '<style>:host{display:block;outline:0}#wrapper{width:100%;height:100%;box-sizing:border-box;overflow:hidden;padding:8px 0;background-color:var(--sinch-comp-list-color-default-background-initial);border-bottom:1px solid var(--sinch-comp-list-color-default-border-initial)}:host(:last-child)>#wrapper{border-bottom:none}:host(:hover)>#wrapper{background-color:var(--sinch-comp-list-color-default-background-hover)}</style><div id="wrapper"><slot name="content"></slot></div>';
3
3
  const template = document.createElement("template");
4
4
  template.innerHTML = templateHTML;
5
5
  class ListItem extends NectaryElement {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nectary/components",
3
- "version": "5.0.2",
3
+ "version": "5.0.3",
4
4
  "files": [
5
5
  "**/*/*.css",
6
6
  "**/*/*.json",
@@ -19,12 +19,12 @@
19
19
  "access": "public"
20
20
  },
21
21
  "scripts": {
22
- "build": "rm -rf utils/shared && cp -r ../shared utils/shared && vite build && vite build --mode bundle && npx tsc --declaration --emitDeclarationOnly && npx tsx ../scripts/tsc-alias.ts --alias '@nectary/shared=./utils/shared'",
22
+ "build": "rm -rf utils/shared && cp -r ../shared utils/shared && npx tsx ../scripts/minify-html.ts && vite build && vite build --mode bundle && npx tsc --declaration --emitDeclarationOnly && npx tsx ../scripts/tsc-alias.ts --alias '@nectary/shared=./utils/shared'",
23
23
  "dev": "vite build --watch"
24
24
  },
25
25
  "dependencies": {
26
26
  "@babel/runtime": "^7.22.15",
27
- "@nectary/assets": "3.0.0"
27
+ "@nectary/assets": "3.0.1"
28
28
  },
29
29
  "devDependencies": {
30
30
  "@babel/cli": "^7.22.15",
@@ -4,7 +4,7 @@ import { defineCustomElement, NectaryElement } from "../utils/element.js";
4
4
  import { getRect } from "../utils/rect.js";
5
5
  import { getReactEventHandler } from "../utils/get-react-event-handler.js";
6
6
  import { isTargetEqual, getTargetIndexInParent } from "../utils/event-target.js";
7
- const templateHTML = '<style>\n :host {\n display: inline-block;\n vertical-align: middle;\n outline: none;\n }\n\n #wrapper {\n display: flex;\n justify-content: center;\n gap: 8px;\n width: 100%;\n height: var(--sinch-local-size);\n\n --sinch-local-size: 24px;\n }\n\n button {\n all: initial;\n position: relative;\n display: flex;\n justify-content: center;\n align-items: center;\n min-width: var(--sinch-local-size);\n height: var(--sinch-local-size);\n cursor: pointer;\n border-radius: var(--sinch-comp-pagination-shape-radius);\n user-select: none;\n\n --sinch-global-color-icon:\n var(\n --sinch-comp-pagination-color-default-icon-default\n );\n }\n\n button:focus-visible::before {\n content: "";\n position: absolute;\n inset: -3px;\n border: 2px solid var(--sinch-comp-pagination-color-default-outline-focus);\n border-radius: calc(var(--sinch-comp-pagination-shape-radius) + 3px);\n pointer-events: none;\n }\n\n button:disabled {\n --sinch-global-color-icon:\n var(\n --sinch-comp-pagination-color-disabled-icon-initial\n );\n\n cursor: initial;\n }\n\n button:enabled:hover {\n background-color:\n var(\n --sinch-comp-pagination-color-default-background-hover\n );\n }\n\n button > * {\n display: block;\n overflow: hidden;\n pointer-events: none;\n }\n\n .page {\n font: var(--sinch-comp-pagination-font-default-page-number);\n color: var(--sinch-comp-pagination-color-default-text-initial);\n background-color:\n var(\n --sinch-comp-pagination-color-default-background-initial\n );\n padding: 0 4px;\n box-sizing: border-box;\n }\n\n .page.dots > span {\n display: none;\n }\n\n .page.dots::after {\n content: "...";\n }\n\n .page.active {\n font: var(--sinch-comp-pagination-font-checked-page-number);\n background-color:\n var(\n --sinch-comp-pagination-color-checked-background-initial\n );\n pointer-events: none;\n cursor: initial;\n }\n\n .page.active:hover {\n background-color:\n var(\n --sinch-comp-pagination-color-checked-background-hover\n );\n }\n\n .page.hidden {\n display: none;\n }\n\n #left,\n #right {\n --sinch-icon-size: 24px;\n }\n</style>\n\n<div id="wrapper">\n <button id="left">\n <sinch-icon icons-version="2" name="fa-angle-left" id="icon-left"></sinch-icon>\n </button>\n <button class="page"><span>1</span></button>\n <button class="page active"><span>2</span></button>\n <button class="page"><span>3</span></button>\n <button class="page"><span>4</span></button>\n <button class="page"><span>5</span></button>\n <button class="page dots"><span>6</span></button>\n <button class="page"><span>20</span></button>\n <button id="right">\n <sinch-icon icons-version="2" name="fa-angle-right" id="icon-right"></sinch-icon>\n </button>\n</div>\n';
7
+ const templateHTML = '<style>:host{display:inline-block;vertical-align:middle;outline:0}#wrapper{display:flex;justify-content:center;gap:8px;width:100%;height:var(--sinch-local-size);--sinch-local-size:24px}button{all:initial;position:relative;display:flex;justify-content:center;align-items:center;min-width:var(--sinch-local-size);height:var(--sinch-local-size);cursor:pointer;border-radius:var(--sinch-comp-pagination-shape-radius);user-select:none;--sinch-global-color-icon:var(--sinch-comp-pagination-color-default-icon-default)}button:focus-visible::before{content:"";position:absolute;inset:-3px;border:2px solid var(--sinch-comp-pagination-color-default-outline-focus);border-radius:calc(var(--sinch-comp-pagination-shape-radius) + 3px);pointer-events:none}button:disabled{--sinch-global-color-icon:var(--sinch-comp-pagination-color-disabled-icon-initial);cursor:initial}button:enabled:hover{background-color:var(--sinch-comp-pagination-color-default-background-hover)}button>*{display:block;overflow:hidden;pointer-events:none}.page{font:var(--sinch-comp-pagination-font-default-page-number);color:var(--sinch-comp-pagination-color-default-text-initial);background-color:var(--sinch-comp-pagination-color-default-background-initial);padding:0 4px;box-sizing:border-box}.page.dots>span{display:none}.page.dots::after{content:"..."}.page.active{font:var(--sinch-comp-pagination-font-checked-page-number);background-color:var(--sinch-comp-pagination-color-checked-background-initial);pointer-events:none;cursor:initial}.page.active:hover{background-color:var(--sinch-comp-pagination-color-checked-background-hover)}.page.hidden{display:none}#left,#right{--sinch-icon-size:24px}</style><div id="wrapper"><button id="left"><sinch-icon icons-version="2" name="fa-angle-left" id="icon-left"></sinch-icon></button> <button class="page"><span>1</span></button> <button class="page active"><span>2</span></button> <button class="page"><span>3</span></button> <button class="page"><span>4</span></button> <button class="page"><span>5</span></button> <button class="page dots"><span>6</span></button> <button class="page"><span>20</span></button> <button id="right"><sinch-icon icons-version="2" name="fa-angle-right" id="icon-right"></sinch-icon></button></div>';
8
8
  const NUM_BUTTONS = 7;
9
9
  const MIDDLE_BTN_INDEX = Math.floor(NUM_BUTTONS / 2);
10
10
  const FIRST_BTN_INDEX = 0;
@@ -2,7 +2,7 @@ import "../dialog/index.js";
2
2
  import { updateAttribute, getAttribute, updateBooleanAttribute, getBooleanAttribute, isAttrTrue } from "../utils/dom.js";
3
3
  import { defineCustomElement, NectaryElement } from "../utils/element.js";
4
4
  import { getReactEventHandler } from "../utils/get-react-event-handler.js";
5
- const templateHTML = '<style>\n #persisted-dialog {\n --sinch-dialog-close-button-display: none;\n }\n\n ::slotted(*) {\n display: block;\n }\n</style>\n\n<sinch-dialog id="persisted-dialog">\n <div slot="icon"><slot id="icon" name="icon"></slot></div>\n <div slot="content"><slot name="content"></slot></div>\n <div slot="buttons"><slot name="buttons"></slot></div>\n</sinch-dialog>\n';
5
+ const templateHTML = '<style>#persisted-dialog{--sinch-dialog-close-button-display:none}::slotted(*){display:block}</style><sinch-dialog id="persisted-dialog"><div slot="icon"><slot id="icon" name="icon"></slot></div><div slot="content"><slot name="content"></slot></div><div slot="buttons"><slot name="buttons"></slot></div></sinch-dialog>';
6
6
  const template = document.createElement("template");
7
7
  template.innerHTML = templateHTML;
8
8
  function isVisible(elementStyle) {
package/pop/index.js CHANGED
@@ -7,7 +7,7 @@ import { throttleAnimationFrame } from "../utils/throttle.js";
7
7
  import { getReactEventHandler } from "../utils/get-react-event-handler.js";
8
8
  import { isTargetEqual } from "../utils/event-target.js";
9
9
  import { orientationValues, disableOverscroll, enableOverscroll } from "./utils.js";
10
- const templateHTML = '<style>\n:host {\n display: contents;\n position: relative;\n}\n\ndialog {\n position: fixed;\n left: 0;\n top: 0;\n margin: 0;\n outline: none;\n padding: 0;\n border: none;\n box-sizing: border-box;\n max-width: unset;\n max-height: unset;\n z-index: 1;\n background: none;\n overflow: visible;\n}\n\ndialog:not([open]) {\n display: none;\n}\n\ndialog::backdrop {\n background-color: transparent;\n}\n\n#content {\n position: relative;\n z-index: 1;\n}\n\n#target-open {\n display: flex;\n flex-direction: column;\n position: absolute;\n left: 0;\n top: 0;\n}\n\n#focus {\n display: none;\n position: absolute;\n width: 0;\n height: 0;\n}\n</style>\n\n<slot id="target" name="target" aria-haspopup="dialog" aria-expanded="false"></slot>\n<div id="focus"></div>\n<dialog id="dialog">\n <div id="target-open">\n <slot name="target-open"></slot>\n </div>\n <div id="content">\n <slot name="content"></slot>\n </div>\n</dialog>\n';
10
+ const templateHTML = '<style>:host{display:contents;position:relative}dialog{position:fixed;left:0;top:0;margin:0;outline:0;padding:0;border:none;box-sizing:border-box;max-width:unset;max-height:unset;z-index:1;background:0 0;overflow:visible}dialog:not([open]){display:none}dialog::backdrop{background-color:transparent}#content{position:relative;z-index:1}#target-open{display:flex;flex-direction:column;position:absolute;left:0;top:0}#focus{display:none;position:absolute;width:0;height:0}</style><slot id="target" name="target" aria-haspopup="dialog" aria-expanded="false"></slot><div id="focus"></div><dialog id="dialog"><div id="target-open"><slot name="target-open"></slot></div><div id="content"><slot name="content"></slot></div></dialog>';
11
11
  const template = document.createElement("template");
12
12
  template.innerHTML = templateHTML;
13
13
  class Pop extends NectaryElement {
package/popover/index.js CHANGED
@@ -5,7 +5,7 @@ import { defineCustomElement, NectaryElement } from "../utils/element.js";
5
5
  import { rectOverlap } from "../utils/rect.js";
6
6
  import { getReactEventHandler } from "../utils/get-react-event-handler.js";
7
7
  import { getPopOrientation, orientationValues } from "./utils.js";
8
- const templateHTML = '<style>\n:host {\n display: contents;\n}\n\n#content-wrapper {\n position: relative;\n padding-top: 4px;\n width: fit-content;\n min-width: 100%;\n}\n\n:host([tip]) #content-wrapper {\n padding-top: 12px;\n filter: drop-shadow(var(--sinch-comp-popover-shadow));\n}\n\n:host([orientation^="top"]) #content-wrapper {\n padding-top: 0;\n padding-bottom: 4px;\n}\n\n:host([orientation^="top"][tip]) #content-wrapper {\n padding-top: 0;\n padding-bottom: 12px;\n}\n\n#content {\n background-color: var(--sinch-comp-popover-color-default-background-initial);\n border: 1px solid var(--sinch-comp-popover-color-default-border-initial);\n border-radius: var(--sinch-comp-popover-shape-radius);\n box-shadow: var(--sinch-comp-popover-shadow);\n overflow: hidden;\n}\n\n:host([tip]) #content {\n box-shadow: none;\n}\n\n#tip {\n position: absolute;\n left: 50%;\n top: 13px;\n transform: translateX(-50%) rotate(180deg);\n transform-origin: top center;\n fill: var(--sinch-comp-popover-color-default-background-initial);\n stroke: var(--sinch-comp-popover-color-default-border-initial);\n stroke-linecap: square;\n pointer-events: none;\n display: none;\n}\n\n:host([orientation^="top"]) #tip {\n transform: translateX(-50%) rotate(0deg);\n top: calc(100% - 13px);\n}\n\n:host([tip]) #tip:not(.hidden) {\n display: block;\n}\n</style>\n\n<sinch-pop id="pop" inset="4">\n <slot name="target" slot="target"></slot>\n <div id="content-wrapper" slot="content">\n <div id="content">\n <slot name="content"></slot>\n </div>\n <svg id="tip" width="16" height="9" aria-hidden="true">\n <path d="m0 0 8 8 8 -8"/>\n </svg>\n </div>\n</sinch-pop>\n';
8
+ const templateHTML = '<style>:host{display:contents}#content-wrapper{position:relative;padding-top:4px;width:fit-content;min-width:100%}:host([tip]) #content-wrapper{padding-top:12px;filter:drop-shadow(var(--sinch-comp-popover-shadow))}:host([orientation^=top]) #content-wrapper{padding-top:0;padding-bottom:4px}:host([orientation^=top][tip]) #content-wrapper{padding-top:0;padding-bottom:12px}#content{background-color:var(--sinch-comp-popover-color-default-background-initial);border:1px solid var(--sinch-comp-popover-color-default-border-initial);border-radius:var(--sinch-comp-popover-shape-radius);box-shadow:var(--sinch-comp-popover-shadow);overflow:hidden}:host([tip]) #content{box-shadow:none}#tip{position:absolute;left:50%;top:13px;transform:translateX(-50%) rotate(180deg);transform-origin:top center;fill:var(--sinch-comp-popover-color-default-background-initial);stroke:var(--sinch-comp-popover-color-default-border-initial);stroke-linecap:square;pointer-events:none;display:none}:host([orientation^=top]) #tip{transform:translateX(-50%) rotate(0);top:calc(100% - 13px)}:host([tip]) #tip:not(.hidden){display:block}</style><sinch-pop id="pop" inset="4"><slot name="target" slot="target"></slot><div id="content-wrapper" slot="content"><div id="content"><slot name="content"></slot></div><svg id="tip" width="16" height="9" aria-hidden="true"><path d="m0 0 8 8 8 -8"/></svg></div></sinch-pop>';
9
9
  const TIP_SIZE = 16;
10
10
  const template = document.createElement("template");
11
11
  template.innerHTML = templateHTML;
package/progress/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import "../text/index.js";
2
2
  import { isAttrEqual, updateBooleanAttribute, isAttrTrue, attrValueToInteger, getIntegerAttribute, updateAttribute, getBooleanAttribute } from "../utils/dom.js";
3
3
  import { defineCustomElement, NectaryElement } from "../utils/element.js";
4
- const templateHTML = '<style>\n:host {\n display: block;\n}\n\n#wrapper {\n display: flex;\n align-items: center;\n height: 24px;\n}\n\n#progress,\n#bar {\n height: 8px;\n border-radius: 4px;\n}\n\n#progress {\n background-color: var(--sinch-comp-progress-color-default-background-initial);\n flex: 1;\n min-width: 0;\n}\n\n#bar {\n background-color: var(--sinch-comp-progress-color-default-bar-initial);\n width: 0;\n}\n\n#text {\n display: none;\n width: 46px;\n\n --sinch-global-color-text: var(--sinch-comp-progress-color-default-text-initial);\n}\n\n:host([detailed]) #text {\n display: block;\n}\n</style>\n\n<div id="wrapper">\n <sinch-text id="text" type="m"></sinch-text>\n <div id="progress">\n <div id="bar"></div>\n </div>\n</div>\n';
4
+ const templateHTML = '<style>:host{display:block}#wrapper{display:flex;align-items:center;height:24px}#bar,#progress{height:8px;border-radius:4px}#progress{background-color:var(--sinch-comp-progress-color-default-background-initial);flex:1;min-width:0}#bar{background-color:var(--sinch-comp-progress-color-default-bar-initial);width:0}#text{display:none;width:46px;--sinch-global-color-text:var(--sinch-comp-progress-color-default-text-initial)}:host([detailed]) #text{display:block}</style><div id="wrapper"><sinch-text id="text" type="m"></sinch-text><div id="progress"><div id="bar"></div></div></div>';
5
5
  const template = document.createElement("template");
6
6
  template.innerHTML = templateHTML;
7
7
  class Progress extends NectaryElement {
@@ -4,7 +4,7 @@ import { defineCustomElement, NectaryElement } from "../utils/element.js";
4
4
  import { getRect } from "../utils/rect.js";
5
5
  import { getReactEventHandler } from "../utils/get-react-event-handler.js";
6
6
  import { getTargetByAttribute } from "../utils/event-target.js";
7
- const templateHTML = '<style>\n:host {\n display: block;\n}\n\n#wrapper {\n display: flex;\n width: 100%;\n}\n\n::slotted(sinch-progress-stepper-item) {\n flex: 1;\n min-width: 0;\n}\n</style>\n\n<div id="wrapper">\n <slot></slot>\n</div>\n';
7
+ const templateHTML = '<style>:host{display:block}#wrapper{display:flex;width:100%}::slotted(sinch-progress-stepper-item){flex:1;min-width:0}</style><div id="wrapper"><slot></slot></div>';
8
8
  const template = document.createElement("template");
9
9
  template.innerHTML = templateHTML;
10
10
  class ProgressStepper extends NectaryElement {
@@ -3,7 +3,7 @@ import "../text/index.js";
3
3
  import { isAttrEqual, updateExplicitBooleanAttribute, updateBooleanAttribute, isAttrTrue, updateAttribute, getAttribute, getBooleanAttribute } from "../utils/dom.js";
4
4
  import { defineCustomElement, NectaryElement } from "../utils/element.js";
5
5
  import { ATTR_PROGRESS_STEPPER_ITEM_STATUS, ATTR_PROGRESS_STEPPER_ITEM_CHECKED, ATTR_PROGRESS_STEPPER_ITEM_ACTIVE_DESCENDANT, isProgressStepperItemActiveDescendant, isProgressStepperItemActive } from "./utils.js";
6
- const templateHTML = '<style>\n :host {\n display: block;\n outline: none;\n }\n\n #button {\n position: relative;\n display: flex;\n flex-direction: column;\n gap: 4px;\n width: 100%;\n height: 100%;\n padding: 8px 4px 4px;\n box-sizing: border-box;\n cursor: pointer;\n border-radius: var(--sinch-comp-progress-stepper-step-shape-radius);\n }\n\n :host([data-status="inactive"]) > #button {\n cursor: not-allowed;\n }\n\n :host([data-status="incomplete"]:hover) > #button {\n background-color:\n var(\n --sinch-comp-progress-stepper-step-color-incomplete-background-hover\n );\n }\n\n :host([data-status="complete"]:hover) > #button {\n background-color:\n var(\n --sinch-comp-progress-stepper-step-color-complete-background-hover\n );\n }\n\n :host([data-status="invalid"]:hover) > #button {\n background-color:\n var(\n --sinch-comp-progress-stepper-step-color-invalid-background-hover\n );\n }\n\n #outline {\n position: absolute;\n inset: -2px;\n border:\n 2px solid\n var(--sinch-comp-progress-stepper-step-color-outline-focus);\n border-radius:\n calc(\n var(--sinch-comp-progress-stepper-step-shape-radius) + 2px\n );\n pointer-events: none;\n opacity: 0;\n }\n\n :host(:focus-visible) #outline {\n opacity: 1;\n }\n\n #text {\n flex-shrink: 1;\n flex-basis: auto;\n min-width: 0;\n transform: translate(0, 0);\n will-change: transform;\n transition: transform 0.25s ease-out;\n padding-right: 24px;\n }\n\n :host([data-status="incomplete"]) #text {\n --sinch-global-color-text:\n var(\n --sinch-comp-progress-stepper-step-color-incomplete-label-default\n );\n --sinch-comp-text-font:\n var(\n --sinch-comp-progress-stepper-step-font-incomplete-label\n );\n }\n\n :host([data-status="complete"]) #text {\n --sinch-global-color-text:\n var(\n --sinch-comp-progress-stepper-step-color-complete-label-default\n );\n --sinch-comp-text-font:\n var(\n --sinch-comp-progress-stepper-step-font-complete-label\n );\n }\n\n :host([data-status="inactive"]) #text {\n --sinch-global-color-text:\n var(\n --sinch-comp-progress-stepper-step-color-inactive-label-default\n );\n --sinch-comp-text-font:\n var(\n --sinch-comp-progress-stepper-step-font-inactive-label\n );\n }\n\n :host([invalid]) #text {\n --sinch-global-color-text:\n var(\n --sinch-comp-progress-stepper-step-color-invalid-label-default\n );\n --sinch-comp-text-font:\n var(\n --sinch-comp-progress-stepper-step-font-invalid-label\n );\n\n transform: translate(24px, 0);\n }\n\n :host([data-status="incomplete"][data-checked]) #text {\n --sinch-global-color-text:\n var(\n --sinch-comp-progress-stepper-step-color-incomplete-current-label-default\n );\n --sinch-comp-text-font:\n var(\n --sinch-comp-progress-stepper-step-font-incomplete-current-label\n );\n }\n\n :host([data-status="complete"][data-checked]) #text {\n --sinch-global-color-text:\n var(\n --sinch-comp-progress-stepper-step-color-complete-current-label-default\n );\n --sinch-comp-text-font:\n var(\n --sinch-comp-progress-stepper-step-font-complete-current-label\n );\n }\n\n :host([invalid][data-checked]) #text {\n --sinch-global-color-text:\n var(\n --sinch-comp-progress-stepper-step-color-invalid-label-default\n );\n --sinch-comp-text-font:\n var(\n --sinch-comp-progress-stepper-step-font-invalid-current-label\n );\n }\n\n #icon-error {\n position: absolute;\n left: 0;\n top: 4px;\n pointer-events: none;\n opacity: 0;\n transition: opacity 0.25s ease-in-out;\n\n --sinch-global-color-icon:\n var(\n --sinch-comp-progress-stepper-step-color-invalid-icon-default\n );\n --sinch-global-size-icon: 16px;\n }\n\n :host([invalid]) #icon-error {\n opacity: 1;\n }\n\n #progress {\n height: 8px;\n border-radius: 4px;\n transition: background-color 0.25s ease-in-out;\n }\n\n :host([data-status="incomplete"]) #progress {\n background-color:\n var(\n --sinch-comp-progress-stepper-step-color-incomplete-progress-background\n );\n }\n\n :host([data-status="complete"]) #progress {\n background-color:\n var(\n --sinch-comp-progress-stepper-step-color-complete-progress-background\n );\n }\n\n :host([data-status="inactive"]) #progress {\n background-color:\n var(\n --sinch-comp-progress-stepper-step-color-inactive-progress-background\n );\n }\n\n :host([invalid]) #progress {\n background-color:\n var(\n --sinch-comp-progress-stepper-step-color-invalid-progress-background\n );\n }\n\n #bar {\n width: 8px;\n height: 8px;\n border-radius: 4px;\n opacity: 0;\n transition: width 0.25s ease-in-out, opacity 0.25s ease-in-out;\n }\n\n :host([data-status="incomplete"]) #bar {\n background-color:\n var(\n --sinch-comp-progress-stepper-step-color-incomplete-progress-bar\n );\n }\n\n :host([data-status="complete"]) #bar {\n background-color:\n var(\n --sinch-comp-progress-stepper-step-color-complete-progress-bar\n );\n width: 100%;\n }\n\n :host([data-status="incomplete"]:not([invalid])) #bar,\n :host([data-status="complete"]:not([invalid])) #bar {\n opacity: 1;\n }\n\n #label-bar {\n position: relative;\n }\n</style>\n\n<div id="button">\n <div id="progress">\n <div id="bar"></div>\n </div>\n <div id="label-bar">\n <sinch-icon icons-version="2" name="triangle-exclamation"\n id="icon-error"\n aria-hidden="true"\n ></sinch-icon>\n <sinch-text id="text" type="m"></sinch-text>\n </div>\n <div id="outline"></div>\n</div>\n';
6
+ const templateHTML = '<style>:host{display:block;outline:0}#button{position:relative;display:flex;flex-direction:column;gap:4px;width:100%;height:100%;padding:8px 4px 4px;box-sizing:border-box;cursor:pointer;border-radius:var(--sinch-comp-progress-stepper-step-shape-radius)}:host([data-status=inactive])>#button{cursor:not-allowed}:host([data-status=incomplete]:hover)>#button{background-color:var(--sinch-comp-progress-stepper-step-color-incomplete-background-hover)}:host([data-status=complete]:hover)>#button{background-color:var(--sinch-comp-progress-stepper-step-color-complete-background-hover)}:host([data-status=invalid]:hover)>#button{background-color:var(--sinch-comp-progress-stepper-step-color-invalid-background-hover)}#outline{position:absolute;inset:-2px;border:2px solid var(--sinch-comp-progress-stepper-step-color-outline-focus);border-radius:calc(var(--sinch-comp-progress-stepper-step-shape-radius) + 2px);pointer-events:none;opacity:0}:host(:focus-visible) #outline{opacity:1}#text{flex-shrink:1;flex-basis:auto;min-width:0;transform:translate(0,0);will-change:transform;transition:transform .25s ease-out;padding-right:24px}:host([data-status=incomplete]) #text{--sinch-global-color-text:var(--sinch-comp-progress-stepper-step-color-incomplete-label-default);--sinch-comp-text-font:var(--sinch-comp-progress-stepper-step-font-incomplete-label)}:host([data-status=complete]) #text{--sinch-global-color-text:var(--sinch-comp-progress-stepper-step-color-complete-label-default);--sinch-comp-text-font:var(--sinch-comp-progress-stepper-step-font-complete-label)}:host([data-status=inactive]) #text{--sinch-global-color-text:var(--sinch-comp-progress-stepper-step-color-inactive-label-default);--sinch-comp-text-font:var(--sinch-comp-progress-stepper-step-font-inactive-label)}:host([invalid]) #text{--sinch-global-color-text:var(--sinch-comp-progress-stepper-step-color-invalid-label-default);--sinch-comp-text-font:var(--sinch-comp-progress-stepper-step-font-invalid-label);transform:translate(24px,0)}:host([data-status=incomplete][data-checked]) #text{--sinch-global-color-text:var(--sinch-comp-progress-stepper-step-color-incomplete-current-label-default);--sinch-comp-text-font:var(--sinch-comp-progress-stepper-step-font-incomplete-current-label)}:host([data-status=complete][data-checked]) #text{--sinch-global-color-text:var(--sinch-comp-progress-stepper-step-color-complete-current-label-default);--sinch-comp-text-font:var(--sinch-comp-progress-stepper-step-font-complete-current-label)}:host([invalid][data-checked]) #text{--sinch-global-color-text:var(--sinch-comp-progress-stepper-step-color-invalid-label-default);--sinch-comp-text-font:var(--sinch-comp-progress-stepper-step-font-invalid-current-label)}#icon-error{position:absolute;left:0;top:4px;pointer-events:none;opacity:0;transition:opacity .25s ease-in-out;--sinch-global-color-icon:var(--sinch-comp-progress-stepper-step-color-invalid-icon-default);--sinch-global-size-icon:16px}:host([invalid]) #icon-error{opacity:1}#progress{height:8px;border-radius:4px;transition:background-color .25s ease-in-out}:host([data-status=incomplete]) #progress{background-color:var(--sinch-comp-progress-stepper-step-color-incomplete-progress-background)}:host([data-status=complete]) #progress{background-color:var(--sinch-comp-progress-stepper-step-color-complete-progress-background)}:host([data-status=inactive]) #progress{background-color:var(--sinch-comp-progress-stepper-step-color-inactive-progress-background)}:host([invalid]) #progress{background-color:var(--sinch-comp-progress-stepper-step-color-invalid-progress-background)}#bar{width:8px;height:8px;border-radius:4px;opacity:0;transition:width .25s ease-in-out,opacity .25s ease-in-out}:host([data-status=incomplete]) #bar{background-color:var(--sinch-comp-progress-stepper-step-color-incomplete-progress-bar)}:host([data-status=complete]) #bar{background-color:var(--sinch-comp-progress-stepper-step-color-complete-progress-bar);width:100%}:host([data-status=complete]:not([invalid])) #bar,:host([data-status=incomplete]:not([invalid])) #bar{opacity:1}#label-bar{position:relative}</style><div id="button"><div id="progress"><div id="bar"></div></div><div id="label-bar"><sinch-icon icons-version="2" name="triangle-exclamation" id="icon-error" aria-hidden="true"></sinch-icon><sinch-text id="text" type="m"></sinch-text></div><div id="outline"></div></div>';
7
7
  const template = document.createElement("template");
8
8
  template.innerHTML = templateHTML;
9
9
  class ProgressStepperItem extends NectaryElement {
package/radio/index.js CHANGED
@@ -3,7 +3,7 @@ import { defineCustomElement, NectaryElement } from "../utils/element.js";
3
3
  import { getReactEventHandler } from "../utils/get-react-event-handler.js";
4
4
  import { getTargetByAttribute } from "../utils/event-target.js";
5
5
  import { setFormValue } from "../utils/form.js";
6
- const templateHTML = '<style>\n:host {\n display: block;\n}\n\n#wrapper {\n display: flex;\n flex-direction: var(--sinch-comp-radio-direction, column);\n gap: var(--sinch-comp-radio-gap, 8px);\n box-sizing: border-box;\n width: 100%;\n}\n</style>\n\n<div id="wrapper">\n <slot></slot>\n</div>\n';
6
+ const templateHTML = '<style>:host{display:block}#wrapper{display:flex;flex-direction:var(--sinch-comp-radio-direction,column);gap:var(--sinch-comp-radio-gap,8px);box-sizing:border-box;width:100%}</style><div id="wrapper"><slot></slot></div>';
7
7
  const template = document.createElement("template");
8
8
  template.innerHTML = templateHTML;
9
9
  class Radio extends NectaryElement {
@@ -1,6 +1,6 @@
1
1
  import { isAttrEqual, updateBooleanAttribute, isAttrTrue, updateExplicitBooleanAttribute, getBooleanAttribute, updateAttribute, getAttribute } from "../utils/dom.js";
2
2
  import { defineCustomElement, NectaryElement } from "../utils/element.js";
3
- const templateHTML = '<style>\n:host {\n display: block;\n outline: none;\n}\n\n#wrapper {\n display: flex;\n flex-direction: row;\n box-sizing: border-box;\n width: 100%;\n min-height: 24px;\n\n --sinch-local-color-background: var(--sinch-comp-radio-color-default-background-initial);\n --sinch-local-color-background-hover: var(--sinch-comp-radio-color-default-background-hover);\n --sinch-local-color-background-active: var(--sinch-comp-radio-color-default-background-active);\n --sinch-local-color-border: var(--sinch-comp-radio-color-default-border-initial);\n --sinch-local-color-border-hover: var(--sinch-comp-radio-color-default-border-hover);\n --sinch-local-color-border-active: var(--sinch-comp-radio-color-default-border-active);\n --sinch-local-color-knob: var(--sinch-comp-radio-color-checked-knob-initial);\n --sinch-local-color-knob-hover: var(--sinch-comp-radio-color-checked-knob-hover);\n --sinch-local-color-knob-active: var(--sinch-comp-radio-color-checked-knob-active);\n --sinch-local-color-text: var(--sinch-comp-radio-color-default-label-initial);\n}\n\n:host([data-invalid]) > #wrapper {\n --sinch-local-color-border: var(--sinch-comp-radio-color-invalid-border-initial);\n --sinch-local-color-border-hover: var(--sinch-comp-radio-color-invalid-border-hover);\n --sinch-local-color-border-active: var(--sinch-comp-radio-color-invalid-border-active);\n --sinch-local-color-text: var(--sinch-comp-radio-color-invalid-label-initial);\n}\n\n:host([checked]) > #wrapper {\n --sinch-local-color-border: var(--sinch-comp-radio-color-checked-border-initial);\n --sinch-local-color-border-hover: var(--sinch-comp-radio-color-checked-border-hover);\n --sinch-local-color-border-active: var(--sinch-comp-radio-color-checked-border-active);\n}\n\n:host([disabled]) > #wrapper {\n --sinch-local-color-background: var(--sinch-comp-radio-color-disabled-background-initial);\n --sinch-local-color-border: var(--sinch-comp-radio-color-disabled-border-initial);\n --sinch-local-color-text: var(--sinch-comp-radio-color-disabled-label-initial);\n}\n\n:host([disabled][checked]) > #wrapper {\n --sinch-local-color-border: var(--sinch-comp-radio-color-checked-disabled-border-initial);\n --sinch-local-color-knob: var(--sinch-comp-radio-color-checked-disabled-knob-initial);\n --sinch-local-color-text: var(--sinch-comp-radio-color-checked-disabled-label-initial);\n}\n\n#input {\n all: initial;\n display: block;\n width: 18px;\n height: 18px;\n cursor: pointer;\n}\n\n:host([disabled]) #input {\n cursor: initial;\n}\n\n#input-wrapper {\n position: relative;\n width: 18px;\n height: 18px;\n align-self: flex-start;\n margin-top: 3px;\n}\n\n/* Outline */\n#input::before {\n content: "";\n position: absolute;\n inset: -3px;\n border: 2px solid var(--sinch-comp-radio-color-default-outline-focus);\n border-radius: 50%;\n transition: opacity 0.1s linear;\n opacity: 0;\n box-sizing: border-box;\n pointer-events: none;\n}\n\n:host(:focus-visible) #input::before {\n opacity: 1;\n}\n\n/* Circle Border / Background */\n#input::after {\n content: "";\n position: absolute;\n width: 18px;\n height: 18px;\n inset: 0;\n margin: auto;\n background-color: var(--sinch-local-color-background);\n border: 1px solid var(--sinch-local-color-border);\n border-radius: 50%;\n box-sizing: border-box;\n pointer-events: none;\n}\n\n:host(:hover:not([disabled])) #input::after {\n background-color: var(--sinch-local-color-background-hover);\n border-color: var(--sinch-local-color-border-hover);\n}\n\n:host(:active:not([disabled])) #input::after {\n background-color: var(--sinch-local-color-background-active);\n border-color: var(--sinch-local-color-border-active);\n}\n\n#knob {\n position: absolute;\n width: 10px;\n height: 10px;\n inset: 0;\n margin: auto;\n border-radius: 50%;\n transition: opacity 0.1s linear;\n opacity: 0;\n background-color: var(--sinch-local-color-knob);\n pointer-events: none;\n}\n\n:host([checked]) #knob {\n opacity: 1;\n}\n\n:host(:hover:not([disabled])) #knob {\n background-color: var(--sinch-local-color-knob-hover);\n}\n\n:host(:active:not([disabled])) #knob {\n background-color: var(--sinch-local-color-knob-active);\n}\n\n@media (prefers-reduced-motion) {\n #knob,\n #input::before,\n #input::after {\n transition: none;\n }\n}\n\n#label {\n flex: 1;\n align-self: center;\n padding-left: 8px;\n font: var(--sinch-comp-radio-font-label);\n color: var(--sinch-local-color-text);\n cursor: pointer;\n}\n\n#label:empty {\n display: none;\n}\n\n:host([disabled]) #label {\n cursor: initial;\n}\n\n</style>\n\n<div id="wrapper">\n <div id="input-wrapper">\n <div id="input"></div>\n <div id="knob"></div>\n </div>\n <span id="label"></span>\n</div>\n';
3
+ const templateHTML = '<style>:host{display:block;outline:0}#wrapper{display:flex;flex-direction:row;box-sizing:border-box;width:100%;min-height:24px;--sinch-local-color-background:var(--sinch-comp-radio-color-default-background-initial);--sinch-local-color-background-hover:var(--sinch-comp-radio-color-default-background-hover);--sinch-local-color-background-active:var(--sinch-comp-radio-color-default-background-active);--sinch-local-color-border:var(--sinch-comp-radio-color-default-border-initial);--sinch-local-color-border-hover:var(--sinch-comp-radio-color-default-border-hover);--sinch-local-color-border-active:var(--sinch-comp-radio-color-default-border-active);--sinch-local-color-knob:var(--sinch-comp-radio-color-checked-knob-initial);--sinch-local-color-knob-hover:var(--sinch-comp-radio-color-checked-knob-hover);--sinch-local-color-knob-active:var(--sinch-comp-radio-color-checked-knob-active);--sinch-local-color-text:var(--sinch-comp-radio-color-default-label-initial)}:host([data-invalid])>#wrapper{--sinch-local-color-border:var(--sinch-comp-radio-color-invalid-border-initial);--sinch-local-color-border-hover:var(--sinch-comp-radio-color-invalid-border-hover);--sinch-local-color-border-active:var(--sinch-comp-radio-color-invalid-border-active);--sinch-local-color-text:var(--sinch-comp-radio-color-invalid-label-initial)}:host([checked])>#wrapper{--sinch-local-color-border:var(--sinch-comp-radio-color-checked-border-initial);--sinch-local-color-border-hover:var(--sinch-comp-radio-color-checked-border-hover);--sinch-local-color-border-active:var(--sinch-comp-radio-color-checked-border-active)}:host([disabled])>#wrapper{--sinch-local-color-background:var(--sinch-comp-radio-color-disabled-background-initial);--sinch-local-color-border:var(--sinch-comp-radio-color-disabled-border-initial);--sinch-local-color-text:var(--sinch-comp-radio-color-disabled-label-initial)}:host([disabled][checked])>#wrapper{--sinch-local-color-border:var(--sinch-comp-radio-color-checked-disabled-border-initial);--sinch-local-color-knob:var(--sinch-comp-radio-color-checked-disabled-knob-initial);--sinch-local-color-text:var(--sinch-comp-radio-color-checked-disabled-label-initial)}#input{all:initial;display:block;width:18px;height:18px;cursor:pointer}:host([disabled]) #input{cursor:initial}#input-wrapper{position:relative;width:18px;height:18px;align-self:flex-start;margin-top:3px}#input::before{content:"";position:absolute;inset:-3px;border:2px solid var(--sinch-comp-radio-color-default-outline-focus);border-radius:50%;transition:opacity .1s linear;opacity:0;box-sizing:border-box;pointer-events:none}:host(:focus-visible) #input::before{opacity:1}#input::after{content:"";position:absolute;width:18px;height:18px;inset:0;margin:auto;background-color:var(--sinch-local-color-background);border:1px solid var(--sinch-local-color-border);border-radius:50%;box-sizing:border-box;pointer-events:none}:host(:hover:not([disabled])) #input::after{background-color:var(--sinch-local-color-background-hover);border-color:var(--sinch-local-color-border-hover)}:host(:active:not([disabled])) #input::after{background-color:var(--sinch-local-color-background-active);border-color:var(--sinch-local-color-border-active)}#knob{position:absolute;width:10px;height:10px;inset:0;margin:auto;border-radius:50%;transition:opacity .1s linear;opacity:0;background-color:var(--sinch-local-color-knob);pointer-events:none}:host([checked]) #knob{opacity:1}:host(:hover:not([disabled])) #knob{background-color:var(--sinch-local-color-knob-hover)}:host(:active:not([disabled])) #knob{background-color:var(--sinch-local-color-knob-active)}@media (prefers-reduced-motion){#input::after,#input::before,#knob{transition:none}}#label{flex:1;align-self:center;padding-left:8px;font:var(--sinch-comp-radio-font-label);color:var(--sinch-local-color-text);cursor:pointer}#label:empty{display:none}:host([disabled]) #label{cursor:initial}</style><div id="wrapper"><div id="input-wrapper"><div id="input"></div><div id="knob"></div></div><span id="label"></span></div>';
4
4
  const template = document.createElement("template");
5
5
  template.innerHTML = templateHTML;
6
6
  class RadioOption extends NectaryElement {
@@ -7,7 +7,7 @@ import { defineCustomElement, NectaryElement } from "../utils/element.js";
7
7
  import { getReactEventHandler } from "../utils/get-react-event-handler.js";
8
8
  import { parseMarkdown } from "../utils/markdown.js";
9
9
  import { createParseVisitor, sizeValues } from "./utils.js";
10
- const templateHTML = '<style>\n:host {\n display: block;\n\n --sinch-comp-rich-text-font: var(--sinch-sys-font-body-m);\n}\n\n:host([size="s"]) {\n --sinch-comp-rich-text-font: var(--sinch-sys-font-body-s);\n}\n\n:host([size="xs"]) {\n --sinch-comp-rich-text-font: var(--sinch-sys-font-body-xs);\n}\n\n:host([size="xxs"]) {\n --sinch-comp-rich-text-font: var(--sinch-sys-font-body-xxs);\n}\n\n#wrapper {\n font: var(--sinch-comp-rich-text-font);\n color: var(--sinch-global-color-text, var(--sinch-sys-color-text-default));\n}\n\n.em1 {\n font-style: italic;\n}\n\n.em2 {\n font-weight: var(--sinch-ref-typography-font-weight-700);\n}\n\n.strikethrough {\n text-decoration: line-through;\n}\n\n.link {\n font: var(--sinch-comp-link-default-font-initial);\n color: var(--sinch-comp-link-color-default-text-initial);\n text-decoration: underline;\n}\n\n.link:hover {\n color: var(--sinch-comp-link-color-default-text-hover);\n text-decoration: none;\n}\n\n.code {\n font: var(--sinch-comp-code-tag-font-text);\n line-height: inherit;\n font-size: inherit;\n border: 1px solid var(--sinch-comp-code-tag-color-default-border-initial);\n background-color: var(--sinch-comp-code-tag-color-default-background-initial);\n padding: 0 0.25em;\n border-radius: var(--sinch-comp-code-tag-shape-radius);\n}\n\n.emoji {\n --sinch-global-size-icon: 1em;\n --sinch-comp-emoji-vertical-align: -0.2em;\n}\n\n.p,\n.ul,\n.ol {\n margin: 0;\n}\n\n.ul,\n.ol {\n padding-left: 1.5em;\n}\n\n.p + .p,\n.p + .ul,\n.p + .ol,\n.ol + .p,\n.ul + .p {\n margin-top: 0.5em;\n}\n\n.li > .p + .ul,\n.li > .p + .ol {\n margin-top: 0;\n}\n</style>\n\n<div id="wrapper"></div>\n';
10
+ const templateHTML = '<style>:host{display:block;--sinch-comp-rich-text-font:var(--sinch-sys-font-body-m)}:host([size="s"]){--sinch-comp-rich-text-font:var(--sinch-sys-font-body-s)}:host([size=xs]){--sinch-comp-rich-text-font:var(--sinch-sys-font-body-xs)}:host([size=xxs]){--sinch-comp-rich-text-font:var(--sinch-sys-font-body-xxs)}#wrapper{font:var(--sinch-comp-rich-text-font);color:var(--sinch-global-color-text,var(--sinch-sys-color-text-default))}.em1{font-style:italic}.em2{font-weight:var(--sinch-ref-typography-font-weight-700)}.strikethrough{text-decoration:line-through}.link{font:var(--sinch-comp-link-default-font-initial);color:var(--sinch-comp-link-color-default-text-initial);text-decoration:underline}.link:hover{color:var(--sinch-comp-link-color-default-text-hover);text-decoration:none}.code{font:var(--sinch-comp-code-tag-font-text);line-height:inherit;font-size:inherit;border:1px solid var(--sinch-comp-code-tag-color-default-border-initial);background-color:var(--sinch-comp-code-tag-color-default-background-initial);padding:0 .25em;border-radius:var(--sinch-comp-code-tag-shape-radius)}.emoji{--sinch-global-size-icon:1em;--sinch-comp-emoji-vertical-align:-0.2em}.ol,.p,.ul{margin:0}.ol,.ul{padding-left:1.5em}.ol+.p,.p+.ol,.p+.p,.p+.ul,.ul+.p{margin-top:.5em}.li>.p+.ol,.li>.p+.ul{margin-top:0}</style><div id="wrapper"></div>';
11
11
  const template = document.createElement("template");
12
12
  template.innerHTML = templateHTML;
13
13
  class RichText extends NectaryElement {
@@ -5,7 +5,7 @@ import { isElementFocused } from "../utils/slot.js";
5
5
  import { getReactEventHandler } from "../utils/get-react-event-handler.js";
6
6
  import { parseMarkdown } from "../utils/markdown.js";
7
7
  import { createParseVisitor, getEndRange, formatList, handleEmojiMousedown, formatOutdent, formatIndent, formatInline, insertLink, insertText, insertLineBreak, deleteContentBackward, setBrowserCaret, serializeMarkdown, getSelectionInfo, isSelectionEqual, insertFromPaste, isEditorEmpty } from "./utils.js";
8
- const templateHTML = '<style>\n:host {\n display: block;\n}\n\n#wrapper {\n display: flex;\n flex-direction: column;\n position: relative;\n width: 100%;\n box-sizing: border-box;\n background-color: var(--sinch-comp-textarea-color-default-background-initial);\n border-radius: var(--sinch-local-shape-radius);\n overflow: hidden;\n\n --sinch-local-shape-radius: var(--sinch-comp-textarea-shape-radius);\n}\n\n#input-wrapper {\n position: relative;\n padding: 8px 10px 8px 12px;\n box-sizing: border-box;\n}\n\n#input {\n font: var(--sinch-comp-textarea-font-input);\n color: var(--sinch-comp-textarea-color-default-text-initial);\n white-space: pre-wrap;\n overflow-wrap: break-word;\n border: none;\n outline: none;\n}\n\n#placeholder {\n display: none;\n position: absolute;\n left: 0;\n top: 0;\n font: var(--sinch-comp-textarea-font-input);\n color: var(--sinch-comp-textarea-color-default-text-placeholder);\n padding: 8px 10px 8px 12px;\n pointer-events: none;\n user-select: none;\n}\n\n#input.empty + #placeholder {\n display: block;\n}\n\n#border {\n position: absolute;\n border: 1px solid var(--sinch-comp-textarea-color-default-border-initial);\n border-radius: var(--sinch-local-shape-radius);\n inset: 0;\n pointer-events: none;\n}\n\n:host([invalid]) #border {\n border-color: var(--sinch-comp-textarea-color-invalid-border-initial);\n}\n\n:host([disabled]) {\n color: var(--sinch-comp-textarea-color-disabled-text-initial);\n -webkit-text-fill-color: var(--sinch-comp-textarea-color-disabled-text-initial);\n}\n\n:host([disabled]) #border {\n border-color: var(--sinch-comp-textarea-color-disabled-border-initial);\n}\n\n:host(:not([disabled])) #input-wrapper:focus-within ~ #border {\n border-color: var(--sinch-comp-textarea-color-default-border-focus);\n border-width: 2px;\n}\n\n.p,\n.oli,\n.uli {\n margin: 0;\n}\n\n.oli.l0,\n.uli.l0 {\n margin-left: 6px;\n}\n\n.oli.l1,\n.uli.l1 {\n margin-left: 36px;\n}\n\n.oli.l2,\n.uli.l2 {\n margin-left: 64px;\n}\n\n.oli.l3,\n.uli.l3 {\n margin-left: 92px;\n}\n\n.oli.l4,\n.uli.l4 {\n margin-left: 120px;\n}\n\n.uli.l0 {\n counter-reset: list-0 list-1 list-2 list-3 list-4;\n}\n\n.uli.l1 {\n counter-reset: list-1 list-2 list-3 list-4;\n}\n\n.uli.l2 {\n counter-reset: list-2 list-3 list-4;\n}\n\n.uli.l3 {\n counter-reset: list-3 list-4;\n}\n\n.uli.l4 {\n counter-reset: list-4;\n}\n\n.oli.l0 {\n counter-reset: list-1 list-2 list-3 list-4;\n}\n\n.oli.l1 {\n counter-reset: list-2 list-3 list-4;\n}\n\n.oli.l2 {\n counter-reset: list-3 list-4;\n}\n\n.oli.l3 {\n counter-reset: list-4;\n}\n\n.oli.l0::before {\n counter-increment: list-0;\n content: counter(list-0, decimal) ". ";\n}\n\n.oli.l1::before {\n counter-increment: list-1;\n content: counter(list-1, lower-alpha) ". ";\n}\n\n.oli.l2::before {\n counter-increment: list-2;\n content: counter(list-2, lower-roman) ". ";\n}\n\n.oli.l3::before {\n counter-increment: list-3;\n content: counter(list-3, decimal) ". ";\n}\n\n.oli.l4::before {\n counter-increment: list-4;\n content: counter(list-4, lower-alpha) ". ";\n}\n\n.oli:first-of-type,\n.oli.block,\n.p + .oli {\n counter-reset: list-0 list-1 list-2 list-3 list-4;\n}\n\n.uli::before {\n content: "\\25CF";\n display: inline-block;\n width: 16px;\n}\n\n.uli.block,\n.oli.block,\n.uli + .p,\n.oli + .p,\n.p + .uli,\n.p + .oli {\n margin-top: 0.5em;\n}\n\n.c {\n font: var(--sinch-comp-code-tag-font-text);\n font-size: inherit;\n line-height: inherit;\n color: var(--sinch-comp-code-tag-color-default-text-initial);\n border: 1px solid var(--sinch-comp-code-tag-color-default-border-initial);\n background-color: var(--sinch-comp-code-tag-color-default-background-initial);\n padding: 0 0.25em;\n border-radius: var(--sinch-comp-code-tag-shape-radius);\n}\n\n.l {\n font: var(--sinch-comp-link-default-font-initial);\n color: var(--sinch-comp-link-color-default-text-initial);\n text-decoration: underline;\n}\n\n.i {\n font-style: italic;\n}\n\n.b {\n font-weight: bold;\n}\n\n.s {\n text-decoration: line-through;\n}\n\n.e {\n background-repeat: no-repeat;\n background-position: 50% 50%;\n background-size: contain;\n width: 1em;\n height: 1em;\n vertical-align: -0.2em;\n}\n\n#top-wrapper {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 8px;\n padding: 4px 4px 0;\n}\n\n#top-wrapper.empty {\n display: none;\n}\n\n#bottom-wrapper {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 8px;\n padding: 0 4px 4px;\n}\n\n#bottom-wrapper.empty {\n display: none;\n}\n</style>\n\n<div id="wrapper">\n <div id="top-wrapper">\n <slot id="top" name="top"></slot>\n </div>\n <div id="input-wrapper">\n <div\n id="input"\n contentEditable\n suppressContentEditableWarning\n autoCapitalize="false"\n autoCorrect="false"\n autoSave="false"\n spellCheck="false"\n >\n </div>\n <div id="placeholder"></div>\n </div>\n <div id="border"></div>\n <div id="bottom-wrapper">\n <slot id="bottom" name="bottom"></slot>\n </div>\n</div>\n';
8
+ const templateHTML = '<style>:host{display:block}#wrapper{display:flex;flex-direction:column;position:relative;width:100%;box-sizing:border-box;background-color:var(--sinch-comp-textarea-color-default-background-initial);border-radius:var(--sinch-local-shape-radius);overflow:hidden;--sinch-local-shape-radius:var(--sinch-comp-textarea-shape-radius)}#input-wrapper{position:relative;padding:8px 10px 8px 12px;box-sizing:border-box}#input{font:var(--sinch-comp-textarea-font-input);color:var(--sinch-comp-textarea-color-default-text-initial);white-space:pre-wrap;overflow-wrap:break-word;border:none;outline:0}#placeholder{display:none;position:absolute;left:0;top:0;font:var(--sinch-comp-textarea-font-input);color:var(--sinch-comp-textarea-color-default-text-placeholder);padding:8px 10px 8px 12px;pointer-events:none;user-select:none}#input.empty+#placeholder{display:block}#border{position:absolute;border:1px solid var(--sinch-comp-textarea-color-default-border-initial);border-radius:var(--sinch-local-shape-radius);inset:0;pointer-events:none}:host([invalid]) #border{border-color:var(--sinch-comp-textarea-color-invalid-border-initial)}:host([disabled]){color:var(--sinch-comp-textarea-color-disabled-text-initial);-webkit-text-fill-color:var(--sinch-comp-textarea-color-disabled-text-initial)}:host([disabled]) #border{border-color:var(--sinch-comp-textarea-color-disabled-border-initial)}:host(:not([disabled])) #input-wrapper:focus-within~#border{border-color:var(--sinch-comp-textarea-color-default-border-focus);border-width:2px}.oli,.p,.uli{margin:0}.oli.l0,.uli.l0{margin-left:6px}.oli.l1,.uli.l1{margin-left:36px}.oli.l2,.uli.l2{margin-left:64px}.oli.l3,.uli.l3{margin-left:92px}.oli.l4,.uli.l4{margin-left:120px}.uli.l0{counter-reset:list-0 list-1 list-2 list-3 list-4}.uli.l1{counter-reset:list-1 list-2 list-3 list-4}.uli.l2{counter-reset:list-2 list-3 list-4}.uli.l3{counter-reset:list-3 list-4}.uli.l4{counter-reset:list-4}.oli.l0{counter-reset:list-1 list-2 list-3 list-4}.oli.l1{counter-reset:list-2 list-3 list-4}.oli.l2{counter-reset:list-3 list-4}.oli.l3{counter-reset:list-4}.oli.l0::before{counter-increment:list-0;content:counter(list-0,decimal) ". "}.oli.l1::before{counter-increment:list-1;content:counter(list-1,lower-alpha) ". "}.oli.l2::before{counter-increment:list-2;content:counter(list-2,lower-roman) ". "}.oli.l3::before{counter-increment:list-3;content:counter(list-3,decimal) ". "}.oli.l4::before{counter-increment:list-4;content:counter(list-4,lower-alpha) ". "}.oli.block,.oli:first-of-type,.p+.oli{counter-reset:list-0 list-1 list-2 list-3 list-4}.uli::before{content:"\\25CF";display:inline-block;width:16px}.oli+.p,.oli.block,.p+.oli,.p+.uli,.uli+.p,.uli.block{margin-top:.5em}.c{font:var(--sinch-comp-code-tag-font-text);font-size:inherit;line-height:inherit;color:var(--sinch-comp-code-tag-color-default-text-initial);border:1px solid var(--sinch-comp-code-tag-color-default-border-initial);background-color:var(--sinch-comp-code-tag-color-default-background-initial);padding:0 .25em;border-radius:var(--sinch-comp-code-tag-shape-radius)}.l{font:var(--sinch-comp-link-default-font-initial);color:var(--sinch-comp-link-color-default-text-initial);text-decoration:underline}.i{font-style:italic}.b{font-weight:700}.s{text-decoration:line-through}.e{background-repeat:no-repeat;background-position:50% 50%;background-size:contain;width:1em;height:1em;vertical-align:-.2em}#top-wrapper{display:flex;flex-direction:row;align-items:center;gap:8px;padding:4px 4px 0}#top-wrapper.empty{display:none}#bottom-wrapper{display:flex;flex-direction:row;align-items:center;gap:8px;padding:0 4px 4px}#bottom-wrapper.empty{display:none}</style><div id="wrapper"><div id="top-wrapper"><slot id="top" name="top"></slot></div><div id="input-wrapper"><div id="input" contenteditable suppresscontenteditablewarning autocapitalize="false" autocorrect="false" autosave="false" spellcheck="false"></div><div id="placeholder"></div></div><div id="border"></div><div id="bottom-wrapper"><slot id="bottom" name="bottom"></slot></div></div>';
9
9
  const template = document.createElement("template");
10
10
  template.innerHTML = templateHTML;
11
11
  const SUPPORTS_SHADOW_SELECTION = typeof window.ShadowRoot.prototype.getSelection === "function";