@iress-oss/ids-mcp-server 0.0.1 → 5.14.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/LICENSE.txt +201 -0
  2. package/README.md +29 -159
  3. package/dist/componentHandlers.js +241 -0
  4. package/dist/componentHandlers.test.js +380 -0
  5. package/{build → dist}/config.js +5 -5
  6. package/dist/index.js +53 -0
  7. package/{build → dist}/iressHandlers.js +52 -46
  8. package/dist/iressHandlers.test.js +316 -0
  9. package/{build → dist}/resourceHandlers.js +23 -22
  10. package/dist/resourceHandlers.test.js +352 -0
  11. package/{build → dist}/searchHandlers.js +107 -92
  12. package/dist/searchHandlers.test.js +524 -0
  13. package/{build → dist}/toolHandler.js +13 -13
  14. package/dist/toolHandler.test.js +369 -0
  15. package/dist/tools.js +165 -0
  16. package/{build → dist}/utils.js +11 -15
  17. package/dist/utils.test.js +286 -0
  18. package/{docs/ids → generated/docs}/components-autocomplete-docs.md +3 -3
  19. package/{docs/ids → generated/docs}/components-autocomplete-recipes-docs.md +17 -51
  20. package/{docs/ids → generated/docs}/components-card-recipes-docs.md +1 -1
  21. package/{docs/ids → generated/docs}/components-checkbox-docs.md +6 -19
  22. package/{docs/ids → generated/docs}/components-checkboxgroup-docs.md +18 -18
  23. package/{docs/ids → generated/docs}/components-checkboxgroup-recipes-docs.md +9 -9
  24. package/{docs/ids → generated/docs}/components-col-docs.md +1 -1
  25. package/{docs/ids → generated/docs}/components-combobox-docs.md +4 -4
  26. package/{docs/ids → generated/docs}/components-container-docs.md +8 -42
  27. package/{docs/ids → generated/docs}/components-filter-docs.md +14 -67
  28. package/{docs/ids → generated/docs}/components-form-docs.md +341 -335
  29. package/{docs/ids → generated/docs}/components-form-recipes-docs.md +198 -1
  30. package/{docs/ids → generated/docs}/components-hide-docs.md +16 -70
  31. package/{docs/ids → generated/docs}/components-icon-docs.md +4 -4
  32. package/{docs/ids → generated/docs}/components-input-recipes-docs.md +2 -2
  33. package/{docs/ids → generated/docs}/components-inputcurrency-recipes-docs.md +6 -40
  34. package/{docs/ids → generated/docs}/components-modal-docs.md +3 -113
  35. package/generated/docs/components-popover-docs.md +464 -0
  36. package/{docs/ids → generated/docs}/components-radiogroup-docs.md +21 -21
  37. package/{docs/ids → generated/docs}/components-richselect-docs.md +149 -111
  38. package/{docs/ids → generated/docs}/components-row-docs.md +4 -4
  39. package/{docs/ids → generated/docs}/components-skeleton-docs.md +3 -3
  40. package/{docs/ids → generated/docs}/components-skeleton-recipes-docs.md +1 -1
  41. package/{docs/ids → generated/docs}/components-skiplink-docs.md +1 -1
  42. package/{docs/ids → generated/docs}/components-slideout-docs.md +3 -113
  43. package/{docs/ids → generated/docs}/components-table-ag-grid-docs.md +109 -137
  44. package/{docs/ids → generated/docs}/components-table-docs.md +92 -597
  45. package/{docs/ids → generated/docs}/components-tabset-docs.md +2 -2
  46. package/{docs/ids → generated/docs}/components-tag-docs.md +1 -1
  47. package/{docs/ids → generated/docs}/components-toaster-docs.md +5 -5
  48. package/{docs/ids → generated/docs}/extensions-editor-docs.md +4 -4
  49. package/generated/docs/foundations-accessibility-docs.md +62 -0
  50. package/{docs/ids → generated/docs}/foundations-colours-docs.md +1 -1
  51. package/generated/docs/foundations-consistency-docs.md +52 -0
  52. package/generated/docs/foundations-content-docs.md +23 -0
  53. package/generated/docs/foundations-introduction-docs.md +17 -0
  54. package/generated/docs/foundations-principles-docs.md +70 -0
  55. package/{docs/ids → generated/docs}/foundations-typography-docs.md +7 -2
  56. package/generated/docs/foundations-user-experience-docs.md +63 -0
  57. package/generated/docs/foundations-visual-design-docs.md +46 -0
  58. package/{docs/ids → generated/docs}/get-started-develop-docs.md +3 -3
  59. package/generated/docs/guidelines.md +812 -0
  60. package/{docs/ids → generated/docs}/introduction-docs.md +4 -4
  61. package/{docs/ids → generated/docs}/patterns-loading-docs.md +332 -2
  62. package/generated/docs/resources-migration-guides-from-v4-to-v5-docs.md +437 -0
  63. package/generated/docs/themes-available-themes-docs.md +66 -0
  64. package/generated/docs/themes-tokens-docs.md +1200 -0
  65. package/generated/docs/versions-docs.md +17 -0
  66. package/package.json +42 -14
  67. package/LICENSE +0 -193
  68. package/build/componentHandlers.js +0 -205
  69. package/build/index.js +0 -51
  70. package/build/tools.js +0 -165
  71. package/docs/api-reference.md +0 -0
  72. package/docs/best-practices.md +0 -0
  73. package/docs/configuration.md +0 -0
  74. package/docs/examples.md +0 -0
  75. package/docs/guidelines.md +0 -269
  76. package/docs/ids/components-popover-docs.md +0 -4
  77. package/docs/ids/resources-migration-guides-from-v4-to-v5-docs.md +0 -639
  78. package/docs/ids/themes-available-themes-docs.md +0 -74
  79. package/docs/ids/themes-tokens-docs.md +0 -4580
  80. package/docs/ids/versions-docs.md +0 -27
  81. package/docs/tutorials/basic-integration.md +0 -0
  82. /package/{build → dist}/types.js +0 -0
  83. /package/{docs/ids → generated/docs}/components-alert-docs.md +0 -0
  84. /package/{docs/ids → generated/docs}/components-badge-docs.md +0 -0
  85. /package/{docs/ids → generated/docs}/components-button-docs.md +0 -0
  86. /package/{docs/ids → generated/docs}/components-button-recipes-docs.md +0 -0
  87. /package/{docs/ids → generated/docs}/components-buttongroup-docs.md +0 -0
  88. /package/{docs/ids → generated/docs}/components-card-docs.md +0 -0
  89. /package/{docs/ids → generated/docs}/components-divider-docs.md +0 -0
  90. /package/{docs/ids → generated/docs}/components-expander-docs.md +0 -0
  91. /package/{docs/ids → generated/docs}/components-field-docs.md +0 -0
  92. /package/{docs/ids → generated/docs}/components-inline-docs.md +0 -0
  93. /package/{docs/ids → generated/docs}/components-input-docs.md +0 -0
  94. /package/{docs/ids → generated/docs}/components-inputcurrency-docs.md +0 -0
  95. /package/{docs/ids → generated/docs}/components-label-docs.md +0 -0
  96. /package/{docs/ids → generated/docs}/components-menu-docs.md +0 -0
  97. /package/{docs/ids → generated/docs}/components-menu-menuitem-docs.md +0 -0
  98. /package/{docs/ids → generated/docs}/components-navbar-docs.md +0 -0
  99. /package/{docs/ids → generated/docs}/components-navbar-recipes-docs.md +0 -0
  100. /package/{docs/ids → generated/docs}/components-panel-docs.md +0 -0
  101. /package/{docs/ids → generated/docs}/components-placeholder-docs.md +0 -0
  102. /package/{docs/ids → generated/docs}/components-popover-recipes-docs.md +0 -0
  103. /package/{docs/ids → generated/docs}/components-progress-docs.md +0 -0
  104. /package/{docs/ids → generated/docs}/components-radio-docs.md +0 -0
  105. /package/{docs/ids → generated/docs}/components-readonly-docs.md +0 -0
  106. /package/{docs/ids → generated/docs}/components-select-docs.md +0 -0
  107. /package/{docs/ids → generated/docs}/components-slider-docs.md +0 -0
  108. /package/{docs/ids → generated/docs}/components-spinner-docs.md +0 -0
  109. /package/{docs/ids → generated/docs}/components-stack-docs.md +0 -0
  110. /package/{docs/ids → generated/docs}/components-tabset-tab-docs.md +0 -0
  111. /package/{docs/ids → generated/docs}/components-text-docs.md +0 -0
  112. /package/{docs/ids → generated/docs}/components-toaster-toast-docs.md +0 -0
  113. /package/{docs/ids → generated/docs}/components-toggle-docs.md +0 -0
  114. /package/{docs/ids → generated/docs}/components-tooltip-docs.md +0 -0
  115. /package/{docs/ids → generated/docs}/components-validationmessage-docs.md +0 -0
  116. /package/{docs/ids → generated/docs}/contact-us-docs.md +0 -0
  117. /package/{docs/ids → generated/docs}/extensions-editor-recipes-docs.md +0 -0
  118. /package/{docs/ids → generated/docs}/frequently-asked-questions-docs.md +0 -0
  119. /package/{docs/ids → generated/docs}/get-started-using-storybook-docs.md +0 -0
  120. /package/{docs/ids → generated/docs}/resources-changelog-docs.md +0 -0
  121. /package/{docs/ids → generated/docs}/resources-code-katas-docs.md +0 -0
  122. /package/{docs/ids → generated/docs}/themes-introduction-docs.md +0 -0
@@ -1,11 +1,11 @@
1
- [](#iress-design-system-ids)Iress Design System (IDS)
2
- =====================================================
1
+ [](#iress-design-system)Iress Design System
2
+ ===========================================
3
3
 
4
- 5.13.0
4
+ 5.14.2
5
5
 
6
6
  * * *
7
7
 
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.
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.
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/Users/ming.fang/code/design-system/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/mellisa.hankins/projects/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/Users/ming.fang/code/design-system/packages/components/src/patterns/Loading/mocks/retirement-graph.png)
257
+ ![](/@fs/Users/mellisa.hankins/projects/design-system/packages/components/src/patterns/Loading/mocks/retirement-graph.png)
258
258
 
259
259
  Update
260
260
 
@@ -607,6 +607,289 @@ 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
+
610
893
  [](#hooks)Hooks
611
894
  ---------------
612
895
 
@@ -641,6 +924,51 @@ else return <IressText\>Content is loaded</IressText\>;
641
924
 
642
925
  Copy
643
926
 
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
+
644
972
  [](#examples)Examples
645
973
  ---------------------
646
974
 
@@ -968,7 +1296,9 @@ On this page
968
1296
  * [page](#page)
969
1297
  * [start-up](#start-up)
970
1298
  * [validate](#validate)
1299
+ * [Suspense](#suspense)
971
1300
  * [Hooks](#hooks)
972
1301
  * [IressLoading.shouldRender](#iressloadingshouldrender)
1302
+ * [IressLoadingSuspense.use](#iressloadingsuspenseuse)
973
1303
  * [Examples](#examples)
974
1304
  * [Wizard](#wizard)