@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.
- package/LICENSE +193 -0
- package/README.md +159 -29
- package/build/componentHandlers.js +205 -0
- package/{dist → build}/config.js +5 -5
- package/build/index.js +51 -0
- package/{dist → build}/iressHandlers.js +46 -52
- package/{dist → build}/resourceHandlers.js +22 -23
- package/{dist → build}/searchHandlers.js +92 -107
- package/{dist → build}/toolHandler.js +13 -13
- package/build/tools.js +165 -0
- package/{dist → build}/utils.js +15 -11
- package/docs/api-reference.md +0 -0
- package/docs/best-practices.md +0 -0
- package/docs/configuration.md +0 -0
- package/docs/examples.md +0 -0
- package/docs/guidelines.md +269 -0
- package/{generated/docs → docs/ids}/components-autocomplete-docs.md +5 -5
- package/{generated/docs → docs/ids}/components-autocomplete-recipes-docs.md +51 -17
- package/{generated/docs → docs/ids}/components-card-recipes-docs.md +1 -1
- package/{generated/docs → docs/ids}/components-checkbox-docs.md +19 -6
- package/{generated/docs → docs/ids}/components-checkboxgroup-docs.md +18 -18
- package/{generated/docs → docs/ids}/components-checkboxgroup-recipes-docs.md +9 -9
- package/{generated/docs → docs/ids}/components-col-docs.md +1 -1
- package/{generated/docs → docs/ids}/components-combobox-docs.md +6 -6
- package/{generated/docs → docs/ids}/components-container-docs.md +42 -8
- package/{generated/docs → docs/ids}/components-filter-docs.md +66 -13
- package/{generated/docs → docs/ids}/components-form-docs.md +368 -342
- package/{generated/docs → docs/ids}/components-form-recipes-docs.md +11 -202
- package/{generated/docs → docs/ids}/components-hide-docs.md +70 -16
- package/{generated/docs → docs/ids}/components-icon-docs.md +4 -4
- package/{generated/docs → docs/ids}/components-input-recipes-docs.md +2 -2
- package/{generated/docs → docs/ids}/components-inputcurrency-recipes-docs.md +40 -6
- package/{generated/docs → docs/ids}/components-modal-docs.md +113 -3
- package/docs/ids/components-popover-docs.md +4 -0
- package/{generated/docs → docs/ids}/components-radiogroup-docs.md +21 -21
- package/{generated/docs → docs/ids}/components-richselect-docs.md +111 -149
- package/{generated/docs → docs/ids}/components-row-docs.md +4 -4
- package/{generated/docs → docs/ids}/components-skeleton-docs.md +3 -3
- package/{generated/docs → docs/ids}/components-skeleton-recipes-docs.md +1 -1
- package/{generated/docs → docs/ids}/components-skiplink-docs.md +1 -1
- package/{generated/docs → docs/ids}/components-slideout-docs.md +113 -3
- package/docs/ids/components-table-ag-grid-docs.md +2694 -0
- package/{generated/docs → docs/ids}/components-table-docs.md +597 -92
- package/{generated/docs → docs/ids}/components-tabset-docs.md +2 -2
- package/{generated/docs → docs/ids}/components-tag-docs.md +1 -1
- package/{generated/docs → docs/ids}/components-toaster-docs.md +5 -56
- package/{generated/docs → docs/ids}/extensions-editor-docs.md +5 -5
- package/{generated/docs → docs/ids}/foundations-colours-docs.md +1 -1
- package/{generated/docs → docs/ids}/foundations-typography-docs.md +2 -7
- package/docs/ids/get-started-develop-docs.md +48 -0
- package/{generated/docs → docs/ids}/introduction-docs.md +4 -4
- package/{generated/docs → docs/ids}/patterns-loading-docs.md +2 -332
- package/docs/ids/resources-migration-guides-from-v4-to-v5-docs.md +639 -0
- package/docs/ids/themes-available-themes-docs.md +74 -0
- package/docs/ids/themes-tokens-docs.md +4580 -0
- package/docs/ids/versions-docs.md +27 -0
- package/docs/tutorials/basic-integration.md +0 -0
- package/package.json +15 -44
- package/LICENSE.txt +0 -201
- package/dist/componentHandlers.js +0 -241
- package/dist/componentHandlers.test.js +0 -380
- package/dist/index.js +0 -53
- package/dist/iressHandlers.test.js +0 -316
- package/dist/resourceHandlers.test.js +0 -352
- package/dist/searchHandlers.test.js +0 -524
- package/dist/toolHandler.test.js +0 -369
- package/dist/tools.js +0 -165
- package/dist/utils.test.js +0 -286
- package/generated/docs/components-popover-docs.md +0 -464
- package/generated/docs/components-provider-docs.md +0 -105
- package/generated/docs/components-table-ag-grid-docs.md +0 -1074
- package/generated/docs/foundations-accessibility-docs.md +0 -62
- package/generated/docs/foundations-consistency-docs.md +0 -52
- package/generated/docs/foundations-content-docs.md +0 -23
- package/generated/docs/foundations-introduction-docs.md +0 -17
- package/generated/docs/foundations-principles-docs.md +0 -70
- package/generated/docs/foundations-user-experience-docs.md +0 -63
- package/generated/docs/foundations-visual-design-docs.md +0 -46
- package/generated/docs/get-started-develop-docs.md +0 -209
- package/generated/docs/guidelines.md +0 -812
- package/generated/docs/resources-migration-guides-from-v4-to-v5-docs.md +0 -437
- package/generated/docs/themes-available-themes-docs.md +0 -66
- package/generated/docs/themes-tokens-docs.md +0 -1200
- package/generated/docs/versions-docs.md +0 -17
- /package/{dist → build}/types.js +0 -0
- /package/{generated/docs → docs/ids}/components-alert-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-badge-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-button-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-button-recipes-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-buttongroup-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-card-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-divider-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-expander-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-field-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-inline-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-input-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-inputcurrency-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-label-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-menu-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-menu-menuitem-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-navbar-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-navbar-recipes-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-panel-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-placeholder-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-popover-recipes-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-progress-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-radio-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-readonly-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-select-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-slider-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-spinner-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-stack-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-tabset-tab-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-text-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-toaster-toast-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-toggle-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-tooltip-docs.md +0 -0
- /package/{generated/docs → docs/ids}/components-validationmessage-docs.md +0 -0
- /package/{generated/docs → docs/ids}/contact-us-docs.md +0 -0
- /package/{generated/docs → docs/ids}/extensions-editor-recipes-docs.md +0 -0
- /package/{generated/docs → docs/ids}/frequently-asked-questions-docs.md +0 -0
- /package/{generated/docs → docs/ids}/get-started-using-storybook-docs.md +0 -0
- /package/{generated/docs → docs/ids}/resources-changelog-docs.md +0 -0
- /package/{generated/docs → docs/ids}/resources-code-katas-docs.md +0 -0
- /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
|
|
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.
|
|
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
|
|
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.
|
|
4
|
+
5.13.0
|
|
5
5
|
|
|
6
6
|
* * *
|
|
7
7
|
|
|
8
|
-
|
|
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
|
-
, 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
|
-

|
|
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)
|