@qld-gov-au/qgds-bootstrap5 2.1.9 → 2.1.11

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 (182) hide show
  1. package/.esbuild/plugins/qgds-plugin-story-list-builder.js +112 -0
  2. package/.storybook/DocumentationTemplate.mdx +47 -0
  3. package/.storybook/addons/qgds-multi-code-panels/components/Panel.tsx +231 -0
  4. package/.storybook/addons/qgds-multi-code-panels/constants.js +8 -0
  5. package/.storybook/addons/qgds-multi-code-panels/manager.tsx +15 -0
  6. package/.storybook/addons/qgds-multi-code-panels/preset.js +12 -0
  7. package/.storybook/codeRefsDecorator.js +87 -0
  8. package/.storybook/customMDXComponents.jsx +284 -0
  9. package/.storybook/main.mjs +16 -11
  10. package/.storybook/manager.js +2 -2
  11. package/.storybook/preview.js +39 -1
  12. package/dist/assets/components/bs5/directionLinks/directionLinks.hbs +0 -1
  13. package/dist/assets/components/bs5/head/head.hbs +1 -1
  14. package/dist/assets/components/bs5/pagination/pagination.hbs +0 -7
  15. package/dist/assets/css/qld.bootstrap.css +2 -2
  16. package/dist/assets/css/qld.bootstrap.css.map +3 -3
  17. package/dist/assets/css/qld.bootstrap.legacy.css +2 -2
  18. package/dist/assets/css/qld.bootstrap.legacy.css.map +3 -3
  19. package/dist/assets/js/handlebars.helpers.bundle.js +1 -1
  20. package/dist/assets/js/handlebars.helpers.bundle.js.map +2 -2
  21. package/dist/assets/js/handlebars.init.min.js +3 -11
  22. package/dist/assets/js/handlebars.init.min.js.map +2 -2
  23. package/dist/assets/js/handlebars.partials.js +3 -11
  24. package/dist/assets/js/handlebars.partials.js.map +2 -2
  25. package/dist/assets/js/qld.bootstrap.min.js +1 -1
  26. package/dist/assets/node/handlebars.init.min.js +2 -10
  27. package/dist/assets/node/handlebars.init.min.js.map +2 -2
  28. package/dist/components/bs5/directionLinks/directionLinks.hbs +0 -1
  29. package/dist/components/bs5/head/head.hbs +1 -1
  30. package/dist/components/bs5/pagination/pagination.hbs +0 -7
  31. package/dist/package.json +8 -7
  32. package/dist/sample-data/sidenav/sidenav.data.json +1 -7
  33. package/esbuild.js +2 -0
  34. package/package.json +8 -7
  35. package/src/components/bs5/accordion/accordion.stories.js +6 -13
  36. package/src/components/bs5/accordion/metadata.json +15 -0
  37. package/src/components/bs5/backToTop/backToTop.stories.js +10 -14
  38. package/src/components/bs5/backToTop/manifest.json +15 -0
  39. package/src/components/bs5/backToTop/metadata.json +15 -0
  40. package/src/components/bs5/banner/banner.stories.js +16 -1
  41. package/src/components/bs5/banner/metadata.json +16 -0
  42. package/src/components/bs5/blockquote/blockquote.stories.js +20 -11
  43. package/src/components/bs5/blockquote/metadata.json +15 -0
  44. package/src/components/bs5/breadcrumbs/breadcrumbs.stories.js +6 -4
  45. package/src/components/bs5/breadcrumbs/metadata.json +16 -0
  46. package/src/components/bs5/button/button.stories.js +13 -5
  47. package/src/components/bs5/button/metadata.json +15 -0
  48. package/src/components/bs5/callToAction/callToAction.stories.js +6 -5
  49. package/src/components/bs5/callToAction/metadata.json +15 -0
  50. package/src/components/bs5/callout/callout.stories.js +6 -5
  51. package/src/components/bs5/callout/metadata.json +16 -0
  52. package/src/components/bs5/card/card--icon-list-footer.stories.js +4 -4
  53. package/src/components/bs5/card/card--multi-action.stories.js +6 -0
  54. package/src/components/bs5/card/card--no-action.stories.js +7 -0
  55. package/src/components/bs5/card/card--single-action.stories.js +7 -0
  56. package/src/components/bs5/card/metadata.json +15 -0
  57. package/src/components/bs5/containerLayout/containerLayout.stories.js +6 -0
  58. package/src/components/bs5/containerLayout/metadata.json +1 -0
  59. package/src/components/bs5/contentFooter/contentFooter.stories.js +26 -20
  60. package/src/components/bs5/contentFooter/metadata.json +15 -0
  61. package/src/components/bs5/correctincorrect/correctincorrect.stories.js +53 -38
  62. package/src/components/bs5/correctincorrect/metadata.json +14 -0
  63. package/src/components/bs5/dateinput/Dateinput.stories.js +6 -0
  64. package/src/components/bs5/dateinput/metadata.json +14 -0
  65. package/src/components/bs5/directionLinks/directionLinks.hbs +0 -1
  66. package/src/components/bs5/directionLinks/directionLinks.stories.js +4 -4
  67. package/src/components/bs5/directionLinks/metadata.json +16 -0
  68. package/src/components/bs5/footer/footer.stories.js +7 -1
  69. package/src/components/bs5/footer/metadata.json +15 -0
  70. package/src/components/bs5/formcheck/metadata.json +15 -0
  71. package/src/components/bs5/formcheck/stories/checkbox/checkbox.stories.js +5 -1
  72. package/src/components/bs5/formcheck/stories/radio/radio.stories.js +12 -1
  73. package/src/components/bs5/globalAlert/globalAlert.stories.js +9 -0
  74. package/src/components/bs5/globalAlert/metadata.json +15 -0
  75. package/src/components/bs5/head/head.stories.js +33 -14
  76. package/src/components/bs5/header/header.stories.js +10 -0
  77. package/src/components/bs5/header/metadata.json +15 -0
  78. package/src/components/bs5/icons/icons.stories.js +5 -0
  79. package/src/components/bs5/icons/metadata.json +15 -0
  80. package/src/components/bs5/image/image.stories.js +9 -0
  81. package/src/components/bs5/image/metadata.json +15 -0
  82. package/src/components/bs5/inpageAlert/inpageAlert.stories.js +9 -2
  83. package/src/components/bs5/inpageAlert/metadata.json +15 -0
  84. package/src/components/bs5/inpagenav/inpagenav.stories.js +8 -1
  85. package/src/components/bs5/inpagenav/metadata.json +15 -0
  86. package/src/components/bs5/link/link.stories.js +5 -5
  87. package/src/components/bs5/link/metadata.json +15 -0
  88. package/src/components/bs5/linkColumns/linkColumns.stories.js +4 -4
  89. package/src/components/bs5/linkColumns/metadata.json +15 -0
  90. package/src/components/bs5/logo/logo.stories.js +40 -5
  91. package/src/components/bs5/logo/metadata.json +16 -0
  92. package/src/components/bs5/metaDcTerms/metaDcTerms.stories.js +14 -9
  93. package/src/components/bs5/metaOpenGraph/metaOpenGraph.stories.js +14 -9
  94. package/src/components/bs5/modal/metadata.json +15 -0
  95. package/src/components/bs5/modal/modal.stories.js +64 -60
  96. package/src/components/bs5/navbar/metadata.json +15 -0
  97. package/src/components/bs5/navbar/navbar.stories.js +9 -4
  98. package/src/components/bs5/pageLayout/metadata.json +1 -0
  99. package/src/components/bs5/pageLayout/pageLayout.stories.js +1 -0
  100. package/src/components/bs5/pagination/metadata.json +15 -0
  101. package/src/components/bs5/pagination/pagination.hbs +0 -7
  102. package/src/components/bs5/pagination/pagination.stories.js +5 -0
  103. package/src/components/bs5/promotionalPanel/metadata.json +15 -0
  104. package/src/components/bs5/promotionalPanel/promotionalPanel.stories.js +4 -4
  105. package/src/components/bs5/quickexit/metadata.json +15 -0
  106. package/src/components/bs5/quickexit/quickexit.stories.js +7 -0
  107. package/src/components/bs5/searchInput/metadata.json +15 -0
  108. package/src/components/bs5/searchInput/searchInput.stories.js +5 -0
  109. package/src/components/bs5/select/Select.stories.js +8 -1
  110. package/src/components/bs5/select/metadata.json +15 -0
  111. package/src/components/bs5/sidenav/metadata.json +15 -0
  112. package/src/components/bs5/sidenav/sidenav.data.json +1 -7
  113. package/src/components/bs5/sidenav/sidenav.scss +5 -6
  114. package/src/components/bs5/sidenav/sidenav.stories.js +5 -0
  115. package/src/components/bs5/skiplinks/skipLinks.stories.js +5 -0
  116. package/src/components/bs5/spinner/Spinner.stories.js +8 -0
  117. package/src/components/bs5/spinner/metadata.json +15 -0
  118. package/src/components/bs5/table/metadata.json +15 -0
  119. package/src/components/bs5/table/table.stories.js +139 -61
  120. package/src/components/bs5/tabs/metadata.json +15 -0
  121. package/src/components/bs5/tabs/tabs.stories.js +8 -0
  122. package/src/components/bs5/tag/metadata.json +15 -0
  123. package/src/components/bs5/tag/tag--large.stories.js +7 -0
  124. package/src/components/bs5/tag/tag--standard.stories.js +12 -5
  125. package/src/components/bs5/tag/tag--status.stories.js +4 -0
  126. package/src/components/bs5/tag/tag.stories.js +10 -0
  127. package/src/components/bs5/textarea/Textarea.stories.js +8 -1
  128. package/src/components/bs5/textarea/metadata.json +15 -0
  129. package/src/components/bs5/textbox/Textbox.stories.js +11 -1
  130. package/src/components/bs5/textbox/metadata.json +15 -0
  131. package/src/components/bs5/typography/metadata.json +1 -0
  132. package/src/components/bs5/typography/typography.stories.js +4 -0
  133. package/src/components/bs5/video/metadata.json +15 -0
  134. package/src/components/bs5/video/video.stories.js +5 -5
  135. package/src/components/common/focus-styles/focusStyles.stories.js +13 -9
  136. package/src/js/QGDSComponent.js +0 -1
  137. package/src/js/handlebars.helpers.js +1 -0
  138. package/src/stories/Introduction/development.mdx +136 -0
  139. package/src/stories/Introduction/how-to-use.mdx +272 -0
  140. package/src/stories/Introduction.mdx +95 -13
  141. package/src/{components/bs5/accordion/Accordion.mdx → stories/archive/__Accordion.mdx} +3 -3
  142. package/src/stories/archive/__Blockquote.mdx +13 -0
  143. package/src/stories/archive/__BlockquoteCanvas.mdx +47 -0
  144. package/src/stories/archive/__backToTop.orig.mdx +13 -0
  145. package/src/stories/archive/__blockquote.stories.bak.js +132 -0
  146. package/src/stories/component-list.json +627 -0
  147. package/src/templates/data/component.metadata.template.json +15 -0
  148. package/src/templates/index.html +40 -37
  149. /package/src/{components/bs5/banner/Banner.mdx → stories/archive/__Banner.mdx} +0 -0
  150. /package/src/{components/bs5/blockquote/Blockquote.mdx → stories/archive/__Blockquote.bak.mdx} +0 -0
  151. /package/src/{components/bs5/breadcrumbs/Breadcrumbs.mdx → stories/archive/__Breadcrumbs.mdx} +0 -0
  152. /package/src/{components/bs5/button/Button.mdx → stories/archive/__Button.mdx} +0 -0
  153. /package/src/{components/bs5/callout/Callout.mdx → stories/archive/__Callout.mdx} +0 -0
  154. /package/src/{components/bs5/card/Card.mdx → stories/archive/__Card.mdx} +0 -0
  155. /package/src/{components/bs5/formcheck/stories/checkbox/Checkbox.mdx → stories/archive/__Checkbox.mdx} +0 -0
  156. /package/src/{components/bs5/dateinput/Dateinput.mdx → stories/archive/__Dateinput.mdx} +0 -0
  157. /package/src/{components/bs5/directionLinks/DirectionLinks.mdx → stories/archive/__DirectionLinks.mdx} +0 -0
  158. /package/src/{components/bs5/footer/Footer.mdx → stories/archive/__Footer.mdx} +0 -0
  159. /package/src/{components/bs5/globalAlert/GlobalAlert.mdx → stories/archive/__GlobalAlert.mdx} +0 -0
  160. /package/src/{components/bs5/header/Header.mdx → stories/archive/__Header.mdx} +0 -0
  161. /package/src/{components/bs5/image/Image.mdx → stories/archive/__Image.mdx} +0 -0
  162. /package/src/{components/bs5/inpageAlert/InpageAlert.mdx → stories/archive/__InpageAlert.mdx} +0 -0
  163. /package/src/{components/bs5/inpagenav/Inpagenav.mdx → stories/archive/__Inpagenav.mdx} +0 -0
  164. /package/src/{components/bs5/logo/Logo.mdx → stories/archive/__Logo.mdx} +0 -0
  165. /package/src/{components/bs5/modal/Modal.mdx → stories/archive/__Modal.mdx} +0 -0
  166. /package/src/{components/bs5/pagination/Pagination.mdx → stories/archive/__Pagination.mdx} +0 -0
  167. /package/src/{components/bs5/promotionalPanel/PromotionalPanel.mdx → stories/archive/__PromotionalPanel.mdx} +0 -0
  168. /package/src/{components/bs5/formcheck/stories/radio/Radio.mdx → stories/archive/__Radio.mdx} +0 -0
  169. /package/src/{components/bs5/searchInput/SearchInput.mdx → stories/archive/__SearchInput.mdx} +0 -0
  170. /package/src/{components/bs5/sidenav/Sidenav.mdx → stories/archive/__Sidenav.mdx} +0 -0
  171. /package/src/{components/bs5/skiplinks/SkipLinks.mdx → stories/archive/__SkipLinks.mdx} +0 -0
  172. /package/src/{components/bs5/table/Table.mdx → stories/archive/__Table.mdx} +0 -0
  173. /package/src/{components/bs5/tabs/Tabs.mdx → stories/archive/__Tabs.mdx} +0 -0
  174. /package/src/{components/bs5/tag/Tag.mdx → stories/archive/__Tag.mdx} +0 -0
  175. /package/src/{components/bs5/typography/Typography.mdx → stories/archive/__Typography.mdx} +0 -0
  176. /package/src/{components/bs5/video/Video.mdx → stories/archive/__Video.mdx} +0 -0
  177. /package/src/{components/bs5/backToTop/backToTop.mdx → stories/archive/__backToTop.mdx} +0 -0
  178. /package/src/{components/bs5/callToAction/callToAction.mdx → stories/archive/__callToAction.mdx} +0 -0
  179. /package/src/{components/bs5/accordion/mdx/_designResources.mdx → stories/archive/__designResources.mdx} +0 -0
  180. /package/src/{components/bs5/link/link.mdx → stories/archive/__link.mdx} +0 -0
  181. /package/src/{components/bs5/linkColumns/linkColumns.mdx → stories/archive/__linkColumns.mdx} +0 -0
  182. /package/src/{components/bs5/accordion/mdx/_usageInstructions.mdx → stories/archive/__usageInstructions.mdx} +0 -0
@@ -0,0 +1,284 @@
1
+ import { Source, useOf, Markdown } from "@storybook/addon-docs/blocks";
2
+ import React, { useState } from "react";
3
+
4
+ /* Custom MDX components for Storybook documentation pages.
5
+ * These components provide enhanced functionality for rendering
6
+ * code references, metadata, design resources, and notes sections.
7
+ */
8
+
9
+ /**
10
+ * Custom hook to fetch and provide documentation data from story parameters.
11
+ * This centralises data access for all custom MDX components.
12
+ * @returns {object} An object containing docs data like metadata, template, etc.
13
+ */
14
+ const useDocsData = () => {
15
+ // useOf must be called inside a functional component or another hook.
16
+ const resolvedOf = useOf("meta", ["meta"]);
17
+ const docs = resolvedOf.preparedMeta?.parameters?.docs || {};
18
+ const params = resolvedOf.preparedMeta?.parameters || {};
19
+
20
+ return {
21
+ componentMetadata:
22
+ docs.componentMetadata || params.coderefs?.metadata || {},
23
+ //codeReferences: docs.codeReferences,
24
+ notes: docs.notes || "",
25
+ hasData: (key) => docs[key] !== undefined && docs[key] !== null,
26
+ };
27
+ };
28
+
29
+ /**
30
+ * A simple wrapper for individual tab content.
31
+ * @param {object} props
32
+ * @param {string} props.label The text to display on the tab button.
33
+ * @param {React.ReactNode} props.children The content to render inside the tab panel.
34
+ */
35
+ export const Tab = ({ children }) => {
36
+ // This component is a simple wrapper and doesn't render anything on its own.
37
+ // The Tabs component will handle the rendering.
38
+ return <>{children}</>;
39
+ };
40
+
41
+ /**
42
+ * A container component that renders a tabbed interface.
43
+ * It uses the children's props to create tab buttons and panels.
44
+ * @param {object} props
45
+ * @param {React.ReactElement<typeof Tab>[]} props.children One or more <Tab> components.
46
+ */
47
+ export const Tabs = ({ title, children }) => {
48
+ const [activeTab, setActiveTab] = useState(0);
49
+ const tabs = React.Children.toArray(children).filter(
50
+ (child) => child.type === Tab,
51
+ );
52
+
53
+ return (
54
+ <div className="qgds-tabs-container d-flex" style={{ marginTop: "1.5rem" }}>
55
+ <div
56
+ className="qgds-tabs-nav"
57
+ style={{
58
+ borderRight: "1px solid #e0e0e0",
59
+ marginRight: "1rem",
60
+ display: "flex",
61
+ flexDirection: "column",
62
+ alignItems: "flex-start",
63
+ }}
64
+ >
65
+ {tabs.map((tab, index) => (
66
+ <button
67
+ key={index}
68
+ onClick={() => setActiveTab(index)}
69
+ style={{
70
+ padding: "0.75rem 1.25rem",
71
+ border: "none",
72
+ background: "transparent",
73
+ cursor: "pointer",
74
+ fontSize: "1rem",
75
+ fontWeight: activeTab === index ? "bold" : "normal",
76
+ color: activeTab === index ? "#005f8f" : "#333",
77
+ borderBottom:
78
+ activeTab === index
79
+ ? "3px solid #005f8f"
80
+ : "3px solid transparent",
81
+ marginBottom: "-1px",
82
+ }}
83
+ >
84
+ {tab.props.label}
85
+ </button>
86
+ ))}
87
+ </div>
88
+ <div className="qgds-tabs-content">{tabs[activeTab]}</div>
89
+ </div>
90
+ );
91
+ };
92
+
93
+ /**
94
+ * Conditional wrapper for code reference tabs with granular control
95
+ * @param {object} props
96
+ * @param {string} props.title - Title for the section
97
+ * @returns {JSX.Element|null}
98
+ */
99
+ export const CodeReferences = ({ title = "Code references" }) => {
100
+ const { codeReferences } = useDocsData();
101
+
102
+ // Don't render if no codeReferences array is provided
103
+ if (
104
+ !codeReferences ||
105
+ !Array.isArray(codeReferences) ||
106
+ codeReferences.length === 0
107
+ ) {
108
+ return null;
109
+ }
110
+
111
+ return (
112
+ <>
113
+ <h2 id="code-references">{title} 123</h2>
114
+ <Tabs>
115
+ {codeReferences.map((item, index) => {
116
+ // Handle different content types
117
+ let sourceContent;
118
+ let language = item.language || "text";
119
+ let label = item.label || `Tab ${index + 1}`;
120
+
121
+ if (item.language === "json" && typeof item.content === "object") {
122
+ // JSON objects need to be stringified
123
+ sourceContent = JSON.stringify(item.content, null, 2);
124
+ } else {
125
+ // For strings (handlebars, html, etc.) or other content
126
+ sourceContent = item.content;
127
+ }
128
+
129
+ return (
130
+ <Tab key={index} label={label}>
131
+ <Source
132
+ format="dedent"
133
+ dark
134
+ language={language}
135
+ code={sourceContent}
136
+ />
137
+ </Tab>
138
+ );
139
+ })}
140
+ </Tabs>
141
+ </>
142
+ );
143
+ };
144
+
145
+ /**
146
+ * Renders component metadata using QGDS tags for Category, Type and Status,
147
+ * and displays description as a paragraph.
148
+ * @returns {JSX.Element|null}
149
+ */
150
+ export const ComponentMeta = () => {
151
+ const { componentMetadata } = useDocsData();
152
+
153
+ if (!componentMetadata) return null;
154
+
155
+ const scope = componentMetadata.scope;
156
+ const type = componentMetadata.type;
157
+ const status = componentMetadata.status;
158
+ const description = componentMetadata.description;
159
+
160
+ // Don't render if no metadata fields are present
161
+ if (!scope && !type && !status && !description) {
162
+ return null;
163
+ }
164
+
165
+ return (
166
+ <div class="mb-32">
167
+ {/* Tags for Category, Type, and Status */}
168
+ {(scope || type || status) && (
169
+ <ul class="tag-list tag-status m-0 p-0 gap-2">
170
+ {scope && <li className="tag-item tag-neutral tag-high">{scope}</li>}
171
+ {type && <li className="tag-item tag-neutral tag-high">{type}</li>}
172
+ {status && (
173
+ <li className="tag-item tag-success tag-high">{status}</li>
174
+ )}
175
+ </ul>
176
+ )}
177
+
178
+ {/* Description as paragraph */}
179
+ {description && (
180
+ <p
181
+ class="pb-16 lead"
182
+ dangerouslySetInnerHTML={{ __html: description }}
183
+ ></p>
184
+ )}
185
+ </div>
186
+ );
187
+ };
188
+
189
+ /**
190
+ * Renders links to design resources like Figma.
191
+ * @returns {JSX.Element|null}
192
+ */
193
+ export const DesignResources = () => {
194
+ const { componentMetadata } = useDocsData();
195
+ const title_uikit = componentMetadata?.title_uikit || "";
196
+ const url_uikit = componentMetadata?.refs?.uikit || null;
197
+ const url_website = componentMetadata?.refs?.website || null;
198
+ const title = componentMetadata?.title || "this component";
199
+
200
+ if (!url_uikit && !url_website) return null;
201
+
202
+ return (
203
+ <>
204
+ <h2 className="mb-16" id="design-resources">
205
+ Design resources
206
+ </h2>
207
+
208
+ {/* Link to Figma */}
209
+ {url_uikit && (
210
+ <a
211
+ href={url_uikit}
212
+ target="_blank"
213
+ rel="noopener noreferrer"
214
+ style={{ display: "block", marginBottom: "0.5rem" }}
215
+ title={`View ${title_uikit} in the QGDS UI Kit (Figma)`}
216
+ >
217
+ Figma UI Kit
218
+ </a>
219
+ )}
220
+
221
+ {/* Link to Design System website */}
222
+ {url_website && (
223
+ <a
224
+ href={url_website}
225
+ target="_blank"
226
+ rel="noopener noreferrer"
227
+ style={{ display: "block", marginBottom: "0.5rem" }}
228
+ title={`View ${title} on Design System website`}
229
+ >
230
+ designsystem.qld.gov.au
231
+ </a>
232
+ )}
233
+ </>
234
+ );
235
+ };
236
+
237
+ /**
238
+ * Renders usage instructions, either default or custom markdown content.
239
+ * @param {object} props
240
+ * @param {string} props.title - The title/heading for this section
241
+ * @returns {JSX.Element|null}
242
+ */
243
+ export const Notes = ({ title = "Notes" }) => {
244
+ const { notes } = useDocsData();
245
+
246
+ // Hide the section entirely if explicitly set to false
247
+ if (notes?.show === false || notes?.trim() === "") return null;
248
+
249
+ return (
250
+ <>
251
+ <h2 id="notes">{title}</h2>
252
+ <Markdown>{notes}</Markdown>
253
+ </>
254
+ );
255
+ };
256
+
257
+ /**
258
+ * Renders instructions for accessing the Code References panel.
259
+ * @returns {JSX.Element}
260
+ */
261
+ export const CodeReferencesInstructions = ({ title = "Code references" }) => {
262
+ return (
263
+ <>
264
+ <h2 className="mb-16" id="code-references">
265
+ {title}
266
+ </h2>
267
+ <p>To view code examples, templates, and implementation details:</p>
268
+ <ol>
269
+ <li>Select any story from the sidebar</li>
270
+ <li>
271
+ Open the Actions panel by pressing <kbd>A</kbd>
272
+ </li>
273
+ <li>
274
+ Click the <strong>Code References</strong> tab
275
+ </li>
276
+ </ol>
277
+ <p>
278
+ The Code References panel provides access to Handlebars templates, JSON
279
+ data structures, rendered HTML output, and usage guidelines for each
280
+ component.
281
+ </p>
282
+ </>
283
+ );
284
+ };
@@ -2,10 +2,13 @@
2
2
  // Is an ESM module now
3
3
 
4
4
  import path from "path";
5
+ import { fileURLToPath } from "url";
6
+ import react from "@vitejs/plugin-react";
5
7
 
6
8
  const config = {
7
9
  stories: [
8
- "../src/stories/Introduction.mdx",
10
+ //"../src/stories/getting-started.mdx",
11
+ //"../src/stories/Introduction.mdx",
9
12
  // Include all stories found under the src/components directory ( For example: alert/alert.stories.js )
10
13
  // Exlude any stories starting with an underscore ( For example: _exludeme.stories.js )
11
14
  "../src/**/!(*_)*.mdx",
@@ -21,7 +24,7 @@ const config = {
21
24
  "@chromatic-com/storybook",
22
25
  "storybook-addon-deep-controls",
23
26
  "@storybook/addon-docs",
24
- "storybook-addon-tag-badges",
27
+ "./addons/qgds-multi-code-panels/preset.js",
25
28
  ],
26
29
 
27
30
  framework: {
@@ -45,8 +48,19 @@ const config = {
45
48
  //https://storybook.js.org/docs/api/main-config-vite-final
46
49
 
47
50
  viteFinal: async (config, { configType }) => {
51
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
52
+ const addonPath = path.resolve(__dirname, "addons");
53
+
48
54
  config.root = "./dist";
49
55
 
56
+ // Add React plugin for JSX transformation in QGDS addons
57
+ config.plugins = config.plugins || [];
58
+ config.plugins.push(
59
+ react({
60
+ include: [`${addonPath}/**/*.{js,jsx,ts,tsx}`],
61
+ }),
62
+ );
63
+
50
64
  // Define environment variables for the browser
51
65
  config.define = {
52
66
  ...config.define,
@@ -54,15 +68,6 @@ const config = {
54
68
  process.env.ENABLE_DYNAMIC_THEME === "true",
55
69
  ),
56
70
  };
57
- // config.plugins.push({
58
- // name: "html-transform",
59
- // transform(src, id) {
60
- // if (id.endsWith(".mustache") || id.endsWith(".html") || id.endsWith(".hbs")) {
61
- // // Transform your HTML files here (src is the file content as a string)
62
- // return src;
63
- // }
64
- // },
65
- // });
66
71
 
67
72
  config.server = {
68
73
  ...config.server,
@@ -1,5 +1,5 @@
1
1
  import { addons } from "storybook/internal/manager-api";
2
- import { defaultConfig } from "storybook-addon-tag-badges/manager-helpers";
2
+ //import { defaultConfig } from "storybook-addon-tag-badges/manager-helpers";
3
3
 
4
4
  /**
5
5
  * Custom badge configuration for QGDS component library
@@ -26,6 +26,6 @@ addons.setConfig({
26
26
  },
27
27
 
28
28
  // Include default badges from the addon (new, deprecated, experimental, etc.)
29
- ...defaultConfig,
29
+ //...defaultConfig,
30
30
  ],
31
31
  });
@@ -1,3 +1,18 @@
1
+ import * as React from "react";
2
+ import { useEffect } from "storybook/preview-api";
3
+ import { addons } from "storybook/preview-api";
4
+ import DocumentationTemplate from "./DocumentationTemplate.mdx";
5
+
6
+ import {
7
+ Title,
8
+ Subtitle,
9
+ Description,
10
+ Primary,
11
+ Controls,
12
+ Stories,
13
+ Markdown,
14
+ } from "@storybook/addon-docs/blocks";
15
+
1
16
  import "../node_modules/bootstrap/dist/js/bootstrap.bundle.min.js";
2
17
  import "../src/css/main.scss";
3
18
  import { withThemeByClassName } from "@storybook/addon-themes";
@@ -5,6 +20,8 @@ import {
5
20
  withDynamicTheme,
6
21
  dynamicThemeGlobalTypes,
7
22
  } from "./dynamicThemeDecorator.js";
23
+
24
+ import { withCodeRefs } from "./codeRefsDecorator.js";
8
25
  import { breakpoints } from "../src/js/constants.js";
9
26
 
10
27
  // Check if dynamic theme should be enabled via environment variable
@@ -90,9 +107,18 @@ const preview = {
90
107
  },
91
108
  },
92
109
  docs: {
110
+ page: DocumentationTemplate,
111
+ toc: {
112
+ disable: false,
113
+ headingSelector: "h2, h3",
114
+ title: "",
115
+ },
93
116
  source: {
94
117
  excludeDecorators: true,
118
+ state: "open",
119
+ type: "dynamic",
95
120
  },
121
+ codePanel: false,
96
122
  },
97
123
  backgrounds: {
98
124
  options: {
@@ -108,7 +134,13 @@ const preview = {
108
134
  storySort: {
109
135
  method: "alphabetical",
110
136
  // Set order of components in the Layout category
111
- order: ["*", ["Header", "Footer", "Breadcrumbs", "Side navigation"]],
137
+ order: [
138
+ "Welcome",
139
+ "Introduction",
140
+ ["How to use", "Development", "*"],
141
+ "*",
142
+ ["Header", "Footer", "Breadcrumbs", "Side navigation"],
143
+ ],
112
144
  },
113
145
  },
114
146
  a11y: {
@@ -128,7 +160,13 @@ const preview = {
128
160
  },
129
161
  },
130
162
 
163
+ sidebar: {
164
+ showRoots: false,
165
+ },
166
+
131
167
  decorators: [
168
+ withCodeRefs,
169
+
132
170
  ...(ENABLE_DYNAMIC_THEME ? [withDynamicTheme] : []),
133
171
  // data-bs-theme="dark" won't be used
134
172
  withThemeByClassName({
@@ -5,6 +5,5 @@
5
5
  {{~#if target}} target="{{target}}"{{/if~}}
6
6
  {{~#if arialabel}} aria-label="{{arialabel}}" {{/if~}}>
7
7
  {{{label}}}
8
- {{!-- <span class="icon" aria-hidden="true"></span> --}}
9
8
  <span class="qld-icon qld-icon-md qld-icon-arrow-{{class}}" aria-hidden="true"></span>
10
9
  </a>
@@ -1,5 +1,5 @@
1
1
 
2
- <!-- VERSION_DETAILS={"project_id":"@qld-gov-au/qgds-bootstrap5","version":"2.1.9","branch":"HEAD","tag":"v2.1.9","commit":"228f45b9dea4dd6674147c93a086038ac167746f","majorVersion":"v2"} -->
2
+ <!-- VERSION_DETAILS={"project_id":"@qld-gov-au/qgds-bootstrap5","version":"2.1.11","branch":"HEAD","tag":"v2.1.11","commit":"5a3e313339341709791de452b0963964578103a8","majorVersion":"v2"} -->
3
3
 
4
4
  {{! Select environment, used verbatium if not using predefind key
5
5
  cdn := PROD|STAGING|BETA|TEST|DEV|???
@@ -1,10 +1,3 @@
1
- {{!
2
- Component Name: QGDS QOL Pagination
3
- Component Version: 1.0
4
- Framework: Bootstrap 5.3
5
- Reference: https://getbootstrap.com/docs/5.0/components/pagination/
6
- }}
7
-
8
1
  <nav aria-label="{{ arialabel }}">
9
2
 
10
3
  <ul class="pagination">