@homefile/components-v2 2.59.2 → 2.60.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/dist/assets/locales/en/index.json +5 -2
  2. package/dist/components/folderPanel/displayFiles/GridFile.js +9 -1
  3. package/dist/components/folderPanel/displayFiles/ListFile.js +9 -1
  4. package/dist/components/forms/dynamicForm/DynamicForm.js +1 -1
  5. package/dist/components/forms/dynamicForm/HiddenField.js +2 -2
  6. package/dist/components/forms/dynamicForm/fields/HomeInitialSetup.js +3 -1
  7. package/dist/components/forms/readOnly/ReadOnlyDynamicForm.js +10 -2
  8. package/dist/components/forms/readOnly/fields/homeItem/ReadOnlyAppliances.js +21 -22
  9. package/dist/components/forms/readOnly/fields/homeItem/ReadOnlyGuidelines.js +6 -3
  10. package/dist/components/forms/readOnly/fields/homeItem/ReadOnlyHistory.d.ts +2 -0
  11. package/dist/components/forms/readOnly/fields/homeItem/ReadOnlyHistory.js +35 -0
  12. package/dist/components/forms/readOnly/fields/homeItem/ReadOnlyItemRelated.js +8 -3
  13. package/dist/components/forms/readOnly/fields/homeItem/ReadOnlyOverview.d.ts +2 -0
  14. package/dist/components/forms/readOnly/fields/homeItem/ReadOnlyOverview.js +16 -0
  15. package/dist/components/forms/readOnly/fields/homeItem/ReadOnlyPurchaseDetails.d.ts +2 -0
  16. package/dist/components/forms/readOnly/fields/homeItem/ReadOnlyPurchaseDetails.js +30 -0
  17. package/dist/components/forms/readOnly/fields/homeItem/ReadOnlyWarrantyBanner.d.ts +2 -0
  18. package/dist/components/forms/readOnly/fields/homeItem/ReadOnlyWarrantyBanner.js +42 -0
  19. package/dist/components/forms/readOnly/fields/homeItem/index.d.ts +4 -0
  20. package/dist/components/forms/readOnly/fields/homeItem/index.js +4 -0
  21. package/dist/components/headers/TabsHeader.js +1 -1
  22. package/dist/components/history/AddDocuments.d.ts +7 -0
  23. package/dist/components/history/AddDocuments.js +8 -0
  24. package/dist/components/history/DatePennant.d.ts +7 -0
  25. package/dist/components/history/DatePennant.js +6 -0
  26. package/dist/components/history/HistoryCard.d.ts +19 -0
  27. package/dist/components/history/HistoryCard.js +13 -0
  28. package/dist/components/history/index.d.ts +3 -0
  29. package/dist/components/history/index.js +3 -0
  30. package/dist/components/homeBoard/AddToHomefile.js +1 -1
  31. package/dist/components/homeBoard/HomeCard.js +1 -1
  32. package/dist/components/homeItems/ViewingHomeItemBody.d.ts +2 -0
  33. package/dist/components/homeItems/ViewingHomeItemBody.js +41 -0
  34. package/dist/components/homeItems/ViewingHomeItemPanel.js +17 -19
  35. package/dist/components/homeItems/index.d.ts +1 -0
  36. package/dist/components/homeItems/index.js +1 -0
  37. package/dist/components/homi/HomiPresence.d.ts +2 -0
  38. package/dist/components/homi/HomiPresence.js +31 -0
  39. package/dist/components/homi/HomiVoice.d.ts +2 -0
  40. package/dist/components/homi/HomiVoice.js +6 -0
  41. package/dist/components/homi/ProgressBar.d.ts +2 -0
  42. package/dist/components/homi/ProgressBar.js +9 -0
  43. package/dist/components/homi/RevealValueCard.d.ts +2 -0
  44. package/dist/components/homi/RevealValueCard.js +23 -0
  45. package/dist/components/homi/StaggerReveal.d.ts +2 -0
  46. package/dist/components/homi/StaggerReveal.js +29 -0
  47. package/dist/components/homi/index.d.ts +5 -0
  48. package/dist/components/homi/index.js +5 -0
  49. package/dist/components/inboxTile/InboxForwardBanner.js +1 -1
  50. package/dist/components/index.d.ts +2 -0
  51. package/dist/components/index.js +2 -0
  52. package/dist/components/inputs/InlineEditField.d.ts +2 -0
  53. package/dist/components/inputs/InlineEditField.js +15 -0
  54. package/dist/components/inputs/RadioCard.d.ts +3 -1
  55. package/dist/components/inputs/RadioCard.js +3 -3
  56. package/dist/components/inputs/TextInput.d.ts +1 -1
  57. package/dist/components/inputs/TextInput.js +11 -4
  58. package/dist/components/inputs/index.d.ts +1 -0
  59. package/dist/components/inputs/index.js +1 -0
  60. package/dist/components/myHomes/HomeDetailsContent.js +1 -1
  61. package/dist/components/myHomes/IncludePublicRecords.d.ts +13 -1
  62. package/dist/components/myHomes/IncludePublicRecords.js +16 -6
  63. package/dist/components/myHomes/edithome/EditHomeDetails.js +12 -3
  64. package/dist/components/myHomes/steps/NewHomeDetails.d.ts +1 -1
  65. package/dist/components/myHomes/steps/NewHomeDetails.js +3 -3
  66. package/dist/components/myProfile/MyProfileBody.d.ts +1 -1
  67. package/dist/components/myProfile/MyProfileBody.js +2 -2
  68. package/dist/components/myProfile/details/HomiSms.d.ts +1 -1
  69. package/dist/components/myProfile/details/HomiSms.js +53 -23
  70. package/dist/components/myProfile/details/TwoFactorSetting.js +2 -1
  71. package/dist/components/rooms/RoomHeader.d.ts +1 -1
  72. package/dist/components/rooms/RoomHeader.js +3 -3
  73. package/dist/components/wizard/ControlledWizard.d.ts +1 -1
  74. package/dist/components/wizard/ControlledWizard.js +42 -3
  75. package/dist/components/wizard/WizardInitialOptions.js +3 -3
  76. package/dist/components/wizard/WizardSelectCard.d.ts +14 -0
  77. package/dist/components/wizard/WizardSelectCard.js +32 -0
  78. package/dist/components/wizard/WizardStepPrompt.d.ts +11 -0
  79. package/dist/components/wizard/WizardStepPrompt.js +20 -0
  80. package/dist/components/wizard/WizardSuccessHeader.d.ts +1 -1
  81. package/dist/components/wizard/WizardSuccessHeader.js +2 -2
  82. package/dist/components/wizard/index.d.ts +2 -0
  83. package/dist/components/wizard/index.js +2 -0
  84. package/dist/helpers/forms/dynamicForm.helper.js +4 -0
  85. package/dist/hooks/folderPanel/useDisplayFiles.js +11 -2
  86. package/dist/hooks/forms/useAddressStored.js +8 -2
  87. package/dist/hooks/index.d.ts +2 -0
  88. package/dist/hooks/index.js +2 -0
  89. package/dist/hooks/motion/index.d.ts +2 -0
  90. package/dist/hooks/motion/index.js +2 -0
  91. package/dist/hooks/motion/useCountUp.d.ts +10 -0
  92. package/dist/hooks/motion/useCountUp.js +39 -0
  93. package/dist/hooks/motion/usePrefersReducedMotion.d.ts +14 -0
  94. package/dist/hooks/motion/usePrefersReducedMotion.js +15 -0
  95. package/dist/hooks/rooms/useRoomHeader.d.ts +4 -1
  96. package/dist/hooks/rooms/useRoomHeader.js +9 -1
  97. package/dist/hooks/useDirtySave.d.ts +14 -0
  98. package/dist/hooks/useDirtySave.js +33 -0
  99. package/dist/index.d.ts +3 -3
  100. package/dist/index.js +3 -3
  101. package/dist/interfaces/forms/dynamicForm/DynamicForm.interface.d.ts +7 -3
  102. package/dist/interfaces/forms/readOnly/homeItem/ReadOnlyOverview.interface.d.ts +2 -0
  103. package/dist/interfaces/forms/readOnly/homeItem/ReadOnlyOverview.interface.js +1 -0
  104. package/dist/interfaces/forms/readOnly/homeItem/ReadOnlyPurchaseDetails.interface.d.ts +5 -0
  105. package/dist/interfaces/forms/readOnly/homeItem/ReadOnlyPurchaseDetails.interface.js +1 -0
  106. package/dist/interfaces/forms/readOnly/homeItem/ReadOnlyWarrantyBanner.interface.d.ts +27 -0
  107. package/dist/interfaces/forms/readOnly/homeItem/ReadOnlyWarrantyBanner.interface.js +1 -0
  108. package/dist/interfaces/forms/readOnly/homeItem/index.d.ts +3 -0
  109. package/dist/interfaces/forms/readOnly/homeItem/index.js +3 -0
  110. package/dist/interfaces/homeItems/ViewingHomeItemPanel.interface.d.ts +1 -0
  111. package/dist/interfaces/homi/HomiPresence.interface.d.ts +9 -0
  112. package/dist/interfaces/homi/HomiPresence.interface.js +1 -0
  113. package/dist/interfaces/homi/ProgressBar.interface.d.ts +8 -0
  114. package/dist/interfaces/homi/ProgressBar.interface.js +1 -0
  115. package/dist/interfaces/homi/RevealValueCard.interface.d.ts +16 -0
  116. package/dist/interfaces/homi/RevealValueCard.interface.js +1 -0
  117. package/dist/interfaces/homi/StaggerReveal.interface.d.ts +9 -0
  118. package/dist/interfaces/homi/StaggerReveal.interface.js +1 -0
  119. package/dist/interfaces/homi/index.d.ts +4 -0
  120. package/dist/interfaces/homi/index.js +4 -0
  121. package/dist/interfaces/index.d.ts +1 -0
  122. package/dist/interfaces/index.js +1 -0
  123. package/dist/interfaces/inputs/InlineEditField.interface.d.ts +7 -0
  124. package/dist/interfaces/inputs/InlineEditField.interface.js +1 -0
  125. package/dist/interfaces/inputs/Input.interface.d.ts +6 -1
  126. package/dist/interfaces/inputs/index.d.ts +1 -0
  127. package/dist/interfaces/inputs/index.js +1 -0
  128. package/dist/interfaces/myHomes/AddHomeContent.interface.d.ts +3 -0
  129. package/dist/interfaces/myProfile/MyProfileBody.interface.d.ts +1 -0
  130. package/dist/interfaces/myProfile/details/HomiSms.interface.d.ts +11 -2
  131. package/dist/interfaces/rooms/RoomHeader.interface.d.ts +5 -0
  132. package/dist/interfaces/wizard/ControlledWizard.interface.d.ts +6 -0
  133. package/dist/interfaces/wizard/WizardStepPrompt.interface.d.ts +9 -0
  134. package/dist/interfaces/wizard/WizardStepPrompt.interface.js +1 -0
  135. package/dist/interfaces/wizard/index.d.ts +1 -0
  136. package/dist/interfaces/wizard/index.js +1 -0
  137. package/dist/stories/forms/readOnly/ReadOnlyAppliances.stories.d.ts +4 -0
  138. package/dist/stories/forms/readOnly/ReadOnlyAppliances.stories.js +33 -0
  139. package/dist/stories/forms/readOnly/ReadOnlyWarrantyBanner.stories.d.ts +4 -0
  140. package/dist/stories/forms/readOnly/ReadOnlyWarrantyBanner.stories.js +10 -0
  141. package/dist/stories/homeItems/ReadOnlyHistory.stories.d.ts +4 -0
  142. package/dist/stories/homeItems/ReadOnlyHistory.stories.js +46 -0
  143. package/dist/stories/homeItems/ReadOnlyOverview.stories.d.ts +5 -0
  144. package/dist/stories/homeItems/ReadOnlyOverview.stories.js +69 -0
  145. package/dist/stories/homeItems/ViewingHomeItemPanel.stories.d.ts +4 -0
  146. package/dist/stories/homeItems/ViewingHomeItemPanel.stories.js +204 -0
  147. package/dist/stories/homi/HomiPresence.stories.d.ts +18 -0
  148. package/dist/stories/homi/HomiPresence.stories.js +11 -0
  149. package/dist/stories/homi/HomiVoice.stories.d.ts +4 -0
  150. package/dist/stories/homi/HomiVoice.stories.js +8 -0
  151. package/dist/stories/homi/ProgressBar.stories.d.ts +10 -0
  152. package/dist/stories/homi/ProgressBar.stories.js +9 -0
  153. package/dist/stories/homi/RevealValueCard.stories.d.ts +19 -0
  154. package/dist/stories/homi/RevealValueCard.stories.js +22 -0
  155. package/dist/stories/homi/StaggerReveal.stories.d.ts +5 -0
  156. package/dist/stories/homi/StaggerReveal.stories.js +8 -0
  157. package/dist/stories/inputs/InlineEditField.stories.d.ts +10 -0
  158. package/dist/stories/inputs/InlineEditField.stories.js +11 -0
  159. package/dist/stories/myProfile/MyProfilePanel.stories.js +1 -1
  160. package/dist/stories/myProfile/details/HomiSms.stories.d.ts +3 -2
  161. package/dist/stories/myProfile/details/HomiSms.stories.js +3 -2
  162. package/dist/stories/wizard/ControlledWizard.stories.d.ts +9 -0
  163. package/dist/stories/wizard/ControlledWizard.stories.js +41 -60
  164. package/dist/theme/index.d.ts +3 -0
  165. package/dist/theme/index.js +7 -4
  166. package/dist/utils/Formaters.utils.d.ts +2 -0
  167. package/dist/utils/Formaters.utils.js +14 -0
  168. package/dist/utils/Weather.utils.js +11 -4
  169. package/package.json +1 -1
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Scalar dirty-tracking + save — the proven `TwoFactorSetting` pattern
3
+ * (`showButtons = value !== initial` → a conditional Save), extracted. On save
4
+ * the current value becomes the new baseline (so the Save affordance hides) and
5
+ * a transient `justSaved` flag fires for 1200ms (the "Saved ✓" flash). Scope: a
6
+ * single scalar value — no arbitrary-field abstraction (YAGNI, per Eli).
7
+ */
8
+ export declare const useDirtySave: (initial: string, onSave?: (value: string) => void) => {
9
+ value: string;
10
+ setValue: import("react").Dispatch<import("react").SetStateAction<string>>;
11
+ isDirty: boolean;
12
+ justSaved: boolean;
13
+ save: () => void;
14
+ };
@@ -0,0 +1,33 @@
1
+ import { useEffect, useRef, useState } from 'react';
2
+ /**
3
+ * Scalar dirty-tracking + save — the proven `TwoFactorSetting` pattern
4
+ * (`showButtons = value !== initial` → a conditional Save), extracted. On save
5
+ * the current value becomes the new baseline (so the Save affordance hides) and
6
+ * a transient `justSaved` flag fires for 1200ms (the "Saved ✓" flash). Scope: a
7
+ * single scalar value — no arbitrary-field abstraction (YAGNI, per Eli).
8
+ */
9
+ export const useDirtySave = (initial, onSave) => {
10
+ const [value, setValue] = useState(initial);
11
+ const [baseline, setBaseline] = useState(initial);
12
+ const [justSaved, setJustSaved] = useState(false);
13
+ const flashTimer = useRef(undefined);
14
+ // Re-sync when the source value changes (e.g. a freshly prepopulated name).
15
+ useEffect(() => {
16
+ setValue(initial);
17
+ setBaseline(initial);
18
+ }, [initial]);
19
+ useEffect(() => () => {
20
+ if (flashTimer.current)
21
+ clearTimeout(flashTimer.current);
22
+ }, []);
23
+ const isDirty = value !== baseline;
24
+ const save = () => {
25
+ onSave === null || onSave === void 0 ? void 0 : onSave(value);
26
+ setBaseline(value);
27
+ setJustSaved(true);
28
+ if (flashTimer.current)
29
+ clearTimeout(flashTimer.current);
30
+ flashTimer.current = window.setTimeout(() => setJustSaved(false), 1200);
31
+ };
32
+ return { value, setValue, isDirty, justSaved, save };
33
+ };
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
- export { ActivateAccount, ActiveSubscription, AddCardBanner, AddEditContactPanel, AddFolder, AddHomeContent, AddHomeItem, AddHomeItemHeader, AddMedia, AddPopup, AddPropertyRecords, Address, AddTile, AddToHomefile, AlertBanner, AphwTile, AppBar, AppliancesReceived, AssignableReceipts, BackendAlert, BackHeader, BarDivider, CalendarWidget, CancelAccount, CatalogPopup, CloudsAnimation, ConfirmHomeDetails, ConfirmProperty, ConfirmPropertyBody, ConfirmPropertyFooter, ConfirmPropertyRecords, ContactList, ContactsContent, ContainerHeader, ControlledWizard, CreateDocumentHeader, CreateHouseholdItemHeader, CreditCardContainer, CreditCardError, CustomerTile, DeleteBanner, Dialog, DisplayFiles, DisplayFilesDetail, DisplayOptions, DisplayReceipts, DocumentMenu, DocumentNameHeader, DocumentPreview, DragDropArea, DynamicForm, EditAccountType, EditHomeBody, EditHomeFooter, EditHomeHeader, EditHomePanel, EditItemName, EmailPermissions, EmailValidation, Feedback, FileDetail, FilesUploader, FlowStep, FolderDetail, FolderDetailBody, FolderDetailContent, FolderDetailFooter, FolderDetailHeader, FolderInfo, FolderSharing, FolderTypeSelection, FooterButtons, FooterDrawer, GenericBackHeader, GroupCard, GroupsContainer, GroupsHeader, Header, HelpContent, HomeAssistant, HomeAssistantPanel, HomeAssistantTutorial, HomeAssistantWizardPanel, HomeAssistantWizardSteps, HomeBoardGrid, HomeBoardTour, HomeCard, HomeCardWithRecipent, HomeDetailsContent, HomefileMonitoring, HomeHeader, HomeItemList, HomeItemManualInfo, HomeMonitor, HomeMonitorPanel, HomeMonitorSteps, HomeSharedWith, HomieAddItems, HomiSms, InboxForwardBanner, InboxTile, ItemFormPanel, ItemFormTabs, ItemNameHeader, ItemsReviewBanner, ItemSubTypeSelect, Launchpad, LaunchpadApplianceAutofiler, LaunchpadAppliancePanel, LaunchpadAutofilerBanner, LaunchpadReceiptAutofiler, LaunchpadReceiptPanel, LaunchpadTour, LeftPanel, Loading, MediaDetailsStep, MessageChatPanel, MessagePanel, MinimizedTile, MinimizedTiles, MonthlyCharge, MortgageInfo, MortgageInfoReadOnly, MoveModal, MyHomes, MyProfileBody, MyProfileContent, MyProfileFooter, MyProfileHeader, MyProfilePanel, NewCreditCard, NewCreditCardHeader, NewHomeDetails, NewParterDetails, NewPassword, NotBeChargedBanner, NotificationCard, Notifications, NotificationsPanel, NotificationsReminder, NpsScore, Overlay, PanelHeader, PartnerActiveSubscription, PartnerCatalogPanel, PartnerContent, PartnerCustomerCard, PartnerCustomerCode, PartnerCustomersToolbar, PartnerCustomersWrapper, PartnerDetails, PartnerHomeHeader, PartnerImages, PartnerPanel, PartnerServiceCard, PartnerServiceTicketCard, PartnerServiceTicketsToolbar, PartnerServiceTicketsWrapper, PartnerSidebarMenu, PartnerWizardStepBrand, PartnerWizardStepServices, PartnerWizardStepServicesSelect, PartnerWizardStepServiceZones, PartnerWizardStepCta, PartnerWizardStepSocial, PartnerWizardStepHeader, PartnerWizardStepLayout, PartnerWizardSuccessHeader, PartnerWizardSuccessBody, PartnerWizardSteps, PasswordInput, PaymentBanner, PaymentReceipts, PdfButton, PeopleConnected, ProfileDetailsTab, ProfilePaymentTab, ProjectList, PropertyRecords, PropertyTaxes, ReadOnlyDynamicForm, ReadOnlyImage, ReadOnlyToggle, ReceiptAutofiler, ReceiptBody, ReceiptContent, ReceiptDetails, ReceiptFilters, ReceiptFooter, ReceiptHeader, ReceiptInfos, ReceiptItem, ReceiptItems, ReceiptPDF, ReceiptsDisplayOptions, ReceiptsFiled, ReceiptsHeader, ReceiptsInfo, ReceiptsReceivedContent, RecipientForm, RecipientsToShare, RecipientTab, RecordsInputs, ResendResetPassword, ResetPassword, ReviewBanner, RightPanel, RolePermissionsTab, RoomHeader, RoomsBoardTour, RoomsMenu, RoomsMenuMobile, RoomStep, RoomVideo, SalesTax, SatisfactionTile, SearchItemLoader, SearchRecords, SectionHeader, SendCommunication, ShareContactsContent, SharedAccounts, SharedHomeContent, SharedHomeHeader, ShareHome, ShareHomeConnections, ShareHomeForm, ShineTile, ShortPartnerTile, SignIn, SignUp, SkeletonBox, StartHomiSetup, StepHeader, StorageUsed, Subscription, SubscriptionCard, SubscriptionTable, Summary, TabsHeader, TextInput, ToBeDeletedBody, ToBeDeletedContent, ToBeDeletedFooter, ToBeDeletedHeader, TourButton, Trash, TrendingValue, TrialBanner, TutorialsButton, TwoFactor, TwoFactorDialog, TwoFactorSetting, UpdateList, UploadTile, UserDetails, ValueMonitor, VideoPlayer, VideoPlayerModal, ViewContactPanel, WeatherWidget, WidgetCarousel, WellDone, WizardBodyPadding, WizardStepGoal, WizardSuccessHeader, WizardTextHeader, WizardValueSummary, WizardValueSummaryBody, WizardValueSummaryFooter, YtdTile, } from './components';
2
- export { useCustomToast, useConfirmPropertyModel } from './hooks';
1
+ export { ActivateAccount, ActiveSubscription, AddCardBanner, AddEditContactPanel, AddFolder, AddHomeContent, AddHomeItem, AddHomeItemHeader, AddMedia, AddPopup, AddPropertyRecords, Address, AddTile, AddToHomefile, AlertBanner, AphwTile, AppBar, AppliancesReceived, AssignableReceipts, BackendAlert, BackHeader, BarDivider, BrandLogo, CalendarWidget, CancelAccount, CatalogPopup, CloudsAnimation, Close, ConfirmHomeDetails, ConfirmProperty, ConfirmPropertyBody, ConfirmPropertyFooter, ConfirmPropertyRecords, ContactList, ContactsContent, ContainerHeader, ControlledWizard, CreateDocumentHeader, CreateHouseholdItemHeader, CreditCardContainer, CreditCardError, CustomerTile, DeleteBanner, Dialog, DisplayFiles, DisplayFilesDetail, DisplayOptions, DisplayReceipts, DocumentMenu, DocumentNameHeader, DocumentPreview, DragDropArea, DynamicForm, EditAccountType, EditHomeBody, EditHomeFooter, EditHomeHeader, EditHomePanel, EditItemName, EmailPermissions, EmailValidation, Feedback, FileDetail, FilesUploader, FlowStep, FolderDetail, FolderDetailBody, FolderDetailContent, FolderDetailFooter, FolderDetailHeader, FolderInfo, FolderSharing, FolderTypeSelection, FooterButtons, FooterDrawer, GenericBackHeader, GroupCard, GroupsContainer, GroupsHeader, Header, HelpContent, HomeAssistant, HomeAssistantPanel, HomeAssistantTutorial, HomeAssistantWizardPanel, HomeAssistantWizardSteps, HomeBoardGrid, HomeBoardTour, HomeCard, HomeCardWithRecipent, HomeDetailsContent, HomefileMonitoring, HomeHeader, HomiPresence, HomiVoice, InlineEditField, ProgressBar, RevealValueCard, StaggerReveal, HomeItemList, HomeItemManualInfo, HomeMonitor, HomeMonitorPanel, HomeMonitorSteps, HomeSharedWith, HomieAddItems, HomiSms, InboxForwardBanner, InboxTile, IncludePublicRecords, ItemFormPanel, ItemFormTabs, ItemNameHeader, ItemsReviewBanner, ItemSubTypeSelect, Launchpad, LaunchpadApplianceAutofiler, LaunchpadAppliancePanel, LaunchpadAutofilerBanner, LaunchpadReceiptAutofiler, LaunchpadReceiptPanel, LaunchpadTour, LeftPanel, Loading, MediaDetailsStep, MessageChatPanel, MessagePanel, MinimizedTile, MinimizedTiles, MonthlyCharge, MortgageInfo, MortgageInfoReadOnly, MoveModal, MyHomeCard, MyHomes, MyProfileBody, MyProfileContent, MyProfileFooter, MyProfileHeader, MyProfilePanel, NewCreditCard, NewCreditCardHeader, NewHomeDetails, NewParterDetails, NewPassword, NotBeChargedBanner, NotificationCard, Notifications, NotificationsPanel, NotificationsReminder, NpsScore, Overlay, PanelHeader, PartnerActiveSubscription, PartnerCatalogPanel, PartnerContent, PartnerCustomerCard, PartnerCustomerCode, PartnerCustomersToolbar, PartnerCustomersWrapper, PartnerDetails, PartnerHomeHeader, PartnerImages, PartnerPanel, PartnerServiceCard, PartnerServiceTicketCard, PartnerServiceTicketsToolbar, PartnerServiceTicketsWrapper, PartnerSidebarMenu, PartnerWizardStepBrand, PartnerWizardStepServices, PartnerWizardStepServicesSelect, PartnerWizardStepServiceZones, PartnerWizardStepCta, PartnerWizardStepSocial, PartnerWizardStepHeader, PartnerWizardStepLayout, PartnerWizardSuccessHeader, PartnerWizardSuccessBody, PartnerWizardSteps, PasswordInput, PaymentBanner, PaymentReceipts, PdfButton, PeopleConnected, ProfileDetailsTab, ProfilePaymentTab, ProjectList, PropertyRecords, PropertyTaxes, ReadOnlyDynamicForm, ReadOnlyImage, ReadOnlyToggle, ReceiptAutofiler, ReceiptBody, ReceiptContent, ReceiptDetails, ReceiptFilters, ReceiptFooter, ReceiptHeader, ReceiptInfos, ReceiptItem, ReceiptItems, ReceiptPDF, ReceiptsDisplayOptions, ReceiptsFiled, ReceiptsHeader, ReceiptsInfo, ReceiptsReceivedContent, RecipientForm, RecipientsToShare, RecipientTab, RecordsInputs, ResendResetPassword, ResetPassword, ReviewBanner, RightPanel, RolePermissionsTab, RoomHeader, RoomsBoardTour, RoomsMenu, RoomsMenuMobile, RoomStep, RoomVideo, SalesTax, SatisfactionTile, SearchItemLoader, SearchRecords, SectionHeader, SendCommunication, ShareContactsContent, SharedAccounts, SharedHomeContent, SharedHomeHeader, ShareHome, ShareHomeConnections, ShareHomeForm, ShineTile, ShortPartnerTile, SignIn, SignUp, SkeletonBox, StartHomiSetup, StepHeader, StorageUsed, Subscription, SubscriptionCard, SubscriptionTable, Summary, TabsHeader, TextInput, ToBeDeletedBody, ToBeDeletedContent, ToBeDeletedFooter, ToBeDeletedHeader, TourButton, Trash, TrendingValue, TrialBanner, TutorialsButton, TwoFactor, TwoFactorDialog, TwoFactorSetting, UpdateList, UploadTile, UserDetails, ValueMonitor, VideoPlayer, VideoPlayerModal, ViewContactPanel, WeatherWidget, WidgetCarousel, WellDone, WizardBodyPadding, WizardStepGoal, WizardStepPrompt, WizardSuccessHeader, WizardTextHeader, WizardValueSummary, WizardValueSummaryBody, WizardValueSummaryFooter, YtdTile, } from './components';
2
+ export { useCustomToast, useConfirmPropertyModel, usePrefersReducedMotion, useCountUp, useDirtySave, } from './hooks';
3
3
  export { useFilesUploader } from './hooks/folderPanel/useFilesUploader';
4
4
  export { randomColor, mapApiObjectToFormFields, mapForecastToWidget, } from './utils';
5
- export { Ambulance, CookTop, Contacts, GuestBedroom, MagnifyingGlassReport, Message, Messages, Register, Receipts, Price, BlueFolderShared, Calendar, Create, Notes, WallDecor, YellowFolder, EstValue, Billing, Inbox, Plus, } from './assets/images';
5
+ export { Ambulance, CookTop, Contacts, GuestBedroom, MagnifyingGlassReport, Message, Messages, Register, Receipts, Price, BlueFolderShared, Calendar, Create, Notes, WallDecor, YellowFolder, EstValue, Billing, Inbox, Plus, VideoIcon, } from './assets/images';
6
6
  export { homeAssistantWizardSteps, partnerWizardSteps } from './helpers';
7
7
  export { billingProxy, dynamicFormProxy, homeCardProxy, partnerContentProxy, partnerDetailsProxy, paymentMethodProxy, recordsInputsProxy, recordsInputsToDBProxy, userDetailsProxy, confirmAddressProxy, addressProxy, } from './proxies';
8
8
  import theme from './theme';
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
- export { ActivateAccount, ActiveSubscription, AddCardBanner, AddEditContactPanel, AddFolder, AddHomeContent, AddHomeItem, AddHomeItemHeader, AddMedia, AddPopup, AddPropertyRecords, Address, AddTile, AddToHomefile, AlertBanner, AphwTile, AppBar, AppliancesReceived, AssignableReceipts, BackendAlert, BackHeader, BarDivider, CalendarWidget, CancelAccount, CatalogPopup, CloudsAnimation, ConfirmHomeDetails, ConfirmProperty, ConfirmPropertyBody, ConfirmPropertyFooter, ConfirmPropertyRecords, ContactList, ContactsContent, ContainerHeader, ControlledWizard, CreateDocumentHeader, CreateHouseholdItemHeader, CreditCardContainer, CreditCardError, CustomerTile, DeleteBanner, Dialog, DisplayFiles, DisplayFilesDetail, DisplayOptions, DisplayReceipts, DocumentMenu, DocumentNameHeader, DocumentPreview, DragDropArea, DynamicForm, EditAccountType, EditHomeBody, EditHomeFooter, EditHomeHeader, EditHomePanel, EditItemName, EmailPermissions, EmailValidation, Feedback, FileDetail, FilesUploader, FlowStep, FolderDetail, FolderDetailBody, FolderDetailContent, FolderDetailFooter, FolderDetailHeader, FolderInfo, FolderSharing, FolderTypeSelection, FooterButtons, FooterDrawer, GenericBackHeader, GroupCard, GroupsContainer, GroupsHeader, Header, HelpContent, HomeAssistant, HomeAssistantPanel, HomeAssistantTutorial, HomeAssistantWizardPanel, HomeAssistantWizardSteps, HomeBoardGrid, HomeBoardTour, HomeCard, HomeCardWithRecipent, HomeDetailsContent, HomefileMonitoring, HomeHeader, HomeItemList, HomeItemManualInfo, HomeMonitor, HomeMonitorPanel, HomeMonitorSteps, HomeSharedWith, HomieAddItems, HomiSms, InboxForwardBanner, InboxTile, ItemFormPanel, ItemFormTabs, ItemNameHeader, ItemsReviewBanner, ItemSubTypeSelect, Launchpad, LaunchpadApplianceAutofiler, LaunchpadAppliancePanel, LaunchpadAutofilerBanner, LaunchpadReceiptAutofiler, LaunchpadReceiptPanel, LaunchpadTour, LeftPanel, Loading, MediaDetailsStep, MessageChatPanel, MessagePanel, MinimizedTile, MinimizedTiles, MonthlyCharge, MortgageInfo, MortgageInfoReadOnly, MoveModal, MyHomes, MyProfileBody, MyProfileContent, MyProfileFooter, MyProfileHeader, MyProfilePanel, NewCreditCard, NewCreditCardHeader, NewHomeDetails, NewParterDetails, NewPassword, NotBeChargedBanner, NotificationCard, Notifications, NotificationsPanel, NotificationsReminder, NpsScore, Overlay, PanelHeader, PartnerActiveSubscription, PartnerCatalogPanel, PartnerContent, PartnerCustomerCard, PartnerCustomerCode, PartnerCustomersToolbar, PartnerCustomersWrapper, PartnerDetails, PartnerHomeHeader, PartnerImages, PartnerPanel, PartnerServiceCard, PartnerServiceTicketCard, PartnerServiceTicketsToolbar, PartnerServiceTicketsWrapper, PartnerSidebarMenu, PartnerWizardStepBrand, PartnerWizardStepServices, PartnerWizardStepServicesSelect, PartnerWizardStepServiceZones, PartnerWizardStepCta, PartnerWizardStepSocial, PartnerWizardStepHeader, PartnerWizardStepLayout, PartnerWizardSuccessHeader, PartnerWizardSuccessBody, PartnerWizardSteps, PasswordInput, PaymentBanner, PaymentReceipts, PdfButton, PeopleConnected, ProfileDetailsTab, ProfilePaymentTab, ProjectList, PropertyRecords, PropertyTaxes, ReadOnlyDynamicForm, ReadOnlyImage, ReadOnlyToggle, ReceiptAutofiler, ReceiptBody, ReceiptContent, ReceiptDetails, ReceiptFilters, ReceiptFooter, ReceiptHeader, ReceiptInfos, ReceiptItem, ReceiptItems, ReceiptPDF, ReceiptsDisplayOptions, ReceiptsFiled, ReceiptsHeader, ReceiptsInfo, ReceiptsReceivedContent, RecipientForm, RecipientsToShare, RecipientTab, RecordsInputs, ResendResetPassword, ResetPassword, ReviewBanner, RightPanel, RolePermissionsTab, RoomHeader, RoomsBoardTour, RoomsMenu, RoomsMenuMobile, RoomStep, RoomVideo, SalesTax, SatisfactionTile, SearchItemLoader, SearchRecords, SectionHeader, SendCommunication, ShareContactsContent, SharedAccounts, SharedHomeContent, SharedHomeHeader, ShareHome, ShareHomeConnections, ShareHomeForm, ShineTile, ShortPartnerTile, SignIn, SignUp, SkeletonBox, StartHomiSetup, StepHeader, StorageUsed, Subscription, SubscriptionCard, SubscriptionTable, Summary, TabsHeader, TextInput, ToBeDeletedBody, ToBeDeletedContent, ToBeDeletedFooter, ToBeDeletedHeader, TourButton, Trash, TrendingValue, TrialBanner, TutorialsButton, TwoFactor, TwoFactorDialog, TwoFactorSetting, UpdateList, UploadTile, UserDetails, ValueMonitor, VideoPlayer, VideoPlayerModal, ViewContactPanel, WeatherWidget, WidgetCarousel, WellDone, WizardBodyPadding, WizardStepGoal, WizardSuccessHeader, WizardTextHeader, WizardValueSummary, WizardValueSummaryBody, WizardValueSummaryFooter, YtdTile, } from './components';
2
- export { useCustomToast, useConfirmPropertyModel } from './hooks';
1
+ export { ActivateAccount, ActiveSubscription, AddCardBanner, AddEditContactPanel, AddFolder, AddHomeContent, AddHomeItem, AddHomeItemHeader, AddMedia, AddPopup, AddPropertyRecords, Address, AddTile, AddToHomefile, AlertBanner, AphwTile, AppBar, AppliancesReceived, AssignableReceipts, BackendAlert, BackHeader, BarDivider, BrandLogo, CalendarWidget, CancelAccount, CatalogPopup, CloudsAnimation, Close, ConfirmHomeDetails, ConfirmProperty, ConfirmPropertyBody, ConfirmPropertyFooter, ConfirmPropertyRecords, ContactList, ContactsContent, ContainerHeader, ControlledWizard, CreateDocumentHeader, CreateHouseholdItemHeader, CreditCardContainer, CreditCardError, CustomerTile, DeleteBanner, Dialog, DisplayFiles, DisplayFilesDetail, DisplayOptions, DisplayReceipts, DocumentMenu, DocumentNameHeader, DocumentPreview, DragDropArea, DynamicForm, EditAccountType, EditHomeBody, EditHomeFooter, EditHomeHeader, EditHomePanel, EditItemName, EmailPermissions, EmailValidation, Feedback, FileDetail, FilesUploader, FlowStep, FolderDetail, FolderDetailBody, FolderDetailContent, FolderDetailFooter, FolderDetailHeader, FolderInfo, FolderSharing, FolderTypeSelection, FooterButtons, FooterDrawer, GenericBackHeader, GroupCard, GroupsContainer, GroupsHeader, Header, HelpContent, HomeAssistant, HomeAssistantPanel, HomeAssistantTutorial, HomeAssistantWizardPanel, HomeAssistantWizardSteps, HomeBoardGrid, HomeBoardTour, HomeCard, HomeCardWithRecipent, HomeDetailsContent, HomefileMonitoring, HomeHeader, HomiPresence, HomiVoice, InlineEditField, ProgressBar, RevealValueCard, StaggerReveal, HomeItemList, HomeItemManualInfo, HomeMonitor, HomeMonitorPanel, HomeMonitorSteps, HomeSharedWith, HomieAddItems, HomiSms, InboxForwardBanner, InboxTile, IncludePublicRecords, ItemFormPanel, ItemFormTabs, ItemNameHeader, ItemsReviewBanner, ItemSubTypeSelect, Launchpad, LaunchpadApplianceAutofiler, LaunchpadAppliancePanel, LaunchpadAutofilerBanner, LaunchpadReceiptAutofiler, LaunchpadReceiptPanel, LaunchpadTour, LeftPanel, Loading, MediaDetailsStep, MessageChatPanel, MessagePanel, MinimizedTile, MinimizedTiles, MonthlyCharge, MortgageInfo, MortgageInfoReadOnly, MoveModal, MyHomeCard, MyHomes, MyProfileBody, MyProfileContent, MyProfileFooter, MyProfileHeader, MyProfilePanel, NewCreditCard, NewCreditCardHeader, NewHomeDetails, NewParterDetails, NewPassword, NotBeChargedBanner, NotificationCard, Notifications, NotificationsPanel, NotificationsReminder, NpsScore, Overlay, PanelHeader, PartnerActiveSubscription, PartnerCatalogPanel, PartnerContent, PartnerCustomerCard, PartnerCustomerCode, PartnerCustomersToolbar, PartnerCustomersWrapper, PartnerDetails, PartnerHomeHeader, PartnerImages, PartnerPanel, PartnerServiceCard, PartnerServiceTicketCard, PartnerServiceTicketsToolbar, PartnerServiceTicketsWrapper, PartnerSidebarMenu, PartnerWizardStepBrand, PartnerWizardStepServices, PartnerWizardStepServicesSelect, PartnerWizardStepServiceZones, PartnerWizardStepCta, PartnerWizardStepSocial, PartnerWizardStepHeader, PartnerWizardStepLayout, PartnerWizardSuccessHeader, PartnerWizardSuccessBody, PartnerWizardSteps, PasswordInput, PaymentBanner, PaymentReceipts, PdfButton, PeopleConnected, ProfileDetailsTab, ProfilePaymentTab, ProjectList, PropertyRecords, PropertyTaxes, ReadOnlyDynamicForm, ReadOnlyImage, ReadOnlyToggle, ReceiptAutofiler, ReceiptBody, ReceiptContent, ReceiptDetails, ReceiptFilters, ReceiptFooter, ReceiptHeader, ReceiptInfos, ReceiptItem, ReceiptItems, ReceiptPDF, ReceiptsDisplayOptions, ReceiptsFiled, ReceiptsHeader, ReceiptsInfo, ReceiptsReceivedContent, RecipientForm, RecipientsToShare, RecipientTab, RecordsInputs, ResendResetPassword, ResetPassword, ReviewBanner, RightPanel, RolePermissionsTab, RoomHeader, RoomsBoardTour, RoomsMenu, RoomsMenuMobile, RoomStep, RoomVideo, SalesTax, SatisfactionTile, SearchItemLoader, SearchRecords, SectionHeader, SendCommunication, ShareContactsContent, SharedAccounts, SharedHomeContent, SharedHomeHeader, ShareHome, ShareHomeConnections, ShareHomeForm, ShineTile, ShortPartnerTile, SignIn, SignUp, SkeletonBox, StartHomiSetup, StepHeader, StorageUsed, Subscription, SubscriptionCard, SubscriptionTable, Summary, TabsHeader, TextInput, ToBeDeletedBody, ToBeDeletedContent, ToBeDeletedFooter, ToBeDeletedHeader, TourButton, Trash, TrendingValue, TrialBanner, TutorialsButton, TwoFactor, TwoFactorDialog, TwoFactorSetting, UpdateList, UploadTile, UserDetails, ValueMonitor, VideoPlayer, VideoPlayerModal, ViewContactPanel, WeatherWidget, WidgetCarousel, WellDone, WizardBodyPadding, WizardStepGoal, WizardStepPrompt, WizardSuccessHeader, WizardTextHeader, WizardValueSummary, WizardValueSummaryBody, WizardValueSummaryFooter, YtdTile, } from './components';
2
+ export { useCustomToast, useConfirmPropertyModel, usePrefersReducedMotion, useCountUp, useDirtySave, } from './hooks';
3
3
  export { useFilesUploader } from './hooks/folderPanel/useFilesUploader';
4
4
  export { randomColor, mapApiObjectToFormFields, mapForecastToWidget, } from './utils';
5
- export { Ambulance, CookTop, Contacts, GuestBedroom, MagnifyingGlassReport, Message, Messages, Register, Receipts, Price, BlueFolderShared, Calendar, Create, Notes, WallDecor, YellowFolder, EstValue, Billing, Inbox, Plus, } from './assets/images';
5
+ export { Ambulance, CookTop, Contacts, GuestBedroom, MagnifyingGlassReport, Message, Messages, Register, Receipts, Price, BlueFolderShared, Calendar, Create, Notes, WallDecor, YellowFolder, EstValue, Billing, Inbox, Plus, VideoIcon, } from './assets/images';
6
6
  export { homeAssistantWizardSteps, partnerWizardSteps } from './helpers';
7
7
  export { billingProxy, dynamicFormProxy, homeCardProxy, partnerContentProxy, partnerDetailsProxy, paymentMethodProxy, recordsInputsProxy, recordsInputsToDBProxy, userDetailsProxy, confirmAddressProxy, addressProxy, } from './proxies';
8
8
  import theme from './theme';
@@ -1,13 +1,16 @@
1
1
  import { AIGridFieldI, AlertFieldType, AlertTabType, FolderFileI, MenuItemI, PartnerFooterI, TileCtaI } from '../../../interfaces';
2
2
  export type KindTypes = 'ai-image' | 'ai-grid' | 'checkbox' | 'checkbox-agreement' | 'checkbox-group' | 'collapsible' | 'currency' | 'date' | 'email' | 'file' | 'grid' | 'group' | 'hidden' | 'notes' | 'number' | 'radio' | 'rating' | 'select' | 'string' | 'switch' | 'telephone' | 'text' | 'textarea' | 'default' | 'video' | UIKindTypes | HomeItemTypes | AlertTabType | AlertFieldType | WizardTypes;
3
3
  export type UIKindTypes = 'tile-body' | 'tile-body-logo' | 'tile-body-header' | 'tile-body-section' | 'tile-body-section-grid' | 'tile-body-partner-image' | 'tile-body-description' | 'tile-form' | 'tile-body-action' | 'vertical-icon' | 'primary-cta' | 'secondary-cta';
4
- export type HomeItemTypes = 'appliances' | 'images' | 'guidelines' | 'item-related' | 'item-icon-btn';
5
- export type IconTypes = '68' | 'barcode' | 'battery' | 'billing' | 'book-opened' | 'book' | 'calc' | 'calendar-drop' | 'calendar' | 'calendar2' | 'check' | 'co2' | 'company' | 'contact' | 'date' | 'default' | 'detector' | 'drop' | 'electricity' | 'fire' | 'flower' | 'folder' | 'foundation' | 'gear' | 'goldbars' | 'heart' | 'heater' | 'house' | 'image' | 'life-preserver' | 'light' | 'mobile-drop' | 'notes' | 'palette' | 'people' | 'plant' | 'plate' | 'pool' | 'pressure-washer' | 'price' | 'rating' | 'receipt' | 'registry' | 'roof' | 'search-person' | 'solar-panel' | 'sprinkler' | 'target' | 'title' | 'tools' | 'umbrella' | 'wallet' | 'warranty' | 'water' | 'wind' | 'battery-smoke-detector' | 'cooktop' | 'dish-washer' | 'dryer' | 'filter-size' | 'fire-extinguisher' | 'freezer' | 'fridge' | 'furnace' | 'hood' | 'in-wall' | 'jacuzzi' | 'landscape-lights' | 'microwave' | 'mr-boxes' | 'mr-clock' | 'mr-couch' | 'mr-hand' | 'mr-make-ready' | 'mr-rental' | 'other' | 'oven' | 'range' | 'sprinkler-system' | 'sprinkler-system2' | 'tank-water' | 'tankless-water' | 'washer' | 'wired-smoke-detector' | UIIconTypes;
4
+ export type HomeItemTypes = 'appliances' | 'images' | 'guidelines' | 'item-related' | 'item-icon-btn' | 'warranty' | 'purchase' | 'overview' | 'history';
5
+ export type IconTypes = '68' | 'barcode' | 'battery' | 'billing' | 'book-opened' | 'book' | 'calc' | 'calendar-drop' | 'calendar' | 'calendar2' | 'check' | 'co2' | 'company' | 'contact' | 'date' | 'default' | 'detector' | 'drop' | 'electricity' | 'fire' | 'flower' | 'folder' | 'foundation' | 'gear' | 'goldbars' | 'heart' | 'heater' | 'house' | 'image' | 'life-preserver' | 'light' | 'mobile-drop' | 'notes' | 'palette' | 'people' | 'plant' | 'plate' | 'pool' | 'pdf' | 'pressure-washer' | 'price' | 'rating' | 'receipt' | 'registry' | 'roof' | 'search-person' | 'solar-panel' | 'sprinkler' | 'target' | 'title' | 'tools' | 'umbrella' | 'wallet' | 'warranty' | 'water' | 'wind' | 'battery-smoke-detector' | 'cooktop' | 'dish-washer' | 'dryer' | 'filter-size' | 'fire-extinguisher' | 'freezer' | 'fridge' | 'furnace' | 'hood' | 'in-wall' | 'jacuzzi' | 'landscape-lights' | 'microwave' | 'mr-boxes' | 'mr-clock' | 'mr-couch' | 'mr-hand' | 'mr-make-ready' | 'mr-rental' | 'other' | 'oven' | 'range' | 'sprinkler-system' | 'sprinkler-system2' | 'tank-water' | 'tankless-water' | 'washer' | 'wired-smoke-detector' | UIIconTypes;
6
6
  export type UIIconTypes = 'sh-pressure' | 'sh-window' | 'sh-roof' | 'sh-lights' | 'sh-gutter' | 'sh-home' | 'sh-house' | 'aa-mowing' | 'aa-fertilization' | 'aa-disease' | 'aa-weed' | 'aa-dressing' | 'aa-pest' | 'boc-service' | 'boc-filter' | 'boc-repair' | 'boc-renovation' | 'boc-green' | 'boc-warranty' | 'filter-size' | string;
7
- export type WizardTypes = 'home-wizard' | 'home-wizard-header' | 'home-wizard-initial-setup' | 'home-wizard-step-options';
7
+ export type WizardTypes = 'home-wizard' | 'home-wizard-header' | 'home-wizard-initial-setup' | 'home-wizard-step-options' | 'home-wizard-select-card';
8
8
  export type ValueTypes = string | string[] | number | boolean;
9
9
  export type OptionsTypes = string[] | number[] | null;
10
+ export type PanelTab = 'details' | 'specs' | 'history';
10
11
  export interface ReportI {
12
+ /** Optional accent color (e.g. a history event's date-pennant color). */
13
+ accentColor?: string;
11
14
  canBeHidden?: boolean;
12
15
  children?: ReportI[];
13
16
  comments?: string;
@@ -18,6 +21,7 @@ export interface ReportI {
18
21
  link?: string;
19
22
  name?: string;
20
23
  options?: OptionsTypes;
24
+ tab?: PanelTab;
21
25
  type: KindTypes;
22
26
  value: ValueTypes;
23
27
  visible?: boolean;
@@ -0,0 +1,2 @@
1
+ import { ReportI } from '../../../../interfaces';
2
+ export type ReadOnlyOverviewI = ReportI;
@@ -0,0 +1,5 @@
1
+ import { ReportI } from '../../../../interfaces';
2
+ export interface ReadOnlyPurchaseDetailsI extends ReportI {
3
+ onEdit?: (id: string) => void;
4
+ onClick?: (id: string) => void;
5
+ }
@@ -0,0 +1,27 @@
1
+ import { IconTypes, ValueTypes } from '../../../../interfaces';
2
+ /**
3
+ * The three warranty states the banner can render. Derived upstream from the
4
+ * item's purchase date + parsed warranty term (see tickets #356/#357):
5
+ * - `underWarranty` — still covered
6
+ * - `expired` — warranty term has lapsed
7
+ * - `recall` — an active manufacturer recall
8
+ *
9
+ * HONESTY: `recall` must ONLY be passed with REAL recall data. There is no
10
+ * recall data source in the platform today (#357), so callers must not pass
11
+ * state="recall" until one exists — the banner never fabricates an alert.
12
+ */
13
+ export type WarrantyBannerState = 'underWarranty' | 'expired' | 'recall';
14
+ export interface ReadOnlyWarrantyBannerI {
15
+ /** Status message, e.g. "This item is under the manufacturer's warranty till 2030." */
16
+ value?: ValueTypes;
17
+ /** `fieldIcons` key for the badge glyph (e.g. 'boc-warranty'). */
18
+ icon?: IconTypes;
19
+ /** Which state to render. Defaults to `underWarranty`. */
20
+ state?: WarrantyBannerState;
21
+ /**
22
+ * Optional destination for the banner. Down the road: a recall notice on
23
+ * `recall`, or a "purchase a warranty" link on `expired`. When present the
24
+ * message becomes a link.
25
+ */
26
+ link?: string;
27
+ }
@@ -1,2 +1,5 @@
1
1
  export * from './ReadOnlyAppliances.interface';
2
2
  export * from './ReadOnlyGuidelines.interface';
3
+ export * from './ReadOnlyOverview.interface';
4
+ export * from './ReadOnlyPurchaseDetails.interface';
5
+ export * from './ReadOnlyWarrantyBanner.interface';
@@ -1,2 +1,5 @@
1
1
  export * from './ReadOnlyAppliances.interface';
2
2
  export * from './ReadOnlyGuidelines.interface';
3
+ export * from './ReadOnlyOverview.interface';
4
+ export * from './ReadOnlyPurchaseDetails.interface';
5
+ export * from './ReadOnlyWarrantyBanner.interface';
@@ -5,3 +5,4 @@ export interface ViewingHomeItemPanelI {
5
5
  onEdit: (id: string) => void;
6
6
  onClick?: (id: string) => void;
7
7
  }
8
+ export type ViewingHomeItemBodyI = Omit<ViewingHomeItemPanelI, 'onClose'>;
@@ -0,0 +1,9 @@
1
+ export interface HomiPresenceI {
2
+ /**
3
+ * v1 presence states (presentation-only, no authority/meaning). `ambient` and
4
+ * `tap-to-talk` are future — do NOT build them here.
5
+ */
6
+ state?: 'guiding' | 'working';
7
+ /** Label shown beside the presence chip. */
8
+ label?: string;
9
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,8 @@
1
+ export interface ProgressBarI {
2
+ /** Progress as a fraction complete (0–1). */
3
+ value: number;
4
+ /** Fill color token. */
5
+ color?: string;
6
+ /** Track color token. */
7
+ trackColor?: string;
8
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,16 @@
1
+ export interface RevealFactI {
2
+ label: string;
3
+ value: string;
4
+ }
5
+ export interface RevealValueCardI {
6
+ /** Hero value (e.g. estimated home value) — animates via count-up on reveal. */
7
+ value: number;
8
+ /** Prefix for the hero value (e.g. '$'). */
9
+ valuePrefix?: string;
10
+ /** 2-column facts grid (year built / sqft / beds / …). */
11
+ facts?: RevealFactI[];
12
+ /** Secondary values row shown below the facts grid. */
13
+ subvals?: RevealFactI[];
14
+ /** Optional 30×30 thumbnails (e.g. comps / photos). */
15
+ thumbs?: string[];
16
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,9 @@
1
+ import { PropsWithChildren } from 'react';
2
+ export interface StaggerRevealI extends PropsWithChildren {
3
+ /** Delay between each child's entrance, in seconds (POC ≈ 0.07). */
4
+ stagger?: number;
5
+ /** Initial delay before the first child, in seconds. */
6
+ delay?: number;
7
+ /** Column gap between children (Chakra spacing token), so it can replace a Stack. */
8
+ spacing?: string | number;
9
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,4 @@
1
+ export * from './HomiPresence.interface';
2
+ export * from './ProgressBar.interface';
3
+ export * from './RevealValueCard.interface';
4
+ export * from './StaggerReveal.interface';
@@ -0,0 +1,4 @@
1
+ export * from './HomiPresence.interface';
2
+ export * from './ProgressBar.interface';
3
+ export * from './RevealValueCard.interface';
4
+ export * from './StaggerReveal.interface';
@@ -1,5 +1,6 @@
1
1
  export * from './AddItemWizard';
2
2
  export * from './appliances';
3
+ export * from './homi';
3
4
  export * from './apis';
4
5
  export * from './appBar';
5
6
  export * from './badge';
@@ -1,5 +1,6 @@
1
1
  export * from './AddItemWizard';
2
2
  export * from './appliances';
3
+ export * from './homi';
3
4
  export * from './apis';
4
5
  export * from './appBar';
5
6
  export * from './badge';
@@ -0,0 +1,7 @@
1
+ export interface InlineEditFieldI {
2
+ /** Prepopulated value, edited in place. */
3
+ value: string;
4
+ /** Called with the new value when the user saves. */
5
+ onSave?: (value: string) => void;
6
+ placeholder?: string;
7
+ }
@@ -1,5 +1,5 @@
1
1
  import { InputProps } from '@chakra-ui/react';
2
- export interface InputI extends InputProps {
2
+ export interface InputI extends Omit<InputProps, 'variant'> {
3
3
  autoCapitalize?: string;
4
4
  autoCorrect?: string;
5
5
  errorMessage?: string;
@@ -12,4 +12,9 @@ export interface InputI extends InputProps {
12
12
  value: string;
13
13
  showLabel?: boolean;
14
14
  hint?: string;
15
+ /**
16
+ * `'default'` (floating LabeledField) or `'conversational'` — a bare
17
+ * bottom-border input (no LabeledField) for the Typeform-style wizard.
18
+ */
19
+ variant?: 'default' | 'conversational';
15
20
  }
@@ -1,4 +1,5 @@
1
1
  export * from './ControlledInput.interface';
2
+ export * from './InlineEditField.interface';
2
3
  export * from './DatePicker.interface';
3
4
  export * from './EditFileUploader.interface';
4
5
  export * from './Input.interface';
@@ -1,4 +1,5 @@
1
1
  export * from './ControlledInput.interface';
2
+ export * from './InlineEditField.interface';
2
3
  export * from './DatePicker.interface';
3
4
  export * from './EditFileUploader.interface';
4
5
  export * from './Input.interface';
@@ -23,4 +23,7 @@ export interface AddHomeContentI {
23
23
  userFirstName?: string;
24
24
  values?: HomeFormI;
25
25
  isWizard?: boolean;
26
+ /** Show the home-name field. Off in the simplified wizard, where the home is
27
+ * named at the reveal step instead. Defaults on to preserve add-home flow. */
28
+ showName?: boolean;
26
29
  }
@@ -2,6 +2,7 @@ import { ReactNode } from 'react';
2
2
  export interface MyProfileBodyI {
3
3
  account?: ReactNode;
4
4
  details?: ReactNode;
5
+ defaultIndex?: number;
5
6
  email?: ReactNode;
6
7
  isLoading: boolean;
7
8
  payment?: ReactNode;
@@ -1,9 +1,18 @@
1
1
  export interface HomiSmsFormI {
2
- sms?: string;
2
+ enabled?: boolean;
3
+ phone?: string;
3
4
  }
4
5
  export interface HomiSmsI {
5
6
  mode?: 'full' | 'phone-only';
6
- sms?: string;
7
+ /** Initial toggle state — whether Homi SMS messaging is enabled. */
8
+ enabled?: boolean;
9
+ /**
10
+ * Initial phone number. The app pre-fills this from the user's number when
11
+ * 2FA is set to SMS/mobile, so the same number carries over automatically.
12
+ */
13
+ phone?: string;
14
+ /** Link to the SMS messaging consent language (content owned by legal). */
15
+ consentUrl?: string;
7
16
  loading?: boolean;
8
17
  onChange?: (value: HomiSmsFormI) => void;
9
18
  onSave?: (value: HomiSmsFormI) => void;
@@ -5,5 +5,10 @@ export interface RoomHeaderI {
5
5
  onSubmit: (room: RoomItemI) => void;
6
6
  room: RoomItemI;
7
7
  roomAmount: string;
8
+ /**
9
+ * Sum of item ESTIMATED values (est-value-field), shown as a separate "est."
10
+ * line — never blended with roomAmount (amount paid). Hidden when 0/absent.
11
+ */
12
+ roomEstimatedAmount?: string;
8
13
  disabled?: boolean;
9
14
  }
@@ -25,5 +25,11 @@ export type ControlledWizardI<Key extends string = string> = {
25
25
  height?: string;
26
26
  headerBlink?: boolean;
27
27
  footerBlink?: boolean;
28
+ /**
29
+ * Body step-transition idiom. `'crossfade'` (default) = the existing
30
+ * opacity/y/blur; `'directional'` = the wizard's horizontal slide + a subtle
31
+ * enter-flip (POC). Both are reduced-motion gated.
32
+ */
33
+ transition?: 'crossfade' | 'directional';
28
34
  } & (ControlledWizardLegacyProps | ControlledWizardKeyedProps<Key>);
29
35
  export {};
@@ -0,0 +1,9 @@
1
+ import { ReactNode } from 'react';
2
+ export interface WizardStepPromptI {
3
+ /** Step marker, e.g. "1 →". Omit on the success / hand-off step. */
4
+ marker?: ReactNode;
5
+ /** Homi's prompt — the bold headline. Authored by the mind, not hardcoded. */
6
+ title: string;
7
+ /** Optional supporting line under the prompt. */
8
+ subtitle?: string;
9
+ }
@@ -1,4 +1,5 @@
1
1
  export * from './ControlledWizard.interface';
2
2
  export * from './WizardTextHeader.interface';
3
+ export * from './WizardStepPrompt.interface';
3
4
  export * from './WizardSuccessHeader.interface';
4
5
  export * from './WizardValueSummary.interface';
@@ -1,4 +1,5 @@
1
1
  export * from './ControlledWizard.interface';
2
2
  export * from './WizardTextHeader.interface';
3
+ export * from './WizardStepPrompt.interface';
3
4
  export * from './WizardSuccessHeader.interface';
4
5
  export * from './WizardValueSummary.interface';
@@ -0,0 +1,4 @@
1
+ import { Meta } from '@storybook/react';
2
+ declare const _default: Meta;
3
+ export default _default;
4
+ export declare const ApplianceCard: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,33 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Box } from '@chakra-ui/react';
3
+ import { ReadOnlyAppliances } from '../../../components';
4
+ import { faker } from '@faker-js/faker';
5
+ export default {
6
+ title: 'Components/Forms/ReadOnlyDynamicForm',
7
+ component: ReadOnlyAppliances,
8
+ };
9
+ const images = [
10
+ faker.image.urlPicsumPhotos(),
11
+ faker.image.urlPicsumPhotos(),
12
+ faker.image.urlPicsumPhotos(),
13
+ faker.image.urlPicsumPhotos(),
14
+ ];
15
+ // Renders the appliance card the way the ReadOnlyDynamicForm switch does:
16
+ // name = "APPLIANCES" header, value = the item name, description, and typed
17
+ // children (images gallery, rating, and text field rows Brand/Model/Serial).
18
+ export const ApplianceCard = () => (_jsx(Box, { w: ['full', '500px'], children: _jsx(ReadOnlyAppliances, { id: "appliance", name: "Appliances", value: "Refrigerator", description: "KitchenAid Counter-depth 20-cu ft French Door Refrigerator with Ice Maker and Water dispenser (Stainless Steel) ENERGY STAR", onEdit: () => undefined, type: "appliances",
19
+ // eslint-disable-next-line react/no-children-prop
20
+ children: [
21
+ { id: 'imgs', type: 'images', value: images },
22
+ { id: 'rating', type: 'rating', value: 4 },
23
+ { id: 'brand', type: 'text', name: 'Brand', value: 'Kitchen Aid' },
24
+ { id: 'model', type: 'text', name: 'Model#', value: 'KRFC300ESS' },
25
+ { id: 'serial', type: 'text', name: 'Serial #', value: '' },
26
+ { id: 'retail', type: 'currency', name: 'Retail Price', value: '3125.12' },
27
+ {
28
+ id: 'replacement',
29
+ type: 'currency',
30
+ name: 'Est Replacement Cost',
31
+ value: '1895.03',
32
+ },
33
+ ] }) }));
@@ -0,0 +1,4 @@
1
+ import { Meta } from '@storybook/react';
2
+ declare const _default: Meta;
3
+ export default _default;
4
+ export declare const WarrantyBannerStates: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Stack, Text } from '@chakra-ui/react';
3
+ import { ReadOnlyWarrantyBanner } from '../../../components';
4
+ export default {
5
+ title: 'Components/Forms/ReadOnlyDynamicForm',
6
+ component: ReadOnlyWarrantyBanner,
7
+ };
8
+ // All three warranty states. `recall` is shown here for design review only —
9
+ // in production it stays dark until a real recall data source exists (#357).
10
+ export const WarrantyBannerStates = () => (_jsx(Box, { p: "base", bg: "neutral.white", w: ['full', '540px'], children: _jsxs(Stack, { spacing: "4", children: [_jsxs(Box, { children: [_jsx(Text, { fontSize: "xs", textTransform: "uppercase", color: "gray.2", mb: "1", children: "Under warranty" }), _jsx(ReadOnlyWarrantyBanner, { state: "underWarranty", icon: "warranty", value: "This item is under the manufacturer's warranty till 2030." })] }), _jsxs(Box, { children: [_jsx(Text, { fontSize: "xs", textTransform: "uppercase", color: "gray.2", mb: "1", children: "Expired" }), _jsx(ReadOnlyWarrantyBanner, { state: "expired", icon: "warranty", value: "This item's manufacturer warranty expired in 2022." })] }), _jsxs(Box, { children: [_jsx(Text, { fontSize: "xs", textTransform: "uppercase", color: "gray.2", mb: "1", children: "Recall (design-review only \u2014 dark in prod until #357)" }), _jsx(ReadOnlyWarrantyBanner, { state: "recall", icon: "warranty", value: "This item has an active manufacturer recall." })] })] }) }));
@@ -0,0 +1,4 @@
1
+ import { Meta } from '@storybook/react';
2
+ declare const _default: Meta;
3
+ export default _default;
4
+ export declare const Timeline: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,46 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Flex } from '@chakra-ui/react';
3
+ import { AddDocuments, ReadOnlyHistory } from '../../components';
4
+ import { faker } from '@faker-js/faker';
5
+ // Two derivatives of the core HistoryCard, from the XD "Card" / "Card 2".
6
+ const added = {
7
+ id: 'hist-added',
8
+ type: 'history',
9
+ name: 'Added Refrigerator',
10
+ value: '',
11
+ label: '01 23 2017',
12
+ accentColor: '#1E6388',
13
+ children: [
14
+ { id: 'ha-img', type: 'images', value: faker.image.urlPicsumPhotos() },
15
+ { id: 'ha-brand', type: 'text', name: 'Brand', value: 'Kitchen Aid' },
16
+ { id: 'ha-model', type: 'text', name: 'Model#', value: 'KRFC300ESS' },
17
+ { id: 'ha-rcpt', type: 'currency', name: 'Receipt', icon: 'pdf', value: '3125.12' },
18
+ ],
19
+ };
20
+ const service = {
21
+ id: 'hist-service',
22
+ type: 'history',
23
+ name: 'Service Record',
24
+ value: 'Acme Appliance Repair',
25
+ label: '01 15 2017',
26
+ accentColor: '#4E8A6B',
27
+ children: [
28
+ {
29
+ id: 'hs-logo',
30
+ type: 'images',
31
+ value: "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='48' height='48'><rect width='48' height='48' fill='%23E4E4E4'/><text x='24' y='28' font-family='Arial, sans-serif' font-size='9' fill='%23525458' text-anchor='middle'>Logo</text></svg>",
32
+ },
33
+ { id: 'hs-a1', type: 'text', value: '123 South First Avenue' },
34
+ { id: 'hs-a2', type: 'text', value: 'Suite 431' },
35
+ { id: 'hs-a3', type: 'text', value: 'Austin, TX 78732' },
36
+ { id: 'hs-a4', type: 'text', value: '512 365 5541' },
37
+ { id: 'hs-inv', type: 'currency', name: 'Invoice', icon: 'pdf', value: '345.12' },
38
+ ],
39
+ };
40
+ export default {
41
+ title: 'Components/HomeItems/ReadOnlyHistory',
42
+ component: ReadOnlyHistory,
43
+ };
44
+ // Full History tab: Add Documents on top, then the rail + events (mirrors
45
+ // ViewingHomeItemPanel's history section) so the layout is verifiable here.
46
+ export const Timeline = () => (_jsxs(Flex, { direction: "column", w: "500px", minH: "700px", bg: "lightBlue.1", children: [_jsx(AddDocuments, {}), _jsxs(Box, { position: "relative", flex: "1", children: [_jsx(Box, { position: "absolute", left: "0", top: "0", bottom: "0", w: "131px", bg: "#E9EDEF" }), _jsxs(Box, { position: "relative", children: [_jsx(ReadOnlyHistory, Object.assign({}, added)), _jsx(ReadOnlyHistory, Object.assign({}, service))] })] })] }));
@@ -0,0 +1,5 @@
1
+ import { Meta } from '@storybook/react';
2
+ declare const _default: Meta;
3
+ export default _default;
4
+ export declare const Overview: () => import("react/jsx-runtime").JSX.Element;
5
+ export declare const SpecsTab: () => import("react/jsx-runtime").JSX.Element;