@meetelise/chat 1.35.0 → 1.35.2

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 (282) hide show
  1. package/dist/src/MyPubnub.d.ts +116 -0
  2. package/dist/src/WebComponent/FeeCalculator/components/addons/addon-item-matrix-qty-selector/addon-item-matrix-qty-selector-styles.d.ts +2 -0
  3. package/dist/src/WebComponent/FeeCalculator/components/addons/addon-item-matrix-qty-selector/addon-item-matrix-qty-selector.d.ts +28 -0
  4. package/dist/src/WebComponent/FeeCalculator/components/addons/addon-item-qty-selector/addon-item-qty-selector-styles.d.ts +2 -0
  5. package/dist/src/WebComponent/FeeCalculator/components/addons/addon-item-qty-selector/addon-item-qty-selector.d.ts +18 -0
  6. package/dist/src/WebComponent/FeeCalculator/components/addons/common-addon-styles.d.ts +2 -0
  7. package/dist/src/WebComponent/FeeCalculator/components/addons/rentable-item-qty-selector/rentable-item-qty-selector-styles.d.ts +2 -0
  8. package/dist/src/WebComponent/FeeCalculator/components/addons/rentable-item-qty-selector/rentable-item-qty-selector.d.ts +22 -0
  9. package/dist/src/WebComponent/FeeCalculator/components/fee-calculator-layout/fee-calculator-layout-styles.d.ts +2 -0
  10. package/dist/src/WebComponent/FeeCalculator/components/fee-calculator-layout/fee-calculator-layout.d.ts +46 -0
  11. package/dist/src/WebComponent/FeeCalculator/components/fee-card/fee-card-styles.d.ts +2 -0
  12. package/dist/src/WebComponent/FeeCalculator/components/fee-card/fee-card.d.ts +21 -0
  13. package/dist/src/WebComponent/FeeCalculator/components/fee-item/fee-item-styles.d.ts +2 -0
  14. package/dist/src/WebComponent/FeeCalculator/components/fee-item/fee-item.d.ts +13 -0
  15. package/dist/src/WebComponent/FeeCalculator/components/floor-plan-selector/floor-plan-selector-styles.d.ts +2 -0
  16. package/dist/src/WebComponent/FeeCalculator/components/floor-plan-selector/floor-plan-selector.d.ts +34 -0
  17. package/dist/src/WebComponent/FeeCalculator/components/floorplan-image-card/floorplan-image-card-styles.d.ts +2 -0
  18. package/dist/src/WebComponent/FeeCalculator/components/floorplan-image-card/floorplan-image-card.d.ts +18 -0
  19. package/dist/src/WebComponent/FeeCalculator/components/incentive-banner/incentive-banner-styles.d.ts +1 -0
  20. package/dist/src/WebComponent/FeeCalculator/components/incentive-banner/incentive-banner.d.ts +8 -0
  21. package/dist/src/WebComponent/FeeCalculator/components/incentive-banner/index.d.ts +1 -0
  22. package/dist/src/WebComponent/FeeCalculator/components/index.d.ts +5 -0
  23. package/dist/src/WebComponent/FeeCalculator/components/promo-card/promo-card-styles.d.ts +2 -0
  24. package/dist/src/WebComponent/FeeCalculator/components/promo-card/promo-card.d.ts +13 -0
  25. package/dist/src/WebComponent/FeeCalculator/constants.d.ts +3 -0
  26. package/dist/src/WebComponent/FeeCalculator/fee-calculator-styles.d.ts +1 -0
  27. package/dist/src/WebComponent/FeeCalculator/fee-calculator.d.ts +55 -0
  28. package/dist/src/WebComponent/FeeCalculator/index.d.ts +2 -0
  29. package/dist/src/WebComponent/FeeCalculator/model/building-fee-view.d.ts +41 -0
  30. package/dist/src/WebComponent/FeeCalculator/model/building-fee.d.ts +82 -0
  31. package/dist/src/WebComponent/FeeCalculator/model/desired-addon.d.ts +5 -0
  32. package/dist/src/WebComponent/FeeCalculator/model/desired-rentable-item.d.ts +4 -0
  33. package/dist/src/WebComponent/FeeCalculator/model/index.d.ts +13 -0
  34. package/dist/src/WebComponent/FeeCalculator/model/item-combination.d.ts +6 -0
  35. package/dist/src/WebComponent/FeeCalculator/model/item-quantity.d.ts +4 -0
  36. package/dist/src/WebComponent/FeeCalculator/model/pricing-matrix.d.ts +18 -0
  37. package/dist/src/WebComponent/FeeCalculator/model/pricing-rule.d.ts +8 -0
  38. package/dist/src/WebComponent/FeeCalculator/model/rent-frequency.d.ts +1 -0
  39. package/dist/src/WebComponent/FeeCalculator/model/rentable-item-summary.d.ts +13 -0
  40. package/dist/src/WebComponent/FeeCalculator/model/rentable-item.d.ts +10 -0
  41. package/dist/src/WebComponent/FeeCalculator/model/transaction-category.d.ts +23 -0
  42. package/dist/src/WebComponent/FeeCalculator/model/unit-fee-bundle.d.ts +31 -0
  43. package/dist/src/WebComponent/LeadSourceClient.d.ts +46 -0
  44. package/dist/src/WebComponent/OfficeHours.d.ts +21 -0
  45. package/dist/src/WebComponent/Scheduler/date-picker.d.ts +28 -0
  46. package/dist/src/WebComponent/Scheduler/time-picker.d.ts +16 -0
  47. package/dist/src/WebComponent/Scheduler/tour-scheduler.d.ts +102 -0
  48. package/dist/src/WebComponent/Scheduler/tour-type-option.d.ts +13 -0
  49. package/dist/src/WebComponent/Scheduler/tourSchedulerStyles.d.ts +1 -0
  50. package/dist/src/WebComponent/actions/InputStyles.d.ts +1 -0
  51. package/dist/src/WebComponent/actions/action-confirm-button.d.ts +13 -0
  52. package/dist/src/WebComponent/actions/call-us-window.d.ts +37 -0
  53. package/dist/src/WebComponent/actions/collapse-expand-button.d.ts +8 -0
  54. package/dist/src/WebComponent/actions/details-window.d.ts +14 -0
  55. package/dist/src/WebComponent/actions/email-us-window.d.ts +46 -0
  56. package/dist/src/WebComponent/actions/formatPhoneNumber.d.ts +17 -0
  57. package/dist/src/WebComponent/actions/minimize-expand-button.d.ts +8 -0
  58. package/dist/src/WebComponent/chat-additional-actions.d.ts +28 -0
  59. package/dist/src/WebComponent/health-chat.d.ts +47 -0
  60. package/dist/src/WebComponent/healthchat-styles.d.ts +1 -0
  61. package/dist/src/WebComponent/icons/ApplyOutlineIcon.d.ts +2 -0
  62. package/dist/src/WebComponent/icons/BookTourOutlineIcon.d.ts +2 -0
  63. package/dist/src/WebComponent/icons/CalculatorOutlineIcon.d.ts +2 -0
  64. package/dist/src/WebComponent/icons/ChatOutlineIcon.d.ts +2 -0
  65. package/dist/src/WebComponent/icons/ChevronLeftIcon.d.ts +2 -0
  66. package/dist/src/WebComponent/icons/ChevronRightIcon.d.ts +2 -0
  67. package/dist/src/WebComponent/icons/ContactResidentIcon.d.ts +2 -0
  68. package/dist/src/WebComponent/icons/DollarOutlineIcon.d.ts +7 -0
  69. package/dist/src/WebComponent/icons/EmailOutlineIcon.d.ts +2 -0
  70. package/dist/src/WebComponent/icons/HeyThereEmojiIcon.d.ts +2 -0
  71. package/dist/src/WebComponent/icons/PhoneOutlineIcon.d.ts +2 -0
  72. package/dist/src/WebComponent/icons/SendMessageIcon.d.ts +3 -0
  73. package/dist/src/WebComponent/icons/TourSelfGuidedIcon.d.ts +2 -0
  74. package/dist/src/WebComponent/icons/TourVirtuallyIcon.d.ts +2 -0
  75. package/dist/src/WebComponent/icons/TourWithAgentIcon.d.ts +2 -0
  76. package/dist/src/WebComponent/icons/XOutlineIcon.d.ts +2 -0
  77. package/dist/src/WebComponent/index.d.ts +2 -0
  78. package/dist/src/WebComponent/launcher/Launcher.d.ts +99 -0
  79. package/dist/src/WebComponent/launcher/launcherStyles.d.ts +1 -0
  80. package/dist/src/WebComponent/launcher/mobile-launcher.d.ts +27 -0
  81. package/dist/src/WebComponent/launcher/typeEmojiStyles.d.ts +1 -0
  82. package/dist/src/WebComponent/launcher/typeMiniStyles.d.ts +1 -0
  83. package/dist/src/WebComponent/launcher/typeMobileStyles.d.ts +1 -0
  84. package/dist/src/WebComponent/leasing-chat-styles.d.ts +1 -0
  85. package/dist/src/WebComponent/loaders/index.d.ts +4 -0
  86. package/dist/src/WebComponent/loaders/mega-loader.d.ts +7 -0
  87. package/dist/src/WebComponent/loaders/skeleton-card.d.ts +12 -0
  88. package/dist/src/WebComponent/loaders/skeleton-loader-styles.d.ts +3 -0
  89. package/dist/src/WebComponent/loaders/skeleton-loader.d.ts +13 -0
  90. package/dist/src/WebComponent/me-chat.d.ts +91 -0
  91. package/dist/src/WebComponent/me-select.d.ts +24 -0
  92. package/dist/src/WebComponent/mini-loader.d.ts +5 -0
  93. package/dist/src/WebComponent/pubnub-chat-styles.d.ts +1 -0
  94. package/dist/src/WebComponent/pubnub-chat.d.ts +48 -0
  95. package/dist/src/WebComponent/pubnub-media.d.ts +14 -0
  96. package/dist/src/WebComponent/pubnub-message-styles.d.ts +1 -0
  97. package/dist/src/WebComponent/pubnub-message.d.ts +39 -0
  98. package/dist/src/WebComponent/simple-launcher/simple-launcher-styles.d.ts +1 -0
  99. package/dist/src/WebComponent/simple-launcher/simple-launcher.d.ts +12 -0
  100. package/dist/src/WebComponent/utilities-chat.d.ts +47 -0
  101. package/dist/src/WebComponent/utilities-styles.d.ts +1 -0
  102. package/dist/src/WebComponent/utils.d.ts +31 -0
  103. package/dist/src/analytics.d.ts +64 -0
  104. package/dist/src/disclaimers.d.ts +16 -0
  105. package/dist/src/fetchBuildingABTestType.d.ts +8 -0
  106. package/dist/src/fetchBuildingInfo.d.ts +58 -0
  107. package/dist/src/fetchBuildingWebchatView.d.ts +124 -0
  108. package/dist/src/fetchFeatureFlag.d.ts +14 -0
  109. package/dist/src/fetchLeadSources.d.ts +4 -0
  110. package/dist/src/fetchPhoneNumberFromSource.d.ts +6 -0
  111. package/dist/src/getAvailabilities.d.ts +46 -0
  112. package/dist/src/getBuildingPhoneNumber.d.ts +1 -0
  113. package/dist/src/getShouldAllowScheduling.d.ts +1 -0
  114. package/dist/src/getShouldShowWebchat.d.ts +3 -0
  115. package/dist/src/getTimezoneString.d.ts +1 -0
  116. package/dist/src/globals.d.ts +2 -0
  117. package/dist/src/gtm.d.ts +6 -0
  118. package/dist/src/handleChatId.d.ts +11 -0
  119. package/dist/src/insertDNIIntoWebsite.d.ts +5 -0
  120. package/dist/src/insertLeadSourceIntoSchedulerLinks.d.ts +4 -0
  121. package/dist/src/main/MEChat.d.ts +74 -0
  122. package/dist/src/main/utils.d.ts +2 -0
  123. package/dist/src/postLeadSources.d.ts +3 -0
  124. package/dist/src/rentgrata.d.ts +4 -0
  125. package/dist/src/replaceSelectButtonsWithNewLink.d.ts +5 -0
  126. package/dist/src/services/fees/calculateQuote.d.ts +14 -0
  127. package/dist/src/services/fees/fetchBuildingFeesV2.d.ts +10 -0
  128. package/dist/src/services/fees/fetchBuildingUnits.d.ts +29 -0
  129. package/dist/src/services/fees/utils.d.ts +1 -0
  130. package/dist/src/svgIcons.d.ts +5 -0
  131. package/dist/src/themes.d.ts +5 -0
  132. package/dist/src/types/incentive-v2.d.ts +23 -0
  133. package/dist/src/types/rest-sdk.types.d.ts +11 -0
  134. package/dist/src/types/webchat-no-show-reason.d.ts +1 -0
  135. package/dist/src/utils/getWidgetOverrides.d.ts +39 -0
  136. package/dist/src/utils/queryParamBuilder.d.ts +8 -0
  137. package/dist/src/utils.d.ts +13 -0
  138. package/package.json +1 -1
  139. package/public/dist/index.js +250 -164
  140. package/src/MyPubnub.ts +792 -0
  141. package/src/WebComponent/FeeCalculator/components/addons/addon-item-matrix-qty-selector/addon-item-matrix-qty-selector-styles.ts +39 -0
  142. package/src/WebComponent/FeeCalculator/components/addons/addon-item-matrix-qty-selector/addon-item-matrix-qty-selector.ts +206 -0
  143. package/src/WebComponent/FeeCalculator/components/addons/addon-item-qty-selector/addon-item-qty-selector-styles.ts +6 -0
  144. package/src/WebComponent/FeeCalculator/components/addons/addon-item-qty-selector/addon-item-qty-selector.ts +101 -0
  145. package/src/WebComponent/FeeCalculator/components/addons/common-addon-styles.ts +98 -0
  146. package/src/WebComponent/FeeCalculator/components/addons/rentable-item-qty-selector/rentable-item-qty-selector-styles.ts +9 -0
  147. package/src/WebComponent/FeeCalculator/components/addons/rentable-item-qty-selector/rentable-item-qty-selector.ts +136 -0
  148. package/src/WebComponent/FeeCalculator/components/fee-calculator-layout/fee-calculator-layout-styles.ts +151 -0
  149. package/src/WebComponent/FeeCalculator/components/fee-calculator-layout/fee-calculator-layout.ts +261 -0
  150. package/src/WebComponent/FeeCalculator/components/fee-card/fee-card-styles.ts +65 -0
  151. package/src/WebComponent/FeeCalculator/components/fee-card/fee-card.ts +91 -0
  152. package/src/WebComponent/FeeCalculator/components/fee-item/fee-item-styles.ts +44 -0
  153. package/src/WebComponent/FeeCalculator/components/fee-item/fee-item.ts +38 -0
  154. package/src/WebComponent/FeeCalculator/components/floor-plan-selector/floor-plan-selector-styles.ts +149 -0
  155. package/src/WebComponent/FeeCalculator/components/floor-plan-selector/floor-plan-selector.ts +247 -0
  156. package/src/WebComponent/FeeCalculator/components/floorplan-image-card/floorplan-image-card-styles.ts +82 -0
  157. package/src/WebComponent/FeeCalculator/components/floorplan-image-card/floorplan-image-card.ts +76 -0
  158. package/src/WebComponent/FeeCalculator/components/incentive-banner/incentive-banner-styles.ts +40 -0
  159. package/src/WebComponent/FeeCalculator/components/incentive-banner/incentive-banner.ts +43 -0
  160. package/src/WebComponent/FeeCalculator/components/incentive-banner/index.ts +1 -0
  161. package/src/WebComponent/FeeCalculator/components/index.ts +5 -0
  162. package/src/WebComponent/FeeCalculator/components/promo-card/promo-card-styles.ts +39 -0
  163. package/src/WebComponent/FeeCalculator/components/promo-card/promo-card.ts +39 -0
  164. package/src/WebComponent/FeeCalculator/constants.ts +5 -0
  165. package/src/WebComponent/FeeCalculator/fee-calculator-styles.ts +310 -0
  166. package/src/WebComponent/FeeCalculator/fee-calculator.ts +341 -0
  167. package/src/WebComponent/FeeCalculator/index.ts +4 -0
  168. package/src/WebComponent/FeeCalculator/model/building-fee-view.ts +84 -0
  169. package/src/WebComponent/FeeCalculator/model/building-fee.ts +126 -0
  170. package/src/WebComponent/FeeCalculator/model/desired-addon.ts +6 -0
  171. package/src/WebComponent/FeeCalculator/model/desired-rentable-item.ts +4 -0
  172. package/src/WebComponent/FeeCalculator/model/index.ts +13 -0
  173. package/src/WebComponent/FeeCalculator/model/item-combination.ts +16 -0
  174. package/src/WebComponent/FeeCalculator/model/item-quantity.ts +4 -0
  175. package/src/WebComponent/FeeCalculator/model/pricing-matrix.ts +45 -0
  176. package/src/WebComponent/FeeCalculator/model/pricing-rule.ts +9 -0
  177. package/src/WebComponent/FeeCalculator/model/rent-frequency.ts +1 -0
  178. package/src/WebComponent/FeeCalculator/model/rentable-item-summary.ts +34 -0
  179. package/src/WebComponent/FeeCalculator/model/rentable-item.ts +21 -0
  180. package/src/WebComponent/FeeCalculator/model/transaction-category.ts +23 -0
  181. package/src/WebComponent/FeeCalculator/model/unit-fee-bundle.ts +54 -0
  182. package/src/WebComponent/LeadSourceClient.ts +332 -0
  183. package/src/WebComponent/MEChat.css +5 -0
  184. package/src/WebComponent/OfficeHours.ts +73 -0
  185. package/src/WebComponent/Scheduler/date-picker.ts +405 -0
  186. package/src/WebComponent/Scheduler/time-picker.ts +195 -0
  187. package/src/WebComponent/Scheduler/tour-scheduler.ts +1430 -0
  188. package/src/WebComponent/Scheduler/tour-type-option.ts +112 -0
  189. package/src/WebComponent/Scheduler/tourSchedulerStyles.ts +418 -0
  190. package/src/WebComponent/actions/InputStyles.ts +57 -0
  191. package/src/WebComponent/actions/action-confirm-button.ts +125 -0
  192. package/src/WebComponent/actions/call-us-window.ts +467 -0
  193. package/src/WebComponent/actions/collapse-expand-button.ts +65 -0
  194. package/src/WebComponent/actions/details-window.ts +150 -0
  195. package/src/WebComponent/actions/email-us-window.ts +556 -0
  196. package/src/WebComponent/actions/formatPhoneNumber.ts +72 -0
  197. package/src/WebComponent/actions/minimize-expand-button.ts +93 -0
  198. package/src/WebComponent/chat-additional-actions.ts +135 -0
  199. package/src/WebComponent/health-chat.ts +270 -0
  200. package/src/WebComponent/healthchat-styles.ts +119 -0
  201. package/src/WebComponent/icons/ApplyOutlineIcon.ts +22 -0
  202. package/src/WebComponent/icons/BookTourOutlineIcon.ts +13 -0
  203. package/src/WebComponent/icons/CalculatorOutlineIcon.ts +80 -0
  204. package/src/WebComponent/icons/ChatOutlineIcon.ts +10 -0
  205. package/src/WebComponent/icons/ChevronLeftIcon.ts +7 -0
  206. package/src/WebComponent/icons/ChevronRightIcon.ts +7 -0
  207. package/src/WebComponent/icons/ContactResidentIcon.ts +9 -0
  208. package/src/WebComponent/icons/DollarOutlineIcon.ts +26 -0
  209. package/src/WebComponent/icons/EmailOutlineIcon.ts +7 -0
  210. package/src/WebComponent/icons/HeyThereEmojiIcon.ts +12 -0
  211. package/src/WebComponent/icons/PhoneOutlineIcon.ts +7 -0
  212. package/src/WebComponent/icons/SendMessageIcon.ts +17 -0
  213. package/src/WebComponent/icons/TourSelfGuidedIcon.ts +17 -0
  214. package/src/WebComponent/icons/TourVirtuallyIcon.ts +17 -0
  215. package/src/WebComponent/icons/TourWithAgentIcon.ts +17 -0
  216. package/src/WebComponent/icons/XOutlineIcon.ts +8 -0
  217. package/src/WebComponent/index.ts +2 -0
  218. package/src/WebComponent/launcher/Launcher.ts +1284 -0
  219. package/src/WebComponent/launcher/launcherStyles.ts +500 -0
  220. package/src/WebComponent/launcher/mobile-launcher.ts +162 -0
  221. package/src/WebComponent/launcher/typeEmojiStyles.ts +161 -0
  222. package/src/WebComponent/launcher/typeMiniStyles.ts +60 -0
  223. package/src/WebComponent/launcher/typeMobileStyles.ts +50 -0
  224. package/src/WebComponent/leasing-chat-styles.ts +114 -0
  225. package/src/WebComponent/loaders/index.ts +7 -0
  226. package/src/WebComponent/loaders/mega-loader.ts +36 -0
  227. package/src/WebComponent/loaders/skeleton-card.ts +31 -0
  228. package/src/WebComponent/loaders/skeleton-loader-styles.ts +112 -0
  229. package/src/WebComponent/loaders/skeleton-loader.ts +34 -0
  230. package/src/WebComponent/me-chat.ts +1264 -0
  231. package/src/WebComponent/me-select.ts +322 -0
  232. package/src/WebComponent/mini-loader.ts +28 -0
  233. package/src/WebComponent/pubnub-chat-styles.ts +204 -0
  234. package/src/WebComponent/pubnub-chat.ts +771 -0
  235. package/src/WebComponent/pubnub-media.ts +208 -0
  236. package/src/WebComponent/pubnub-message-styles.ts +54 -0
  237. package/src/WebComponent/pubnub-message.ts +431 -0
  238. package/src/WebComponent/simple-launcher/simple-launcher-styles.ts +34 -0
  239. package/src/WebComponent/simple-launcher/simple-launcher.ts +100 -0
  240. package/src/WebComponent/utilities-chat.ts +270 -0
  241. package/src/WebComponent/utilities-styles.ts +110 -0
  242. package/src/WebComponent/utils.ts +82 -0
  243. package/src/analytics.ts +217 -0
  244. package/src/assetUrls.ts +6 -0
  245. package/src/disclaimers.ts +301 -0
  246. package/src/fetchBuildingABTestType.ts +21 -0
  247. package/src/fetchBuildingInfo.ts +88 -0
  248. package/src/fetchBuildingWebchatView.ts +176 -0
  249. package/src/fetchFeatureFlag.ts +250 -0
  250. package/src/fetchLeadSources.ts +98 -0
  251. package/src/fetchPhoneNumberFromSource.ts +31 -0
  252. package/src/fetchWebchatPreferences.ts +54 -0
  253. package/src/getAvailabilities.ts +189 -0
  254. package/src/getBuildingPhoneNumber.ts +26 -0
  255. package/src/getShouldAllowScheduling.ts +16 -0
  256. package/src/getShouldShowWebchat.ts +114 -0
  257. package/src/getTimezoneString.ts +40 -0
  258. package/src/globals.ts +3 -0
  259. package/src/gtm.ts +17 -0
  260. package/src/handleChatId.ts +101 -0
  261. package/src/insertDNIIntoWebsite.ts +146 -0
  262. package/src/insertLeadSourceIntoSchedulerLinks.ts +71 -0
  263. package/src/main/MEChat.test.ts +110 -0
  264. package/src/main/MEChat.ts +404 -0
  265. package/src/main/utils.ts +70 -0
  266. package/src/postLeadSources.ts +44 -0
  267. package/src/rentgrata.ts +74 -0
  268. package/src/replaceSelectButtonsWithNewLink.ts +91 -0
  269. package/src/services/fees/calculateQuote.ts +74 -0
  270. package/src/services/fees/fetchBuildingFees.ts +50 -0
  271. package/src/services/fees/fetchBuildingFeesV2.ts +59 -0
  272. package/src/services/fees/fetchBuildingFloorplans.ts +74 -0
  273. package/src/services/fees/fetchBuildingUnits.ts +86 -0
  274. package/src/services/fees/utils.ts +4 -0
  275. package/src/svgIcons.ts +14 -0
  276. package/src/themes.ts +65 -0
  277. package/src/types/incentive-v2.ts +24 -0
  278. package/src/types/rest-sdk.types.ts +13 -0
  279. package/src/types/webchat-no-show-reason.ts +6 -0
  280. package/src/utils/getWidgetOverrides.ts +91 -0
  281. package/src/utils/queryParamBuilder.ts +28 -0
  282. package/src/utils.ts +121 -0
@@ -0,0 +1,39 @@
1
+ import { css } from "lit";
2
+ import commonAddonStyles from "../common-addon-styles";
3
+
4
+ export default [
5
+ commonAddonStyles,
6
+ css`
7
+ .quantity-controls-container {
8
+ display: flex;
9
+ flex-direction: column;
10
+ gap: 12px;
11
+ }
12
+
13
+ .quantity-control {
14
+ width: 100%;
15
+ display: flex;
16
+ align-items: center;
17
+ border: 1px solid #dee2e6;
18
+ border-radius: 4px;
19
+ }
20
+
21
+ .quantity-buttons {
22
+ display: flex;
23
+ align-items: center;
24
+ gap: 8px;
25
+ width: 100%;
26
+ justify-content: space-between;
27
+ }
28
+
29
+ .quantity-value {
30
+ min-width: 80px;
31
+ text-align: center;
32
+ font-size: 0.875rem;
33
+ color: #374151;
34
+ white-space: nowrap;
35
+ overflow: hidden;
36
+ text-overflow: ellipsis;
37
+ }
38
+ `,
39
+ ];
@@ -0,0 +1,206 @@
1
+ import { LitElement, html, TemplateResult } from "lit";
2
+ import { customElement, property, state } from "lit/decorators.js";
3
+ import { BuildingFeeView, DesiredAddon, PricingRule } from "../../../model";
4
+
5
+ import styles from "./addon-item-matrix-qty-selector-styles";
6
+
7
+ @customElement("addon-item-matrix-qty-selector")
8
+ export class AddonItemMatrixQtySelector extends LitElement {
9
+ static styles = styles;
10
+
11
+ @property({ type: Object })
12
+ set feeItem(value: BuildingFeeView | null) {
13
+ const oldValue = this._feeItem;
14
+ this._feeItem = value;
15
+ // Reset quantities when fee item changes
16
+ if (value !== oldValue) {
17
+ this.quantities = {};
18
+ this._availableTypes = this.getAvailableTypes();
19
+ }
20
+ this.requestUpdate("feeItem", oldValue);
21
+ }
22
+ get feeItem(): BuildingFeeView | null {
23
+ return this._feeItem;
24
+ }
25
+ private _feeItem: BuildingFeeView | null = null;
26
+
27
+ @property()
28
+ onQuantityChange: ((addon: DesiredAddon) => void) | null = null;
29
+
30
+ @state()
31
+ private quantities: Record<string, number> = {};
32
+
33
+ // Cache available types to prevent recalculation on each render
34
+ private _availableTypes: string[] = [];
35
+
36
+ private get matrixRules(): PricingRule[] {
37
+ return this.feeItem?.customMatrixData?.pricingRules ?? [];
38
+ }
39
+
40
+ private getAvailableTypes(): string[] {
41
+ const availableTypes = new Set<string>();
42
+ this.matrixRules.forEach((rule) => {
43
+ rule.combination.quantities.forEach((q) =>
44
+ availableTypes.add(q.itemType)
45
+ );
46
+ });
47
+ // Convert to sorted array for consistent ordering
48
+ return Array.from(availableTypes).sort();
49
+ }
50
+
51
+ private get itemTypes(): string[] {
52
+ return this._availableTypes;
53
+ }
54
+
55
+ private getMaxQuantityForType(itemType: string): number {
56
+ let max = 0;
57
+ this.matrixRules.forEach((rule) => {
58
+ const itemQty = rule.combination.quantities.find(
59
+ (q) => q.itemType === itemType
60
+ );
61
+ if (itemQty) {
62
+ max = Math.max(max, itemQty.quantity);
63
+ }
64
+ });
65
+ return max;
66
+ }
67
+
68
+ private isValidCombination(type: string, newQuantity: number): boolean {
69
+ const proposedQuantities = { ...this.quantities, [type]: newQuantity };
70
+
71
+ const relevantRules = this.matrixRules.filter((rule) =>
72
+ rule.combination.quantities.some((q) => q.itemType === type)
73
+ );
74
+
75
+ return relevantRules.some((rule) => {
76
+ const ruleQuantities = new Map(
77
+ rule.combination.quantities.map((q) => [q.itemType, q.quantity])
78
+ );
79
+
80
+ return Array.from(ruleQuantities.entries()).every(
81
+ ([itemType, quantity]) => {
82
+ const proposedQty = proposedQuantities[itemType] ?? 0;
83
+ return proposedQty === quantity;
84
+ }
85
+ );
86
+ });
87
+ }
88
+
89
+ private handleIncrement(type: string): void {
90
+ const currentQty = this.quantities[type] ?? 0;
91
+ const newQty = currentQty + 1;
92
+
93
+ if (newQty > this.getMaxQuantityForType(type)) return;
94
+ if (!this.isValidCombination(type, newQty)) return;
95
+
96
+ const newQuantities = { ...this.quantities };
97
+ newQuantities[type] = newQty;
98
+ this.quantities = newQuantities;
99
+
100
+ this.notifyQuantityChange();
101
+ }
102
+
103
+ private handleDecrement(type: string): void {
104
+ const currentQty = this.quantities[type] ?? 0;
105
+ if (currentQty <= 0) return;
106
+
107
+ const newQty = currentQty - 1;
108
+ if (!this.isValidCombination(type, newQty)) return;
109
+
110
+ const newQuantities = { ...this.quantities };
111
+ newQuantities[type] = newQty;
112
+ this.quantities = newQuantities;
113
+
114
+ this.notifyQuantityChange();
115
+ }
116
+
117
+ private notifyQuantityChange(): void {
118
+ if (!this.onQuantityChange || !this.feeItem) return;
119
+
120
+ // Include all available types, using 0 as default quantity if not set
121
+ // e.g. { "dog": 1, "cat": 2 }
122
+ const quantities = this.itemTypes.map((type) => ({
123
+ itemType: type,
124
+ quantity: this.quantities[type] ?? 0,
125
+ }));
126
+
127
+ this.onQuantityChange({
128
+ id: this.feeItem.id ?? 0,
129
+ quantities,
130
+ });
131
+ }
132
+
133
+ private formatItemType(type: string): string {
134
+ return type
135
+ .split(/[_-]/)
136
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
137
+ .join(" ");
138
+ }
139
+
140
+ private pluralize(type: string, quantity: number): string {
141
+ const formattedType = this.formatItemType(type);
142
+ return `${quantity} ${formattedType}${quantity !== 1 ? "s" : ""}`;
143
+ }
144
+
145
+ private renderQuantitySelector(type: string): TemplateResult {
146
+ const quantity = this.quantities[type] ?? 0;
147
+ const maxQty = this.getMaxQuantityForType(type);
148
+ const canIncrement =
149
+ this.isValidCombination(type, quantity + 1) && quantity < maxQty;
150
+
151
+ return html`
152
+ <div class="quantity-control">
153
+ <div class="quantity-buttons">
154
+ <button
155
+ class="quantity-button"
156
+ @click=${() => this.handleDecrement(type)}
157
+ ?disabled=${quantity <= 0}
158
+ aria-label="Decrease ${type} quantity"
159
+ >
160
+ <span class="operator-sign">&minus;</span>
161
+ </button>
162
+ <span class="quantity-value">${this.pluralize(type, quantity)}</span>
163
+ <button
164
+ class="quantity-button"
165
+ @click=${() => this.handleIncrement(type)}
166
+ ?disabled=${!canIncrement}
167
+ aria-label="Increase ${type} quantity"
168
+ >
169
+ <span class="operator-sign">+</span>
170
+ </button>
171
+ </div>
172
+ </div>
173
+ `;
174
+ }
175
+
176
+ render(): TemplateResult {
177
+ if (!this.feeItem || !this.matrixRules.length) return html``;
178
+
179
+ const types = this.itemTypes;
180
+ if (!types.length) return html``;
181
+
182
+ return html`
183
+ <div class="addon-container">
184
+ <div class="addon-inner-container">
185
+ <div class="addon-header">
186
+ <div class="addon-header-left">
187
+ <p class="addon-title">${this.feeItem.feeName}</p>
188
+ </div>
189
+ </div>
190
+
191
+ <div class="addon-body">
192
+ <div class="quantity-controls-container">
193
+ ${types.map((type) => this.renderQuantitySelector(type))}
194
+ </div>
195
+ </div>
196
+ </div>
197
+ </div>
198
+ `;
199
+ }
200
+ }
201
+
202
+ declare global {
203
+ interface HTMLElementTagNameMap {
204
+ "addon-item-matrix-qty-selector": AddonItemMatrixQtySelector;
205
+ }
206
+ }
@@ -0,0 +1,6 @@
1
+ import { css } from "lit";
2
+ import commonAddonStyles from "../common-addon-styles";
3
+
4
+ export default css`
5
+ ${commonAddonStyles}
6
+ `;
@@ -0,0 +1,101 @@
1
+ import { LitElement, html, TemplateResult } from "lit";
2
+ import { customElement, property, state } from "lit/decorators.js";
3
+ import { BuildingFeeView, DesiredAddon } from "../../../model";
4
+
5
+ import styles from "./addon-item-qty-selector-styles";
6
+
7
+ const DEFAULT_MAX_QUANTITY = 10;
8
+
9
+ @customElement("addon-item-qty-selector")
10
+ export class AddonItemQtySelector extends LitElement {
11
+ static styles = styles;
12
+
13
+ @property({ type: Object })
14
+ feeItem: BuildingFeeView | null = null;
15
+
16
+ @property()
17
+ onQuantityChange: ((addon: DesiredAddon) => void) | null = null;
18
+
19
+ @state()
20
+ private quantity = 0;
21
+
22
+ private get maxQuantity(): number {
23
+ return this.feeItem?.maxAmount ?? DEFAULT_MAX_QUANTITY;
24
+ }
25
+
26
+ private handleIncrement(): void {
27
+ if (this.quantity >= this.maxQuantity) return;
28
+ this.quantity += 1;
29
+ this.notifyQuantityChange();
30
+ }
31
+
32
+ private handleDecrement(): void {
33
+ if (this.quantity <= 0) return;
34
+ this.quantity = Math.max(0, this.quantity - 1);
35
+ this.notifyQuantityChange();
36
+ }
37
+
38
+ private notifyQuantityChange(): void {
39
+ if (!this.onQuantityChange || !this.feeItem) return;
40
+
41
+ this.onQuantityChange({
42
+ id: this.feeItem.id ?? 0,
43
+ quantities: [
44
+ {
45
+ itemType: this.feeItem.category ?? "",
46
+ quantity: this.quantity,
47
+ },
48
+ ],
49
+ });
50
+ }
51
+
52
+ render(): TemplateResult {
53
+ if (!this.feeItem) return html``;
54
+
55
+ return html`
56
+ <div class="addon-container">
57
+ <div class="addon-inner-container">
58
+ <div class="addon-header">
59
+ <div class="addon-header-left">
60
+ <p class="addon-title">${this.feeItem.feeName}</p>
61
+ </div>
62
+
63
+ ${this.maxQuantity > 0 && this.maxQuantity !== DEFAULT_MAX_QUANTITY
64
+ ? html` <div class="addon-header-right">
65
+ <p>${this.maxQuantity} Max</p>
66
+ </div>`
67
+ : ""}
68
+ </div>
69
+
70
+ <div class="addon-body">
71
+ <div class="quantity-control">
72
+ <button
73
+ class="quantity-button"
74
+ @click=${this.handleDecrement}
75
+ ?disabled=${this.quantity <= 0}
76
+ aria-label="Decrease quantity"
77
+ >
78
+ <span class="operator-sign">&minus;</span>
79
+ </button>
80
+ <span class="quantity-value">${this.quantity}</span>
81
+ <button
82
+ class="quantity-button"
83
+ @click=${this.handleIncrement}
84
+ ?disabled=${this.quantity >= this.maxQuantity}
85
+ aria-label="Increase quantity"
86
+ >
87
+ <span class="operator-sign">+</span>
88
+ </button>
89
+ </div>
90
+ </div>
91
+ </div>
92
+ </div>
93
+ `;
94
+ }
95
+ }
96
+
97
+ declare global {
98
+ interface HTMLElementTagNameMap {
99
+ "addon-item-qty-selector": AddonItemQtySelector;
100
+ }
101
+ }
@@ -0,0 +1,98 @@
1
+ import { css } from "lit";
2
+
3
+ export default css`
4
+ :host {
5
+ display: block;
6
+ height: 100%;
7
+ }
8
+
9
+ p {
10
+ margin: 0;
11
+ }
12
+
13
+ .addon-container {
14
+ border: 1px solid #e5e7eb;
15
+ border-radius: 0.375rem;
16
+ align-items: center;
17
+ height: 100%;
18
+ display: flex;
19
+ }
20
+
21
+ .addon-inner-container {
22
+ display: flex;
23
+ flex-direction: column;
24
+ gap: 8px;
25
+ margin: 12px;
26
+ width: 100%;
27
+ }
28
+
29
+ .addon-header {
30
+ display: flex;
31
+ justify-content: space-between;
32
+ }
33
+
34
+ .addon-header-right {
35
+ color: #838385;
36
+ }
37
+
38
+ .addon-title {
39
+ font-size: 0.875rem;
40
+ color: #374151;
41
+ }
42
+
43
+ .addon-body {
44
+ width: 100%;
45
+ }
46
+
47
+ .quantity-control {
48
+ display: flex;
49
+ justify-content: space-between;
50
+ align-items: center;
51
+ border: 1px solid #dee2e6;
52
+ border-radius: 0.2;
53
+ }
54
+
55
+ .quantity-control.unavailable {
56
+ background-color: #f9f9f9;
57
+ border-color: #e0e0e0;
58
+ cursor: not-allowed;
59
+ }
60
+
61
+ .operator-sign {
62
+ display: inline-block;
63
+ line-height: 1;
64
+ position: relative;
65
+ transform: translateY(2px);
66
+ width: 1rem;
67
+ text-align: center;
68
+ }
69
+
70
+ .quantity-button {
71
+ font-size: 1.2rem;
72
+ padding: 0.5rem;
73
+ background: none;
74
+ border: none;
75
+ color: #347ff7;
76
+ cursor: pointer;
77
+ }
78
+
79
+ .quantity-button:hover {
80
+ background-color: #f3f4f6;
81
+ }
82
+
83
+ .quantity-button:disabled {
84
+ opacity: 0.5;
85
+ cursor: not-allowed;
86
+ }
87
+
88
+ .quantity-value {
89
+ padding: 0.25rem;
90
+ font-size: 0.875rem;
91
+ }
92
+
93
+ .unavailable-text {
94
+ color: #9ca3af;
95
+ font-style: italic;
96
+ cursor: not-allowed;
97
+ }
98
+ `;
@@ -0,0 +1,9 @@
1
+ import { css } from "lit";
2
+
3
+ const rentableItemQuantitySelectorStyles = css`
4
+ :host {
5
+ display: block;
6
+ }
7
+ `;
8
+
9
+ export default rentableItemQuantitySelectorStyles;
@@ -0,0 +1,136 @@
1
+ import { html, LitElement, TemplateResult } from "lit";
2
+ import { customElement, property, state } from "lit/decorators.js";
3
+ import { DesiredRentableItem, RentableItemSummary } from "../../../model";
4
+
5
+ import commonAddonStyles from "../common-addon-styles";
6
+
7
+ const DEFAULT_MAX_QUANTITY = 10;
8
+
9
+ @customElement("rentable-item-qty-selector")
10
+ export class RentableItemQtySelector extends LitElement {
11
+ static styles = commonAddonStyles;
12
+
13
+ @property({ type: Object })
14
+ rentableItem: RentableItemSummary | null = null;
15
+
16
+ @property({ type: Function })
17
+ onSelect: ((rentableItem: DesiredRentableItem) => void) | null = null;
18
+
19
+ @state()
20
+ private quantity = 0;
21
+
22
+ @state()
23
+ selectedItemIds: Set<string> = new Set();
24
+
25
+ get totalAvailableItems(): number {
26
+ return (
27
+ this.rentableItem?.allItems?.filter((item) => item.available).length ?? 0
28
+ );
29
+ }
30
+
31
+ get quantityLeft(): number {
32
+ return Math.min(
33
+ this.totalAvailableItems - this.quantity,
34
+ DEFAULT_MAX_QUANTITY
35
+ );
36
+ }
37
+
38
+ get atMaxUnits(): boolean {
39
+ return this.quantity >= this.totalAvailableItems;
40
+ }
41
+
42
+ get atMinUnits(): boolean {
43
+ return this.quantity <= 0;
44
+ }
45
+
46
+ private handleIncrement(): void {
47
+ if (this.atMaxUnits) return;
48
+ this.quantity += 1;
49
+ this.emitChange();
50
+ }
51
+
52
+ private handleDecrement(): void {
53
+ if (this.atMinUnits) return;
54
+ this.quantity = Math.max(0, this.quantity - 1);
55
+ this.emitChange();
56
+ }
57
+
58
+ private emitChange(): void {
59
+ if (!this.rentableItem) return;
60
+
61
+ const firstAvailableItem = this.rentableItem.allItems.find(
62
+ (item) => item.available && !this.selectedItemIds.has(item.id)
63
+ );
64
+
65
+ if (!firstAvailableItem) return;
66
+
67
+ this.selectedItemIds.add(firstAvailableItem.id);
68
+
69
+ this.onSelect?.({
70
+ id: firstAvailableItem.id,
71
+ type: this.rentableItem.type,
72
+ });
73
+ }
74
+
75
+ render(): TemplateResult {
76
+ if (!this.rentableItem) return html``;
77
+
78
+ const hasAvailableItems = this.totalAvailableItems > 0;
79
+
80
+ return html`
81
+ <div class="addon-container">
82
+ <div class="addon-inner-container">
83
+ <div class="addon-header">
84
+ <div class="addon-header-left">
85
+ <p class="addon-title">${this.rentableItem.displayName}</p>
86
+ </div>
87
+
88
+ ${this.quantityLeft > 0
89
+ ? html`
90
+ <div class="addon-header-right">
91
+ <p>${this.quantityLeft} Max</p>
92
+ </div>
93
+ `
94
+ : ""}
95
+ </div>
96
+
97
+ <div class="addon-body">
98
+ <div
99
+ class="quantity-control ${!hasAvailableItems
100
+ ? "unavailable"
101
+ : ""}"
102
+ >
103
+ <button
104
+ class="quantity-button"
105
+ @click=${this.handleDecrement}
106
+ ?disabled=${this.quantity <= 0}
107
+ aria-label="Decrease quantity"
108
+ >
109
+ <span class="operator-sign">&minus;</span>
110
+ </button>
111
+ ${hasAvailableItems
112
+ ? html`<span class="quantity-value">${this.quantity}</span>`
113
+ : html`<span class="quantity-value unavailable-text"
114
+ >Not available</span
115
+ >`}
116
+ <button
117
+ class="quantity-button"
118
+ @click=${this.handleIncrement}
119
+ ?disabled=${!hasAvailableItems || this.atMaxUnits}
120
+ aria-label="Increase quantity"
121
+ >
122
+ <span class="operator-sign">+</span>
123
+ </button>
124
+ </div>
125
+ </div>
126
+ </div>
127
+ </div>
128
+ `;
129
+ }
130
+ }
131
+
132
+ declare global {
133
+ interface HTMLElementTagNameMap {
134
+ "rentable-item-qty-selector": RentableItemQtySelector;
135
+ }
136
+ }