@watermarkinsights/ripple 5.19.0-alpha.1 → 5.19.0-alpha.10

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 (85) hide show
  1. package/dist/cjs/{app-globals-c7500647.js → app-globals-ed9c9c88.js} +1 -1
  2. package/dist/cjs/loader.cjs.js +1 -1
  3. package/dist/cjs/priv-navigator-item.cjs.entry.js +1 -1
  4. package/dist/cjs/priv-option-list.cjs.entry.js +1 -1
  5. package/dist/cjs/ripple.cjs.js +1 -1
  6. package/dist/cjs/wm-action-menu_2.cjs.entry.js +1 -1
  7. package/dist/cjs/wm-file.cjs.entry.js +35 -19
  8. package/dist/cjs/wm-navigator.cjs.entry.js +12 -5
  9. package/dist/cjs/wm-nested-select.cjs.entry.js +1 -1
  10. package/dist/cjs/wm-option_2.cjs.entry.js +1 -1
  11. package/dist/cjs/wm-uploader.cjs.entry.js +4 -4
  12. package/dist/collection/components/datepickers/datepicker.css +0 -31
  13. package/dist/collection/components/selects/priv-option-list/priv-option-list.css +1 -1
  14. package/dist/collection/components/selects/wm-nested-select/wm-nested-select.css +1 -1
  15. package/dist/collection/components/selects/wm-option/wm-option.css +8 -3
  16. package/dist/collection/components/wm-file/wm-file.css +89 -13
  17. package/dist/collection/components/wm-file/wm-file.js +34 -18
  18. package/dist/collection/components/wm-menuitem/wm-menuitem.css +16 -43
  19. package/dist/collection/components/wm-navigator/priv-navigator-button/priv-navigator-button.css +0 -31
  20. package/dist/collection/components/wm-navigator/priv-navigator-item/priv-navigator-item.css +11 -2
  21. package/dist/collection/components/wm-navigator/wm-navigator.css +8 -2
  22. package/dist/collection/components/wm-navigator/wm-navigator.js +11 -4
  23. package/dist/collection/components/wm-pagination/wm-pagination.css +0 -31
  24. package/dist/collection/components/wm-search/wm-search.css +0 -31
  25. package/dist/collection/components/wm-snackbar/wm-snackbar.css +0 -31
  26. package/dist/collection/components/wm-timepicker/wm-timepicker.css +0 -31
  27. package/dist/collection/components/wm-uploader/wm-uploader.css +41 -37
  28. package/dist/collection/components/wm-uploader/wm-uploader.js +3 -3
  29. package/dist/esm/{app-globals-f089afb3.js → app-globals-2581ac73.js} +1 -1
  30. package/dist/esm/loader.js +1 -1
  31. package/dist/esm/polyfills/core-js.js +0 -0
  32. package/dist/esm/polyfills/dom.js +0 -0
  33. package/dist/esm/polyfills/es5-html-element.js +0 -0
  34. package/dist/esm/polyfills/index.js +0 -0
  35. package/dist/esm/polyfills/system.js +0 -0
  36. package/dist/esm/priv-navigator-item.entry.js +1 -1
  37. package/dist/esm/priv-option-list.entry.js +1 -1
  38. package/dist/esm/ripple.js +1 -1
  39. package/dist/esm/wm-action-menu_2.entry.js +1 -1
  40. package/dist/esm/wm-file.entry.js +35 -19
  41. package/dist/esm/wm-navigator.entry.js +12 -5
  42. package/dist/esm/wm-nested-select.entry.js +1 -1
  43. package/dist/esm/wm-option_2.entry.js +1 -1
  44. package/dist/esm/wm-uploader.entry.js +4 -4
  45. package/dist/esm-es5/app-globals-2581ac73.js +1 -0
  46. package/dist/esm-es5/loader.js +1 -1
  47. package/dist/esm-es5/priv-navigator-item.entry.js +1 -1
  48. package/dist/esm-es5/priv-option-list.entry.js +1 -1
  49. package/dist/esm-es5/ripple.js +1 -1
  50. package/dist/esm-es5/wm-action-menu_2.entry.js +1 -1
  51. package/dist/esm-es5/wm-file.entry.js +1 -1
  52. package/dist/esm-es5/wm-navigator.entry.js +1 -1
  53. package/dist/esm-es5/wm-nested-select.entry.js +1 -1
  54. package/dist/esm-es5/wm-option_2.entry.js +1 -1
  55. package/dist/esm-es5/wm-uploader.entry.js +1 -1
  56. package/dist/ripple/p-02a15884.entry.js +1 -0
  57. package/dist/ripple/{p-99e4e12d.system.entry.js → p-03759d86.system.entry.js} +1 -1
  58. package/dist/ripple/{p-7ca13016.system.entry.js → p-138491c8.system.entry.js} +1 -1
  59. package/dist/ripple/{p-85ac07c7.system.entry.js → p-1841c319.system.entry.js} +1 -1
  60. package/dist/ripple/{p-5ecdb43e.system.entry.js → p-23e1112c.system.entry.js} +1 -1
  61. package/dist/ripple/{p-8fb8253e.entry.js → p-57f9c7c3.entry.js} +1 -1
  62. package/dist/ripple/{p-8a32bd08.system.entry.js → p-65d3f9c4.system.entry.js} +1 -1
  63. package/dist/ripple/p-69ba61b7.entry.js +1 -0
  64. package/dist/ripple/p-6af36676.system.js +1 -0
  65. package/dist/ripple/{p-2d9328dd.system.entry.js → p-6bf103b8.system.entry.js} +1 -1
  66. package/dist/ripple/{p-386d990c.entry.js → p-6ec4129b.entry.js} +1 -1
  67. package/dist/ripple/{p-b29393d0.entry.js → p-9e1ea6e2.entry.js} +1 -1
  68. package/dist/ripple/{p-cf12dd5f.entry.js → p-a9ddfa2c.entry.js} +1 -1
  69. package/dist/ripple/p-c30337c8.js +1 -0
  70. package/dist/ripple/{p-6e331d01.system.entry.js → p-c73882de.system.entry.js} +1 -1
  71. package/dist/ripple/{p-2c112c06.system.entry.js → p-d32a9831.system.entry.js} +1 -1
  72. package/dist/ripple/{p-00a48988.system.js → p-d92d2bbb.system.js} +1 -1
  73. package/dist/ripple/p-dbc3a44d.entry.js +1 -0
  74. package/dist/ripple/{p-2763a193.entry.js → p-ea10c498.entry.js} +1 -1
  75. package/dist/ripple/ripple.esm.js +1 -1
  76. package/dist/ripple/ripple.js +1 -1
  77. package/dist/types/components/wm-file/wm-file.d.ts +4 -1
  78. package/dist/types/components/wm-navigator/wm-navigator.d.ts +1 -1
  79. package/package.json +2 -2
  80. package/dist/esm-es5/app-globals-f089afb3.js +0 -1
  81. package/dist/ripple/p-39cf240f.entry.js +0 -1
  82. package/dist/ripple/p-494d52b3.js +0 -1
  83. package/dist/ripple/p-602ea108.entry.js +0 -1
  84. package/dist/ripple/p-91c12b65.entry.js +0 -1
  85. package/dist/ripple/p-eb8461e0.system.js +0 -1
@@ -860,37 +860,6 @@
860
860
  mask-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath style='fill: var(--icon-fill, currentColor)' d='M12,2C17.53,2 22,6.47 22,12C22,17.53 17.53,22 12,22C6.47,22 2,17.53 2,12C2,6.47 6.47,2 12,2M15.59,7L12,10.59L8.41,7L7,8.41L10.59,12L7,15.59L8.41,17L12,13.41L15.59,17L17,15.59L13.41,12L17,8.41L15.59,7Z'/%3E%3C/svg%3E%0A");
861
861
  }
862
862
 
863
- /* --------------------------------------
864
- 1. Box-shadow
865
- -------------------------------------- */
866
- /* --------------------------------------
867
- 2. Border-radius
868
- -------------------------------------- */
869
- /* --------------------------------------
870
- 3. Transforms
871
- -------------------------------------- */
872
- /* --------------------------------------
873
- 4. Button Focus
874
- -------------------------------------- */
875
- /* --------------------------------------
876
- 5. Flex
877
- -------------------------------------- */
878
- /* --------------------------------------
879
- 7. Screen Reader Only
880
- -------------------------------------- */
881
- /* --------------------------------------
882
- 8. Label styles
883
- this mixin includes all the styles for the label
884
- + flex rules on the parent container to switch between top and left position
885
- + srOnly when label is hidden
886
- Assumes the following markup:
887
- div.wrapper[.label-left.invalid] > div.label-wrapper > label.label > span.required
888
- .wrapper is for the flex rules
889
- .label-wrapper is to set the height of the label when positioned left so it's the same height as
890
- the input. It can't be done directly on .label because of possible line wrapping.
891
- When the label is on top there's no line wrapping at all to ensure proper alignment of inlined elements
892
- (they can't be aligned on the baseline because of possible description text and error message)
893
- -------------------------------------- */
894
863
  :host * {
895
864
  box-sizing: border-box;
896
865
  }
@@ -926,7 +926,7 @@
926
926
  .select-all:focus {
927
927
  outline: none;
928
928
  background: var(--wmcolor-select-option-background-focus);
929
- color: #fff;
929
+ color: var(--wmcolor-interactive-text);
930
930
  }
931
931
 
932
932
  .return-btn,
@@ -1181,7 +1181,7 @@
1181
1181
  .menu .menuitem:focus-visible {
1182
1182
  outline: none;
1183
1183
  background: var(--wmcolor-interactive-background-focus);
1184
- color: #fff;
1184
+ color: var(--wmcolor-interactive-text);
1185
1185
  }
1186
1186
  .menu .menuitem:hover {
1187
1187
  background: var(--wmcolor-select-option-background-hover);
@@ -879,7 +879,7 @@
879
879
  :host:focus, :host.focus {
880
880
  outline: none;
881
881
  background: var(--wmcolor-select-option-background-focus);
882
- color: #fff;
882
+ color: var(--wmcolor-interactive-text);
883
883
  }
884
884
  :host.icon {
885
885
  color: var(--wmcolor-interactive);
@@ -996,15 +996,20 @@
996
996
  :host(:focus-visible) {
997
997
  outline: none;
998
998
  background: var(--wmcolor-select-option-background-focus);
999
- color: #fff;
999
+ color: var(--wmcolor-interactive-text);
1000
1000
  }
1001
1001
  :host(:focus-visible) .checkbox.svg-checkbox-blank,
1002
1002
  :host(:focus-visible) .checkbox.svg-checkbox-selected {
1003
- --icon-fill: #fff;
1003
+ --icon-fill: var(--wmcolor-interactive-text);
1004
1004
  }
1005
1005
 
1006
1006
  :host(:hover) {
1007
1007
  background: var(--wmcolor-select-option-background-hover);
1008
1008
  color: var(--wmcolor-select-option-text);
1009
1009
  outline: none;
1010
+ }
1011
+
1012
+ :host(:focus-visible:hover) .checkbox.svg-checkbox-blank,
1013
+ :host(:focus-visible:hover) .checkbox.svg-checkbox-selected {
1014
+ --icon-fill: var(--wmcolor-interactive);
1010
1015
  }
@@ -894,47 +894,123 @@
894
894
  .file-wrapper .file.condensed {
895
895
  column-gap: 2.5rem;
896
896
  }
897
+ .file-wrapper .file.extra-condensed {
898
+ column-gap: 0.75rem;
899
+ }
897
900
  .file-wrapper .file .filename {
898
- display: inline-block;
901
+ font-weight: 600;
902
+ display: inline;
903
+ overflow-wrap: break-word;
904
+ }
905
+ .file-wrapper .file .filename.hidden {
906
+ display: none;
907
+ }
908
+ .file-wrapper .file .filename-measure {
899
909
  white-space: nowrap;
910
+ visibility: hidden;
911
+ position: absolute;
912
+ pointer-events: none;
900
913
  }
901
914
  .file-wrapper .file .left-group {
902
- overflow: hidden;
903
- min-inline-size: 5.3125rem;
915
+ min-inline-size: 0;
904
916
  flex-grow: 1;
905
917
  }
918
+ .file-wrapper .file .left-group:has(.-truncated) {
919
+ min-inline-size: fit-content;
920
+ }
906
921
  .file-wrapper .file .right-group {
907
- display: flex;
908
- justify-content: end;
922
+ display: grid;
923
+ grid-template-columns: auto min-content;
909
924
  align-items: center;
910
925
  gap: 1rem;
911
- min-inline-size: 0;
912
- max-inline-size: 50%;
913
926
  }
914
927
  .file-wrapper .file .right-group .file-controls {
915
928
  display: flex;
916
929
  gap: 1rem;
917
930
  }
931
+ .file-wrapper .file .right-group .file-controls wm-button {
932
+ --icon-size: 1.125rem;
933
+ }
918
934
  .file-wrapper .file .right-group .file-info {
935
+ min-inline-size: 4.375rem;
936
+ text-align: right;
937
+ align-items: end;
938
+ }
939
+ .file-wrapper .file .file-info {
919
940
  display: flex;
920
941
  flex-direction: column;
921
- align-items: end;
922
942
  gap: 0.25rem;
923
- text-align: right;
924
943
  max-inline-size: 28.125rem;
925
944
  }
926
- .file-wrapper .file .right-group .file-info .uploader-name {
927
- max-inline-size: 100%;
945
+ .file-wrapper .file .file-info * {
928
946
  overflow-wrap: break-word;
947
+ }
948
+ .file-wrapper .file .file-info .uploader-name {
949
+ max-inline-size: 100%;
929
950
  text-wrap: balance;
930
951
  }
931
- .file-wrapper .file .right-group .file-info:empty {
952
+ .file-wrapper .file .file-info:empty {
932
953
  display: none;
933
954
  }
955
+ .file-wrapper .file #file-details summary {
956
+ --icon-size: 24px;
957
+ display: block;
958
+ font-weight: 600;
959
+ color: var(--wmcolor-interactive);
960
+ }
961
+ .file-wrapper .file #file-details summary::before {
962
+ position: absolute;
963
+ transform: translate(0, -12%);
964
+ }
965
+ .file-wrapper .file #file-details summary:focus-visible {
966
+ outline: 3px solid var(--wmcolor-interactive-focus);
967
+ outline-offset: 2px;
968
+ }
969
+ .file-wrapper .file #file-details #summary-filename-trunc,
970
+ .file-wrapper .file #file-details #summary-filename-wrap,
971
+ .file-wrapper .file #file-details .file-info {
972
+ margin-inline-start: 1.5rem;
973
+ }
974
+ .file-wrapper .file #file-details[open] #summary-filename-trunc {
975
+ display: none;
976
+ }
977
+ .file-wrapper .file #file-details[open] summary:before {
978
+ content: "";
979
+ display: block;
980
+ background-color: var(--icon-fill, currentColor);
981
+ width: var(--icon-size, 0.875rem);
982
+ height: var(--icon-size, 0.875rem);
983
+ -webkit-mask-size: 100%;
984
+ mask-size: 100%;
985
+ }
986
+ .file-wrapper .file #file-details[open] summary:before {
987
+ -webkit-mask-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath style='fill: var(--icon-fill, currentColor)' d='M7,10L12,15L17,10H7Z'/%3E%3C/svg%3E%0A");
988
+ mask-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath style='fill: var(--icon-fill, currentColor)' d='M7,10L12,15L17,10H7Z'/%3E%3C/svg%3E%0A");
989
+ }
990
+ .file-wrapper .file #file-details:not([open]) #summary-filename-wrap {
991
+ display: none;
992
+ }
993
+ .file-wrapper .file #file-details:not([open]) summary:before {
994
+ content: "";
995
+ display: block;
996
+ background-color: var(--icon-fill, currentColor);
997
+ width: var(--icon-size, 0.875rem);
998
+ height: var(--icon-size, 0.875rem);
999
+ -webkit-mask-size: 100%;
1000
+ mask-size: 100%;
1001
+ }
1002
+ .file-wrapper .file #file-details:not([open]) summary:before {
1003
+ -webkit-mask-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath style='fill: var(--icon-fill, currentColor)' d='M10,17L15,12L10,7V17Z'/%3E%3C/svg%3E%0A");
1004
+ mask-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath style='fill: var(--icon-fill, currentColor)' d='M10,17L15,12L10,7V17Z'/%3E%3C/svg%3E%0A");
1005
+ }
1006
+ .file-wrapper .file #summary-filename-wrap {
1007
+ display: inline-block;
1008
+ overflow-wrap: anywhere;
1009
+ }
934
1010
  .file-wrapper .file.--error {
935
1011
  border: 1px solid var(--wmcolor-file-border-error);
936
1012
  background-color: var(--wmcolor-file-background-error);
937
- block-size: 3.75rem;
1013
+ min-block-size: 3.75rem;
938
1014
  }
939
1015
  .file-wrapper .file.--error .right-group {
940
1016
  flex-shrink: 0;
@@ -17,8 +17,21 @@ export class File {
17
17
  this.showInfo = "last-updated";
18
18
  }
19
19
  get isCondensed() {
20
+ // Breakpoint at which file actions are moved into an action menu
20
21
  return this.el.clientWidth < 500;
21
22
  }
23
+ get isExtraCondensed() {
24
+ // Breakpoint at which file info is moved into a details element
25
+ return this.el.clientWidth < 414;
26
+ }
27
+ get needsTruncation() {
28
+ const boundsEl = this.el.shadowRoot.querySelector(".left-group");
29
+ const measureEl = this.el.shadowRoot.querySelector(".filename-measure");
30
+ if (boundsEl && measureEl && boundsEl.clientWidth < measureEl.clientWidth) {
31
+ return true;
32
+ }
33
+ return false;
34
+ }
22
35
  get isUploading() {
23
36
  return this.progress !== undefined && this.progress < 100;
24
37
  }
@@ -107,22 +120,20 @@ export class File {
107
120
  const resizeObserver = new ResizeObserver(() => this.debouncedUpdate());
108
121
  resizeObserver.observe(this.el);
109
122
  }
110
- setFilename() {
111
- // calc is not accurate and last letter may be cropped if we don't wait
112
- requestAnimationFrame(() => {
113
- const fileNameEl = this.el.shadowRoot.querySelector(".filename");
114
- const leftBoundary = this.el.shadowRoot.querySelector(".left-group").getBoundingClientRect().left;
115
- const rightGroup = this.el.shadowRoot.querySelector(".right-group");
116
- const file = this.el.shadowRoot.querySelector(".file");
117
- const colGap = file ? getComputedStyle(file).getPropertyValue("column-gap") : "0";
118
- const rightBoundary = rightGroup
119
- ? rightGroup.getBoundingClientRect().left - parseFloat(colGap)
120
- : this.el.shadowRoot.querySelector(".file-wrapper").getBoundingClientRect().right - 20;
121
- fileNameEl.textContent = truncateText(fileNameEl, this.fullFilename, rightBoundary - leftBoundary, 7);
122
- });
123
+ truncateFilename() {
124
+ let summaryFilenameEl = this.el.shadowRoot.querySelector("#summary-filename-trunc");
125
+ if (summaryFilenameEl) {
126
+ summaryFilenameEl.textContent = truncateText(summaryFilenameEl, this.fullFilename, summaryFilenameEl.parentElement.clientWidth - 32, 7);
127
+ if (summaryFilenameEl.textContent === this.fullFilename) {
128
+ summaryFilenameEl.classList.remove("-truncated");
129
+ }
130
+ else {
131
+ summaryFilenameEl.classList.add("-truncated");
132
+ }
133
+ }
123
134
  }
124
135
  componentDidRender() {
125
- this.setFilename();
136
+ this.truncateFilename();
126
137
  }
127
138
  previewFile() {
128
139
  this.wmFilePreview.emit();
@@ -140,10 +151,11 @@ export class File {
140
151
  }
141
152
  }
142
153
  renderFileName() {
143
- return (h("div", { class: "left-group" }, h("div", { class: "name-wrapper" }, h("span", { class: "sr-only" }, this.fullFilename), h("span", { "aria-hidden": "true", class: "filename", onMouseEnter: (ev) => this.handleFilenameMouseEnter(ev), onMouseLeave: () => hideTooltip() }), this.isUploading && h("span", { class: "sr-only" }, "uploading"))));
154
+ const showDetailsToggle = this.isExtraCondensed && (this.needsTruncation || (this.showInfo !== "none" && !this.errorMessage));
155
+ return (h("div", { class: "left-group" }, h("div", { class: "name-wrapper" }, h("span", { class: "sr-only" }, this.fullFilename), h("span", { "aria-hidden": "true", class: `filename ${showDetailsToggle ? "hidden" : ""}` }, this.fullFilename), this.isUploading && h("span", { class: "sr-only" }, "uploading")), showDetailsToggle && this.renderDetailsToggle()));
144
156
  }
145
157
  renderFileInfo() {
146
- return (h("div", { class: "file-info" }, (this.showInfo === "uploaded-by" || this.showInfo === "all") && (h("div", { class: "details uploader-name" }, this.uploadedBy)), (this.showInfo === "last-updated" || this.showInfo === "all") && h("div", { class: "details" }, this.lastUpdated), (this.showInfo === "size" || this.showInfo === "all") && h("div", { class: "details" }, this.size)));
158
+ return (h("div", { class: "file-info" }, (this.showInfo === "uploaded-by" || this.showInfo === "all") && (h("div", { class: "uploader-name" }, this.uploadedBy)), (this.showInfo === "last-updated" || this.showInfo === "all") && h("div", null, this.lastUpdated), (this.showInfo === "size" || this.showInfo === "all") && h("div", null, this.size)));
147
159
  }
148
160
  renderActionMenu() {
149
161
  const previewItem = (h("wm-menuitem", { icon: "#show", onClick: () => this.previewFile() }, this.previewActionMessage));
@@ -167,11 +179,15 @@ export class File {
167
179
  const showActionMenu = this.isCondensed && !hasSingleFileAction;
168
180
  return showActionMenu ? this.renderActionMenu() : this.renderFileActionButtons();
169
181
  }
182
+ renderDetailsToggle() {
183
+ return (h("details", { id: "file-details" }, h("summary", null, h("div", { class: "filename-measure", "aria-hidden": "true" }, this.fullFilename), h("span", { id: "summary-filename-trunc", onMouseEnter: (ev) => this.handleFilenameMouseEnter(ev), onMouseLeave: () => hideTooltip() }, this.fullFilename), h("span", { id: "summary-filename-wrap" }, this.fullFilename)), !this.errorMessage && this.renderFileInfo()));
184
+ }
170
185
  renderFile() {
171
- return (h("div", { class: `file-wrapper` }, h("div", { class: `file ${this.errorMessage ? "--error" : ""} ${this.isCondensed ? "condensed" : ""}` }, this.renderFileName(), !this.errorMessage && (h("div", { class: "right-group" }, this.renderFileInfo(), this.fileActions !== "" && this.renderFileControls())), this.errorMessage && (h("div", { class: "right-group" }, h("wm-button", { "permanently-delete": true, "button-type": "textonly", "label-for-identical-buttons": this.generateClearButtonLabel(this.name), onClick: () => this.wmFileErrorCleared.emit() }, this.clearButtonText))), this.progress == 100 && h("span", { class: "svg-icon svg-success" })), this.errorMessage && h("div", { class: "error-message" }, this.errorMessage)));
186
+ const showRightGroup = !this.errorMessage && (this.fileActions !== "" || this.showInfo !== "none");
187
+ return (h("div", { class: `file-wrapper` }, h("div", { class: `file ${this.errorMessage ? "--error" : ""} ${this.isCondensed ? "condensed" : ""} ${this.isExtraCondensed ? "extra-condensed" : ""}` }, this.renderFileName(), showRightGroup && (h("div", { class: "right-group" }, !this.isExtraCondensed && this.renderFileInfo(), this.fileActions !== "" && this.renderFileControls())), this.errorMessage && (h("div", { class: "right-group" }, h("wm-button", { "permanently-delete": true, "button-type": "textonly", "label-for-identical-buttons": this.generateClearButtonLabel(this.name), onClick: () => this.wmFileErrorCleared.emit() }, this.clearButtonText))), this.progress == 100 && h("span", { class: "svg-icon svg-success" })), this.errorMessage && h("div", { class: "error-message" }, this.errorMessage)));
172
188
  }
173
189
  render() {
174
- return h(Host, { key: '88c61b45d6f48a00abeaaddb9a03e870f597df0c', role: "listitem" }, this.isUploading ? this.renderFileInProgress() : this.renderFile());
190
+ return h(Host, { key: '64184891986497ee7159216e7f9ffef22b046c1c', role: "listitem" }, this.isUploading ? this.renderFileInProgress() : this.renderFile());
175
191
  }
176
192
  static get is() { return "wm-file"; }
177
193
  static get encapsulation() { return "shadow"; }
@@ -860,37 +860,18 @@
860
860
  mask-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath style='fill: var(--icon-fill, currentColor)' d='M12,2C17.53,2 22,6.47 22,12C22,17.53 17.53,22 12,22C6.47,22 2,17.53 2,12C2,6.47 6.47,2 12,2M15.59,7L12,10.59L8.41,7L7,8.41L10.59,12L7,15.59L8.41,17L12,13.41L15.59,17L17,15.59L13.41,12L17,8.41L15.59,7Z'/%3E%3C/svg%3E%0A");
861
861
  }
862
862
 
863
- /* --------------------------------------
864
- 1. Box-shadow
865
- -------------------------------------- */
866
- /* --------------------------------------
867
- 2. Border-radius
868
- -------------------------------------- */
869
- /* --------------------------------------
870
- 3. Transforms
871
- -------------------------------------- */
872
- /* --------------------------------------
873
- 4. Button Focus
874
- -------------------------------------- */
875
- /* --------------------------------------
876
- 5. Flex
877
- -------------------------------------- */
878
- /* --------------------------------------
879
- 7. Screen Reader Only
880
- -------------------------------------- */
881
- /* --------------------------------------
882
- 8. Label styles
883
- this mixin includes all the styles for the label
884
- + flex rules on the parent container to switch between top and left position
885
- + srOnly when label is hidden
886
- Assumes the following markup:
887
- div.wrapper[.label-left.invalid] > div.label-wrapper > label.label > span.required
888
- .wrapper is for the flex rules
889
- .label-wrapper is to set the height of the label when positioned left so it's the same height as
890
- the input. It can't be done directly on .label because of possible line wrapping.
891
- When the label is on top there's no line wrapping at all to ensure proper alignment of inlined elements
892
- (they can't be aligned on the baseline because of possible description text and error message)
893
- -------------------------------------- */
863
+ :host(:focus-visible) {
864
+ outline: none;
865
+ }
866
+ :host(:focus-visible) .wrapper {
867
+ outline: none;
868
+ background: var(--wmcolor-actionmenu-item-background-focus);
869
+ color: var(--wmcolor-interactive-text);
870
+ }
871
+ :host(:focus-visible) .wrapper .description {
872
+ color: var(--wmcolor-interactive-text);
873
+ }
874
+
894
875
  :host {
895
876
  --wmcolor-actionmenu-item-background-hover: var(--wmcolor-option-background-hover);
896
877
  --wmcolor-actionmenu-item-background-focus: var(--wmcolor-option-background-focus);
@@ -920,6 +901,10 @@
920
901
  :host .wrapper:hover {
921
902
  background: var(--wmcolor-actionmenu-item-background-hover);
922
903
  outline: none;
904
+ color: var(--wmcolor-actionmenu-item-text);
905
+ }
906
+ :host .wrapper:hover .description {
907
+ color: var(--wmcolor-actionmenu-item-text-description);
923
908
  }
924
909
  :host .wrapper .description {
925
910
  color: var(--wmcolor-actionmenu-item-text-description);
@@ -954,18 +939,6 @@
954
939
  font-size: 1.12rem;
955
940
  }
956
941
 
957
- :host(:focus-visible) {
958
- outline: none;
959
- }
960
- :host(:focus-visible) .wrapper {
961
- outline: none;
962
- background: var(--wmcolor-actionmenu-item-background-focus);
963
- color: #fff;
964
- }
965
- :host(:focus-visible) .wrapper .description {
966
- color: #fff;
967
- }
968
-
969
942
  :host([aria-disabled=true]) {
970
943
  pointer-events: none;
971
944
  }
@@ -860,37 +860,6 @@
860
860
  mask-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath style='fill: var(--icon-fill, currentColor)' d='M12,2C17.53,2 22,6.47 22,12C22,17.53 17.53,22 12,22C6.47,22 2,17.53 2,12C2,6.47 6.47,2 12,2M15.59,7L12,10.59L8.41,7L7,8.41L10.59,12L7,15.59L8.41,17L12,13.41L15.59,17L17,15.59L13.41,12L17,8.41L15.59,7Z'/%3E%3C/svg%3E%0A");
861
861
  }
862
862
 
863
- /* --------------------------------------
864
- 1. Box-shadow
865
- -------------------------------------- */
866
- /* --------------------------------------
867
- 2. Border-radius
868
- -------------------------------------- */
869
- /* --------------------------------------
870
- 3. Transforms
871
- -------------------------------------- */
872
- /* --------------------------------------
873
- 4. Button Focus
874
- -------------------------------------- */
875
- /* --------------------------------------
876
- 5. Flex
877
- -------------------------------------- */
878
- /* --------------------------------------
879
- 7. Screen Reader Only
880
- -------------------------------------- */
881
- /* --------------------------------------
882
- 8. Label styles
883
- this mixin includes all the styles for the label
884
- + flex rules on the parent container to switch between top and left position
885
- + srOnly when label is hidden
886
- Assumes the following markup:
887
- div.wrapper[.label-left.invalid] > div.label-wrapper > label.label > span.required
888
- .wrapper is for the flex rules
889
- .label-wrapper is to set the height of the label when positioned left so it's the same height as
890
- the input. It can't be done directly on .label because of possible line wrapping.
891
- When the label is on top there's no line wrapping at all to ensure proper alignment of inlined elements
892
- (they can't be aligned on the baseline because of possible description text and error message)
893
- -------------------------------------- */
894
863
  :host * {
895
864
  box-sizing: border-box;
896
865
  }
@@ -876,7 +876,16 @@
876
876
  :host .navoption.selected {
877
877
  background: var(--wmcolor-navigator-item-background-selected);
878
878
  }
879
- :host .navoption.focused, :host .navoption:hover {
880
- background: var(--wmcolor-navigator-item-background-focus);
879
+ :host .navoption:hover {
880
+ background: var(--wmcolor-navigator-item-background-hover);
881
881
  opacity: 1;
882
+ }
883
+
884
+ :host(:focus-visible) .navoption {
885
+ background: var(--wmcolor-navigator-item-background-focus);
886
+ color: var(--wmcolor-interactive-text);
887
+ }
888
+ :host(:focus-visible) .navoption:hover {
889
+ background: var(--wmcolor-navigator-item-background-hover);
890
+ color: var(--wmcolor-navigator-item-text);
882
891
  }
@@ -864,9 +864,9 @@
864
864
  --wmcolor-navigator-background: var(--wmcolor-background);
865
865
  --wmcolor-navigator-header-background: var(--wmcolor-brand-dark);
866
866
  --wmcolor-navigator-header-text: var(--wmcolor-text-ondark);
867
- --wmcolor-navigator-item-background-selected: var(--wmcolor-interactive-background-selected);
867
+ --wmcolor-navigator-item-background-selected: var(--wmcolor-option-background-selected);
868
868
  --wmcolor-navigator-item-background-focus: var(--wmcolor-interactive-background-focus);
869
- --wmcolor-navigator-item-background-hover: var(--wmcolor-interactive-background-hover);
869
+ --wmcolor-navigator-item-background-hover: var(--wmcolor-option-background-hover);
870
870
  --wmcolor-navigator-item-background: var(--wmcolor-background);
871
871
  --wmcolor-navigator-item-border: var(--wmcolor-border);
872
872
  --wmcolor-navigator-item-text: var(--wmcolor-text);
@@ -949,6 +949,12 @@
949
949
  text-align: center;
950
950
  text-transform: capitalize;
951
951
  }
952
+ :host priv-navigator-item:focus-visible img {
953
+ filter: brightness(20);
954
+ }
955
+ :host priv-navigator-item:focus-visible:hover img {
956
+ filter: brightness(1);
957
+ }
952
958
 
953
959
  priv-navigator-item:focus {
954
960
  outline: none;
@@ -158,7 +158,8 @@ export class Navigator {
158
158
  this.openRight = wrapperWidth > spaceLeft && spaceRight > spaceLeft;
159
159
  }
160
160
  this.isOpen = true;
161
- this.focusItem();
161
+ // delay focus to allow 250ms animation to complete
162
+ this.focusItem(250);
162
163
  }
163
164
  closeMenu(returnFocus = true) {
164
165
  this.isOpen = false;
@@ -170,12 +171,18 @@ export class Navigator {
170
171
  }
171
172
  });
172
173
  }
173
- focusItem() {
174
+ focusItem(delayMs = 0) {
174
175
  const newSelection = this.navigatorItems[this.itemIndexToFocus];
175
176
  newSelection.tabIndex = 0;
176
177
  newSelection.focused = true;
177
- // wait for animation to complete before sending focus to option
178
- window.setTimeout(() => newSelection.focus(), 250);
178
+ if (delayMs > 0) {
179
+ // wait for animation to complete before sending focus to option
180
+ setTimeout(() => newSelection.focus(), delayMs);
181
+ }
182
+ else {
183
+ // immediate focus for keyboard navigation
184
+ window.requestAnimationFrame(() => newSelection.focus());
185
+ }
179
186
  }
180
187
  unfocusItem(index) {
181
188
  const oldSelection = this.navigatorItems[index];
@@ -860,37 +860,6 @@
860
860
  mask-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath style='fill: var(--icon-fill, currentColor)' d='M12,2C17.53,2 22,6.47 22,12C22,17.53 17.53,22 12,22C6.47,22 2,17.53 2,12C2,6.47 6.47,2 12,2M15.59,7L12,10.59L8.41,7L7,8.41L10.59,12L7,15.59L8.41,17L12,13.41L15.59,17L17,15.59L13.41,12L17,8.41L15.59,7Z'/%3E%3C/svg%3E%0A");
861
861
  }
862
862
 
863
- /* --------------------------------------
864
- 1. Box-shadow
865
- -------------------------------------- */
866
- /* --------------------------------------
867
- 2. Border-radius
868
- -------------------------------------- */
869
- /* --------------------------------------
870
- 3. Transforms
871
- -------------------------------------- */
872
- /* --------------------------------------
873
- 4. Button Focus
874
- -------------------------------------- */
875
- /* --------------------------------------
876
- 5. Flex
877
- -------------------------------------- */
878
- /* --------------------------------------
879
- 7. Screen Reader Only
880
- -------------------------------------- */
881
- /* --------------------------------------
882
- 8. Label styles
883
- this mixin includes all the styles for the label
884
- + flex rules on the parent container to switch between top and left position
885
- + srOnly when label is hidden
886
- Assumes the following markup:
887
- div.wrapper[.label-left.invalid] > div.label-wrapper > label.label > span.required
888
- .wrapper is for the flex rules
889
- .label-wrapper is to set the height of the label when positioned left so it's the same height as
890
- the input. It can't be done directly on .label because of possible line wrapping.
891
- When the label is on top there's no line wrapping at all to ensure proper alignment of inlined elements
892
- (they can't be aligned on the baseline because of possible description text and error message)
893
- -------------------------------------- */
894
863
  :host,
895
864
  wm-pagination {
896
865
  --wmcolor-pagination-arrow-disabled: var(--wmcolor-interactive-disabled);
@@ -860,37 +860,6 @@
860
860
  mask-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath style='fill: var(--icon-fill, currentColor)' d='M12,2C17.53,2 22,6.47 22,12C22,17.53 17.53,22 12,22C6.47,22 2,17.53 2,12C2,6.47 6.47,2 12,2M15.59,7L12,10.59L8.41,7L7,8.41L10.59,12L7,15.59L8.41,17L12,13.41L15.59,17L17,15.59L13.41,12L17,8.41L15.59,7Z'/%3E%3C/svg%3E%0A");
861
861
  }
862
862
 
863
- /* --------------------------------------
864
- 1. Box-shadow
865
- -------------------------------------- */
866
- /* --------------------------------------
867
- 2. Border-radius
868
- -------------------------------------- */
869
- /* --------------------------------------
870
- 3. Transforms
871
- -------------------------------------- */
872
- /* --------------------------------------
873
- 4. Button Focus
874
- -------------------------------------- */
875
- /* --------------------------------------
876
- 5. Flex
877
- -------------------------------------- */
878
- /* --------------------------------------
879
- 7. Screen Reader Only
880
- -------------------------------------- */
881
- /* --------------------------------------
882
- 8. Label styles
883
- this mixin includes all the styles for the label
884
- + flex rules on the parent container to switch between top and left position
885
- + srOnly when label is hidden
886
- Assumes the following markup:
887
- div.wrapper[.label-left.invalid] > div.label-wrapper > label.label > span.required
888
- .wrapper is for the flex rules
889
- .label-wrapper is to set the height of the label when positioned left so it's the same height as
890
- the input. It can't be done directly on .label because of possible line wrapping.
891
- When the label is on top there's no line wrapping at all to ensure proper alignment of inlined elements
892
- (they can't be aligned on the baseline because of possible description text and error message)
893
- -------------------------------------- */
894
863
  :host * {
895
864
  box-sizing: border-box;
896
865
  }
@@ -860,37 +860,6 @@
860
860
  mask-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath style='fill: var(--icon-fill, currentColor)' d='M12,2C17.53,2 22,6.47 22,12C22,17.53 17.53,22 12,22C6.47,22 2,17.53 2,12C2,6.47 6.47,2 12,2M15.59,7L12,10.59L8.41,7L7,8.41L10.59,12L7,15.59L8.41,17L12,13.41L15.59,17L17,15.59L13.41,12L17,8.41L15.59,7Z'/%3E%3C/svg%3E%0A");
861
861
  }
862
862
 
863
- /* --------------------------------------
864
- 1. Box-shadow
865
- -------------------------------------- */
866
- /* --------------------------------------
867
- 2. Border-radius
868
- -------------------------------------- */
869
- /* --------------------------------------
870
- 3. Transforms
871
- -------------------------------------- */
872
- /* --------------------------------------
873
- 4. Button Focus
874
- -------------------------------------- */
875
- /* --------------------------------------
876
- 5. Flex
877
- -------------------------------------- */
878
- /* --------------------------------------
879
- 7. Screen Reader Only
880
- -------------------------------------- */
881
- /* --------------------------------------
882
- 8. Label styles
883
- this mixin includes all the styles for the label
884
- + flex rules on the parent container to switch between top and left position
885
- + srOnly when label is hidden
886
- Assumes the following markup:
887
- div.wrapper[.label-left.invalid] > div.label-wrapper > label.label > span.required
888
- .wrapper is for the flex rules
889
- .label-wrapper is to set the height of the label when positioned left so it's the same height as
890
- the input. It can't be done directly on .label because of possible line wrapping.
891
- When the label is on top there's no line wrapping at all to ensure proper alignment of inlined elements
892
- (they can't be aligned on the baseline because of possible description text and error message)
893
- -------------------------------------- */
894
863
  :host * {
895
864
  box-sizing: border-box;
896
865
  margin: unset;