@genspectrum/dashboard-components 0.6.16 → 0.6.18
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/custom-elements.json +3 -3
- package/dist/dashboard-components.js +108 -110
- package/dist/dashboard-components.js.map +1 -1
- package/dist/genspectrum-components.d.ts +141 -25
- package/dist/style.css +107 -109
- package/package.json +3 -3
- package/src/preact/components/error-display.stories.tsx +2 -2
- package/src/web-components/app.ts +10 -0
- package/src/web-components/input/gs-date-range-selector.tsx +10 -0
- package/src/web-components/input/gs-lineage-filter.stories.ts +1 -1
- package/src/web-components/input/gs-lineage-filter.tsx +10 -0
- package/src/web-components/input/gs-location-filter.stories.ts +2 -2
- package/src/web-components/input/gs-location-filter.tsx +10 -0
- package/src/web-components/input/gs-mutation-filter.tsx +10 -0
- package/src/web-components/input/gs-text-input.stories.ts +1 -1
- package/src/web-components/input/gs-text-input.tsx +10 -0
- package/src/web-components/visualization/gs-aggregate.tsx +10 -0
- package/src/web-components/visualization/gs-mutation-comparison.tsx +10 -0
- package/src/web-components/visualization/gs-mutations-over-time.tsx +10 -0
- package/src/web-components/visualization/gs-mutations.tsx +10 -0
- package/src/web-components/visualization/gs-number-sequences-over-time.tsx +10 -0
- package/src/web-components/visualization/gs-prevalence-over-time.tsx +10 -0
- package/src/web-components/visualization/gs-relative-growth-advantage.tsx +10 -0
- package/standalone-bundle/dashboard-components.js +3128 -3116
- package/standalone-bundle/dashboard-components.js.map +1 -1
package/custom-elements.json
CHANGED
|
@@ -511,7 +511,7 @@
|
|
|
511
511
|
"type": {
|
|
512
512
|
"text": "StoryObj<Required<LineageFilterProps>>"
|
|
513
513
|
},
|
|
514
|
-
"default": "{ ...Default, play: async ({ canvasElement, step }) => { const canvas = await withinShadowRoot(canvasElement, 'gs-lineage-filter'); const inputField = () => canvas.getByPlaceholderText('Enter lineage'); const listenerMock = fn(); await step('Setup event listener mock', async () => { canvasElement.addEventListener('gs-lineage-filter-changed', listenerMock); }); await step('wait until data is loaded', async () => { await waitFor(() => { return expect(inputField()).toBeEnabled(); }); }); await step('Enters an invalid lineage value', async () => { await userEvent.type(inputField(), 'notInList'); await expect(listenerMock).not.toHaveBeenCalled(); }); await step('Empty input', async () => { await userEvent.type(inputField(), '{backspace>9/}'); await expect(listenerMock.mock.calls.at(-1)[0].detail).toStrictEqual({ pangoLineage: undefined, }); }); await step('Enter a valid lineage value', async () => { await userEvent.type(inputField(), 'B.1.1.7'); await expect(listenerMock).toHaveBeenCalledWith( expect.objectContaining({ detail: { pangoLineage: 'B.1.1.7', }, }), ); }); await step('Enter a valid lineage value', async () => { await userEvent.type(inputField(), '{backspace>9/}'); await userEvent.type(inputField(), 'B.1.1.7*'); await expect(listenerMock).toHaveBeenCalledWith( expect.objectContaining({ detail: { pangoLineage: 'B.1.1.7*', }, }), ); }); }, args: { ...Default.args, initialValue: '', }, }"
|
|
514
|
+
"default": "{ ...Default, play: async ({ canvasElement, step }) => { const canvas = await withinShadowRoot(canvasElement, 'gs-lineage-filter'); const inputField = () => canvas.getByPlaceholderText('Enter lineage'); const listenerMock = fn(); await step('Setup event listener mock', async () => { canvasElement.addEventListener('gs-lineage-filter-changed', listenerMock); }); await step('wait until data is loaded', async () => { await waitFor(() => { return expect(inputField()).toBeEnabled(); }); }); await step('Enters an invalid lineage value', async () => { await userEvent.type(inputField(), 'notInList'); await expect(listenerMock).not.toHaveBeenCalled(); }); await step('Empty input', async () => { await userEvent.type(inputField(), '{backspace>9/}'); await expect(listenerMock.mock.calls.at(-1)![0].detail).toStrictEqual({ pangoLineage: undefined, }); }); await step('Enter a valid lineage value', async () => { await userEvent.type(inputField(), 'B.1.1.7'); await expect(listenerMock).toHaveBeenCalledWith( expect.objectContaining({ detail: { pangoLineage: 'B.1.1.7', }, }), ); }); await step('Enter a valid lineage value', async () => { await userEvent.type(inputField(), '{backspace>9/}'); await userEvent.type(inputField(), 'B.1.1.7*'); await expect(listenerMock).toHaveBeenCalledWith( expect.objectContaining({ detail: { pangoLineage: 'B.1.1.7*', }, }), ); }); }, args: { ...Default.args, initialValue: '', }, }"
|
|
515
515
|
}
|
|
516
516
|
],
|
|
517
517
|
"exports": [
|
|
@@ -707,7 +707,7 @@
|
|
|
707
707
|
"type": {
|
|
708
708
|
"text": "StoryObj<LocationFilterProps>"
|
|
709
709
|
},
|
|
710
|
-
"default": "{ ...Template, parameters: { fetchMock: { mocks: [ { matcher: aggregatedEndpointMatcher, response: { status: 200, body: data, }, }, ], }, }, play: async ({ canvasElement, step }) => { const canvas = await withinShadowRoot(canvasElement, 'gs-location-filter'); const inputField = () => canvas.getByRole('combobox'); const listenerMock = fn(); await step('Setup event listener mock', async () => { canvasElement.addEventListener('gs-location-changed', listenerMock); }); await step('wait until data is loaded', async () => { await waitFor(() => { return expect(inputField()).toBeEnabled(); }); }); await step('Input invalid location', async () => { await userEvent.type(inputField(), 'Not / A / Location'); await expect(listenerMock).not.toHaveBeenCalled(); }); await step('Empty input', async () => { await userEvent.type(inputField(), '{backspace>18/}'); await expect(listenerMock.mock.calls.at(-1)[0].detail).toStrictEqual({ region: undefined, country: undefined, division: undefined, location: undefined, }); }); await step('Select Asia', async () => { await userEvent.type(inputField(), 'Asia'); await expect(listenerMock.mock.calls.at(-1)[0].detail).toStrictEqual({ region: 'Asia', country: undefined, division: undefined, location: undefined, }); }); await step('Select Asia / Bangladesh / Rajshahi / Chapainawabgonj', async () => { await userEvent.type(inputField(), ' / Bangladesh / Rajshahi / Chapainawabgonj'); await expect(listenerMock).toHaveBeenCalledWith( expect.objectContaining({ detail: { region: 'Asia', country: 'Bangladesh', division: 'Rajshahi', location: 'Chapainawabgonj', }, }), ); }); }, }"
|
|
710
|
+
"default": "{ ...Template, parameters: { fetchMock: { mocks: [ { matcher: aggregatedEndpointMatcher, response: { status: 200, body: data, }, }, ], }, }, play: async ({ canvasElement, step }) => { const canvas = await withinShadowRoot(canvasElement, 'gs-location-filter'); const inputField = () => canvas.getByRole('combobox'); const listenerMock = fn(); await step('Setup event listener mock', async () => { canvasElement.addEventListener('gs-location-changed', listenerMock); }); await step('wait until data is loaded', async () => { await waitFor(() => { return expect(inputField()).toBeEnabled(); }); }); await step('Input invalid location', async () => { await userEvent.type(inputField(), 'Not / A / Location'); await expect(listenerMock).not.toHaveBeenCalled(); }); await step('Empty input', async () => { await userEvent.type(inputField(), '{backspace>18/}'); await expect(listenerMock.mock.calls.at(-1)![0].detail).toStrictEqual({ region: undefined, country: undefined, division: undefined, location: undefined, }); }); await step('Select Asia', async () => { await userEvent.type(inputField(), 'Asia'); await expect(listenerMock.mock.calls.at(-1)![0].detail).toStrictEqual({ region: 'Asia', country: undefined, division: undefined, location: undefined, }); }); await step('Select Asia / Bangladesh / Rajshahi / Chapainawabgonj', async () => { await userEvent.type(inputField(), ' / Bangladesh / Rajshahi / Chapainawabgonj'); await expect(listenerMock).toHaveBeenCalledWith( expect.objectContaining({ detail: { region: 'Asia', country: 'Bangladesh', division: 'Rajshahi', location: 'Chapainawabgonj', }, }), ); }); }, }"
|
|
711
711
|
}
|
|
712
712
|
],
|
|
713
713
|
"exports": [
|
|
@@ -1084,7 +1084,7 @@
|
|
|
1084
1084
|
"type": {
|
|
1085
1085
|
"text": "StoryObj<Required<TextInputProps>>"
|
|
1086
1086
|
},
|
|
1087
|
-
"default": "{ ...Default, play: async ({ canvasElement, step }) => { const canvas = await withinShadowRoot(canvasElement, 'gs-text-input'); const inputField = () => canvas.getByPlaceholderText('Enter host name'); const listenerMock = fn(); await step('Setup event listener mock', async () => { canvasElement.addEventListener('gs-text-input-changed', listenerMock); }); await step('wait until data is loaded', async () => { await waitFor(() => { return expect(inputField()).toBeEnabled(); }); }); await step('Enters an invalid host name', async () => { await userEvent.type(inputField(), 'notInList'); await expect(listenerMock).not.toHaveBeenCalled(); }); await step('Empty input', async () => { await userEvent.type(inputField(), '{backspace>9/}'); await expect(listenerMock.mock.calls.at(-1)[0].detail).toStrictEqual({ host: undefined, }); }); await step('Enter a valid host name', async () => { await userEvent.type(inputField(), 'Homo'); await expect(listenerMock).toHaveBeenCalledWith( expect.objectContaining({ detail: { host: 'Homo', }, }), ); }); }, args: { ...Default.args, initialValue: '', }, }"
|
|
1087
|
+
"default": "{ ...Default, play: async ({ canvasElement, step }) => { const canvas = await withinShadowRoot(canvasElement, 'gs-text-input'); const inputField = () => canvas.getByPlaceholderText('Enter host name'); const listenerMock = fn(); await step('Setup event listener mock', async () => { canvasElement.addEventListener('gs-text-input-changed', listenerMock); }); await step('wait until data is loaded', async () => { await waitFor(() => { return expect(inputField()).toBeEnabled(); }); }); await step('Enters an invalid host name', async () => { await userEvent.type(inputField(), 'notInList'); await expect(listenerMock).not.toHaveBeenCalled(); }); await step('Empty input', async () => { await userEvent.type(inputField(), '{backspace>9/}'); await expect(listenerMock.mock.calls.at(-1)![0].detail).toStrictEqual({ host: undefined, }); }); await step('Enter a valid host name', async () => { await userEvent.type(inputField(), 'Homo'); await expect(listenerMock).toHaveBeenCalledWith( expect.objectContaining({ detail: { host: 'Homo', }, }), ); }); }, args: { ...Default.args, initialValue: '', }, }"
|
|
1088
1088
|
}
|
|
1089
1089
|
],
|
|
1090
1090
|
"exports": [
|
|
@@ -2059,8 +2059,114 @@ const Toolbar$5 = ({
|
|
|
2059
2059
|
};
|
|
2060
2060
|
const gridJsStyle = '.gridjs-head button, .gridjs-footer button {\n cursor: pointer;\n background-color: transparent;\n background-image: none;\n padding: 0;\n margin: 0;\n border: none;\n outline: none;\n}\n\n.gridjs-temp {\n position: relative;\n}\n\n.gridjs-head {\n width: 100%;\n margin-bottom: 5px;\n padding: 5px 1px;\n}\n.gridjs-head::after {\n content: "";\n display: block;\n clear: both;\n}\n.gridjs-head:empty {\n padding: 0;\n border: none;\n}\n\n.gridjs-container {\n overflow: hidden;\n display: inline-block;\n padding: 2px;\n color: #000;\n position: relative;\n z-index: 0;\n}\n\n.gridjs-footer {\n display: block;\n position: relative;\n width: 100%;\n z-index: 5;\n padding: 12px 24px;\n border-top: 1px solid #e5e7eb;\n background-color: #fff;\n box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.26);\n border-radius: 0 0 8px 8px;\n border-bottom-width: 1px;\n border-color: #e5e7eb;\n}\n.gridjs-footer:empty {\n padding: 0;\n border: none;\n}\n\ninput.gridjs-input {\n outline: none;\n background-color: #fff;\n border: 1px solid #d2d6dc;\n border-radius: 5px;\n padding: 10px 13px;\n font-size: 14px;\n line-height: 1.45;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\ninput.gridjs-input:focus {\n box-shadow: 0 0 0 3px rgba(149, 189, 243, 0.5);\n border-color: #9bc2f7;\n}\n\n.gridjs-pagination {\n color: #3d4044;\n}\n.gridjs-pagination::after {\n content: "";\n display: block;\n clear: both;\n}\n.gridjs-pagination .gridjs-summary {\n float: left;\n margin-top: 5px;\n}\n.gridjs-pagination .gridjs-pages {\n float: right;\n}\n.gridjs-pagination .gridjs-pages button {\n padding: 5px 14px;\n border: 1px solid #d2d6dc;\n background-color: #fff;\n border-right: none;\n outline: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n.gridjs-pagination .gridjs-pages button:focus {\n box-shadow: 0 0 0 2px rgba(149, 189, 243, 0.5);\n position: relative;\n margin-right: -1px;\n border-right: 1px solid #d2d6dc;\n}\n.gridjs-pagination .gridjs-pages button:hover {\n background-color: #f7f7f7;\n color: rgb(60, 66, 87);\n outline: none;\n}\n.gridjs-pagination .gridjs-pages button:disabled,\n.gridjs-pagination .gridjs-pages button[disabled],\n.gridjs-pagination .gridjs-pages button:hover:disabled {\n cursor: default;\n background-color: #fff;\n color: #6b7280;\n}\n.gridjs-pagination .gridjs-pages button.gridjs-spread {\n cursor: default;\n box-shadow: none;\n background-color: #fff;\n}\n.gridjs-pagination .gridjs-pages button.gridjs-currentPage {\n background-color: #f7f7f7;\n font-weight: bold;\n}\n.gridjs-pagination .gridjs-pages button:last-child {\n border-bottom-right-radius: 6px;\n border-top-right-radius: 6px;\n border-right: 1px solid #d2d6dc;\n}\n.gridjs-pagination .gridjs-pages button:first-child {\n border-bottom-left-radius: 6px;\n border-top-left-radius: 6px;\n}\n.gridjs-pagination .gridjs-pages button:last-child:focus {\n margin-right: 0;\n}\n\nbutton.gridjs-sort {\n float: right;\n height: 24px;\n width: 13px;\n background-color: transparent;\n background-repeat: no-repeat;\n background-position-x: center;\n cursor: pointer;\n padding: 0;\n margin: 0;\n border: none;\n outline: none;\n background-size: contain;\n}\nbutton.gridjs-sort-neutral {\n opacity: 0.3;\n background-image: url("data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHdpZHRoPSI0MDEuOTk4cHgiIGhlaWdodD0iNDAxLjk5OHB4IiB2aWV3Qm94PSIwIDAgNDAxLjk5OCA0MDEuOTk4IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA0MDEuOTk4IDQwMS45OTg7IgoJIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8Zz4KCTxnPgoJCTxwYXRoIGQ9Ik03My4wOTIsMTY0LjQ1MmgyNTUuODEzYzQuOTQ5LDAsOS4yMzMtMS44MDcsMTIuODQ4LTUuNDI0YzMuNjEzLTMuNjE2LDUuNDI3LTcuODk4LDUuNDI3LTEyLjg0NwoJCQljMC00Ljk0OS0xLjgxMy05LjIyOS01LjQyNy0xMi44NUwyMTMuODQ2LDUuNDI0QzIxMC4yMzIsMS44MTIsMjA1Ljk1MSwwLDIwMC45OTksMHMtOS4yMzMsMS44MTItMTIuODUsNS40MjRMNjAuMjQyLDEzMy4zMzEKCQkJYy0zLjYxNywzLjYxNy01LjQyNCw3LjkwMS01LjQyNCwxMi44NWMwLDQuOTQ4LDEuODA3LDkuMjMxLDUuNDI0LDEyLjg0N0M2My44NjMsMTYyLjY0NSw2OC4xNDQsMTY0LjQ1Miw3My4wOTIsMTY0LjQ1MnoiLz4KCQk8cGF0aCBkPSJNMzI4LjkwNSwyMzcuNTQ5SDczLjA5MmMtNC45NTIsMC05LjIzMywxLjgwOC0xMi44NSw1LjQyMWMtMy42MTcsMy42MTctNS40MjQsNy44OTgtNS40MjQsMTIuODQ3CgkJCWMwLDQuOTQ5LDEuODA3LDkuMjMzLDUuNDI0LDEyLjg0OEwxODguMTQ5LDM5Ni41N2MzLjYyMSwzLjYxNyw3LjkwMiw1LjQyOCwxMi44NSw1LjQyOHM5LjIzMy0xLjgxMSwxMi44NDctNS40MjhsMTI3LjkwNy0xMjcuOTA2CgkJCWMzLjYxMy0zLjYxNCw1LjQyNy03Ljg5OCw1LjQyNy0xMi44NDhjMC00Ljk0OC0xLjgxMy05LjIyOS01LjQyNy0xMi44NDdDMzM4LjEzOSwyMzkuMzUzLDMzMy44NTQsMjM3LjU0OSwzMjguOTA1LDIzNy41NDl6Ii8+Cgk8L2c+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPC9zdmc+");\n background-position-y: center;\n}\nbutton.gridjs-sort-asc {\n background-image: url("data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHdpZHRoPSIyOTIuMzYycHgiIGhlaWdodD0iMjkyLjM2MXB4IiB2aWV3Qm94PSIwIDAgMjkyLjM2MiAyOTIuMzYxIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAyOTIuMzYyIDI5Mi4zNjE7IgoJIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8Zz4KCTxwYXRoIGQ9Ik0yODYuOTM1LDE5Ny4yODdMMTU5LjAyOCw2OS4zODFjLTMuNjEzLTMuNjE3LTcuODk1LTUuNDI0LTEyLjg0Ny01LjQyNHMtOS4yMzMsMS44MDctMTIuODUsNS40MjRMNS40MjQsMTk3LjI4NwoJCUMxLjgwNywyMDAuOTA0LDAsMjA1LjE4NiwwLDIxMC4xMzRzMS44MDcsOS4yMzMsNS40MjQsMTIuODQ3YzMuNjIxLDMuNjE3LDcuOTAyLDUuNDI1LDEyLjg1LDUuNDI1aDI1NS44MTMKCQljNC45NDksMCw5LjIzMy0xLjgwOCwxMi44NDgtNS40MjVjMy42MTMtMy42MTMsNS40MjctNy44OTgsNS40MjctMTIuODQ3UzI5MC41NDgsMjAwLjkwNCwyODYuOTM1LDE5Ny4yODd6Ii8+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPC9zdmc+");\n background-position-y: 35%;\n background-size: 10px;\n}\nbutton.gridjs-sort-desc {\n background-image: url("data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHdpZHRoPSIyOTIuMzYycHgiIGhlaWdodD0iMjkyLjM2MnB4IiB2aWV3Qm94PSIwIDAgMjkyLjM2MiAyOTIuMzYyIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAyOTIuMzYyIDI5Mi4zNjI7IgoJIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8Zz4KCTxwYXRoIGQ9Ik0yODYuOTM1LDY5LjM3N2MtMy42MTQtMy42MTctNy44OTgtNS40MjQtMTIuODQ4LTUuNDI0SDE4LjI3NGMtNC45NTIsMC05LjIzMywxLjgwNy0xMi44NSw1LjQyNAoJCUMxLjgwNyw3Mi45OTgsMCw3Ny4yNzksMCw4Mi4yMjhjMCw0Ljk0OCwxLjgwNyw5LjIyOSw1LjQyNCwxMi44NDdsMTI3LjkwNywxMjcuOTA3YzMuNjIxLDMuNjE3LDcuOTAyLDUuNDI4LDEyLjg1LDUuNDI4CgkJczkuMjMzLTEuODExLDEyLjg0Ny01LjQyOEwyODYuOTM1LDk1LjA3NGMzLjYxMy0zLjYxNyw1LjQyNy03Ljg5OCw1LjQyNy0xMi44NDdDMjkyLjM2Miw3Ny4yNzksMjkwLjU0OCw3Mi45OTgsMjg2LjkzNSw2OS4zNzd6Ii8+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPC9zdmc+");\n background-position-y: 65%;\n background-size: 10px;\n}\nbutton.gridjs-sort:focus {\n outline: none;\n}\n\ntable.gridjs-table {\n width: 100%;\n max-width: 100%;\n border-collapse: collapse;\n text-align: left;\n display: table;\n margin: 0;\n padding: 0;\n overflow: auto;\n table-layout: fixed;\n}\n\n.gridjs-tbody {\n background-color: #fff;\n}\n\ntd.gridjs-td {\n border: 1px solid #e5e7eb;\n padding: 12px 24px;\n background-color: #fff;\n box-sizing: content-box;\n}\ntd.gridjs-td:first-child {\n border-left: none;\n}\ntd.gridjs-td:last-child {\n border-right: none;\n}\ntd.gridjs-message {\n text-align: center;\n}\n\nth.gridjs-th {\n position: relative;\n color: #6b7280;\n background-color: #f9fafb;\n border: 1px solid #e5e7eb;\n border-top: none;\n padding: 14px 24px;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n box-sizing: border-box;\n white-space: nowrap;\n outline: none;\n vertical-align: middle;\n}\nth.gridjs-th .gridjs-th-content {\n text-overflow: ellipsis;\n overflow: hidden;\n width: 100%;\n float: left;\n}\nth.gridjs-th-sort {\n cursor: pointer;\n}\nth.gridjs-th-sort .gridjs-th-content {\n width: calc(100% - 15px);\n}\nth.gridjs-th-sort:hover {\n background-color: #e5e7eb;\n}\nth.gridjs-th-sort:focus {\n background-color: #e5e7eb;\n}\nth.gridjs-th-fixed {\n position: sticky;\n box-shadow: 0 1px 0 0 #e5e7eb;\n}\n@supports (-moz-appearance: none) {\n th.gridjs-th-fixed {\n box-shadow: 0 0 0 1px #e5e7eb;\n }\n}\nth.gridjs-th:first-child {\n border-left: none;\n}\nth.gridjs-th:last-child {\n border-right: none;\n}\n\n.gridjs-tr {\n border: none;\n}\n.gridjs-tr-selected td {\n background-color: #ebf5ff;\n}\n.gridjs-tr:last-child td {\n border-bottom: 0;\n}\n\n.gridjs *,\n.gridjs :after,\n.gridjs :before {\n box-sizing: border-box;\n}\n\n.gridjs-wrapper {\n position: relative;\n z-index: 1;\n overflow: auto;\n width: 100%;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.26);\n border-radius: 8px 8px 0 0;\n display: block;\n border-top-width: 1px;\n border-color: #e5e7eb;\n}\n.gridjs-wrapper:nth-last-of-type(2) {\n border-radius: 8px;\n border-bottom-width: 1px;\n}\n\n.gridjs-search {\n float: left;\n}\n.gridjs-search-input {\n width: 250px;\n}\n\n.gridjs-loading-bar {\n z-index: 10;\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n background-color: #fff;\n opacity: 0.5;\n}\n.gridjs-loading-bar::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n transform: translateX(-100%);\n background-image: linear-gradient(90deg, rgba(204, 204, 204, 0) 0, rgba(204, 204, 204, 0.2) 20%, rgba(204, 204, 204, 0.5) 60%, rgba(204, 204, 204, 0));\n animation: shimmer 2s infinite;\n content: "";\n}\n@keyframes shimmer {\n 100% {\n transform: translateX(100%);\n }\n}\n\n.gridjs-td .gridjs-checkbox {\n display: block;\n margin: auto;\n cursor: pointer;\n}\n\n.gridjs-resizable {\n position: absolute;\n top: 0;\n bottom: 0;\n right: 0;\n width: 5px;\n}\n.gridjs-resizable:hover {\n cursor: ew-resize;\n background-color: #9bc2f7;\n}\n/*# sourceMappingURL=mermaid.css?inline.map */';
|
|
2061
2061
|
const minMaxPercentSliderCss = 'input[type=range]::-webkit-slider-thumb {\n -webkit-appearance: none;\n pointer-events: all;\n width: 24px;\n height: 24px;\n background-color: #fff;\n border-radius: 50%;\n box-shadow: 0 0 0 1px #C6C6C6;\n cursor: pointer;\n}\n\ninput[type=range]::-moz-range-thumb {\n -webkit-appearance: none;\n pointer-events: all;\n width: 24px;\n height: 24px;\n background-color: #fff;\n border-radius: 50%;\n box-shadow: 0 0 0 1px #C6C6C6;\n cursor: pointer;\n}\n\ninput[type=range]::-webkit-slider-thumb:hover {\n background: #f7f7f7;\n}\n\ninput[type=range]::-webkit-slider-thumb:active {\n box-shadow: inset 0 0 3px #387bbe, 0 0 9px #387bbe;\n -webkit-box-shadow: inset 0 0 3px #387bbe, 0 0 9px #387bbe;\n}\n\ninput[type="range"] {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n height: 2px;\n width: 100%;\n position: absolute;\n background-color: #C6C6C6;\n pointer-events: none;\n}';
|
|
2062
|
-
const tailwindStyle =
|
|
2063
|
-
|
|
2062
|
+
const tailwindStyle = `*, ::before, ::after {
|
|
2063
|
+
--tw-border-spacing-x: 0;
|
|
2064
|
+
--tw-border-spacing-y: 0;
|
|
2065
|
+
--tw-translate-x: 0;
|
|
2066
|
+
--tw-translate-y: 0;
|
|
2067
|
+
--tw-rotate: 0;
|
|
2068
|
+
--tw-skew-x: 0;
|
|
2069
|
+
--tw-skew-y: 0;
|
|
2070
|
+
--tw-scale-x: 1;
|
|
2071
|
+
--tw-scale-y: 1;
|
|
2072
|
+
--tw-pan-x: ;
|
|
2073
|
+
--tw-pan-y: ;
|
|
2074
|
+
--tw-pinch-zoom: ;
|
|
2075
|
+
--tw-scroll-snap-strictness: proximity;
|
|
2076
|
+
--tw-gradient-from-position: ;
|
|
2077
|
+
--tw-gradient-via-position: ;
|
|
2078
|
+
--tw-gradient-to-position: ;
|
|
2079
|
+
--tw-ordinal: ;
|
|
2080
|
+
--tw-slashed-zero: ;
|
|
2081
|
+
--tw-numeric-figure: ;
|
|
2082
|
+
--tw-numeric-spacing: ;
|
|
2083
|
+
--tw-numeric-fraction: ;
|
|
2084
|
+
--tw-ring-inset: ;
|
|
2085
|
+
--tw-ring-offset-width: 0px;
|
|
2086
|
+
--tw-ring-offset-color: #fff;
|
|
2087
|
+
--tw-ring-color: rgb(59 130 246 / 0.5);
|
|
2088
|
+
--tw-ring-offset-shadow: 0 0 #0000;
|
|
2089
|
+
--tw-ring-shadow: 0 0 #0000;
|
|
2090
|
+
--tw-shadow: 0 0 #0000;
|
|
2091
|
+
--tw-shadow-colored: 0 0 #0000;
|
|
2092
|
+
--tw-blur: ;
|
|
2093
|
+
--tw-brightness: ;
|
|
2094
|
+
--tw-contrast: ;
|
|
2095
|
+
--tw-grayscale: ;
|
|
2096
|
+
--tw-hue-rotate: ;
|
|
2097
|
+
--tw-invert: ;
|
|
2098
|
+
--tw-saturate: ;
|
|
2099
|
+
--tw-sepia: ;
|
|
2100
|
+
--tw-drop-shadow: ;
|
|
2101
|
+
--tw-backdrop-blur: ;
|
|
2102
|
+
--tw-backdrop-brightness: ;
|
|
2103
|
+
--tw-backdrop-contrast: ;
|
|
2104
|
+
--tw-backdrop-grayscale: ;
|
|
2105
|
+
--tw-backdrop-hue-rotate: ;
|
|
2106
|
+
--tw-backdrop-invert: ;
|
|
2107
|
+
--tw-backdrop-opacity: ;
|
|
2108
|
+
--tw-backdrop-saturate: ;
|
|
2109
|
+
--tw-backdrop-sepia: ;
|
|
2110
|
+
--tw-contain-size: ;
|
|
2111
|
+
--tw-contain-layout: ;
|
|
2112
|
+
--tw-contain-paint: ;
|
|
2113
|
+
--tw-contain-style: ;
|
|
2114
|
+
}
|
|
2115
|
+
|
|
2116
|
+
::backdrop {
|
|
2117
|
+
--tw-border-spacing-x: 0;
|
|
2118
|
+
--tw-border-spacing-y: 0;
|
|
2119
|
+
--tw-translate-x: 0;
|
|
2120
|
+
--tw-translate-y: 0;
|
|
2121
|
+
--tw-rotate: 0;
|
|
2122
|
+
--tw-skew-x: 0;
|
|
2123
|
+
--tw-skew-y: 0;
|
|
2124
|
+
--tw-scale-x: 1;
|
|
2125
|
+
--tw-scale-y: 1;
|
|
2126
|
+
--tw-pan-x: ;
|
|
2127
|
+
--tw-pan-y: ;
|
|
2128
|
+
--tw-pinch-zoom: ;
|
|
2129
|
+
--tw-scroll-snap-strictness: proximity;
|
|
2130
|
+
--tw-gradient-from-position: ;
|
|
2131
|
+
--tw-gradient-via-position: ;
|
|
2132
|
+
--tw-gradient-to-position: ;
|
|
2133
|
+
--tw-ordinal: ;
|
|
2134
|
+
--tw-slashed-zero: ;
|
|
2135
|
+
--tw-numeric-figure: ;
|
|
2136
|
+
--tw-numeric-spacing: ;
|
|
2137
|
+
--tw-numeric-fraction: ;
|
|
2138
|
+
--tw-ring-inset: ;
|
|
2139
|
+
--tw-ring-offset-width: 0px;
|
|
2140
|
+
--tw-ring-offset-color: #fff;
|
|
2141
|
+
--tw-ring-color: rgb(59 130 246 / 0.5);
|
|
2142
|
+
--tw-ring-offset-shadow: 0 0 #0000;
|
|
2143
|
+
--tw-ring-shadow: 0 0 #0000;
|
|
2144
|
+
--tw-shadow: 0 0 #0000;
|
|
2145
|
+
--tw-shadow-colored: 0 0 #0000;
|
|
2146
|
+
--tw-blur: ;
|
|
2147
|
+
--tw-brightness: ;
|
|
2148
|
+
--tw-contrast: ;
|
|
2149
|
+
--tw-grayscale: ;
|
|
2150
|
+
--tw-hue-rotate: ;
|
|
2151
|
+
--tw-invert: ;
|
|
2152
|
+
--tw-saturate: ;
|
|
2153
|
+
--tw-sepia: ;
|
|
2154
|
+
--tw-drop-shadow: ;
|
|
2155
|
+
--tw-backdrop-blur: ;
|
|
2156
|
+
--tw-backdrop-brightness: ;
|
|
2157
|
+
--tw-backdrop-contrast: ;
|
|
2158
|
+
--tw-backdrop-grayscale: ;
|
|
2159
|
+
--tw-backdrop-hue-rotate: ;
|
|
2160
|
+
--tw-backdrop-invert: ;
|
|
2161
|
+
--tw-backdrop-opacity: ;
|
|
2162
|
+
--tw-backdrop-saturate: ;
|
|
2163
|
+
--tw-backdrop-sepia: ;
|
|
2164
|
+
--tw-contain-size: ;
|
|
2165
|
+
--tw-contain-layout: ;
|
|
2166
|
+
--tw-contain-paint: ;
|
|
2167
|
+
--tw-contain-style: ;
|
|
2168
|
+
}/*
|
|
2169
|
+
! tailwindcss v3.4.13 | MIT License | https://tailwindcss.com
|
|
2064
2170
|
*//*
|
|
2065
2171
|
1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
|
|
2066
2172
|
2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
|
|
@@ -2559,114 +2665,6 @@ html {
|
|
|
2559
2665
|
--b3: 92.4169% 0.00108 197.137559;
|
|
2560
2666
|
--bc: 27.8078% 0.029596 256.847952;
|
|
2561
2667
|
}
|
|
2562
|
-
|
|
2563
|
-
*, ::before, ::after {
|
|
2564
|
-
--tw-border-spacing-x: 0;
|
|
2565
|
-
--tw-border-spacing-y: 0;
|
|
2566
|
-
--tw-translate-x: 0;
|
|
2567
|
-
--tw-translate-y: 0;
|
|
2568
|
-
--tw-rotate: 0;
|
|
2569
|
-
--tw-skew-x: 0;
|
|
2570
|
-
--tw-skew-y: 0;
|
|
2571
|
-
--tw-scale-x: 1;
|
|
2572
|
-
--tw-scale-y: 1;
|
|
2573
|
-
--tw-pan-x: ;
|
|
2574
|
-
--tw-pan-y: ;
|
|
2575
|
-
--tw-pinch-zoom: ;
|
|
2576
|
-
--tw-scroll-snap-strictness: proximity;
|
|
2577
|
-
--tw-gradient-from-position: ;
|
|
2578
|
-
--tw-gradient-via-position: ;
|
|
2579
|
-
--tw-gradient-to-position: ;
|
|
2580
|
-
--tw-ordinal: ;
|
|
2581
|
-
--tw-slashed-zero: ;
|
|
2582
|
-
--tw-numeric-figure: ;
|
|
2583
|
-
--tw-numeric-spacing: ;
|
|
2584
|
-
--tw-numeric-fraction: ;
|
|
2585
|
-
--tw-ring-inset: ;
|
|
2586
|
-
--tw-ring-offset-width: 0px;
|
|
2587
|
-
--tw-ring-offset-color: #fff;
|
|
2588
|
-
--tw-ring-color: rgb(59 130 246 / 0.5);
|
|
2589
|
-
--tw-ring-offset-shadow: 0 0 #0000;
|
|
2590
|
-
--tw-ring-shadow: 0 0 #0000;
|
|
2591
|
-
--tw-shadow: 0 0 #0000;
|
|
2592
|
-
--tw-shadow-colored: 0 0 #0000;
|
|
2593
|
-
--tw-blur: ;
|
|
2594
|
-
--tw-brightness: ;
|
|
2595
|
-
--tw-contrast: ;
|
|
2596
|
-
--tw-grayscale: ;
|
|
2597
|
-
--tw-hue-rotate: ;
|
|
2598
|
-
--tw-invert: ;
|
|
2599
|
-
--tw-saturate: ;
|
|
2600
|
-
--tw-sepia: ;
|
|
2601
|
-
--tw-drop-shadow: ;
|
|
2602
|
-
--tw-backdrop-blur: ;
|
|
2603
|
-
--tw-backdrop-brightness: ;
|
|
2604
|
-
--tw-backdrop-contrast: ;
|
|
2605
|
-
--tw-backdrop-grayscale: ;
|
|
2606
|
-
--tw-backdrop-hue-rotate: ;
|
|
2607
|
-
--tw-backdrop-invert: ;
|
|
2608
|
-
--tw-backdrop-opacity: ;
|
|
2609
|
-
--tw-backdrop-saturate: ;
|
|
2610
|
-
--tw-backdrop-sepia: ;
|
|
2611
|
-
--tw-contain-size: ;
|
|
2612
|
-
--tw-contain-layout: ;
|
|
2613
|
-
--tw-contain-paint: ;
|
|
2614
|
-
--tw-contain-style: ;
|
|
2615
|
-
}
|
|
2616
|
-
|
|
2617
|
-
::backdrop {
|
|
2618
|
-
--tw-border-spacing-x: 0;
|
|
2619
|
-
--tw-border-spacing-y: 0;
|
|
2620
|
-
--tw-translate-x: 0;
|
|
2621
|
-
--tw-translate-y: 0;
|
|
2622
|
-
--tw-rotate: 0;
|
|
2623
|
-
--tw-skew-x: 0;
|
|
2624
|
-
--tw-skew-y: 0;
|
|
2625
|
-
--tw-scale-x: 1;
|
|
2626
|
-
--tw-scale-y: 1;
|
|
2627
|
-
--tw-pan-x: ;
|
|
2628
|
-
--tw-pan-y: ;
|
|
2629
|
-
--tw-pinch-zoom: ;
|
|
2630
|
-
--tw-scroll-snap-strictness: proximity;
|
|
2631
|
-
--tw-gradient-from-position: ;
|
|
2632
|
-
--tw-gradient-via-position: ;
|
|
2633
|
-
--tw-gradient-to-position: ;
|
|
2634
|
-
--tw-ordinal: ;
|
|
2635
|
-
--tw-slashed-zero: ;
|
|
2636
|
-
--tw-numeric-figure: ;
|
|
2637
|
-
--tw-numeric-spacing: ;
|
|
2638
|
-
--tw-numeric-fraction: ;
|
|
2639
|
-
--tw-ring-inset: ;
|
|
2640
|
-
--tw-ring-offset-width: 0px;
|
|
2641
|
-
--tw-ring-offset-color: #fff;
|
|
2642
|
-
--tw-ring-color: rgb(59 130 246 / 0.5);
|
|
2643
|
-
--tw-ring-offset-shadow: 0 0 #0000;
|
|
2644
|
-
--tw-ring-shadow: 0 0 #0000;
|
|
2645
|
-
--tw-shadow: 0 0 #0000;
|
|
2646
|
-
--tw-shadow-colored: 0 0 #0000;
|
|
2647
|
-
--tw-blur: ;
|
|
2648
|
-
--tw-brightness: ;
|
|
2649
|
-
--tw-contrast: ;
|
|
2650
|
-
--tw-grayscale: ;
|
|
2651
|
-
--tw-hue-rotate: ;
|
|
2652
|
-
--tw-invert: ;
|
|
2653
|
-
--tw-saturate: ;
|
|
2654
|
-
--tw-sepia: ;
|
|
2655
|
-
--tw-drop-shadow: ;
|
|
2656
|
-
--tw-backdrop-blur: ;
|
|
2657
|
-
--tw-backdrop-brightness: ;
|
|
2658
|
-
--tw-backdrop-contrast: ;
|
|
2659
|
-
--tw-backdrop-grayscale: ;
|
|
2660
|
-
--tw-backdrop-hue-rotate: ;
|
|
2661
|
-
--tw-backdrop-invert: ;
|
|
2662
|
-
--tw-backdrop-opacity: ;
|
|
2663
|
-
--tw-backdrop-saturate: ;
|
|
2664
|
-
--tw-backdrop-sepia: ;
|
|
2665
|
-
--tw-contain-size: ;
|
|
2666
|
-
--tw-contain-layout: ;
|
|
2667
|
-
--tw-contain-paint: ;
|
|
2668
|
-
--tw-contain-style: ;
|
|
2669
|
-
}
|
|
2670
2668
|
.container {
|
|
2671
2669
|
width: 100%;
|
|
2672
2670
|
}
|