@qld-gov-au/qgds-bootstrap5 2.1.10 → 2.1.12
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/.esbuild/plugins/qgds-plugin-clean-output-folders.js +2 -2
- package/.esbuild/plugins/qgds-plugin-story-list-builder.js +112 -0
- package/.storybook/DocumentationTemplate.mdx +47 -0
- package/.storybook/addons/qgds-multi-code-panels/components/Panel.tsx +231 -0
- package/.storybook/addons/qgds-multi-code-panels/constants.js +8 -0
- package/.storybook/addons/qgds-multi-code-panels/manager.tsx +15 -0
- package/.storybook/addons/qgds-multi-code-panels/preset.js +12 -0
- package/.storybook/codeRefsDecorator.js +87 -0
- package/.storybook/customMDXComponents.jsx +284 -0
- package/.storybook/main.mjs +16 -11
- package/.storybook/manager.js +2 -2
- package/.storybook/preview.js +39 -1
- package/dist/assets/components/bs5/directionLinks/directionLinks.hbs +0 -1
- package/dist/assets/components/bs5/head/head.hbs +1 -1
- package/dist/assets/components/bs5/pagination/pagination.hbs +0 -7
- package/dist/assets/components/bs5/searchInput/searchInput.hbs +1 -1
- package/dist/assets/css/qld.bootstrap.css +2 -2
- package/dist/assets/css/qld.bootstrap.css.map +3 -3
- package/dist/assets/css/qld.bootstrap.legacy.css +2 -2
- package/dist/assets/css/qld.bootstrap.legacy.css.map +3 -3
- package/dist/assets/js/handlebars.helpers.bundle.js +1 -1
- package/dist/assets/js/handlebars.helpers.bundle.js.map +2 -2
- package/dist/assets/js/handlebars.init.min.js +4 -12
- package/dist/assets/js/handlebars.init.min.js.map +2 -2
- package/dist/assets/js/handlebars.partials.js +4 -12
- package/dist/assets/js/handlebars.partials.js.map +2 -2
- package/dist/assets/js/qld.bootstrap.min.js +1 -1
- package/dist/assets/node/handlebars.init.min.js +3 -11
- package/dist/assets/node/handlebars.init.min.js.map +2 -2
- package/dist/components/bs5/directionLinks/directionLinks.hbs +0 -1
- package/dist/components/bs5/head/head.hbs +1 -1
- package/dist/components/bs5/pagination/pagination.hbs +0 -7
- package/dist/components/bs5/searchInput/searchInput.hbs +1 -1
- package/dist/package.json +6 -6
- package/esbuild.js +2 -0
- package/package.json +6 -6
- package/src/components/bs5/accordion/accordion.stories.js +6 -13
- package/src/components/bs5/accordion/metadata.json +15 -0
- package/src/components/bs5/backToTop/backToTop.stories.js +10 -14
- package/src/components/bs5/backToTop/manifest.json +15 -0
- package/src/components/bs5/backToTop/metadata.json +15 -0
- package/src/components/bs5/banner/banner.stories.js +16 -1
- package/src/components/bs5/banner/metadata.json +16 -0
- package/src/components/bs5/blockquote/blockquote.stories.js +20 -11
- package/src/components/bs5/blockquote/metadata.json +15 -0
- package/src/components/bs5/breadcrumbs/breadcrumbs.stories.js +6 -4
- package/src/components/bs5/breadcrumbs/metadata.json +16 -0
- package/src/components/bs5/button/button.stories.js +13 -5
- package/src/components/bs5/button/metadata.json +15 -0
- package/src/components/bs5/callToAction/callToAction.stories.js +6 -5
- package/src/components/bs5/callToAction/metadata.json +15 -0
- package/src/components/bs5/callout/callout.stories.js +6 -5
- package/src/components/bs5/callout/metadata.json +16 -0
- package/src/components/bs5/card/card--icon-list-footer.stories.js +4 -4
- package/src/components/bs5/card/card--multi-action.stories.js +6 -0
- package/src/components/bs5/card/card--no-action.stories.js +7 -0
- package/src/components/bs5/card/card--single-action.stories.js +7 -0
- package/src/components/bs5/card/metadata.json +15 -0
- package/src/components/bs5/containerLayout/containerLayout.stories.js +6 -0
- package/src/components/bs5/containerLayout/metadata.json +1 -0
- package/src/components/bs5/contentFooter/contentFooter.stories.js +26 -20
- package/src/components/bs5/contentFooter/metadata.json +15 -0
- package/src/components/bs5/correctincorrect/correctincorrect.stories.js +53 -38
- package/src/components/bs5/correctincorrect/metadata.json +14 -0
- package/src/components/bs5/dateinput/Dateinput.stories.js +6 -0
- package/src/components/bs5/dateinput/metadata.json +14 -0
- package/src/components/bs5/directionLinks/directionLinks.hbs +0 -1
- package/src/components/bs5/directionLinks/directionLinks.stories.js +4 -4
- package/src/components/bs5/directionLinks/metadata.json +16 -0
- package/src/components/bs5/footer/footer.stories.js +7 -1
- package/src/components/bs5/footer/metadata.json +15 -0
- package/src/components/bs5/formcheck/metadata.json +15 -0
- package/src/components/bs5/formcheck/stories/checkbox/checkbox.stories.js +5 -1
- package/src/components/bs5/formcheck/stories/radio/radio.stories.js +12 -1
- package/src/components/bs5/globalAlert/globalAlert.stories.js +9 -0
- package/src/components/bs5/globalAlert/metadata.json +15 -0
- package/src/components/bs5/head/head.stories.js +33 -14
- package/src/components/bs5/header/header.stories.js +10 -0
- package/src/components/bs5/header/metadata.json +15 -0
- package/src/components/bs5/icons/icons.stories.js +5 -0
- package/src/components/bs5/icons/metadata.json +15 -0
- package/src/components/bs5/image/image.stories.js +9 -0
- package/src/components/bs5/image/metadata.json +15 -0
- package/src/components/bs5/inpageAlert/inpageAlert.stories.js +9 -2
- package/src/components/bs5/inpageAlert/metadata.json +15 -0
- package/src/components/bs5/inpagenav/inpagenav.stories.js +8 -1
- package/src/components/bs5/inpagenav/metadata.json +15 -0
- package/src/components/bs5/link/link.stories.js +5 -5
- package/src/components/bs5/link/metadata.json +15 -0
- package/src/components/bs5/linkColumns/linkColumns.stories.js +4 -4
- package/src/components/bs5/linkColumns/metadata.json +15 -0
- package/src/components/bs5/logo/logo.stories.js +40 -5
- package/src/components/bs5/logo/metadata.json +16 -0
- package/src/components/bs5/metaDcTerms/metaDcTerms.stories.js +14 -9
- package/src/components/bs5/metaOpenGraph/metaOpenGraph.stories.js +14 -9
- package/src/components/bs5/modal/metadata.json +15 -0
- package/src/components/bs5/modal/modal.stories.js +64 -60
- package/src/components/bs5/navbar/metadata.json +15 -0
- package/src/components/bs5/navbar/navbar.stories.js +9 -4
- package/src/components/bs5/pageLayout/metadata.json +1 -0
- package/src/components/bs5/pageLayout/pageLayout.stories.js +1 -0
- package/src/components/bs5/pagination/metadata.json +15 -0
- package/src/components/bs5/pagination/pagination.hbs +0 -7
- package/src/components/bs5/pagination/pagination.stories.js +5 -0
- package/src/components/bs5/promotionalPanel/metadata.json +15 -0
- package/src/components/bs5/promotionalPanel/promotionalPanel.stories.js +4 -4
- package/src/components/bs5/quickexit/metadata.json +15 -0
- package/src/components/bs5/quickexit/quickexit.stories.js +7 -0
- package/src/components/bs5/searchInput/__snapshots__/searchInput.test.js.snap +4 -4
- package/src/components/bs5/searchInput/metadata.json +15 -0
- package/src/components/bs5/searchInput/searchInput.hbs +1 -1
- package/src/components/bs5/searchInput/searchInput.scss +88 -5
- package/src/components/bs5/searchInput/searchInput.stories.js +5 -0
- package/src/components/bs5/select/Select.stories.js +8 -1
- package/src/components/bs5/select/metadata.json +15 -0
- package/src/components/bs5/sidenav/metadata.json +15 -0
- package/src/components/bs5/sidenav/sidenav.stories.js +5 -0
- package/src/components/bs5/skiplinks/skipLinks.stories.js +5 -0
- package/src/components/bs5/spinner/Spinner.stories.js +8 -0
- package/src/components/bs5/spinner/metadata.json +15 -0
- package/src/components/bs5/table/metadata.json +15 -0
- package/src/components/bs5/table/table.stories.js +139 -61
- package/src/components/bs5/tabs/metadata.json +15 -0
- package/src/components/bs5/tabs/tabs.stories.js +8 -0
- package/src/components/bs5/tag/metadata.json +15 -0
- package/src/components/bs5/tag/tag--large.stories.js +7 -0
- package/src/components/bs5/tag/tag--standard.stories.js +12 -5
- package/src/components/bs5/tag/tag--status.stories.js +4 -0
- package/src/components/bs5/tag/tag.stories.js +10 -0
- package/src/components/bs5/textarea/Textarea.stories.js +8 -1
- package/src/components/bs5/textarea/metadata.json +15 -0
- package/src/components/bs5/textbox/Textbox.stories.js +11 -1
- package/src/components/bs5/textbox/metadata.json +15 -0
- package/src/components/bs5/typography/metadata.json +1 -0
- package/src/components/bs5/typography/typography.stories.js +4 -0
- package/src/components/bs5/video/metadata.json +15 -0
- package/src/components/bs5/video/video.stories.js +5 -5
- package/src/components/common/focus-styles/focusStyles.stories.js +13 -9
- package/src/js/QGDSComponent.js +0 -1
- package/src/js/handlebars.helpers.js +1 -0
- package/src/stories/Introduction/development.mdx +136 -0
- package/src/stories/Introduction/how-to-use.mdx +272 -0
- package/src/stories/Introduction.mdx +95 -13
- package/src/{components/bs5/accordion/Accordion.mdx → stories/archive/__Accordion.mdx} +3 -3
- package/src/stories/archive/__Blockquote.mdx +13 -0
- package/src/stories/archive/__BlockquoteCanvas.mdx +47 -0
- package/src/stories/archive/__backToTop.orig.mdx +13 -0
- package/src/stories/archive/__blockquote.stories.bak.js +132 -0
- package/src/stories/component-list.json +627 -0
- package/src/templates/data/component.metadata.template.json +15 -0
- package/src/templates/index.html +40 -37
- /package/src/{components/bs5/banner/Banner.mdx → stories/archive/__Banner.mdx} +0 -0
- /package/src/{components/bs5/blockquote/Blockquote.mdx → stories/archive/__Blockquote.bak.mdx} +0 -0
- /package/src/{components/bs5/breadcrumbs/Breadcrumbs.mdx → stories/archive/__Breadcrumbs.mdx} +0 -0
- /package/src/{components/bs5/button/Button.mdx → stories/archive/__Button.mdx} +0 -0
- /package/src/{components/bs5/callout/Callout.mdx → stories/archive/__Callout.mdx} +0 -0
- /package/src/{components/bs5/card/Card.mdx → stories/archive/__Card.mdx} +0 -0
- /package/src/{components/bs5/formcheck/stories/checkbox/Checkbox.mdx → stories/archive/__Checkbox.mdx} +0 -0
- /package/src/{components/bs5/dateinput/Dateinput.mdx → stories/archive/__Dateinput.mdx} +0 -0
- /package/src/{components/bs5/directionLinks/DirectionLinks.mdx → stories/archive/__DirectionLinks.mdx} +0 -0
- /package/src/{components/bs5/footer/Footer.mdx → stories/archive/__Footer.mdx} +0 -0
- /package/src/{components/bs5/globalAlert/GlobalAlert.mdx → stories/archive/__GlobalAlert.mdx} +0 -0
- /package/src/{components/bs5/header/Header.mdx → stories/archive/__Header.mdx} +0 -0
- /package/src/{components/bs5/image/Image.mdx → stories/archive/__Image.mdx} +0 -0
- /package/src/{components/bs5/inpageAlert/InpageAlert.mdx → stories/archive/__InpageAlert.mdx} +0 -0
- /package/src/{components/bs5/inpagenav/Inpagenav.mdx → stories/archive/__Inpagenav.mdx} +0 -0
- /package/src/{components/bs5/logo/Logo.mdx → stories/archive/__Logo.mdx} +0 -0
- /package/src/{components/bs5/modal/Modal.mdx → stories/archive/__Modal.mdx} +0 -0
- /package/src/{components/bs5/pagination/Pagination.mdx → stories/archive/__Pagination.mdx} +0 -0
- /package/src/{components/bs5/promotionalPanel/PromotionalPanel.mdx → stories/archive/__PromotionalPanel.mdx} +0 -0
- /package/src/{components/bs5/formcheck/stories/radio/Radio.mdx → stories/archive/__Radio.mdx} +0 -0
- /package/src/{components/bs5/searchInput/SearchInput.mdx → stories/archive/__SearchInput.mdx} +0 -0
- /package/src/{components/bs5/sidenav/Sidenav.mdx → stories/archive/__Sidenav.mdx} +0 -0
- /package/src/{components/bs5/skiplinks/SkipLinks.mdx → stories/archive/__SkipLinks.mdx} +0 -0
- /package/src/{components/bs5/table/Table.mdx → stories/archive/__Table.mdx} +0 -0
- /package/src/{components/bs5/tabs/Tabs.mdx → stories/archive/__Tabs.mdx} +0 -0
- /package/src/{components/bs5/tag/Tag.mdx → stories/archive/__Tag.mdx} +0 -0
- /package/src/{components/bs5/typography/Typography.mdx → stories/archive/__Typography.mdx} +0 -0
- /package/src/{components/bs5/video/Video.mdx → stories/archive/__Video.mdx} +0 -0
- /package/src/{components/bs5/backToTop/backToTop.mdx → stories/archive/__backToTop.mdx} +0 -0
- /package/src/{components/bs5/callToAction/callToAction.mdx → stories/archive/__callToAction.mdx} +0 -0
- /package/src/{components/bs5/accordion/mdx/_designResources.mdx → stories/archive/__designResources.mdx} +0 -0
- /package/src/{components/bs5/link/link.mdx → stories/archive/__link.mdx} +0 -0
- /package/src/{components/bs5/linkColumns/linkColumns.mdx → stories/archive/__linkColumns.mdx} +0 -0
- /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
|
+
};
|
package/.storybook/main.mjs
CHANGED
|
@@ -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/
|
|
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
|
-
"
|
|
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,
|
package/.storybook/manager.js
CHANGED
|
@@ -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
|
-
|
|
29
|
+
//...defaultConfig,
|
|
30
30
|
],
|
|
31
31
|
});
|
package/.storybook/preview.js
CHANGED
|
@@ -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: [
|
|
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.
|
|
2
|
+
<!-- VERSION_DETAILS={"project_id":"@qld-gov-au/qgds-bootstrap5","version":"2.1.12","branch":"HEAD","tag":"v2.1.12","commit":"3425f4ca4b635708eaac21dfd04e0d083568e99a","majorVersion":"v2"} -->
|
|
3
3
|
|
|
4
4
|
{{! Select environment, used verbatium if not using predefind key
|
|
5
5
|
cdn := PROD|STAGING|BETA|TEST|DEV|???
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
<strong class="suggestions-category-label d-block">{{defaultSuggestions.categoriesTitle}}</strong>
|
|
30
30
|
<ul>
|
|
31
31
|
{{#each defaultSuggestions.categories}}
|
|
32
|
-
<li><a tabindex="0"href="{{link}}">{{title}}</a></li>
|
|
32
|
+
<li><a tabindex="0" href="{{link}}">{{title}}</a></li>
|
|
33
33
|
{{/each}}
|
|
34
34
|
{{#if defaultSuggestions.categoriesLink}}
|
|
35
35
|
<li><a tabindex="0" href="{{defaultSuggestions.categoriesLink.href}}" class="view-more">{{#if defaultSuggestions.categoriesLink.label}}{{defaultSuggestions.categoriesLink.label}}{{else}}View More{{/if}}</a></li>
|