@iress-oss/ids-mcp-server 0.0.1-dev.4 → 0.0.1

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 (125) hide show
  1. package/LICENSE +193 -0
  2. package/README.md +159 -29
  3. package/build/componentHandlers.js +205 -0
  4. package/{dist → build}/config.js +5 -5
  5. package/build/index.js +51 -0
  6. package/{dist → build}/iressHandlers.js +46 -52
  7. package/{dist → build}/resourceHandlers.js +22 -23
  8. package/{dist → build}/searchHandlers.js +92 -107
  9. package/{dist → build}/toolHandler.js +13 -13
  10. package/build/tools.js +165 -0
  11. package/{dist → build}/utils.js +15 -11
  12. package/docs/api-reference.md +0 -0
  13. package/docs/best-practices.md +0 -0
  14. package/docs/configuration.md +0 -0
  15. package/docs/examples.md +0 -0
  16. package/docs/guidelines.md +269 -0
  17. package/{generated/docs → docs/ids}/components-autocomplete-docs.md +5 -5
  18. package/{generated/docs → docs/ids}/components-autocomplete-recipes-docs.md +51 -17
  19. package/{generated/docs → docs/ids}/components-card-recipes-docs.md +1 -1
  20. package/{generated/docs → docs/ids}/components-checkbox-docs.md +19 -6
  21. package/{generated/docs → docs/ids}/components-checkboxgroup-docs.md +18 -18
  22. package/{generated/docs → docs/ids}/components-checkboxgroup-recipes-docs.md +9 -9
  23. package/{generated/docs → docs/ids}/components-col-docs.md +1 -1
  24. package/{generated/docs → docs/ids}/components-combobox-docs.md +6 -6
  25. package/{generated/docs → docs/ids}/components-container-docs.md +42 -8
  26. package/{generated/docs → docs/ids}/components-filter-docs.md +66 -13
  27. package/{generated/docs → docs/ids}/components-form-docs.md +368 -342
  28. package/{generated/docs → docs/ids}/components-form-recipes-docs.md +11 -202
  29. package/{generated/docs → docs/ids}/components-hide-docs.md +70 -16
  30. package/{generated/docs → docs/ids}/components-icon-docs.md +4 -4
  31. package/{generated/docs → docs/ids}/components-input-recipes-docs.md +2 -2
  32. package/{generated/docs → docs/ids}/components-inputcurrency-recipes-docs.md +40 -6
  33. package/{generated/docs → docs/ids}/components-modal-docs.md +113 -3
  34. package/docs/ids/components-popover-docs.md +4 -0
  35. package/{generated/docs → docs/ids}/components-radiogroup-docs.md +21 -21
  36. package/{generated/docs → docs/ids}/components-richselect-docs.md +111 -149
  37. package/{generated/docs → docs/ids}/components-row-docs.md +4 -4
  38. package/{generated/docs → docs/ids}/components-skeleton-docs.md +3 -3
  39. package/{generated/docs → docs/ids}/components-skeleton-recipes-docs.md +1 -1
  40. package/{generated/docs → docs/ids}/components-skiplink-docs.md +1 -1
  41. package/{generated/docs → docs/ids}/components-slideout-docs.md +113 -3
  42. package/docs/ids/components-table-ag-grid-docs.md +2694 -0
  43. package/{generated/docs → docs/ids}/components-table-docs.md +597 -92
  44. package/{generated/docs → docs/ids}/components-tabset-docs.md +2 -2
  45. package/{generated/docs → docs/ids}/components-tag-docs.md +1 -1
  46. package/{generated/docs → docs/ids}/components-toaster-docs.md +5 -56
  47. package/{generated/docs → docs/ids}/extensions-editor-docs.md +5 -5
  48. package/{generated/docs → docs/ids}/foundations-colours-docs.md +1 -1
  49. package/{generated/docs → docs/ids}/foundations-typography-docs.md +2 -7
  50. package/docs/ids/get-started-develop-docs.md +48 -0
  51. package/{generated/docs → docs/ids}/introduction-docs.md +4 -4
  52. package/{generated/docs → docs/ids}/patterns-loading-docs.md +2 -332
  53. package/docs/ids/resources-migration-guides-from-v4-to-v5-docs.md +639 -0
  54. package/docs/ids/themes-available-themes-docs.md +74 -0
  55. package/docs/ids/themes-tokens-docs.md +4580 -0
  56. package/docs/ids/versions-docs.md +27 -0
  57. package/docs/tutorials/basic-integration.md +0 -0
  58. package/package.json +15 -44
  59. package/LICENSE.txt +0 -201
  60. package/dist/componentHandlers.js +0 -241
  61. package/dist/componentHandlers.test.js +0 -380
  62. package/dist/index.js +0 -53
  63. package/dist/iressHandlers.test.js +0 -316
  64. package/dist/resourceHandlers.test.js +0 -352
  65. package/dist/searchHandlers.test.js +0 -524
  66. package/dist/toolHandler.test.js +0 -369
  67. package/dist/tools.js +0 -165
  68. package/dist/utils.test.js +0 -286
  69. package/generated/docs/components-popover-docs.md +0 -464
  70. package/generated/docs/components-provider-docs.md +0 -105
  71. package/generated/docs/components-table-ag-grid-docs.md +0 -1074
  72. package/generated/docs/foundations-accessibility-docs.md +0 -62
  73. package/generated/docs/foundations-consistency-docs.md +0 -52
  74. package/generated/docs/foundations-content-docs.md +0 -23
  75. package/generated/docs/foundations-introduction-docs.md +0 -17
  76. package/generated/docs/foundations-principles-docs.md +0 -70
  77. package/generated/docs/foundations-user-experience-docs.md +0 -63
  78. package/generated/docs/foundations-visual-design-docs.md +0 -46
  79. package/generated/docs/get-started-develop-docs.md +0 -209
  80. package/generated/docs/guidelines.md +0 -812
  81. package/generated/docs/resources-migration-guides-from-v4-to-v5-docs.md +0 -437
  82. package/generated/docs/themes-available-themes-docs.md +0 -66
  83. package/generated/docs/themes-tokens-docs.md +0 -1200
  84. package/generated/docs/versions-docs.md +0 -17
  85. /package/{dist → build}/types.js +0 -0
  86. /package/{generated/docs → docs/ids}/components-alert-docs.md +0 -0
  87. /package/{generated/docs → docs/ids}/components-badge-docs.md +0 -0
  88. /package/{generated/docs → docs/ids}/components-button-docs.md +0 -0
  89. /package/{generated/docs → docs/ids}/components-button-recipes-docs.md +0 -0
  90. /package/{generated/docs → docs/ids}/components-buttongroup-docs.md +0 -0
  91. /package/{generated/docs → docs/ids}/components-card-docs.md +0 -0
  92. /package/{generated/docs → docs/ids}/components-divider-docs.md +0 -0
  93. /package/{generated/docs → docs/ids}/components-expander-docs.md +0 -0
  94. /package/{generated/docs → docs/ids}/components-field-docs.md +0 -0
  95. /package/{generated/docs → docs/ids}/components-inline-docs.md +0 -0
  96. /package/{generated/docs → docs/ids}/components-input-docs.md +0 -0
  97. /package/{generated/docs → docs/ids}/components-inputcurrency-docs.md +0 -0
  98. /package/{generated/docs → docs/ids}/components-label-docs.md +0 -0
  99. /package/{generated/docs → docs/ids}/components-menu-docs.md +0 -0
  100. /package/{generated/docs → docs/ids}/components-menu-menuitem-docs.md +0 -0
  101. /package/{generated/docs → docs/ids}/components-navbar-docs.md +0 -0
  102. /package/{generated/docs → docs/ids}/components-navbar-recipes-docs.md +0 -0
  103. /package/{generated/docs → docs/ids}/components-panel-docs.md +0 -0
  104. /package/{generated/docs → docs/ids}/components-placeholder-docs.md +0 -0
  105. /package/{generated/docs → docs/ids}/components-popover-recipes-docs.md +0 -0
  106. /package/{generated/docs → docs/ids}/components-progress-docs.md +0 -0
  107. /package/{generated/docs → docs/ids}/components-radio-docs.md +0 -0
  108. /package/{generated/docs → docs/ids}/components-readonly-docs.md +0 -0
  109. /package/{generated/docs → docs/ids}/components-select-docs.md +0 -0
  110. /package/{generated/docs → docs/ids}/components-slider-docs.md +0 -0
  111. /package/{generated/docs → docs/ids}/components-spinner-docs.md +0 -0
  112. /package/{generated/docs → docs/ids}/components-stack-docs.md +0 -0
  113. /package/{generated/docs → docs/ids}/components-tabset-tab-docs.md +0 -0
  114. /package/{generated/docs → docs/ids}/components-text-docs.md +0 -0
  115. /package/{generated/docs → docs/ids}/components-toaster-toast-docs.md +0 -0
  116. /package/{generated/docs → docs/ids}/components-toggle-docs.md +0 -0
  117. /package/{generated/docs → docs/ids}/components-tooltip-docs.md +0 -0
  118. /package/{generated/docs → docs/ids}/components-validationmessage-docs.md +0 -0
  119. /package/{generated/docs → docs/ids}/contact-us-docs.md +0 -0
  120. /package/{generated/docs → docs/ids}/extensions-editor-recipes-docs.md +0 -0
  121. /package/{generated/docs → docs/ids}/frequently-asked-questions-docs.md +0 -0
  122. /package/{generated/docs → docs/ids}/get-started-using-storybook-docs.md +0 -0
  123. /package/{generated/docs → docs/ids}/resources-changelog-docs.md +0 -0
  124. /package/{generated/docs → docs/ids}/resources-code-katas-docs.md +0 -0
  125. /package/{generated/docs → docs/ids}/themes-introduction-docs.md +0 -0
@@ -3,7 +3,7 @@
3
3
 
4
4
  Colour is an integral aspect of conveying clear concise data. Our colours are optimized across two backgrounds, meeting or exceeding [WCAG 2.1 Level AA Accessibility Guidelines](https://www.w3.org/TR/WCAG21/#contrast-minimum).
5
5
 
6
- The Iress themes are designed to meet WCAG contrast guidelines (2.1 AA). We can't guarantee this when consumer branding is applied, so colour combinations should be checked to ensure conformance.
6
+ The Iress themes are designed to meet WCAG contrast guidelines. We can't guarantee this when consumer branding is applied, so colour combinations should be checked to ensure conformance.
7
7
 
8
8
  [](#backgrounds)Backgrounds
9
9
  ---------------------------
@@ -1,7 +1,7 @@
1
1
  [](#typography)Typography
2
2
  =========================
3
3
 
4
- Typography is set up as part of the theming. Typography is controlled by the `IressText` component and the `iress-u-text` utility class. They implement consistent line heights and font weights.
4
+ Typography is set up as part of the theming. Typography is controlled by the `IressText` component and the `iress-u-text` utility class.
5
5
 
6
6
  Typography styles are designed to be encapsulated. If you want text to pick up the Iress styling, you'll need to wrap it in an `IressText` component.
7
7
 
@@ -38,7 +38,7 @@ Copy
38
38
  [](#headings)Headings
39
39
  ---------------------
40
40
 
41
- Headings form the structure of a web page. They're designed to stand out visually, drawing a user's eye to distinct sections of the document. They can be set in a variety of sizes based on systematic font sizing with native heading scales (H1-H6).
41
+ Headings form the structure of a web page. They're designed to stand out visually, drawing a user's eye to distinct sections of the document. They can be set in a variety of sizes, with level 1 headings being the largest.
42
42
 
43
43
  Hello, we are a company that puts clients first.
44
44
  ================================================
@@ -154,7 +154,6 @@ IDS also includes bold, italic and small text variants.
154
154
  * Bold text should be used to **draw attention** to part of a sentence, or to provide a visual label for readonly text.
155
155
  * Italic text should be used to add _emphasis_ to content, or to add stress to part of a sentence.
156
156
  * Small text is used for side comments or for text that's secondary to the main content.
157
- * Muted text is used to de-emphasise content, such as when displaying informative text that is not critical to the user experience.
158
157
 
159
158
  Bold text
160
159
 
@@ -162,8 +161,6 @@ Italic text
162
161
 
163
162
  Small text
164
163
 
165
- Muted text
166
-
167
164
  Hide code
168
165
 
169
166
  \[data-radix-scroll-area-viewport\] { scrollbar-width: none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } \[data-radix-scroll-area-viewport\]::-webkit-scrollbar { display: none; } :where(\[data-radix-scroll-area-viewport\]) { display: flex; flex-direction: column; align-items: stretch; } :where(\[data-radix-scroll-area-content\]) { flex-grow: 1; }
@@ -175,8 +172,6 @@ Hide code
175
172
  Italic text </IressText\>
176
173
  <IressText variant\="small"\>
177
174
  Small text </IressText\>
178
- <IressText mode\="muted"\>
179
- Muted text </IressText\>
180
175
  </IressStack\>
181
176
 
182
177
  Copy
@@ -0,0 +1,48 @@
1
+ [](#develop)Develop
2
+ ===================
3
+
4
+ Set up your environment to use the latest version of the Iress Design System (IDS). You can use this library to build React applications that align to IDS, and ensure a consistent and modern look and feel across all Iress products.
5
+
6
+ [](#requirements)Requirements
7
+ -----------------------------
8
+
9
+ * [React 17 or later](https://reactjs.org/)
10
+ * Access to Iress Artifactory
11
+
12
+ [](#set-up-the-component-library)Set up the component library
13
+ -------------------------------------------------------------
14
+
15
+ 1. Install using: `yarn add @iress/ids-components`
16
+ 2. Import the styles: `import '@iress/ids-components/dist/style.css'`
17
+ 3. Import the components: `import { IressButton, IressText } from '@iress/ids-components'`
18
+ 4. Use the components: `<IressButton>Click me</IressButton>`
19
+
20
+ [](#set-up-the-theme)Set up the theme
21
+ -------------------------------------
22
+
23
+ The component library comes with the white label theme by default. You can add a theme by importing the theme file and including it in your application.
24
+
25
+ Microfrontends
26
+ --------------
27
+
28
+ If you are building a React App that is intended to be used as a microfrontend, please skip this step. Microfrontends should inherit the parent application's theme, and not define a theme itself, as it may conflict with other microfrontends in the same parent application.
29
+
30
+ 1. Install using `yarn add @iress/ids-themes`
31
+ 2. Import the component: `import { IressTheme } from '@iress/ids-themes'`
32
+ 3. Add the component to your application: `<IressTheme name="iress-beta-theme-light" />`.
33
+
34
+ For alternative ways to import the theme, see the [Themes documentation](./?path=/docs/themes-introduction--docs).
35
+
36
+ [](#set-up-the-icons)Set up the icons
37
+ -------------------------------------
38
+
39
+ If you are planning to use the `<IressIcon />` component, you need to include the Font Awesome CSS in your application.
40
+
41
+ You can do this by including the Font Awesome CSS [via the Iress CDN](./?path=/docs/components-icon--docs#installation).
42
+
43
+ On this page
44
+
45
+ * [Requirements](#requirements)
46
+ * [Set up the component library](#set-up-the-component-library)
47
+ * [Set up the theme](#set-up-the-theme)
48
+ * [Set up the icons](#set-up-the-icons)
@@ -1,11 +1,11 @@
1
- [](#iress-design-system)Iress Design System
2
- ===========================================
1
+ [](#iress-design-system-ids)Iress Design System (IDS)
2
+ =====================================================
3
3
 
4
- 5.15.0
4
+ 5.13.0
5
5
 
6
6
  * * *
7
7
 
8
- The Iress Design System (IDS) serves as a shared visual language, working code, design tools and resources, human interface guidelines, and a community of contributors. It supports designers and developers building digital products for both B2B (Financial Advisors, Paraplanners) and B2B2C (client customers) segments.
8
+ IDS consists of a shared visual language, working code, design tools and resources, human interface guidelines, and a community of contributors. It serves a wide range of designers and developers building digital products and experiences.
9
9
 
10
10
  [](#whats-new)What's new?
11
11
  -------------------------
@@ -206,7 +206,7 @@ Apart from using the `IressLoading` component, there are a few things you need t
206
206
 
207
207
  The `IressLoading` component is designed to create a seamless experience for users when loading content. They have been designed to meet best practices and improve user perception of loading times.
208
208
 
209
- ![Wait times less than 1 second, no loading indicator. Short wait times (1-3 seconds), use a loading indicator. Long wait times (3-10 seconds), use a loading indicator and provide feedback. Wait times longer than 10 seconds should be a background process.](/@fs/app/packages/components/src/patterns/Loading/assets/ux-collective-loading-time-matrix.webp)
209
+ ![Wait times less than 1 second, no loading indicator. Short wait times (1-3 seconds), use a loading indicator. Long wait times (3-10 seconds), use a loading indicator and provide feedback. Wait times longer than 10 seconds should be a background process.](/@fs/Users/ming.fang/code/design-system/packages/components/src/patterns/Loading/assets/ux-collective-loading-time-matrix.webp)
210
210
 
211
211
  Image © [UX Collective](https://uxdesign.cc/loading-progress-indicators-ui-components-series-f4b1fc35339a)
212
212
 
@@ -254,7 +254,7 @@ New component
254
254
 
255
255
  This component is new, please provide feedback to the IDS team if you encounter any issues.
256
256
 
257
- ![](/@fs/app/packages/components/src/patterns/Loading/mocks/retirement-graph.png)
257
+ ![](/@fs/Users/ming.fang/code/design-system/packages/components/src/patterns/Loading/mocks/retirement-graph.png)
258
258
 
259
259
  Update
260
260
 
@@ -607,289 +607,6 @@ Hide codeRefresh
607
607
 
608
608
  Copy
609
609
 
610
- [](#suspense)Suspense
611
- ---------------------
612
-
613
- Since React 18, React has introduced a new way to handle loading states using `Suspense`, allowing you to lazy load components in an efficient manner.
614
-
615
- The `IressLoadingSuspense` component is a wrapper around the `IressLoading` component that uses `Suspense` to handle loading states. It is used in the same way as the `IressLoading` component, however you do not need to pass the `loaded` prop or use the `IressLoading.shouldRender` hook. The `IressLoadingSuspense` component will automatically handle the loading state for you.
616
-
617
- The wizard example can be translated to use `IressLoadingSuspense` as follows (it includes the slow and fast examples).
618
-
619
- **Differences in behaviour**
620
-
621
- * The `IressLoadingSuspense` component will automatically handle the loading state for you, so you do not need to pass the `loaded` prop or use the `IressLoading.shouldRender` hook.
622
- * Nested suspense components will be handled by the highest `IressLoadingSuspense` component. This means that if you have multiple nested `IressLoadingSuspense` components, only the top most one will display a loading state. You can see this in the example when you click the Next button, you no longer see the component loading pattern due to it being nested under the page loading pattern.
623
-
624
- Hide codeRefresh
625
-
626
- \[data-radix-scroll-area-viewport\] { scrollbar-width: none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } \[data-radix-scroll-area-viewport\]::-webkit-scrollbar { display: none; } :where(\[data-radix-scroll-area-viewport\]) { display: flex; flex-direction: column; align-items: stretch; } :where(\[data-radix-scroll-area-content\]) { flex-grow: 1; }
627
-
628
- interface PageProps {
629
- setPage: (page: number) \=> void;
630
- }
631
- interface ChartProps {
632
- money: number | null;
633
- }
634
- const API \= {
635
- getHomePage: async () \=> {
636
- await new Promise((resolve) \=> {
637
- setTimeout(resolve, 3000);
638
- });
639
- return 1;
640
- },
641
- getRetirementIncomeProjection: async () \=> {
642
- await new Promise((resolve) \=> {
643
- setTimeout(resolve, 2000);
644
- });
645
- return true;
646
- },
647
- getChart: async () \=> {
648
- await new Promise((resolve) \=> {
649
- const chartImage \= new Image();
650
- chartImage.src \= retirementGraph;
651
- setTimeout(resolve, 1000);
652
- });
653
- return true;
654
- },
655
- chartUpdate: async () \=>
656
- new Promise<boolean\>((resolve) \=> {
657
- // Simulate a slow network request.
658
- setTimeout(() \=> {
659
- resolve(true);
660
- }, 2000);
661
- }),
662
- };
663
- const Graph \= () \=> (
664
- <img
665
- src\={retirementGraph}
666
- alt\=""
667
- style\={{ maxWidth: '100%', height: 'auto' }}
668
- />
669
- );
670
- const Chart \= () \=> {
671
- const initialChart \= IressLoadingSuspense.use(API.getChart);
672
- const \[updatedChart, setUpdatedChart\] \= useState<boolean | undefined\>();
673
- const \[money, setMoney\] \= useState<number | null\>(null);
674
- const \[updating, setUpdating\] \= useState(false);
675
- const deferredMoney \= useDeferredValue(money);
676
- const chart \= updatedChart ?? initialChart;
677
- useEffect(() \=> {
678
- if (deferredMoney \=== null) {
679
- return;
680
- }
681
- setUpdating(() \=> true);
682
- const update \= async () \=> {
683
- const newChart \= await API.chartUpdate();
684
- setUpdatedChart(newChart);
685
- setUpdating(() \=> false);
686
- };
687
- void update();
688
- }, \[deferredMoney\]);
689
- return (
690
- <IressLoadingSuspense pattern\="component" update\={updating}\>
691
- {chart && <Graph />}
692
- <IressPanel\>
693
- <IressForm<ChartProps> onSubmit={(projectionData) \=> setMoney(projectionData.money)}
694
- > <IressStack gutter\="md"\>
695
- <h3\>Update projection</h3\>
696
- <IressFormField
697
- name\="money"
698
- label\="My money"
699
- render\={(controlledProps) \=> (
700
- <IressInputCurrency {...controlledProps} />
701
- )}
702
- />
703
- <IressButton type\="submit"\>Update projection</IressButton\>
704
- </IressStack\>
705
- </IressForm\>
706
- </IressPanel\>
707
- </IressLoadingSuspense\>
708
- );
709
- };
710
- const StartPage \= ({ setPage }: PageProps) \=> (
711
- <IressText\>
712
- <h2\>Maximise your retirement</h2\>
713
- <p\>
714
- Maximize your retirement in Australia by contributing to your super early and making voluntary top-ups to benefit from compounding. Take advantage of employer contributions, government co-contributions, and tax benefits. Diversify your investments and review your strategy regularly to stay on track. Consider additional income streams and seek professional advice for a secure future. </p\>
715
- <hr />
716
- <IressButton onClick\={() \=> setPage(2)}\>Next</IressButton\>
717
- </IressText\>
718
- );
719
- const RetirementIncomeProjectionPage \= () \=> {
720
- const promise \= API.getRetirementIncomeProjection;
721
- IressLoadingSuspense.use(promise);
722
- IressLoadingSuspense.uncache(promise);
723
- return (
724
- <IressText\>
725
- <h2\>Retirement Income Projection</h2\>
726
- <p\>
727
- We've got enough information to provide you with a retirement income projection. This will help you understand how much you can expect to receive in retirement based on your current super balance, your contributions, and your investment strategy. </p\>
728
- <Chart />
729
- </IressText\>
730
- );
731
- };
732
- const HomePage \= () \=> {
733
- const promise \= API.getHomePage;
734
- const startPage \= IressLoadingSuspense.use(promise);
735
- IressLoadingSuspense.uncache(promise);
736
- const \[movedPage, setMovedPage\] \= useState<number | undefined\>();
737
- const page \= movedPage ?? startPage;
738
- return (
739
- <IressContainer style\={{ maxWidth: '600px', paddingBlock: '3rem' }}\>
740
- {page \=== 1 && (
741
- <IressLoadingSuspense pattern\="page" template\="form"\>
742
- {page \=== 1 && <StartPage setPage\={setMovedPage} />}
743
- </IressLoadingSuspense\>
744
- )}
745
- {page \=== 2 && (
746
- <IressLoadingSuspense pattern\="page" template\="form"\>
747
- <RetirementIncomeProjectionPage />
748
- </IressLoadingSuspense\>
749
- )}
750
- </IressContainer\>
751
- );
752
- };
753
- export const LoadingSuspenseWizard \= () \=> (
754
- <IressLoadingSuspense pattern\="start-up"\>
755
- <HomePage />
756
- </IressLoadingSuspense\>
757
- );
758
-
759
- Copy
760
-
761
- Hide codeRefresh
762
-
763
- \[data-radix-scroll-area-viewport\] { scrollbar-width: none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } \[data-radix-scroll-area-viewport\]::-webkit-scrollbar { display: none; } :where(\[data-radix-scroll-area-viewport\]) { display: flex; flex-direction: column; align-items: stretch; } :where(\[data-radix-scroll-area-content\]) { flex-grow: 1; }
764
-
765
- interface PageProps {
766
- setPage: (page: number) \=> void;
767
- }
768
- interface ChartProps {
769
- money: number | null;
770
- }
771
- const API \= {
772
- getHomePage: async () \=> {
773
- await new Promise((resolve) \=> {
774
- setTimeout(resolve, 500);
775
- });
776
- return 1;
777
- },
778
- getRetirementIncomeProjection: async () \=> {
779
- await new Promise((resolve) \=> {
780
- setTimeout(resolve, 200);
781
- });
782
- return true;
783
- },
784
- getChart: async () \=> {
785
- await new Promise((resolve) \=> {
786
- const chartImage \= new Image();
787
- chartImage.onload \= resolve;
788
- chartImage.src \= retirementGraph;
789
- });
790
- return true;
791
- },
792
- chartUpdate: async () \=>
793
- new Promise<boolean\>((resolve) \=> {
794
- setTimeout(() \=> {
795
- resolve(true);
796
- }, 200);
797
- }),
798
- };
799
- const Graph \= () \=> (
800
- <img
801
- src\={retirementGraph}
802
- alt\=""
803
- style\={{ maxWidth: '100%', height: 'auto' }}
804
- />
805
- );
806
- const Chart \= () \=> {
807
- const initialChart \= IressLoadingSuspense.use(API.getChart);
808
- const \[updatedChart, setUpdatedChart\] \= useState<boolean | undefined\>();
809
- const \[money, setMoney\] \= useState<number | null\>(null);
810
- const \[updating, setUpdating\] \= useState(false);
811
- const deferredMoney \= useDeferredValue(money);
812
- const chart \= updatedChart ?? initialChart;
813
- useEffect(() \=> {
814
- if (deferredMoney \=== null) {
815
- return;
816
- }
817
- setUpdating(() \=> true);
818
- const update \= async () \=> {
819
- const newChart \= await API.chartUpdate();
820
- setUpdatedChart(newChart);
821
- setUpdating(() \=> false);
822
- };
823
- void update();
824
- }, \[deferredMoney\]);
825
- return (
826
- <IressLoadingSuspense pattern\="component" update\={updating}\>
827
- {chart && <Graph />}
828
- <IressPanel\>
829
- <IressForm<ChartProps> onSubmit={(projectionData) \=> setMoney(projectionData.money)}
830
- > <IressStack gutter\="md"\>
831
- <h3\>Update projection</h3\>
832
- <IressFormField
833
- name\="money"
834
- label\="My money"
835
- render\={(controlledProps) \=> (
836
- <IressInputCurrency {...controlledProps} />
837
- )}
838
- />
839
- <IressButton type\="submit"\>Update projection</IressButton\>
840
- </IressStack\>
841
- </IressForm\>
842
- </IressPanel\>
843
- </IressLoadingSuspense\>
844
- );
845
- };
846
- const StartPage \= ({ setPage }: PageProps) \=> (
847
- <IressText\>
848
- <h2\>Maximise your retirement</h2\>
849
- <p\>
850
- Maximize your retirement in Australia by contributing to your super early and making voluntary top-ups to benefit from compounding. Take advantage of employer contributions, government co-contributions, and tax benefits. Diversify your investments and review your strategy regularly to stay on track. Consider additional income streams and seek professional advice for a secure future. </p\>
851
- <hr />
852
- <IressButton onClick\={() \=> setPage(2)}\>Next</IressButton\>
853
- </IressText\>
854
- );
855
- const RetirementIncomeProjectionPage \= () \=> {
856
- IressLoadingSuspense.use(API.getRetirementIncomeProjection);
857
- return (
858
- <IressText\>
859
- <h2\>Retirement Income Projection</h2\>
860
- <p\>
861
- We've got enough information to provide you with a retirement income projection. This will help you understand how much you can expect to receive in retirement based on your current super balance, your contributions, and your investment strategy. </p\>
862
- <Chart />
863
- </IressText\>
864
- );
865
- };
866
- const HomePage \= () \=> {
867
- const startPage \= IressLoadingSuspense.use(API.getHomePage);
868
- const \[movedPage, setMovedPage\] \= useState<number | undefined\>();
869
- const page \= movedPage ?? startPage;
870
- return (
871
- <IressContainer style\={{ maxWidth: '600px', paddingBlock: '3rem' }}\>
872
- {page \=== 1 && (
873
- <IressLoadingSuspense pattern\="page" template\="form"\>
874
- {page \=== 1 && <StartPage setPage\={setMovedPage} />}
875
- </IressLoadingSuspense\>
876
- )}
877
- {page \=== 2 && (
878
- <IressLoadingSuspense pattern\="page" template\="form"\>
879
- <RetirementIncomeProjectionPage />
880
- </IressLoadingSuspense\>
881
- )}
882
- </IressContainer\>
883
- );
884
- };
885
- export const LoadingSuspenseWizardFast \= () \=> (
886
- <IressLoadingSuspense pattern\="start-up"\>
887
- <HomePage />
888
- </IressLoadingSuspense\>
889
- );
890
-
891
- Copy
892
-
893
610
  [](#hooks)Hooks
894
611
  ---------------
895
612
 
@@ -924,51 +641,6 @@ else return <IressText\>Content is loaded</IressText\>;
924
641
 
925
642
  Copy
926
643
 
927
- ### [](#iressloadingsuspenseuse)`IressLoadingSuspense.use`
928
-
929
- The `IressLoadingSuspense.use` hook is a polyfill for the React 19 `use` hook, allowing you to have similar functionality in React 18. It is used to handle loading states when using `IressLoadingSuspense`.
930
-
931
- It is not as smart as the `use` hook in React 19, it will cache the result of the promise and will not re-fetch the data if the component is re-mounted. You can clear a function's results in the cache by using the `IressLoadingSuspense.uncache` function.
932
-
933
- Avoid in React 19
934
- -----------------
935
-
936
- If you are using React 19, it is recommended to use the built-in `use` hook instead of this one. In future releases, this hook will be deprecated and removed from the library.
937
-
938
- \[data-radix-scroll-area-viewport\] {
939
- scrollbar-width: none;
940
- -ms-overflow-style: none;
941
- -webkit-overflow-scrolling: touch;
942
- }
943
- \[data-radix-scroll-area-viewport\]::-webkit-scrollbar {
944
- display: none;
945
- }
946
- :where(\[data-radix-scroll-area-viewport\]) {
947
- display: flex;
948
- flex-direction: column;
949
- align-items: stretch;
950
- }
951
- :where(\[data-radix-scroll-area-content\]) {
952
- flex-grow: 1;
953
- }
954
-
955
- const HomePage \= () \=> {
956
- const pageData \= IressLoadingSuspense.use(API.fetchPage('home'));
957
- return (
958
- <IressText\>
959
- <h2\>{pageData.title}</h2\>
960
- <p\>{pageData.description}</p\>
961
- </IressText\>
962
- );
963
- };
964
- export const App \= () \=> (
965
- <IressLoadingSuspense pattern\="start-up"\>
966
- <HomePage />
967
- </IressLoadingSuspense\>
968
- );
969
-
970
- Copy
971
-
972
644
  [](#examples)Examples
973
645
  ---------------------
974
646
 
@@ -1296,9 +968,7 @@ On this page
1296
968
  * [page](#page)
1297
969
  * [start-up](#start-up)
1298
970
  * [validate](#validate)
1299
- * [Suspense](#suspense)
1300
971
  * [Hooks](#hooks)
1301
972
  * [IressLoading.shouldRender](#iressloadingshouldrender)
1302
- * [IressLoadingSuspense.use](#iressloadingsuspenseuse)
1303
973
  * [Examples](#examples)
1304
974
  * [Wizard](#wizard)