favesalon-embed 1.0.4 → 1.0.6

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 (183) hide show
  1. package/dist/custom-elements/index.d.ts +42 -0
  2. package/dist/{cjs/_commonjsHelpers-5cfcba41.js → favesalon-embed/_commonjsHelpers-a4f66ccd.js} +14 -6
  3. package/dist/favesalon-embed/activate-form.entry.js +70 -0
  4. package/dist/favesalon-embed/app-globals-74127f4b.js +7 -0
  5. package/dist/favesalon-embed/app-globals-f954a22f.js +7 -0
  6. package/dist/favesalon-embed/change-password-form.entry.js +81 -0
  7. package/dist/favesalon-embed/chat-box.entry.js +55 -0
  8. package/dist/{esm → favesalon-embed}/chat-button.entry.js +36 -13
  9. package/dist/favesalon-embed/chat-form.entry.js +39 -0
  10. package/dist/favesalon-embed/chat-messages.entry.js +71 -0
  11. package/dist/favesalon-embed/chat-rooms.entry.js +111 -0
  12. package/dist/favesalon-embed/css-shim-b7d3d95f.js +4 -0
  13. package/dist/favesalon-embed/dom-64053c71.js +73 -0
  14. package/dist/favesalon-embed/favesalon-embed.css +114 -1
  15. package/dist/favesalon-embed/favesalon-embed.esm.js +148 -1
  16. package/dist/{esm → favesalon-embed}/google-map.entry.js +1 -1
  17. package/dist/{esm/index-a1c7583c.js → favesalon-embed/index-00b83e1c.js} +425 -15
  18. package/dist/favesalon-embed/index-888e99e3.js +3371 -0
  19. package/dist/favesalon-embed/index-a229b3b5.js +3371 -0
  20. package/dist/favesalon-embed/index.esm.js +1 -0
  21. package/dist/{esm/chat-box_5.entry.js → favesalon-embed/lodash-d5526b38.js} +27 -243
  22. package/dist/favesalon-embed/login-form.entry.js +67 -0
  23. package/dist/{cjs/chat-button.cjs.entry.js → favesalon-embed/notify-sounds.entry.js} +20 -44
  24. package/dist/favesalon-embed/register-form.entry.js +88 -0
  25. package/dist/favesalon-embed/relativeTime-268e64b0.js +7 -0
  26. package/dist/favesalon-embed/reset-password-form.entry.js +47 -0
  27. package/dist/{esm → favesalon-embed}/salon-booking-modal.entry.js +1 -1
  28. package/dist/{esm → favesalon-embed}/salon-booking.entry.js +4 -4
  29. package/dist/{esm → favesalon-embed}/salon-gift-card-modal.entry.js +1 -1
  30. package/dist/{esm → favesalon-embed}/salon-gift-card.entry.js +4 -4
  31. package/dist/{esm → favesalon-embed}/salon-info.entry.js +3 -3
  32. package/dist/{esm → favesalon-embed}/salon-latest-reviews.entry.js +22 -6
  33. package/dist/{collection/components/salon-latest-styles/index.js → favesalon-embed/salon-latest-styles.entry.js} +27 -105
  34. package/dist/{collection/components/salon-locations/index.js → favesalon-embed/salon-locations.entry.js} +15 -95
  35. package/dist/{esm → favesalon-embed}/salon-lookbook.entry.js +18 -6
  36. package/dist/{esm → favesalon-embed}/salon-ranking.entry.js +1 -1
  37. package/dist/{esm → favesalon-embed}/salon-reviews.entry.js +20 -6
  38. package/dist/{collection/components/salon-schedules/index.js → favesalon-embed/salon-schedules.entry.js} +14 -95
  39. package/dist/{esm → favesalon-embed}/salon-services.entry.js +25 -13
  40. package/dist/{esm → favesalon-embed}/salon-stylists.entry.js +3 -3
  41. package/dist/{esm/services-257442e2.js → favesalon-embed/services-5a4c43a6.js} +2608 -188
  42. package/dist/{cjs/services-d1bdf299.js → favesalon-embed/services-d71be591.js} +2616 -191
  43. package/dist/favesalon-embed/shadow-css-98135883.js +387 -0
  44. package/dist/{esm → favesalon-embed}/style-detail.entry.js +29 -11
  45. package/dist/favesalon-embed/user-avatar.entry.js +52 -0
  46. package/dist/favesalon-embed/user-form.entry.js +44 -0
  47. package/dist/{collection/utils/utils.js → favesalon-embed/utils-fd30fb29.js} +14 -5
  48. package/dist/types/components/activate-form/activate-form.d.ts +12 -0
  49. package/dist/types/components/activate-form/test/activate-form.spec.d.ts +1 -0
  50. package/dist/types/components/change-password-form/change-password-form.d.ts +12 -0
  51. package/dist/types/components/chat-box/index.d.ts +1 -0
  52. package/dist/types/components/chat-button/index.d.ts +6 -2
  53. package/dist/types/components/chat-button/notify-sounds.d.ts +5 -0
  54. package/dist/types/components/chat-rooms/index.d.ts +6 -0
  55. package/dist/types/components/login-form/login-form.d.ts +10 -0
  56. package/dist/types/components/register-form/register-form.d.ts +13 -0
  57. package/dist/types/components/reset-password-form/reset-password-form.d.ts +9 -0
  58. package/dist/types/components/user-form/user-form.d.ts +7 -0
  59. package/dist/types/components.d.ts +127 -2
  60. package/dist/types/services/services.d.ts +17 -0
  61. package/dist/types/types/chat.d.ts +1 -0
  62. package/dist/types/types/user.d.ts +16 -0
  63. package/dist/types/utils/utils.d.ts +1 -0
  64. package/dist/types/utils/utils.spec.d.ts +1 -0
  65. package/package.json +1 -1
  66. package/dist/cjs/chat-box_5.cjs.entry.js +0 -17439
  67. package/dist/cjs/colors-38421769.js +0 -69
  68. package/dist/cjs/favesalon-embed.cjs.js +0 -23
  69. package/dist/cjs/google-map.cjs.entry.js +0 -52
  70. package/dist/cjs/index-7f190886.js +0 -4396
  71. package/dist/cjs/index-dd8176c4.js +0 -1531
  72. package/dist/cjs/index.cjs.js +0 -2
  73. package/dist/cjs/loader.cjs.js +0 -22
  74. package/dist/cjs/relativeTime-3721080d.js +0 -9
  75. package/dist/cjs/salon-booking-modal.cjs.entry.js +0 -30
  76. package/dist/cjs/salon-booking.cjs.entry.js +0 -51
  77. package/dist/cjs/salon-gift-card-modal.cjs.entry.js +0 -29
  78. package/dist/cjs/salon-gift-card.cjs.entry.js +0 -51
  79. package/dist/cjs/salon-info.cjs.entry.js +0 -33
  80. package/dist/cjs/salon-latest-reviews.cjs.entry.js +0 -97
  81. package/dist/cjs/salon-latest-styles_3.cjs.entry.js +0 -241
  82. package/dist/cjs/salon-lookbook.cjs.entry.js +0 -222
  83. package/dist/cjs/salon-ranking.cjs.entry.js +0 -60
  84. package/dist/cjs/salon-reviews.cjs.entry.js +0 -193
  85. package/dist/cjs/salon-services.cjs.entry.js +0 -81
  86. package/dist/cjs/salon-stylists.cjs.entry.js +0 -118
  87. package/dist/cjs/style-detail.cjs.entry.js +0 -312
  88. package/dist/cjs/utils-c5a33b3c.js +0 -23
  89. package/dist/collection/collection-manifest.json +0 -33
  90. package/dist/collection/components/chat-box/index.css +0 -105
  91. package/dist/collection/components/chat-box/index.js +0 -138
  92. package/dist/collection/components/chat-button/index.css +0 -101
  93. package/dist/collection/components/chat-button/index.js +0 -155
  94. package/dist/collection/components/chat-form/index.css +0 -40
  95. package/dist/collection/components/chat-form/index.js +0 -79
  96. package/dist/collection/components/chat-messages/index.css +0 -48
  97. package/dist/collection/components/chat-messages/index.js +0 -142
  98. package/dist/collection/components/chat-rooms/index.css +0 -102
  99. package/dist/collection/components/chat-rooms/index.js +0 -157
  100. package/dist/collection/components/google-map/assets/map--placeholder.jpeg +0 -0
  101. package/dist/collection/components/google-map/index.css +0 -5
  102. package/dist/collection/components/google-map/index.js +0 -90
  103. package/dist/collection/components/salon-booking/index.css +0 -30
  104. package/dist/collection/components/salon-booking/index.js +0 -126
  105. package/dist/collection/components/salon-booking/salon-booking-modal.js +0 -92
  106. package/dist/collection/components/salon-gift-card/index.css +0 -30
  107. package/dist/collection/components/salon-gift-card/index.js +0 -126
  108. package/dist/collection/components/salon-gift-card/salon-gift-card-modal.js +0 -73
  109. package/dist/collection/components/salon-info/index.css +0 -1
  110. package/dist/collection/components/salon-info/index.js +0 -77
  111. package/dist/collection/components/salon-latest-reviews/index.css +0 -11
  112. package/dist/collection/components/salon-latest-reviews/index.js +0 -163
  113. package/dist/collection/components/salon-latest-styles/index.css +0 -12
  114. package/dist/collection/components/salon-locations/index.css +0 -24
  115. package/dist/collection/components/salon-lookbook/index.css +0 -15
  116. package/dist/collection/components/salon-lookbook/index.js +0 -368
  117. package/dist/collection/components/salon-ranking/index.css +0 -3
  118. package/dist/collection/components/salon-ranking/index.js +0 -117
  119. package/dist/collection/components/salon-reviews/index.css +0 -18
  120. package/dist/collection/components/salon-reviews/index.js +0 -249
  121. package/dist/collection/components/salon-schedules/index.css +0 -18
  122. package/dist/collection/components/salon-services/index.css +0 -1
  123. package/dist/collection/components/salon-services/index.js +0 -146
  124. package/dist/collection/components/salon-stylists/index.css +0 -43
  125. package/dist/collection/components/salon-stylists/index.js +0 -184
  126. package/dist/collection/components/style-detail/index.css +0 -76
  127. package/dist/collection/components/style-detail/index.js +0 -386
  128. package/dist/collection/components/user-avatar/index.css +0 -0
  129. package/dist/collection/components/user-avatar/index.js +0 -159
  130. package/dist/collection/constants/colors.js +0 -65
  131. package/dist/collection/global/global.js +0 -0
  132. package/dist/collection/mocks/users.js +0 -10
  133. package/dist/collection/services/services.js +0 -295
  134. package/dist/collection/types/chat.js +0 -23
  135. package/dist/collection/types/common.js +0 -11
  136. package/dist/collection/types/review.js +0 -39
  137. package/dist/collection/types/salon.js +0 -58
  138. package/dist/collection/types/service.js +0 -24
  139. package/dist/collection/types/style.js +0 -128
  140. package/dist/collection/types/stylist.js +0 -30
  141. package/dist/collection/types/user.js +0 -10
  142. package/dist/custom-elements/index.js +0 -44974
  143. package/dist/esm/_commonjsHelpers-66ac50f5.js +0 -32
  144. package/dist/esm/favesalon-embed.js +0 -18
  145. package/dist/esm/index-0494771f.js +0 -1504
  146. package/dist/esm/index.js +0 -1
  147. package/dist/esm/loader.js +0 -18
  148. package/dist/esm/polyfills/core-js.js +0 -11
  149. package/dist/esm/polyfills/css-shim.js +0 -1
  150. package/dist/esm/polyfills/dom.js +0 -79
  151. package/dist/esm/polyfills/es5-html-element.js +0 -1
  152. package/dist/esm/polyfills/index.js +0 -34
  153. package/dist/esm/polyfills/system.js +0 -6
  154. package/dist/esm/relativeTime-baa50aa2.js +0 -7
  155. package/dist/esm/salon-latest-styles_3.entry.js +0 -235
  156. package/dist/esm/utils-e97485e0.js +0 -19
  157. package/dist/favesalon-embed/p-05a1c88a.entry.js +0 -1
  158. package/dist/favesalon-embed/p-0acf0447.entry.js +0 -1
  159. package/dist/favesalon-embed/p-0bc4f624.js +0 -1
  160. package/dist/favesalon-embed/p-1af1515f.entry.js +0 -1
  161. package/dist/favesalon-embed/p-1cba5fc9.entry.js +0 -1
  162. package/dist/favesalon-embed/p-39a4ef15.entry.js +0 -1
  163. package/dist/favesalon-embed/p-3e2cb05b.entry.js +0 -1
  164. package/dist/favesalon-embed/p-47e646f8.js +0 -1
  165. package/dist/favesalon-embed/p-487b311f.entry.js +0 -1
  166. package/dist/favesalon-embed/p-55387c2f.entry.js +0 -1
  167. package/dist/favesalon-embed/p-566f05b4.entry.js +0 -1
  168. package/dist/favesalon-embed/p-862a0de0.entry.js +0 -1
  169. package/dist/favesalon-embed/p-9fe0cbeb.js +0 -2
  170. package/dist/favesalon-embed/p-a33331cc.js +0 -1
  171. package/dist/favesalon-embed/p-aeeb7b5f.entry.js +0 -1
  172. package/dist/favesalon-embed/p-b08e5b54.js +0 -6
  173. package/dist/favesalon-embed/p-b5cca5fc.entry.js +0 -1
  174. package/dist/favesalon-embed/p-c7fb7af5.js +0 -1580
  175. package/dist/favesalon-embed/p-ccab56d8.js +0 -1
  176. package/dist/favesalon-embed/p-d6e13053.entry.js +0 -1
  177. package/dist/favesalon-embed/p-dee42d34.entry.js +0 -1
  178. package/dist/favesalon-embed/p-e661ca1d.entry.js +0 -1
  179. package/dist/favesalon-embed/p-eeceab9c.entry.js +0 -1
  180. package/dist/index.cjs.js +0 -1
  181. package/dist/index.js +0 -1
  182. /package/dist/{esm → favesalon-embed}/colors-ea36347a.js +0 -0
  183. /package/dist/{collection/index.js → types/components/activate-form/test/activate-form.e2e.d.ts} +0 -0
@@ -0,0 +1,387 @@
1
+ /*
2
+ Stencil Client Platform v2.22.3 | MIT Licensed | https://stenciljs.com
3
+ */
4
+ /**
5
+ * @license
6
+ * Copyright Google Inc. All Rights Reserved.
7
+ *
8
+ * Use of this source code is governed by an MIT-style license that can be
9
+ * found in the LICENSE file at https://angular.io/license
10
+ *
11
+ * This file is a port of shadowCSS from webcomponents.js to TypeScript.
12
+ * https://github.com/webcomponents/webcomponentsjs/blob/4efecd7e0e/src/ShadowCSS/ShadowCSS.js
13
+ * https://github.com/angular/angular/blob/master/packages/compiler/src/shadow_css.ts
14
+ */
15
+ const safeSelector = (selector) => {
16
+ const placeholders = [];
17
+ let index = 0;
18
+ // Replaces attribute selectors with placeholders.
19
+ // The WS in [attr="va lue"] would otherwise be interpreted as a selector separator.
20
+ selector = selector.replace(/(\[[^\]]*\])/g, (_, keep) => {
21
+ const replaceBy = `__ph-${index}__`;
22
+ placeholders.push(keep);
23
+ index++;
24
+ return replaceBy;
25
+ });
26
+ // Replaces the expression in `:nth-child(2n + 1)` with a placeholder.
27
+ // WS and "+" would otherwise be interpreted as selector separators.
28
+ const content = selector.replace(/(:nth-[-\w]+)(\([^)]+\))/g, (_, pseudo, exp) => {
29
+ const replaceBy = `__ph-${index}__`;
30
+ placeholders.push(exp);
31
+ index++;
32
+ return pseudo + replaceBy;
33
+ });
34
+ const ss = {
35
+ content,
36
+ placeholders,
37
+ };
38
+ return ss;
39
+ };
40
+ const restoreSafeSelector = (placeholders, content) => {
41
+ return content.replace(/__ph-(\d+)__/g, (_, index) => placeholders[+index]);
42
+ };
43
+ const _polyfillHost = '-shadowcsshost';
44
+ const _polyfillSlotted = '-shadowcssslotted';
45
+ // note: :host-context pre-processed to -shadowcsshostcontext.
46
+ const _polyfillHostContext = '-shadowcsscontext';
47
+ const _parenSuffix = ')(?:\\((' + '(?:\\([^)(]*\\)|[^)(]*)+?' + ')\\))?([^,{]*)';
48
+ const _cssColonHostRe = new RegExp('(' + _polyfillHost + _parenSuffix, 'gim');
49
+ const _cssColonHostContextRe = new RegExp('(' + _polyfillHostContext + _parenSuffix, 'gim');
50
+ const _cssColonSlottedRe = new RegExp('(' + _polyfillSlotted + _parenSuffix, 'gim');
51
+ const _polyfillHostNoCombinator = _polyfillHost + '-no-combinator';
52
+ const _polyfillHostNoCombinatorRe = /-shadowcsshost-no-combinator([^\s]*)/;
53
+ const _shadowDOMSelectorsRe = [/::shadow/g, /::content/g];
54
+ const _selectorReSuffix = '([>\\s~+[.,{:][\\s\\S]*)?$';
55
+ const _polyfillHostRe = /-shadowcsshost/gim;
56
+ const _colonHostRe = /:host/gim;
57
+ const _colonSlottedRe = /::slotted/gim;
58
+ const _colonHostContextRe = /:host-context/gim;
59
+ const _commentRe = /\/\*\s*[\s\S]*?\*\//g;
60
+ const stripComments = (input) => {
61
+ return input.replace(_commentRe, '');
62
+ };
63
+ const _commentWithHashRe = /\/\*\s*#\s*source(Mapping)?URL=[\s\S]+?\*\//g;
64
+ const extractCommentsWithHash = (input) => {
65
+ return input.match(_commentWithHashRe) || [];
66
+ };
67
+ const _ruleRe = /(\s*)([^;\{\}]+?)(\s*)((?:{%BLOCK%}?\s*;?)|(?:\s*;))/g;
68
+ const _curlyRe = /([{}])/g;
69
+ const _selectorPartsRe = /(^.*?[^\\])??((:+)(.*)|$)/;
70
+ const OPEN_CURLY = '{';
71
+ const CLOSE_CURLY = '}';
72
+ const BLOCK_PLACEHOLDER = '%BLOCK%';
73
+ const processRules = (input, ruleCallback) => {
74
+ const inputWithEscapedBlocks = escapeBlocks(input);
75
+ let nextBlockIndex = 0;
76
+ return inputWithEscapedBlocks.escapedString.replace(_ruleRe, (...m) => {
77
+ const selector = m[2];
78
+ let content = '';
79
+ let suffix = m[4];
80
+ let contentPrefix = '';
81
+ if (suffix && suffix.startsWith('{' + BLOCK_PLACEHOLDER)) {
82
+ content = inputWithEscapedBlocks.blocks[nextBlockIndex++];
83
+ suffix = suffix.substring(BLOCK_PLACEHOLDER.length + 1);
84
+ contentPrefix = '{';
85
+ }
86
+ const cssRule = {
87
+ selector,
88
+ content,
89
+ };
90
+ const rule = ruleCallback(cssRule);
91
+ return `${m[1]}${rule.selector}${m[3]}${contentPrefix}${rule.content}${suffix}`;
92
+ });
93
+ };
94
+ const escapeBlocks = (input) => {
95
+ const inputParts = input.split(_curlyRe);
96
+ const resultParts = [];
97
+ const escapedBlocks = [];
98
+ let bracketCount = 0;
99
+ let currentBlockParts = [];
100
+ for (let partIndex = 0; partIndex < inputParts.length; partIndex++) {
101
+ const part = inputParts[partIndex];
102
+ if (part === CLOSE_CURLY) {
103
+ bracketCount--;
104
+ }
105
+ if (bracketCount > 0) {
106
+ currentBlockParts.push(part);
107
+ }
108
+ else {
109
+ if (currentBlockParts.length > 0) {
110
+ escapedBlocks.push(currentBlockParts.join(''));
111
+ resultParts.push(BLOCK_PLACEHOLDER);
112
+ currentBlockParts = [];
113
+ }
114
+ resultParts.push(part);
115
+ }
116
+ if (part === OPEN_CURLY) {
117
+ bracketCount++;
118
+ }
119
+ }
120
+ if (currentBlockParts.length > 0) {
121
+ escapedBlocks.push(currentBlockParts.join(''));
122
+ resultParts.push(BLOCK_PLACEHOLDER);
123
+ }
124
+ const strEscapedBlocks = {
125
+ escapedString: resultParts.join(''),
126
+ blocks: escapedBlocks,
127
+ };
128
+ return strEscapedBlocks;
129
+ };
130
+ const insertPolyfillHostInCssText = (selector) => {
131
+ selector = selector
132
+ .replace(_colonHostContextRe, _polyfillHostContext)
133
+ .replace(_colonHostRe, _polyfillHost)
134
+ .replace(_colonSlottedRe, _polyfillSlotted);
135
+ return selector;
136
+ };
137
+ const convertColonRule = (cssText, regExp, partReplacer) => {
138
+ // m[1] = :host(-context), m[2] = contents of (), m[3] rest of rule
139
+ return cssText.replace(regExp, (...m) => {
140
+ if (m[2]) {
141
+ const parts = m[2].split(',');
142
+ const r = [];
143
+ for (let i = 0; i < parts.length; i++) {
144
+ const p = parts[i].trim();
145
+ if (!p)
146
+ break;
147
+ r.push(partReplacer(_polyfillHostNoCombinator, p, m[3]));
148
+ }
149
+ return r.join(',');
150
+ }
151
+ else {
152
+ return _polyfillHostNoCombinator + m[3];
153
+ }
154
+ });
155
+ };
156
+ const colonHostPartReplacer = (host, part, suffix) => {
157
+ return host + part.replace(_polyfillHost, '') + suffix;
158
+ };
159
+ const convertColonHost = (cssText) => {
160
+ return convertColonRule(cssText, _cssColonHostRe, colonHostPartReplacer);
161
+ };
162
+ const colonHostContextPartReplacer = (host, part, suffix) => {
163
+ if (part.indexOf(_polyfillHost) > -1) {
164
+ return colonHostPartReplacer(host, part, suffix);
165
+ }
166
+ else {
167
+ return host + part + suffix + ', ' + part + ' ' + host + suffix;
168
+ }
169
+ };
170
+ const convertColonSlotted = (cssText, slotScopeId) => {
171
+ const slotClass = '.' + slotScopeId + ' > ';
172
+ const selectors = [];
173
+ cssText = cssText.replace(_cssColonSlottedRe, (...m) => {
174
+ if (m[2]) {
175
+ const compound = m[2].trim();
176
+ const suffix = m[3];
177
+ const slottedSelector = slotClass + compound + suffix;
178
+ let prefixSelector = '';
179
+ for (let i = m[4] - 1; i >= 0; i--) {
180
+ const char = m[5][i];
181
+ if (char === '}' || char === ',') {
182
+ break;
183
+ }
184
+ prefixSelector = char + prefixSelector;
185
+ }
186
+ const orgSelector = prefixSelector + slottedSelector;
187
+ const addedSelector = `${prefixSelector.trimRight()}${slottedSelector.trim()}`;
188
+ if (orgSelector.trim() !== addedSelector.trim()) {
189
+ const updatedSelector = `${addedSelector}, ${orgSelector}`;
190
+ selectors.push({
191
+ orgSelector,
192
+ updatedSelector,
193
+ });
194
+ }
195
+ return slottedSelector;
196
+ }
197
+ else {
198
+ return _polyfillHostNoCombinator + m[3];
199
+ }
200
+ });
201
+ return {
202
+ selectors,
203
+ cssText,
204
+ };
205
+ };
206
+ const convertColonHostContext = (cssText) => {
207
+ return convertColonRule(cssText, _cssColonHostContextRe, colonHostContextPartReplacer);
208
+ };
209
+ const convertShadowDOMSelectors = (cssText) => {
210
+ return _shadowDOMSelectorsRe.reduce((result, pattern) => result.replace(pattern, ' '), cssText);
211
+ };
212
+ const makeScopeMatcher = (scopeSelector) => {
213
+ const lre = /\[/g;
214
+ const rre = /\]/g;
215
+ scopeSelector = scopeSelector.replace(lre, '\\[').replace(rre, '\\]');
216
+ return new RegExp('^(' + scopeSelector + ')' + _selectorReSuffix, 'm');
217
+ };
218
+ const selectorNeedsScoping = (selector, scopeSelector) => {
219
+ const re = makeScopeMatcher(scopeSelector);
220
+ return !re.test(selector);
221
+ };
222
+ const injectScopingSelector = (selector, scopingSelector) => {
223
+ return selector.replace(_selectorPartsRe, (_, before = '', _colonGroup, colon = '', after = '') => {
224
+ return before + scopingSelector + colon + after;
225
+ });
226
+ };
227
+ const applySimpleSelectorScope = (selector, scopeSelector, hostSelector) => {
228
+ // In Android browser, the lastIndex is not reset when the regex is used in String.replace()
229
+ _polyfillHostRe.lastIndex = 0;
230
+ if (_polyfillHostRe.test(selector)) {
231
+ const replaceBy = `.${hostSelector}`;
232
+ return selector
233
+ .replace(_polyfillHostNoCombinatorRe, (_, selector) => injectScopingSelector(selector, replaceBy))
234
+ .replace(_polyfillHostRe, replaceBy + ' ');
235
+ }
236
+ return scopeSelector + ' ' + selector;
237
+ };
238
+ const applyStrictSelectorScope = (selector, scopeSelector, hostSelector) => {
239
+ const isRe = /\[is=([^\]]*)\]/g;
240
+ scopeSelector = scopeSelector.replace(isRe, (_, ...parts) => parts[0]);
241
+ const className = '.' + scopeSelector;
242
+ const _scopeSelectorPart = (p) => {
243
+ let scopedP = p.trim();
244
+ if (!scopedP) {
245
+ return '';
246
+ }
247
+ if (p.indexOf(_polyfillHostNoCombinator) > -1) {
248
+ scopedP = applySimpleSelectorScope(p, scopeSelector, hostSelector);
249
+ }
250
+ else {
251
+ // remove :host since it should be unnecessary
252
+ const t = p.replace(_polyfillHostRe, '');
253
+ if (t.length > 0) {
254
+ scopedP = injectScopingSelector(t, className);
255
+ }
256
+ }
257
+ return scopedP;
258
+ };
259
+ const safeContent = safeSelector(selector);
260
+ selector = safeContent.content;
261
+ let scopedSelector = '';
262
+ let startIndex = 0;
263
+ let res;
264
+ const sep = /( |>|\+|~(?!=))\s*/g;
265
+ // If a selector appears before :host it should not be shimmed as it
266
+ // matches on ancestor elements and not on elements in the host's shadow
267
+ // `:host-context(div)` is transformed to
268
+ // `-shadowcsshost-no-combinatordiv, div -shadowcsshost-no-combinator`
269
+ // the `div` is not part of the component in the 2nd selectors and should not be scoped.
270
+ // Historically `component-tag:host` was matching the component so we also want to preserve
271
+ // this behavior to avoid breaking legacy apps (it should not match).
272
+ // The behavior should be:
273
+ // - `tag:host` -> `tag[h]` (this is to avoid breaking legacy apps, should not match anything)
274
+ // - `tag :host` -> `tag [h]` (`tag` is not scoped because it's considered part of a
275
+ // `:host-context(tag)`)
276
+ const hasHost = selector.indexOf(_polyfillHostNoCombinator) > -1;
277
+ // Only scope parts after the first `-shadowcsshost-no-combinator` when it is present
278
+ let shouldScope = !hasHost;
279
+ while ((res = sep.exec(selector)) !== null) {
280
+ const separator = res[1];
281
+ const part = selector.slice(startIndex, res.index).trim();
282
+ shouldScope = shouldScope || part.indexOf(_polyfillHostNoCombinator) > -1;
283
+ const scopedPart = shouldScope ? _scopeSelectorPart(part) : part;
284
+ scopedSelector += `${scopedPart} ${separator} `;
285
+ startIndex = sep.lastIndex;
286
+ }
287
+ const part = selector.substring(startIndex);
288
+ shouldScope = shouldScope || part.indexOf(_polyfillHostNoCombinator) > -1;
289
+ scopedSelector += shouldScope ? _scopeSelectorPart(part) : part;
290
+ // replace the placeholders with their original values
291
+ return restoreSafeSelector(safeContent.placeholders, scopedSelector);
292
+ };
293
+ const scopeSelector = (selector, scopeSelectorText, hostSelector, slotSelector) => {
294
+ return selector
295
+ .split(',')
296
+ .map((shallowPart) => {
297
+ if (slotSelector && shallowPart.indexOf('.' + slotSelector) > -1) {
298
+ return shallowPart.trim();
299
+ }
300
+ if (selectorNeedsScoping(shallowPart, scopeSelectorText)) {
301
+ return applyStrictSelectorScope(shallowPart, scopeSelectorText, hostSelector).trim();
302
+ }
303
+ else {
304
+ return shallowPart.trim();
305
+ }
306
+ })
307
+ .join(', ');
308
+ };
309
+ const scopeSelectors = (cssText, scopeSelectorText, hostSelector, slotSelector, commentOriginalSelector) => {
310
+ return processRules(cssText, (rule) => {
311
+ let selector = rule.selector;
312
+ let content = rule.content;
313
+ if (rule.selector[0] !== '@') {
314
+ selector = scopeSelector(rule.selector, scopeSelectorText, hostSelector, slotSelector);
315
+ }
316
+ else if (rule.selector.startsWith('@media') ||
317
+ rule.selector.startsWith('@supports') ||
318
+ rule.selector.startsWith('@page') ||
319
+ rule.selector.startsWith('@document')) {
320
+ content = scopeSelectors(rule.content, scopeSelectorText, hostSelector, slotSelector);
321
+ }
322
+ const cssRule = {
323
+ selector: selector.replace(/\s{2,}/g, ' ').trim(),
324
+ content,
325
+ };
326
+ return cssRule;
327
+ });
328
+ };
329
+ const scopeCssText = (cssText, scopeId, hostScopeId, slotScopeId, commentOriginalSelector) => {
330
+ cssText = insertPolyfillHostInCssText(cssText);
331
+ cssText = convertColonHost(cssText);
332
+ cssText = convertColonHostContext(cssText);
333
+ const slotted = convertColonSlotted(cssText, slotScopeId);
334
+ cssText = slotted.cssText;
335
+ cssText = convertShadowDOMSelectors(cssText);
336
+ if (scopeId) {
337
+ cssText = scopeSelectors(cssText, scopeId, hostScopeId, slotScopeId);
338
+ }
339
+ cssText = cssText.replace(/-shadowcsshost-no-combinator/g, `.${hostScopeId}`);
340
+ cssText = cssText.replace(/>\s*\*\s+([^{, ]+)/gm, ' $1 ');
341
+ return {
342
+ cssText: cssText.trim(),
343
+ slottedSelectors: slotted.selectors,
344
+ };
345
+ };
346
+ const scopeCss = (cssText, scopeId, commentOriginalSelector) => {
347
+ const hostScopeId = scopeId + '-h';
348
+ const slotScopeId = scopeId + '-s';
349
+ const commentsWithHash = extractCommentsWithHash(cssText);
350
+ cssText = stripComments(cssText);
351
+ const orgSelectors = [];
352
+ if (commentOriginalSelector) {
353
+ const processCommentedSelector = (rule) => {
354
+ const placeholder = `/*!@___${orgSelectors.length}___*/`;
355
+ const comment = `/*!@${rule.selector}*/`;
356
+ orgSelectors.push({ placeholder, comment });
357
+ rule.selector = placeholder + rule.selector;
358
+ return rule;
359
+ };
360
+ cssText = processRules(cssText, (rule) => {
361
+ if (rule.selector[0] !== '@') {
362
+ return processCommentedSelector(rule);
363
+ }
364
+ else if (rule.selector.startsWith('@media') ||
365
+ rule.selector.startsWith('@supports') ||
366
+ rule.selector.startsWith('@page') ||
367
+ rule.selector.startsWith('@document')) {
368
+ rule.content = processRules(rule.content, processCommentedSelector);
369
+ return rule;
370
+ }
371
+ return rule;
372
+ });
373
+ }
374
+ const scoped = scopeCssText(cssText, scopeId, hostScopeId, slotScopeId);
375
+ cssText = [scoped.cssText, ...commentsWithHash].join('\n');
376
+ if (commentOriginalSelector) {
377
+ orgSelectors.forEach(({ placeholder, comment }) => {
378
+ cssText = cssText.replace(placeholder, comment);
379
+ });
380
+ }
381
+ scoped.slottedSelectors.forEach((slottedSelector) => {
382
+ cssText = cssText.replace(slottedSelector.orgSelector, slottedSelector.updatedSelector);
383
+ });
384
+ return cssText;
385
+ };
386
+
387
+ export { scopeCss };
@@ -1,8 +1,8 @@
1
- import { r as registerInstance, h } from './index-0494771f.js';
2
- import { d as dayjs_min, H as HttpService, i as isVideoMedia, g as getSalonImage, s as shortDateYearFormat } from './services-257442e2.js';
3
- import { r as relativeTime } from './relativeTime-baa50aa2.js';
1
+ import { r as registerInstance, h } from './index-888e99e3.js';
2
+ import { d as dayjs_min, H as HttpService, i as isVideoMedia, g as getSalonImage, s as shortDateYearFormat } from './services-d71be591.js';
3
+ import { r as relativeTime } from './relativeTime-268e64b0.js';
4
4
  import { C as Colors } from './colors-ea36347a.js';
5
- import './_commonjsHelpers-66ac50f5.js';
5
+ import './_commonjsHelpers-a4f66ccd.js';
6
6
 
7
7
  const indexCss = ".salon-modal.salon-modal--lookbook-detail .salon-modal--close{display:none !important}.salon-modal.salon-modal--lookbook-detail .salon-modal--content{background-color:#fff;position:fixed;top:0;right:0;bottom:0;left:0;width:100%;height:100%;z-index:1000;overflow-y:auto}.salon-modal.salon-modal--lookbook-detail .style-detail--slides--image{height:240px !important}.salon-modal.salon-modal--lookbook-detail .style-detail--slides--thumbnails{text-align:center}.salon-modal.salon-modal--lookbook-detail .style-detail--slides--thumbnail{display:inline-block;margin-top:12px;margin-right:12px;height:40px;width:60px}.salon-modal.salon-modal--lookbook-detail .style-detail--slides--button{border:none;position:absolute;top:50%;z-index:20;height:40px;width:40px;-moz-border-radius:50px;-webkit-border-radius:50px;border-radius:50px;-moz-transform:translate(0, -50%);-webkit-transform:translate(0, -50%);transform:translate(0, -50%)}.salon-modal.salon-modal--lookbook-detail .style-detail--slides--prev{left:24px}.salon-modal.salon-modal--lookbook-detail .style-detail--slides--next{right:24px}@media (min-width: 768px){.salon-modal.salon-modal--lookbook-detail .style-detail--slides--image{height:360px !important}}@media (min-width: 992px){.salon-modal.salon-modal--lookbook-detail .style-detail--slides--image{height:480px !important}.salon-modal.salon-modal--lookbook-detail .style-detail--slides--thumbnail{height:56px;width:72px}}";
8
8
 
@@ -121,7 +121,17 @@ const StyleDetail = class {
121
121
  return (h("div", { class: "salon-modal salon-modal--lookbook-detail" }, h("div", { class: "salon-modal--inner" }, h("div", { class: "salon-modal--content" }, h("div", { class: "style-detail" }, h("div", { class: "style-detail--header" }, h("div", { style: {
122
122
  position: 'relative',
123
123
  overflow: 'hidden',
124
- } }, h("div", { style: Object.assign({ backgroundColor: Colors.Gray01, backgroundSize: 'cover', backgroundRepeat: 'no-repeat', backgroundPosition: '0 0', filter: 'blur(30px)', position: 'absolute', inset: '0', zIndex: '1' }, this.currentMedia && !isVideoMedia(this.currentMedia) ? { backgroundImage: `url("${this.currentMedia.imageThumb}")` } : {}) }), h("div", { style: {
124
+ } }, h("div", { style: {
125
+ backgroundColor: Colors.Gray01,
126
+ backgroundSize: 'cover',
127
+ backgroundRepeat: 'no-repeat',
128
+ backgroundPosition: '0 0',
129
+ filter: 'blur(30px)',
130
+ position: 'absolute',
131
+ inset: '0',
132
+ zIndex: '1',
133
+ ...this.currentMedia && !isVideoMedia(this.currentMedia) ? { backgroundImage: `url("${this.currentMedia.imageThumb}")` } : {},
134
+ } }), h("div", { style: {
125
135
  zIndex: '2',
126
136
  position: 'relative',
127
137
  width: '100%',
@@ -176,12 +186,20 @@ const StyleDetail = class {
176
186
  position: 'relative',
177
187
  } }, this.albumMedias.map((media, idx) => {
178
188
  const isStyleVideo = isVideoMedia(media);
179
- return (h("div", { class: "style-detail--slides--thumbnail", style: Object.assign(Object.assign({ backgroundColor: Colors.Gray01, borderRadius: '4px', overflow: 'hidden', position: 'relative', cursor: 'pointer' }, this.currentMediaIdx !== idx ? { opacity: '0.75' } : {}), !isStyleVideo ? {
180
- backgroundImage: `url("${media.imageThumb || media.imageThumbMedium}")`,
181
- backgroundRepeat: 'no-repeat',
182
- backgroundPosition: 'center center',
183
- backgroundSize: 'cover',
184
- } : {}), onClick: () => {
189
+ return (h("div", { class: "style-detail--slides--thumbnail", style: {
190
+ backgroundColor: Colors.Gray01,
191
+ borderRadius: '4px',
192
+ overflow: 'hidden',
193
+ position: 'relative',
194
+ cursor: 'pointer',
195
+ ...this.currentMediaIdx !== idx ? { opacity: '0.75' } : {},
196
+ ...!isStyleVideo ? {
197
+ backgroundImage: `url("${media.imageThumb || media.imageThumbMedium}")`,
198
+ backgroundRepeat: 'no-repeat',
199
+ backgroundPosition: 'center center',
200
+ backgroundSize: 'cover',
201
+ } : {},
202
+ }, onClick: () => {
185
203
  this.currentMedia = media;
186
204
  this.currentMediaIdx = idx;
187
205
  } }, isStyleVideo && (h("div", null, h("video", { muted: true, width: "100%", height: "100%", poster: media.imageThumb }, h("source", { src: media.mediaUrl, type: "video/mp4" })), h("i", { class: "ri-play-circle-fill", style: {
@@ -0,0 +1,52 @@
1
+ import { r as registerInstance, h } from './index-888e99e3.js';
2
+ import { C as Colors } from './colors-ea36347a.js';
3
+
4
+ const indexCss = "";
5
+
6
+ const UserAvatar = class {
7
+ constructor(hostRef) {
8
+ registerInstance(this, hostRef);
9
+ this.size = 24;
10
+ this.name = undefined;
11
+ this.description = undefined;
12
+ this.nameStyle = undefined;
13
+ this.shortName = undefined;
14
+ this.avatar = undefined;
15
+ }
16
+ render() {
17
+ return (h("div", { style: { display: "flex", alignItems: "center" } }, this.avatar && (h("div", { style: {
18
+ border: `1px solid ${Colors.White}`,
19
+ backgroundImage: `url("${this.avatar}")`,
20
+ backgroundColor: Colors.Gray01,
21
+ backgroundPosition: 'center center',
22
+ backgroundSize: 'cover',
23
+ borderRadius: '50%',
24
+ height: `${this.size}px`,
25
+ width: `${this.size}px`,
26
+ minWidth: `${this.size}px`,
27
+ } })), !this.avatar && (h("div", { style: {
28
+ border: `1px solid ${Colors.White}`,
29
+ backgroundColor: Colors.Gray01,
30
+ borderRadius: '50%',
31
+ display: 'flex',
32
+ alignItems: 'center',
33
+ justifyContent: 'center',
34
+ height: `${this.size}px`,
35
+ width: `${this.size}px`,
36
+ minWidth: `${this.size}px`,
37
+ } }, this.shortName)), this.name && (h("div", { style: {
38
+ flexShrink: '1',
39
+ flexGrow: '1',
40
+ marginLeft: '12px',
41
+ overflow: 'hidden',
42
+ whiteSpace: 'nowrap',
43
+ textOverflow: 'ellipsis',
44
+ } }, h("div", { style: {
45
+ ...this.nameStyle,
46
+ } }, this.name), this.description && h("div", { style: { color: '#999999' } }, this.description)))));
47
+ }
48
+ };
49
+ ;
50
+ UserAvatar.style = indexCss;
51
+
52
+ export { UserAvatar as user_avatar };
@@ -0,0 +1,44 @@
1
+ import { r as registerInstance, h } from './index-888e99e3.js';
2
+
3
+ const userFormCss = ":host{display:block}";
4
+
5
+ var FormType;
6
+ (function (FormType) {
7
+ FormType["Login"] = "Login";
8
+ FormType["Register"] = "Register";
9
+ FormType["Activate"] = "Activate";
10
+ FormType["ResetPassword"] = "ResetPassword";
11
+ FormType["ChangePassword"] = "ChangePassword";
12
+ })(FormType || (FormType = {}));
13
+ const UserForm = class {
14
+ constructor(hostRef) {
15
+ registerInstance(this, hostRef);
16
+ this.onSuccess = undefined;
17
+ this.type = undefined;
18
+ this.currentUser = undefined;
19
+ }
20
+ render() {
21
+ if (this.type === FormType.Register) {
22
+ return (h("div", null, h("div", { style: { marginBottom: '24px' } }, h("h3", { style: { fontSize: '24px', margin: '8px 0' } }, "Create an account"), h("div", { style: { marginBottom: '4px' } }, "Already have an account? ", h("span", { onClick: () => this.type = FormType.Login, style: { cursor: 'pointer', textDecoration: 'underline' } }, "Signin now"))), h("register-form", { onSuccess: (user) => {
23
+ this.currentUser = user;
24
+ this.type = FormType.Activate;
25
+ } })));
26
+ }
27
+ if (this.type === FormType.Activate) {
28
+ return (h("div", null, h("div", { style: { marginBottom: '24px' } }, h("h3", { style: { fontSize: '24px', margin: '8px 0' } }, "Activate account"), h("div", { style: { marginBottom: '4px' } }, "We\u2019ve sent you a confirmation code. Please check your email inbox and enter the code below")), h("activate-form", { username: (this.currentUser || {}).email, password: (this.currentUser || {}).password, onSuccess: (user) => this.onSuccess(user) })));
29
+ }
30
+ if (this.type === FormType.ResetPassword) {
31
+ return (h("div", null, h("div", { style: { marginBottom: '24px' } }, h("h3", { style: { fontSize: '24px', margin: '8px 0' } }, "Reset password"), h("div", { style: { marginBottom: '4px' } }, "Already have an account? ", h("span", { onClick: () => this.type = FormType.Login, style: { cursor: 'pointer', textDecoration: 'underline' } }, "Signin now"))), h("reset-password-form", { onSuccess: (user) => {
32
+ this.currentUser = user;
33
+ this.type = FormType.ChangePassword;
34
+ } })));
35
+ }
36
+ if (this.type === FormType.ChangePassword) {
37
+ return (h("div", null, h("div", { style: { marginBottom: '24px' } }, h("h3", { style: { fontSize: '24px', margin: '8px 0' } }, "Change password"), h("div", { style: { marginBottom: '4px' } }, "We\u2019ve sent you a confirmation code. Please check your email inbox and enter the code below")), h("change-password-form", { username: (this.currentUser || {}).email, onSuccess: (user) => this.onSuccess(user) })));
38
+ }
39
+ return (h("div", null, h("div", { style: { marginBottom: '24px' } }, h("h3", { style: { fontSize: '24px', margin: '8px 0' } }, "Please login to continue"), h("div", { style: { marginBottom: '4px' } }, "Don\u2019t have an account? ", h("span", { onClick: () => this.type = FormType.Register, style: { cursor: 'pointer', textDecoration: 'underline' } }, "Signup now"))), h("login-form", { onSuccess: (user) => this.onSuccess(user) }), h("div", { style: { marginTop: '16px' } }, "Forgot your password? ", h("span", { onClick: () => this.type = FormType.ResetPassword, style: { cursor: 'pointer', textDecoration: 'underline' } }, "Reset now"))));
40
+ }
41
+ };
42
+ UserForm.style = userFormCss;
43
+
44
+ export { UserForm as user_form };
@@ -1,13 +1,13 @@
1
- export function wait(time = 1000) {
1
+ function wait(time = 1000) {
2
2
  return new Promise(resolve => setTimeout(() => resolve({}), time));
3
3
  }
4
- export function format(first, middle, last) {
4
+ function format(first, middle, last) {
5
5
  return (first || '') + (middle ? ` ${middle}` : '') + (last ? ` ${last}` : '');
6
6
  }
7
- export function formatWebsiteUrl(website) {
7
+ function formatWebsiteUrl(website) {
8
8
  return !!website ? website.indexOf('http') > -1 ? website : `http://${website}` : null;
9
9
  }
10
- export function formatFullAddress(salon) {
10
+ function formatFullAddress(salon) {
11
11
  const { businessAddress, city, state, zipcode, } = salon || {};
12
12
  const stateFields = [state, zipcode].filter(field => !!field);
13
13
  if (businessAddress) {
@@ -18,6 +18,15 @@ export function formatFullAddress(salon) {
18
18
  }
19
19
  return null;
20
20
  }
21
- export function getRatingText() {
21
+ function getRatingText() {
22
22
  return ['', 'Poor', 'Sufficient', 'Average', 'Well', 'Very good'];
23
23
  }
24
+ function formatPhoneNumber(phone) {
25
+ return String(phone || '')
26
+ .replace('(', '')
27
+ .replace(')', '')
28
+ .replace('-', '')
29
+ .replaceAll(' ', '');
30
+ }
31
+
32
+ export { formatWebsiteUrl as a, formatFullAddress as b, formatPhoneNumber as f, getRatingText as g };
@@ -0,0 +1,12 @@
1
+ import { User } from '../../types/user';
2
+ export declare class ActivateForm {
3
+ username: string;
4
+ password: string;
5
+ onSuccess: (user: User) => void;
6
+ isSubmitting: boolean;
7
+ error: string;
8
+ confirmCode: string;
9
+ onSubmit(evt: any): Promise<void>;
10
+ resendCode(evt: any): Promise<void>;
11
+ render(): any;
12
+ }
@@ -0,0 +1,12 @@
1
+ import { User } from '../../types/user';
2
+ export declare class ChangePasswordForm {
3
+ username: string;
4
+ onSuccess: (user: User) => void;
5
+ isSubmitting: boolean;
6
+ error: string;
7
+ confirmCode: string;
8
+ password: string;
9
+ onSubmit(evt: any): Promise<void>;
10
+ resendCode(evt: any): Promise<void>;
11
+ render(): any;
12
+ }
@@ -3,6 +3,7 @@ export declare class ChatBox {
3
3
  primaryColor: string;
4
4
  accessToken: string;
5
5
  senderId: string;
6
+ salonId: string;
6
7
  chatRooms: ChatRoom[];
7
8
  activeRoom: ChatRoom;
8
9
  componentWillLoad(): void;
@@ -2,9 +2,12 @@ import { User } from '../../types/user';
2
2
  import { ChatMessage, ChatRoom } from '../../types/chat';
3
3
  export declare class ChatButton {
4
4
  primaryColor: string;
5
- accessToken: string;
6
- senderId: string;
7
5
  receiverId: string;
6
+ accessToken?: string;
7
+ senderId?: string;
8
+ senderIdState: string;
9
+ accessTokenState: string;
10
+ isChatVerificationExpanded: boolean;
8
11
  senderInfo: User;
9
12
  receiverInfo: User;
10
13
  chatRoom: ChatRoom;
@@ -12,5 +15,6 @@ export declare class ChatButton {
12
15
  isChatExpanded: boolean;
13
16
  componentWillLoad(): void;
14
17
  fetchData(): Promise<void>;
18
+ onVerificationSuccess(user: User): void;
15
19
  render(): any;
16
20
  }
@@ -0,0 +1,5 @@
1
+ export declare class NotifySounds {
2
+ componentDidLoad(): void;
3
+ private playSound;
4
+ render(): any;
5
+ }
@@ -1,12 +1,18 @@
1
1
  import { ChatRoom } from '../../types/chat';
2
+ import { User } from '../../types/user';
2
3
  export declare class ChatRooms {
3
4
  senderId: number;
5
+ salonId: number;
4
6
  chatRooms: ChatRoom[];
7
+ clients: User[];
5
8
  activeRoom: ChatRoom;
9
+ accessToken: string;
6
10
  onClickRoom: (chatRoom: ChatRoom) => void;
7
11
  keyword: string;
8
12
  private clickRoom;
9
13
  private onSearchRooms;
10
14
  private renderChatRoom;
15
+ private initChatRoom;
16
+ private renderClient;
11
17
  render(): any;
12
18
  }