diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml index 1fc41b6..6ac6eff 100644 --- a/.github/workflows/node.js.yml +++ b/.github/workflows/node.js.yml @@ -24,7 +24,8 @@ jobs: strategy: matrix: - node-version: [20.x] + # MuhammaraJS does not have pre-built binaries for Node 25, skip this version for now, though docker uses it + node-version: [20.x, 24.x] # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ steps: diff --git a/.gitignore b/.gitignore index d58853d..32d7b8d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .idea +.claude dist dist/ diff --git a/__tests__/assertions.js b/__tests__/assertions.js index 4bf6452..b62cce0 100644 --- a/__tests__/assertions.js +++ b/__tests__/assertions.js @@ -2,16 +2,58 @@ const path = require('path'); const fs = require('fs'); const http = require('http'); const https = require('https'); -const testDataPDF = require('./samples/smoke/base_https.pdf.json'); -const testDataPNG = require('./samples/smoke/base_https.png.json'); -const { getTmpFilePath, assertImage } = require('./utils.js'); +const { getTmpFilePath } = require('./utils.js'); + +const testPageHTML = fs.readFileSync(path.join(__dirname, 'samples/smoke/base.html'), 'utf-8'); +const commonTestData = { + // Navigate to this URL to fix web security issues + clientURL : 'http://localhost:{port}/resources/build/grid.css', + orientation : 'portrait', + // This is calculated canvas size for the HTML being rendered + format : '1120*2389', + fileName : 'base_https', + sendAsBinary : true +} +const testDataPDF = { + ...commonTestData, + html : [{ html : testPageHTML }], + fileFormat : 'pdf' +} +const testDataPNG = { + ...commonTestData, + html : [{ html : testPageHTML }], + fileFormat : 'png' +} // https://github.com/request/request/issues/418#issuecomment-274105600 // Allow self-signed certificates https.globalAgent.options.rejectUnauthorized = false; +/** + * @param {String} json + * @param {'http'|'https'} protocol + * @param {'pdf'|'png'} fileFormat + * @param {String} host + * @param {Number} port + * @param {Number} timeout + * @returns {Promise} + */ async function getFile(json, protocol, fileFormat, host, port, timeout) { + json = json.replace(/{port}/g, String(port)); + + // Default timeout: 30 seconds for CI environments + const requestTimeout = timeout != null ? timeout : 30000; + return new Promise((resolve, reject) => { + let settled = false; + + const settle = (fn, value) => { + if (!settled) { + settled = true; + fn(value); + } + }; + const request = (protocol === 'http' ? http : https).request({ hostname : host, port : port, @@ -20,7 +62,7 @@ async function getFile(json, protocol, fileFormat, host, port, timeout) { 'Content-Type' : 'application/json', 'Content-Length' : Buffer.byteLength(json) }, - timeout : timeout != null ? timeout : undefined + timeout : requestTimeout }, response => { const chunks = []; response.on('data', function(data) { @@ -30,22 +72,25 @@ async function getFile(json, protocol, fileFormat, host, port, timeout) { const result = Buffer.concat(chunks); if (response.statusCode === 200) { - // fs.writeFileSync(path.join(__dirname, `test.${fileFormat}`), result); - resolve(result); + settle(resolve, result); } else if (/application\/json/.test(response.headers['content-type'])) { - reject(new Error(result.toString())); + settle(reject, new Error(result.toString())); } else { - reject('Request ended unexpectedly'); + settle(reject, new Error('Request ended unexpectedly')); } }); }); request.on('timeout', () => { request.destroy(); + settle(reject, new Error('timeout')); + }); - reject(new Error('timeout')); + // Handle errors to prevent unhandled 'error' events after timeout/destroy + request.on('error', (error) => { + settle(reject, error); }); request.write(json); @@ -53,37 +98,40 @@ async function getFile(json, protocol, fileFormat, host, port, timeout) { }); } -async function assertExportedFile({ protocol, host, port, fileFormat }) { +async function assertExportedFile({ protocol, host, port, fileFormat, timeout }) { const json = JSON.stringify(fileFormat === 'pdf' ? testDataPDF : testDataPNG); - const exportedFile = await getFile(json, protocol, fileFormat, host, port); - - let result = false; - - if (fileFormat === 'png') { - result = await assertImage(path.join(process.cwd(), '__tests__', 'samples', 'smoke', 'base_https.png'), exportedFile); - } - else { - let baseSize = fs.statSync(path.join(process.cwd(), '__tests__', 'samples', 'smoke', `base_https.pdf`)).size; + const exportedFile = await getFile(json, protocol, fileFormat, host, port, timeout); - const gotSize = Math.abs(baseSize - exportedFile.length); - const expectedSize = baseSize * 0.05; + let baseSize = fs.statSync(path.join(process.cwd(), '__tests__', 'samples', 'smoke', `base_https.${fileFormat}`)).size; - if (gotSize > expectedSize) { - const tmpFilePath = getTmpFilePath(fileFormat); + const gotSize = Math.abs(baseSize - exportedFile.length); + const expectedSize = baseSize * 0.05; - fs.writeFileSync(tmpFilePath, exportedFile); + if (gotSize > expectedSize) { + const tmpFilePath = getTmpFilePath(fileFormat); - fail(`${fileFormat} length differs very much from expected.\nCheck exported file here: ${tmpFilePath}`); - } + fs.writeFileSync(tmpFilePath, exportedFile); - expect(gotSize).toBeLessThanOrEqual(expectedSize); + fail(`${fileFormat} length differs very much from expected.\nCheck exported file here: ${tmpFilePath}`); } - return result; + expect(gotSize).toBeLessThanOrEqual(expectedSize); +} + +async function waitForWithTimeout(promise, timeout) { + return Promise.race([ + promise, + new Promise((_, reject) => { + setTimeout(() => { + reject(new Error(`Promise timed out after ${timeout}ms.`)); + }, timeout); + }) + ]); } module.exports = { getFile, - assertExportedFile + assertExportedFile, + waitForWithTimeout }; diff --git a/__tests__/e2e/http.test.js b/__tests__/e2e/http.test.js new file mode 100644 index 0000000..10d6a8f --- /dev/null +++ b/__tests__/e2e/http.test.js @@ -0,0 +1,82 @@ +/** + * E2E tests for HTTP connectivity. + * These tests verify that the HTTP server correctly receives requests and returns responses. + * Most export logic testing is done in queue tests which are faster. + */ +const fs = require('fs'); +const path = require('path'); +const { startServer, stopServer, getLoggerConfig, getPort, certExists } = require('../utils.js'); +const { assertExportedFile } = require('../assertions.js'); + +jest.setTimeout(60 * 1000); + +let server; + +afterEach(() => { + if (server) { + return stopServer(server).then(() => server = null); + } +}); + +describe('E2E HTTP Export', () => { + test('Should accept POST request and return PDF', async () => { + const port = getPort(); + + server = await startServer({ + protocol : 'http', + port, + workers : 1, + logger : getLoggerConfig('e2e_http_pdf') + }); + + await assertExportedFile({ + fileFormat : 'pdf', + host : 'localhost', + protocol : 'http', + port : server.httpPort + }); + }); + + test('Should accept POST request and return PNG', async () => { + const port = getPort(); + + server = await startServer({ + protocol : 'http', + port, + workers : 1, + logger : getLoggerConfig('e2e_http_png') + }); + + await assertExportedFile({ + fileFormat : 'png', + host : 'localhost', + protocol : 'http', + port : server.httpPort + }); + }); +}); + +describe('E2E HTTPS Export', () => { + if (certExists) { + test('Should accept POST request over HTTPS', async () => { + const port = getPort(); + + server = await startServer({ + protocol : 'https', + port, + workers : 1, + logger : getLoggerConfig('e2e_https_pdf') + }); + + await assertExportedFile({ + fileFormat : 'pdf', + host : 'localhost', + protocol : 'https', + port : server.httpsPort + }); + }); + } + else { + test('Cert is not found, skipping HTTPS tests', () => {}); + } +}); diff --git a/__tests__/e2e/websocket.test.js b/__tests__/e2e/websocket.test.js new file mode 100644 index 0000000..1c3cc25 --- /dev/null +++ b/__tests__/e2e/websocket.test.js @@ -0,0 +1,175 @@ +/** + * E2E tests for WebSocket connectivity. + * These tests verify that the WebSocket server correctly handles connections and export requests. + */ +const fs = require('fs'); +const path = require('path'); +const WebSocket = require('ws'); +const { startServer, stopServer, getLoggerConfig, getPort } = require('../utils.js'); + +jest.setTimeout(60 * 1000); + +// E2E tests use {port} placeholder - replaced with actual server port when sending request +const testPageHTML = fs.readFileSync(path.join(__dirname, '../samples/smoke/base.html'), 'utf-8'); + +let server; + +afterEach(async () => { + if (server) { + await stopServer(server); + server = null; + } +}); + +/** + * Helper to create WebSocket connection + */ +function createWebSocketConnection(port) { + return new Promise((resolve, reject) => { + const ws = new WebSocket(`ws://localhost:${port}/`); + + ws.on('error', (error) => { + reject(new Error(`WebSocket connection failed: ${error.message}`)); + }); + + ws.on('open', () => { + resolve(ws); + }); + }); +} + +/** + * Helper to send messages and wait for response + */ +function sendAndReceive(ws, messages, expectBinary = true) { + return new Promise((resolve, reject) => { + const timeout = setTimeout(() => { + reject(new Error('Timeout waiting for WebSocket response')); + }, 30000); + + ws.on('message', (data, isBinary) => { + clearTimeout(timeout); + if (expectBinary && isBinary) { + resolve(Buffer.from(data)); + } + else if (!expectBinary && !isBinary) { + resolve(JSON.parse(data.toString())); + } + else { + reject(new Error(`Unexpected message type: expected ${expectBinary ? 'binary' : 'text'}`)); + } + }); + + ws.on('error', (error) => { + clearTimeout(timeout); + reject(error); + }); + + // Send all messages in sequence + for (const msg of messages) { + ws.send(JSON.stringify(msg)); + } + }); +} + +describe('E2E WebSocket', () => { + test('Should establish WebSocket connection', async () => { + const port = getPort(); + + server = await startServer({ + protocol : 'http', + port, + workers : 1, + websocket : true, + logger : getLoggerConfig('e2e_ws_connect') + }); + + const ws = await createWebSocketConnection(server.httpPort); + + expect(ws).toBeDefined(); + expect(ws.readyState).toBe(WebSocket.OPEN); + + ws.close(); + }); + + test('Should export PDF via WebSocket with binary response', async () => { + const port = getPort(); + + server = await startServer({ + protocol : 'http', + port, + workers : 1, + websocket : true, + logger : getLoggerConfig('e2e_ws_binary') + }); + + const ws = await createWebSocketConnection(server.httpPort); + + // Replace {port} with actual server port for resource loading + const htmlWithPort = testPageHTML.replace(/{port}/g, server.httpPort); + + const exportMessage = { + fileFormat : 'pdf', + fileName : 'test', + format : 'A4', + orientation : 'portrait', + clientURL : `http://localhost:${server.httpPort}/resources/build/grid.css`, + html : [{ html : htmlWithPort }] + }; + + const doneMessage = { + done : true, + sendAsBinary : true + }; + + const response = await sendAndReceive(ws, [exportMessage, doneMessage], true); + + // Verify we received binary PDF data + expect(Buffer.isBuffer(response)).toBe(true); + expect(response.length).toBeGreaterThan(0); + expect(response.slice(0, 4).toString('utf8')).toBe('%PDF'); + + ws.close(); + }); + + test('Should export PDF via WebSocket with URL response', async () => { + const port = getPort(); + + server = await startServer({ + protocol : 'http', + port, + workers : 1, + websocket : true, + logger : getLoggerConfig('e2e_ws_url') + }); + + const ws = await createWebSocketConnection(server.httpPort); + + // Replace {port} with actual server port for resource loading + const htmlWithPort = testPageHTML.replace(/{port}/g, server.httpPort); + + const exportMessage = { + fileFormat : 'pdf', + fileName : 'test', + format : 'A4', + orientation : 'portrait', + clientURL : `http://localhost:${server.httpPort}/resources/build/grid.css`, + html : [{ html : htmlWithPort }] + }; + + const doneMessage = { + done : true, + sendAsBinary : false + }; + + const response = await sendAndReceive(ws, [exportMessage, doneMessage], false); + + // Verify we received a JSON response with URL + expect(response).toBeDefined(); + expect(response.success).toBe(true); + expect(response.url).toBeDefined(); + expect(response.url).toMatch(/^http:\/\/localhost:\d+\//); + + ws.close(); + }); +}); diff --git a/__tests__/failing_worker.test.js b/__tests__/failing_worker.test.js deleted file mode 100644 index 16e5053..0000000 --- a/__tests__/failing_worker.test.js +++ /dev/null @@ -1,49 +0,0 @@ -const testDataPDF = require('./samples/smoke/base_https.pdf.json'); -const { startServer, stopServer, getLoggerConfig } = require('./utils.js'); -const { getFile } = require('./assertions.js'); - -// We export 100 pages, takes time -jest.setTimeout(5 * 60 * 1000); - -let server; - -async function assertExportedFile({ protocol, host, port }) { - const json = JSON.stringify(testDataPDF); // using data for pnf, it has 3 pages - - // request file with timeout 20 seconds, which is more than enough - const exportedFile = await getFile(json, protocol, 'png', host, port, 20000); - - // Image received - expect(exportedFile?.length).toBeGreaterThan(1000); -} - -afterEach(() => { - if (server) { - return stopServer(server).then(() => server = null); - } -}); - -describe('Should export content with randomly failing workers', () => { - test('Should export 5 equal PNG files', async () => { - const - host = 'localhost', - protocol = 'http', - port = 8081, - workers = 4; - - server = await startServer({ protocol, port, workers, testing : true, logger : getLoggerConfig('failing_workers') }); - - try { - const promises = []; - - for (let i = 0; i < 5; i++) { - promises.push(assertExportedFile({ protocol, host, port: server.httpPort })); - } - - await Promise.all(promises); - } - catch (e) { - fail(e); - } - }); -}); diff --git a/__tests__/globalSetup.js b/__tests__/globalSetup.js new file mode 100644 index 0000000..c7f1a79 --- /dev/null +++ b/__tests__/globalSetup.js @@ -0,0 +1,9 @@ +/** + * Jest global setup - runs once before all tests. + * Starts the static resource server. + */ +const { startStaticServer } = require('./staticServer.js'); + +module.exports = async () => { + await startStaticServer(); +}; diff --git a/__tests__/globalTeardown.js b/__tests__/globalTeardown.js new file mode 100644 index 0000000..b56fa4f --- /dev/null +++ b/__tests__/globalTeardown.js @@ -0,0 +1,9 @@ +/** + * Jest global teardown - runs once after all tests. + * Stops the static resource server. + */ +const { stopStaticServer } = require('./staticServer.js'); + +module.exports = async () => { + await stopStaticServer(); +}; diff --git a/__tests__/parallel.test.js b/__tests__/parallel.test.js deleted file mode 100644 index 095d44b..0000000 --- a/__tests__/parallel.test.js +++ /dev/null @@ -1,121 +0,0 @@ -const fs = require('fs'); -const testData = require('./samples/parallel/data.json'); -const { getTmpFilePath, certExists, startServer, stopServer, getLoggerConfig } = require('./utils.js'); -const { getFile } = require('./assertions.js'); -const requestPayload = require('./samples/parallel/parallel2.json'); - -// We export 100 pages, takes time -jest.setTimeout(5 * 60 * 1000); - -let server; - -afterEach(() => { - if (server) { - return stopServer(server).then(() => server = null); - } -}); - -describe('Should export over HTTP', () => { - test('Should export tp PDF', async () => { - const - host = 'localhost', - protocol = 'http', - port = 8081, - workers = 4, - fileFormat = 'pdf'; - - server = await startServer({ protocol, port, workers, logger : getLoggerConfig('parallel_http_pdf') }) - - const promises = []; - - const json = JSON.stringify(testData); - - for (let i = 0; i < 2; i++) { - promises.push(getFile(json, protocol, fileFormat, host, server.httpPort, 60000 * 2)); - } - - const exportedFiles = await Promise.all(promises); - - exportedFiles.forEach(file => { - if (file.length < 100000) { - const tmpFilePath = getTmpFilePath(fileFormat); - - fs.writeFileSync(tmpFilePath, file); - - fail(`${fileFormat} length is incorrect!\nSee exported file here: ${tmpFilePath}`); - } - - // Not clear how to compare visual result of pdf, yet - // So this is more of a sanity test, checking if returned pdf has size greater that .100KB - expect(file.length).toBeGreaterThan(100000); - }); - }); -}); - -describe('Should export over HTTPS', () => { - if (certExists) { - test('Should export tp PDF', async () => { - - }); - } - else { - test('Cert is not found, skipping tests', () => {}); - } -}); - -describe('Parallel export requests received in very specific moments should work ok', () => { - test('', async () => { - const - protocol = 'http', - port = 8081, - workers = 2; - - server = await startServer({ protocol, port, workers, logger : getLoggerConfig('parallel_2') }); - - const old = server.taskQueue.runJob; - - // Create a promise which will resolve when first worker is started. At that point of time we want to process another - // request on the server. - const promise2 = new Promise(resolve => { - let overridden = false; - - server.taskQueue.runJob = function(worker, job) { - if (!overridden) { - overridden = true; - - worker.onPageCreated = function() { - // replace hook with empty one - worker.onPageCreated = () => {}; - - resolve(server.exportRequestHandler(requestPayload, 'request2')); - }; - } - old.apply(server.taskQueue, [worker, job]); - }; - }); - - const promise1 = server.exportRequestHandler(requestPayload, 'request1'); - - // Limit waiting time by 20 sec - const promises = [ - Promise.all([promise1, promise2]), - new Promise(resolve => setTimeout(() => { - resolve('timeout'); - }, 20000)) - ]; - const buffers = await Promise.race(promises); - - await Promise.allSettled(promises); - - if (buffers === 'timeout') { - fail('Request timeout'); - } - else { - // Generated files have same size - expect(buffers[0].length).toEqual(buffers[1].length); - } - - // Wait couple seconds for workers to become idle/get destroyed - await new Promise(resolve => setTimeout(resolve, 3000)); - }); -}); diff --git a/__tests__/queue/export.test.js b/__tests__/queue/export.test.js new file mode 100644 index 0000000..5fb4c5a --- /dev/null +++ b/__tests__/queue/export.test.js @@ -0,0 +1,178 @@ +const fs = require('fs'); +const path = require('path'); +const { createExportServer, stopExportServer, streamToBuffer, getLoggerConfig, getTmpFilePath, loadTestHTML, RESOURCES_PORT } = require('../utils.js'); + +jest.setTimeout(60 * 1000); + +const samplesDir = path.join(__dirname, '../samples/smoke'); +const testPageHTML = loadTestHTML(path.join(samplesDir, 'base.html')); +const baselinePDF = path.join(samplesDir, 'base_https.pdf'); +const baselinePNG = path.join(samplesDir, 'base_https.png'); + +// URL to navigate before setting content - establishes same-origin context for loading resources +const clientURL = `http://localhost:${RESOURCES_PORT}/resources/build/grid.css`; + +// Allow 5% size difference from baseline +const SIZE_THRESHOLD = 0.05; + +/** + * Assert that buffer size is within threshold of baseline file. + * If not, save the output to tmp directory for inspection. + */ +function assertSizeMatchesBaseline(buffer, baselinePath, fileFormat) { + const baseSize = fs.statSync(baselinePath).size; + const sizeDelta = Math.abs(baseSize - buffer.length); + const threshold = baseSize * SIZE_THRESHOLD; + + if (sizeDelta > threshold) { + const tmpFilePath = getTmpFilePath(fileFormat); + fs.writeFileSync(tmpFilePath, buffer); + throw new Error( + `${fileFormat.toUpperCase()} size differs from baseline.\n` + + `Expected: ~${baseSize} bytes, Got: ${buffer.length} bytes\n` + + `Delta: ${sizeDelta} (threshold: ${Math.round(threshold)})\n` + + `Exported file saved to: ${tmpFilePath}` + ); + } + + expect(sizeDelta).toBeLessThanOrEqual(threshold); +} + +let exportServer; + +afterEach(() => { + if (exportServer) { + stopExportServer(exportServer); + exportServer = null; + } +}); + +describe('Queue Export - PDF', () => { + test('Should export single page to PDF matching baseline', async () => { + exportServer = createExportServer({ + workers : 1, + logger : getLoggerConfig('queue_export_pdf') + }); + + const requestData = { + html : [{ html : testPageHTML }], + orientation : 'portrait', + format : '1120*2389', + fileFormat : 'pdf', + clientURL + }; + + const result = await exportServer.exportRequestHandler(requestData, 'test-pdf-1'); + const buffer = await streamToBuffer(result); + + // Verify we got a valid PDF + expect(buffer.slice(0, 4).toString('utf8')).toBe('%PDF'); + + // Compare with baseline + assertSizeMatchesBaseline(buffer, baselinePDF, 'pdf'); + }); + + test('Should export multiple pages to PDF', async () => { + exportServer = createExportServer({ + workers : 2, + logger : getLoggerConfig('queue_export_pdf_multi') + }); + + const requestData = { + html : [ + { html : testPageHTML }, + { html : testPageHTML }, + { html : testPageHTML } + ], + orientation : 'portrait', + format : 'A4', + fileFormat : 'pdf', + clientURL + }; + + const result = await exportServer.exportRequestHandler(requestData, 'test-pdf-multi'); + const buffer = await streamToBuffer(result); + + // Verify we got a valid PDF + expect(buffer.slice(0, 4).toString('utf8')).toBe('%PDF'); + + // Multi-page PDF should be larger than single-page baseline + const baseSize = fs.statSync(baselinePDF).size; + expect(buffer.length).toBeGreaterThan(baseSize); + }); +}); + +describe('Queue Export - PNG', () => { + test('Should export single page to PNG matching baseline', async () => { + exportServer = createExportServer({ + workers : 1, + logger : getLoggerConfig('queue_export_png') + }); + + const requestData = { + html : [{ html : testPageHTML }], + orientation : 'portrait', + format : '1120*2389', + fileFormat : 'png', + clientURL + }; + + const result = await exportServer.exportRequestHandler(requestData, 'test-png-1'); + const buffer = await streamToBuffer(result); + + // Verify we got a valid PNG (magic bytes: 89 50 4E 47) + expect(buffer[0]).toBe(0x89); + expect(buffer.slice(1, 4).toString('utf8')).toBe('PNG'); + + // Compare with baseline + assertSizeMatchesBaseline(buffer, baselinePNG, 'png'); + }); + + test('Should export multiple pages to PNG (combined vertically)', async () => { + exportServer = createExportServer({ + workers : 2, + logger : getLoggerConfig('queue_export_png_multi') + }); + + const requestData = { + html : [ + { html : testPageHTML }, + { html : testPageHTML } + ], + orientation : 'portrait', + format : 'A4', + fileFormat : 'png', + clientURL + }; + + const result = await exportServer.exportRequestHandler(requestData, 'test-png-multi'); + const buffer = await streamToBuffer(result); + + // Verify we got a valid PNG + expect(buffer[0]).toBe(0x89); + expect(buffer.slice(1, 4).toString('utf8')).toBe('PNG'); + + // Multi-page PNG should be larger than single-page baseline + const baseSize = fs.statSync(baselinePNG).size; + expect(buffer.length).toBeGreaterThan(baseSize); + }); +}); + +describe('Queue Export - Error Handling', () => { + test('Should throw error when html is missing', async () => { + exportServer = createExportServer({ + workers : 1, + logger : getLoggerConfig('queue_export_error') + }); + + const requestData = { + orientation : 'portrait', + format : 'A4', + fileFormat : 'pdf' + }; + + await expect( + exportServer.exportRequestHandler(requestData, 'test-error-1') + ).rejects.toThrow('No html fragments found'); + }); +}); diff --git a/__tests__/queue/failing_worker.test.js b/__tests__/queue/failing_worker.test.js new file mode 100644 index 0000000..02d0846 --- /dev/null +++ b/__tests__/queue/failing_worker.test.js @@ -0,0 +1,91 @@ +const path = require('path'); +const { createExportServer, stopExportServer, streamToBuffer, getLoggerConfig, loadTestHTML, RESOURCES_PORT } = require('../utils.js'); + +jest.setTimeout(5 * 60 * 1000); + +const testPageHTML = loadTestHTML(path.join(__dirname, '../samples/smoke/base.html')); + +// URL to navigate before setting content - establishes same-origin context for loading resources +const clientURL = `http://localhost:${RESOURCES_PORT}/resources/build/grid.css`; + +let exportServer; + +afterEach(() => { + if (exportServer) { + stopExportServer(exportServer); + exportServer = null; + } +}); + +describe('Queue with Randomly Failing Workers', () => { + test('Should successfully export despite random worker failures', async () => { + exportServer = createExportServer({ + workers : 4, + testing : true, // Enable random failures (40% probability) + logger : getLoggerConfig('queue_failing_worker') + }); + + const requestData = { + html : [{ html : testPageHTML }], + orientation : 'portrait', + format : '1120*2389', + fileFormat : 'png', + clientURL + }; + + // With testing mode, workers randomly fail but should eventually succeed through retries + // We run multiple exports to test the retry mechanism + const promises = []; + for (let i = 0; i < 5; i++) { + promises.push( + exportServer.exportRequestHandler(requestData, `test-failing-${i}`) + .then(stream => streamToBuffer(stream)) + .catch(() => null) // Some may fail after max retries, that's expected + ); + } + + const results = await Promise.all(promises); + + // At least some should succeed + const successfulResults = results.filter(r => r !== null); + expect(successfulResults.length).toBeGreaterThan(0); + + // Successful results should be valid PNGs + successfulResults.forEach(buffer => { + expect(buffer.length).toBeGreaterThan(0); + expect(buffer[0]).toBe(0x89); + expect(buffer.slice(1, 4).toString('utf8')).toBe('PNG'); + }); + }); + + test('Should handle multiple pages with failing workers', async () => { + exportServer = createExportServer({ + workers : 4, + testing : true, + logger : getLoggerConfig('queue_failing_worker_multi') + }); + + const requestData = { + html : [ + { html : testPageHTML }, + { html : testPageHTML }, + { html : testPageHTML } + ], + orientation : 'portrait', + format : 'A4', + fileFormat : 'pdf', + clientURL + }; + + // Some may fail after max retries + const result = await exportServer.exportRequestHandler(requestData, 'test-failing-multi') + .then(stream => streamToBuffer(stream)) + .catch(() => null); + + // If it succeeded, verify it's a valid PDF + if (result) { + expect(result.length).toBeGreaterThan(0); + expect(result.slice(0, 4).toString('utf8')).toBe('%PDF'); + } + }); +}); diff --git a/__tests__/queue/parallel.test.js b/__tests__/queue/parallel.test.js new file mode 100644 index 0000000..e3c9473 --- /dev/null +++ b/__tests__/queue/parallel.test.js @@ -0,0 +1,169 @@ +const fs = require('fs'); +const path = require('path'); +const { createExportServer, stopExportServer, streamToBuffer, getLoggerConfig, getTmpFilePath, loadTestHTML, RESOURCES_PORT } = require('../utils.js'); +const { waitForWithTimeout } = require('../assertions.js'); + +// We export many pages, takes time +jest.setTimeout(5 * 60 * 1000); + +const parallelSamplesDir = path.join(__dirname, '../samples/parallel'); +const smokeSamplesDir = path.join(__dirname, '../samples/smoke'); +const baselineParallelPDF = path.join(parallelSamplesDir, 'base.pdf'); + +// URL to navigate before setting content - establishes same-origin context for loading resources +const clientURL = `http://localhost:${RESOURCES_PORT}/resources/build/grid.css`; + +// Allow 5% size difference from baseline +const SIZE_THRESHOLD = 0.05; + +/** + * Assert that buffer size is within threshold of baseline file. + * If not, save the output to tmp directory for inspection. + */ +function assertSizeMatchesBaseline(buffer, baselinePath, fileFormat) { + const baseSize = fs.statSync(baselinePath).size; + const sizeDelta = Math.abs(baseSize - buffer.length); + const threshold = baseSize * SIZE_THRESHOLD; + + if (sizeDelta > threshold) { + const tmpFilePath = getTmpFilePath(fileFormat); + fs.writeFileSync(tmpFilePath, buffer); + throw new Error( + `${fileFormat.toUpperCase()} size differs from baseline.\n` + + `Expected: ~${baseSize} bytes, Got: ${buffer.length} bytes\n` + + `Delta: ${sizeDelta} (threshold: ${Math.round(threshold)})\n` + + `Exported file saved to: ${tmpFilePath}` + ); + } + + expect(sizeDelta).toBeLessThanOrEqual(threshold); +} + +let exportServer; + +afterEach(() => { + if (exportServer) { + stopExportServer(exportServer); + exportServer = null; + } +}); + +describe('Queue Parallel Export', () => { + test('Should export many pages in parallel matching baseline', async () => { + // Load HTML chunks from samples/parallel/chunks + const chunksDir = path.join(parallelSamplesDir, 'chunks'); + const chunkFiles = fs.readdirSync(chunksDir).filter(f => f.endsWith('.html')).sort(); + const htmlChunks = chunkFiles.map(file => ({ + html : loadTestHTML(path.join(chunksDir, file)) + })); + + exportServer = createExportServer({ + workers : 4, + logger : getLoggerConfig('queue_parallel') + }); + + const requestData = { + orientation : 'portrait', + format : 'A4', + fileFormat : 'pdf', + html : htmlChunks, + clientURL + }; + + const result = await exportServer.exportRequestHandler(requestData, 'test-parallel-1'); + const buffer = await streamToBuffer(result); + + // Verify we got a valid PDF + expect(buffer.slice(0, 4).toString('utf8')).toBe('%PDF'); + + // Compare with baseline + assertSizeMatchesBaseline(buffer, baselineParallelPDF, 'pdf'); + }); + + test('Should handle concurrent export requests', async () => { + const testPageHTML = loadTestHTML(path.join(smokeSamplesDir, 'base.html')); + + exportServer = createExportServer({ + workers : 2, + logger : getLoggerConfig('queue_parallel_concurrent') + }); + + const requestData = { + orientation : 'portrait', + format : 'A4', + fileFormat : 'pdf', + html : [{ html : testPageHTML }], + clientURL + }; + + // Send multiple requests concurrently + const promises = [ + exportServer.exportRequestHandler(requestData, 'concurrent-1'), + exportServer.exportRequestHandler(requestData, 'concurrent-2'), + exportServer.exportRequestHandler(requestData, 'concurrent-3') + ]; + + const results = await Promise.all(promises); + const buffers = await Promise.all(results.map(r => streamToBuffer(r))); + + // All should produce valid PDFs of similar size + buffers.forEach((buffer, i) => { + expect(buffer.length).toBeGreaterThan(0); + expect(buffer.slice(0, 4).toString('utf8')).toBe('%PDF'); + }); + + // All files should be approximately the same size + const sizes = buffers.map(b => b.length); + const avgSize = sizes.reduce((a, b) => a + b, 0) / sizes.length; + sizes.forEach(size => { + expect(Math.abs(size - avgSize)).toBeLessThan(avgSize * 0.1); + }); + }); + + test('Should handle request arriving while worker is processing', async () => { + const testPageHTML = loadTestHTML(path.join(parallelSamplesDir, 'chunks/page_1.html')); + + exportServer = createExportServer({ + workers : 2, + logger : getLoggerConfig('queue_parallel_timing') + }); + + const requestData = { + orientation : 'portrait', + format : 'A4', + fileFormat : 'pdf', + html : [{ html : testPageHTML }], + clientURL + }; + + const old = exportServer.taskQueue.runJob.bind(exportServer.taskQueue); + + // Create a promise which resolves when first worker starts processing + // At that moment, we send another request + const promise2 = new Promise(resolve => { + let overridden = false; + + exportServer.taskQueue.runJob = function(worker, job) { + if (!overridden) { + overridden = true; + + worker.onPageCreated = function() { + worker.onPageCreated = () => {}; + resolve(exportServer.exportRequestHandler(requestData, 'request2')); + }; + } + old(worker, job); + }; + }); + + const promise1 = exportServer.exportRequestHandler(requestData, 'request1'); + + const results = await waitForWithTimeout(Promise.all([promise1, promise2]), 20000); + const buffers = await Promise.all(results.map(r => streamToBuffer(r))); + + // Both should produce valid PDFs of same size + expect(buffers[0].length).toBeGreaterThan(0); + expect(buffers[1].length).toBeGreaterThan(0); + expect(buffers[0].length).toEqual(buffers[1].length); + }); +}); diff --git a/__tests__/samples/compare-tuning/1px_border.png b/__tests__/samples/compare-tuning/1px_border.png deleted file mode 100644 index 1d98562..0000000 Binary files a/__tests__/samples/compare-tuning/1px_border.png and /dev/null differ diff --git a/__tests__/samples/compare-tuning/shot_linux.png b/__tests__/samples/compare-tuning/shot_linux.png deleted file mode 100644 index 10b6e62..0000000 Binary files a/__tests__/samples/compare-tuning/shot_linux.png and /dev/null differ diff --git a/__tests__/samples/compare-tuning/shot_windows.png b/__tests__/samples/compare-tuning/shot_windows.png deleted file mode 100644 index 120be4a..0000000 Binary files a/__tests__/samples/compare-tuning/shot_windows.png and /dev/null differ diff --git a/__tests__/samples/compare-tuning/shot_windows_0-1.png b/__tests__/samples/compare-tuning/shot_windows_0-1.png deleted file mode 100644 index c3aee7b..0000000 Binary files a/__tests__/samples/compare-tuning/shot_windows_0-1.png and /dev/null differ diff --git a/__tests__/samples/fileprotocol/data.json b/__tests__/samples/fileprotocol/data.json deleted file mode 100644 index 66671da..0000000 --- a/__tests__/samples/fileprotocol/data.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "html": [ - { "html" : "" } - ], - "orientation": "portrait", - "format": "A4", - "fileFormat": "pdf", - "fileName": "base_https", - "sendAsBinary": true -} diff --git a/__tests__/samples/parallel/base.pdf b/__tests__/samples/parallel/base.pdf index ba54c46..567fe2c 100644 Binary files a/__tests__/samples/parallel/base.pdf and b/__tests__/samples/parallel/base.pdf differ diff --git a/__tests__/samples/parallel/chunks/page_1.html b/__tests__/samples/parallel/chunks/page_1.html new file mode 100644 index 0000000..df72a39 --- /dev/null +++ b/__tests__/samples/parallel/chunks/page_1.html @@ -0,0 +1,1438 @@ + + + + + + + + + + + + + + + +
+
+
Company logo +
+
Date: Feb 26, 2026 7:33 PM
+
Page: 1/4
+
+
+
+
+
+ + + + + +
+
+
+ +
+
+ + \ No newline at end of file diff --git a/__tests__/samples/parallel/chunks/page_2.html b/__tests__/samples/parallel/chunks/page_2.html new file mode 100644 index 0000000..dcb359d --- /dev/null +++ b/__tests__/samples/parallel/chunks/page_2.html @@ -0,0 +1,1477 @@ + + + + + + + + + + + + + + + +
+
+
Company logo +
+
Date: Feb 26, 2026 7:33 PM
+
Page: 2/4
+
+
+
+
+
+ + + + + +
+
+
+ +
+
+ + \ No newline at end of file diff --git a/__tests__/samples/parallel/chunks/page_3.html b/__tests__/samples/parallel/chunks/page_3.html new file mode 100644 index 0000000..6a7045a --- /dev/null +++ b/__tests__/samples/parallel/chunks/page_3.html @@ -0,0 +1,1477 @@ + + + + + + + + + + + + + + + +
+
+
Company logo +
+
Date: Feb 26, 2026 7:33 PM
+
Page: 3/4
+
+
+
+
+
+ + + + + +
+
+
+ +
+
+ + \ No newline at end of file diff --git a/__tests__/samples/parallel/chunks/page_4.html b/__tests__/samples/parallel/chunks/page_4.html new file mode 100644 index 0000000..93b8a61 --- /dev/null +++ b/__tests__/samples/parallel/chunks/page_4.html @@ -0,0 +1,325 @@ + + + + + + + + + + + + + + + +
+
+
Company logo +
+
Date: Feb 26, 2026 7:33 PM
+
Page: 4/4
+
+
+
+
+
+ + + + + +
+
+
+ +
+
+ + \ No newline at end of file diff --git a/__tests__/samples/parallel/data.json b/__tests__/samples/parallel/data.json deleted file mode 100644 index 2606374..0000000 --- a/__tests__/samples/parallel/data.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "html": [ - { - "html": "
Date: Jul 9, 2022 10:07 PM
Page: 1/17
#
First name
Surname
Score
Rank
Percent
1
Mike
Ewans
830
95
2
Linda
McGregor
540
15
3
Jenny
Jones
400
73
4
Linda
Taylor
490
97
5
Daniel
Wilson
900
35
6
Melissa
Johnson
850
69
7
Karen
McGregor
780
30
8
Daniel
Thomas
930
22
9
Don
Jackson
360
5
10
Don
Taylor
990
79
11
Jane
Taylor
900
51
12
Daniel
Adams
200
37
13
Jane
Brown
170
51
14
Mike
More
410
100
15
Lisa
More
510
44
16
Mary
Brown
860
2
17
David
McGregor
380
97
18
Don
Ewans
910
20
19
Adam
More
180
46
20
Linda
Adams
410
97
21
Mike
Brown
860
98
22
Don
Jones
640
18
23
Barbara
Anderson
40
33
24
Doug
Thomas
730
38
25
Doug
Wilson
410
59
26
Karen
Brown
330
75
27
Adam
Johnson
190
2
28
Adam
Jackson
860
15
29
Jenny
Williams
690
79
30
John
Miller
750
41
31
Barbara
Jackson
950
12
32
James
Smith
740
59

© 2020 Bryntum AB

" - }, - { - "html": "
Date: Jul 9, 2022 10:07 PM
Page: 2/17
#
First name
Surname
Score
Rank
Percent
32
James
Smith
740
59
33
Doug
McGregor
540
17
34
Jane
Anderson
150
61
35
Jenny
Anderson
540
35
36
Mary
Davis
900
92
37
Karen
Ewans
420
3
38
Don
Scott
150
8
39
Adam
Miller
90
37
40
John
Jackson
290
29
41
Karen
Scott
760
74
42
Linda
Brown
870
67
43
Don
Taylor
650
73
44
John
Adams
190
86
45
Doug
Jones
10
66
46
James
Davis
860
92
47
Mike
Johnson
160
2
48
Don
Johnson
420
68
49
Jane
McGregor
250
17
50
Jane
Thomas
340
29
51
Lisa
Anderson
710
94
52
Don
Thomas
200
72
53
Doug
Jackson
640
26
54
James
Ewans
70
12
55
Jenny
Brown
260
14
56
Doug
Ewans
890
41
57
Mike
Ewans
640
95
58
Linda
McGregor
90
36
59
Jenny
Jones
390
32
60
Linda
Taylor
460
68
61
Daniel
Wilson
830
20
62
Melissa
Johnson
80
48
63
Karen
McGregor
350
19
64
Daniel
Thomas
520
75

© 2020 Bryntum AB

" - }, - { - "html": "
Date: Jul 9, 2022 10:07 PM
Page: 3/17
#
First name
Surname
Score
Rank
Percent
64
Daniel
Thomas
520
75
65
Don
Jackson
910
54
66
Don
Taylor
780
28
67
Jane
Taylor
10
46
68
Daniel
Adams
470
6
69
Jane
Brown
720
53
70
Mike
More
740
69
71
Lisa
More
70
78
72
Mary
Brown
230
71
73
David
McGregor
40
41
74
Don
Ewans
840
14
75
Adam
More
990
24
76
Linda
Adams
950
38
77
Mike
Brown
750
13
78
Don
Jones
230
39
79
Barbara
Anderson
370
59
80
Doug
Thomas
420
28
81
Doug
Wilson
230
99
82
Karen
Brown
420
42
83
Adam
Johnson
540
41
84
Adam
Jackson
950
34
85
Jenny
Williams
760
41
86
John
Miller
70
86
87
Barbara
Jackson
660
1
88
James
Smith
970
56
89
Doug
McGregor
220
98
90
Jane
Anderson
850
54
91
Jenny
Anderson
130
81
92
Mary
Davis
640
32
93
Karen
Ewans
20
44
94
Don
Scott
490
79
95
Adam
Miller
520
17
96
John
Jackson
450
63
97
Karen
Scott
650
84

© 2020 Bryntum AB

" - }, - { - "html": "
Date: Jul 9, 2022 10:07 PM
Page: 4/17
#
First name
Surname
Score
Rank
Percent
97
Karen
Scott
650
84
98
Linda
Brown
140
88
99
Don
Taylor
230
83
100
John
Adams
520
36
101
Doug
Jones
380
81
102
James
Davis
310
53
103
Mike
Johnson
10
77
104
Don
Johnson
390
58
105
Jane
McGregor
490
61
106
Jane
Thomas
420
9
107
Lisa
Anderson
470
41
108
Don
Thomas
390
47
109
Doug
Jackson
170
76
110
James
Ewans
610
7
111
Jenny
Brown
730
46
112
Doug
Ewans
860
47
113
Mike
Ewans
970
86
114
Linda
McGregor
440
95
115
Jenny
Jones
640
39
116
Linda
Taylor
160
45
117
Daniel
Wilson
360
46
118
Melissa
Johnson
720
98
119
Karen
McGregor
550
89
120
Daniel
Thomas
810
86
121
Don
Jackson
20
34
122
Don
Taylor
110
80
123
Jane
Taylor
800
79
124
Daniel
Adams
870
65
125
Jane
Brown
590
30
126
Mike
More
320
41
127
Lisa
More
760
90
128
Mary
Brown
670
2
129
David
McGregor
500
28

© 2020 Bryntum AB

" - }, - { - "html": "
Date: Jul 9, 2022 10:07 PM
Page: 5/17
#
First name
Surname
Score
Rank
Percent
129
David
McGregor
500
28
130
Don
Ewans
380
15
131
Adam
More
60
57
132
Linda
Adams
800
56
133
Mike
Brown
670
8
134
Don
Jones
840
7
135
Barbara
Anderson
290
30
136
Doug
Thomas
40
40
137
Doug
Wilson
580
9
138
Karen
Brown
900
46
139
Adam
Johnson
320
70
140
Adam
Jackson
860
63
141
Jenny
Williams
530
58
142
John
Miller
810
1
143
Barbara
Jackson
990
61
144
James
Smith
920
48
145
Doug
McGregor
310
75
146
Jane
Anderson
50
44
147
Jenny
Anderson
380
91
148
Mary
Davis
530
99
149
Karen
Ewans
600
47
150
Don
Scott
150
75
151
Adam
Miller
410
22
152
John
Jackson
540
18
153
Karen
Scott
610
43
154
Linda
Brown
80
60
155
Don
Taylor
20
74
156
John
Adams
250
36
157
Doug
Jones
860
54
158
James
Davis
70
35
159
Mike
Johnson
270
46
160
Don
Johnson
850
38
161
Jane
McGregor
120
30
162
Jane
Thomas
730
77

© 2020 Bryntum AB

" - }, - { - "html": "
Date: Jul 9, 2022 10:07 PM
Page: 6/17
#
First name
Surname
Score
Rank
Percent
162
Jane
Thomas
730
77
163
Lisa
Anderson
550
38
164
Don
Thomas
540
96
165
Doug
Jackson
450
37
166
James
Ewans
300
29
167
Jenny
Brown
930
55
168
Doug
Ewans
760
54
169
Mike
Ewans
330
37
170
Linda
McGregor
780
32
171
Jenny
Jones
870
62
172
Linda
Taylor
860
4
173
Daniel
Wilson
730
86
174
Melissa
Johnson
770
21
175
Karen
McGregor
720
41
176
Daniel
Thomas
310
46
177
Don
Jackson
930
55
178
Don
Taylor
250
17
179
Jane
Taylor
860
8
180
Daniel
Adams
450
6
181
Jane
Brown
850
59
182
Mike
More
650
84
183
Lisa
More
630
25
184
Mary
Brown
10
11
185
David
McGregor
660
88
186
Don
Ewans
980
14
187
Adam
More
540
14
188
Linda
Adams
990
86
189
Mike
Brown
320
31
190
Don
Jones
590
27
191
Barbara
Anderson
40
79
192
Doug
Thomas
20
65
193
Doug
Wilson
490
14
194
Karen
Brown
690
31

© 2020 Bryntum AB

" - }, - { - "html": "
Date: Jul 9, 2022 10:07 PM
Page: 7/17
#
First name
Surname
Score
Rank
Percent
194
Karen
Brown
690
31
195
Adam
Johnson
950
25
196
Adam
Jackson
20
39
197
Jenny
Williams
860
65
198
John
Miller
680
100
199
Barbara
Jackson
330
98
200
James
Smith
420
76
201
Doug
McGregor
860
16
202
Jane
Anderson
520
52
203
Jenny
Anderson
150
27
204
Mary
Davis
480
41
205
Karen
Ewans
760
48
206
Don
Scott
790
1
207
Adam
Miller
0
64
208
John
Jackson
100
27
209
Karen
Scott
890
44
210
Linda
Brown
290
24
211
Don
Taylor
230
15
212
John
Adams
760
17
213
Doug
Jones
490
65
214
James
Davis
740
46
215
Mike
Johnson
560
20
216
Don
Johnson
70
91
217
Jane
McGregor
30
82
218
Jane
Thomas
990
22
219
Lisa
Anderson
330
12
220
Don
Thomas
540
46
221
Doug
Jackson
180
22
222
James
Ewans
750
12
223
Jenny
Brown
930
58
224
Doug
Ewans
530
43
225
Mike
Ewans
220
4
226
Linda
McGregor
350
19

© 2020 Bryntum AB

" - }, - { - "html": "
Date: Jul 9, 2022 10:07 PM
Page: 8/17
#
First name
Surname
Score
Rank
Percent
226
Linda
McGregor
350
19
227
Jenny
Jones
820
42
228
Linda
Taylor
90
79
229
Daniel
Wilson
0
99
230
Melissa
Johnson
880
50
231
Karen
McGregor
70
74
232
Daniel
Thomas
210
78
233
Don
Jackson
190
54
234
Don
Taylor
540
73
235
Jane
Taylor
700
40
236
Daniel
Adams
790
77
237
Jane
Brown
550
38
238
Mike
More
770
99
239
Lisa
More
20
30
240
Mary
Brown
90
17
241
David
McGregor
890
23
242
Don
Ewans
470
38
243
Adam
More
260
89
244
Linda
Adams
150
85
245
Mike
Brown
80
95
246
Don
Jones
600
83
247
Barbara
Anderson
140
70
248
Doug
Thomas
600
21
249
Doug
Wilson
990
79
250
Karen
Brown
680
57
251
Adam
Johnson
190
55
252
Adam
Jackson
180
87
253
Jenny
Williams
610
62
254
John
Miller
570
50
255
Barbara
Jackson
260
84
256
James
Smith
50
52
257
Doug
McGregor
360
9
258
Jane
Anderson
170
86
259
Jenny
Anderson
420
9

© 2020 Bryntum AB

" - }, - { - "html": "
Date: Jul 9, 2022 10:07 PM
Page: 9/17
#
First name
Surname
Score
Rank
Percent
259
Jenny
Anderson
420
9
260
Mary
Davis
780
69
261
Karen
Ewans
690
26
262
Don
Scott
540
46
263
Adam
Miller
90
15
264
John
Jackson
680
62
265
Karen
Scott
290
25
266
Linda
Brown
970
100
267
Don
Taylor
950
92
268
John
Adams
100
63
269
Doug
Jones
370
78
270
James
Davis
680
29
271
Mike
Johnson
620
53
272
Don
Johnson
50
87
273
Jane
McGregor
990
58
274
Jane
Thomas
40
12
275
Lisa
Anderson
500
25
276
Don
Thomas
860
64
277
Doug
Jackson
500
69
278
James
Ewans
0
42
279
Jenny
Brown
760
67
280
Doug
Ewans
810
31
281
Mike
Ewans
680
68
282
Linda
McGregor
790
3
283
Jenny
Jones
650
4
284
Linda
Taylor
510
64
285
Daniel
Wilson
690
8
286
Melissa
Johnson
110
1
287
Karen
McGregor
720
79
288
Daniel
Thomas
20
29
289
Don
Jackson
890
68
290
Don
Taylor
820
47
291
Jane
Taylor
50
29

© 2020 Bryntum AB

" - }, - { - "html": "
Date: Jul 9, 2022 10:07 PM
Page: 10/17
#
First name
Surname
Score
Rank
Percent
291
Jane
Taylor
50
29
292
Daniel
Adams
260
7
293
Jane
Brown
660
63
294
Mike
More
740
10
295
Lisa
More
70
56
296
Mary
Brown
750
92
297
David
McGregor
770
28
298
Don
Ewans
40
31
299
Adam
More
550
6
300
Linda
Adams
890
77
301
Mike
Brown
490
19
302
Don
Jones
690
26
303
Barbara
Anderson
440
30
304
Doug
Thomas
710
3
305
Doug
Wilson
20
25
306
Karen
Brown
380
55
307
Adam
Johnson
730
61
308
Adam
Jackson
300
42
309
Jenny
Williams
520
30
310
John
Miller
700
12
311
Barbara
Jackson
220
100
312
James
Smith
990
40
313
Doug
McGregor
450
76
314
Jane
Anderson
850
97
315
Jenny
Anderson
50
48
316
Mary
Davis
960
34
317
Karen
Ewans
490
92
318
Don
Scott
260
76
319
Adam
Miller
460
3
320
John
Jackson
400
3
321
Karen
Scott
640
23
322
Linda
Brown
830
97
323
Don
Taylor
700
8

© 2020 Bryntum AB

" - }, - { - "html": "
Date: Jul 9, 2022 10:07 PM
Page: 11/17
#
First name
Surname
Score
Rank
Percent
323
Don
Taylor
700
8
324
John
Adams
510
61
325
Doug
Jones
350
1
326
James
Davis
490
44
327
Mike
Johnson
200
100
328
Don
Johnson
30
5
329
Jane
McGregor
560
41
330
Jane
Thomas
830
13
331
Lisa
Anderson
520
70
332
Don
Thomas
920
41
333
Doug
Jackson
180
21
334
James
Ewans
250
64
335
Jenny
Brown
960
95
336
Doug
Ewans
960
44
337
Mike
Ewans
250
77
338
Linda
McGregor
240
10
339
Jenny
Jones
10
37
340
Linda
Taylor
800
73
341
Daniel
Wilson
690
32
342
Melissa
Johnson
300
91
343
Karen
McGregor
930
20
344
Daniel
Thomas
950
58
345
Don
Jackson
980
12
346
Don
Taylor
230
23
347
Jane
Taylor
80
22
348
Daniel
Adams
270
32
349
Jane
Brown
40
39
350
Mike
More
270
64
351
Lisa
More
870
80
352
Mary
Brown
490
41
353
David
McGregor
10
33
354
Don
Ewans
960
18
355
Adam
More
640
76
356
Linda
Adams
580
71

© 2020 Bryntum AB

" - }, - { - "html": "
Date: Jul 9, 2022 10:07 PM
Page: 12/17
#
First name
Surname
Score
Rank
Percent
356
Linda
Adams
580
71
357
Mike
Brown
570
62
358
Don
Jones
500
66
359
Barbara
Anderson
620
79
360
Doug
Thomas
430
90
361
Doug
Wilson
150
45
362
Karen
Brown
120
46
363
Adam
Johnson
780
47
364
Adam
Jackson
830
39
365
Jenny
Williams
260
37
366
John
Miller
660
52
367
Barbara
Jackson
980
9
368
James
Smith
930
73
369
Doug
McGregor
50
32
370
Jane
Anderson
280
39
371
Jenny
Anderson
30
39
372
Mary
Davis
800
49
373
Karen
Ewans
360
60
374
Don
Scott
390
13
375
Adam
Miller
590
97
376
John
Jackson
790
38
377
Karen
Scott
900
41
378
Linda
Brown
470
11
379
Don
Taylor
280
27
380
John
Adams
380
57
381
Doug
Jones
370
19
382
James
Davis
520
42
383
Mike
Johnson
200
99
384
Don
Johnson
150
60
385
Jane
McGregor
170
89
386
Jane
Thomas
360
47
387
Lisa
Anderson
150
4
388
Don
Thomas
810
95

© 2020 Bryntum AB

" - }, - { - "html": "
Date: Jul 9, 2022 10:07 PM
Page: 13/17
#
First name
Surname
Score
Rank
Percent
388
Don
Thomas
810
95
389
Doug
Jackson
260
21
390
James
Ewans
50
57
391
Jenny
Brown
230
87
392
Doug
Ewans
900
87
393
Mike
Ewans
730
7
394
Linda
McGregor
240
79
395
Jenny
Jones
550
2
396
Linda
Taylor
670
93
397
Daniel
Wilson
140
63
398
Melissa
Johnson
390
94
399
Karen
McGregor
670
7
400
Daniel
Thomas
50
28
401
Don
Jackson
210
71
402
Don
Taylor
100
24
403
Jane
Taylor
720
44
404
Daniel
Adams
600
51
405
Jane
Brown
260
48
406
Mike
More
180
43
407
Lisa
More
210
20
408
Mary
Brown
780
32
409
David
McGregor
420
52
410
Don
Ewans
540
72
411
Adam
More
950
78
412
Linda
Adams
340
65
413
Mike
Brown
720
49
414
Don
Jones
980
76
415
Barbara
Anderson
150
59
416
Doug
Thomas
960
25
417
Doug
Wilson
990
52
418
Karen
Brown
840
73
419
Adam
Johnson
520
42
420
Adam
Jackson
940
34
421
Jenny
Williams
90
81

© 2020 Bryntum AB

" - }, - { - "html": "
Date: Jul 9, 2022 10:07 PM
Page: 14/17
#
First name
Surname
Score
Rank
Percent
421
Jenny
Williams
90
81
422
John
Miller
970
33
423
Barbara
Jackson
760
13
424
James
Smith
310
75
425
Doug
McGregor
630
71
426
Jane
Anderson
120
57
427
Jenny
Anderson
690
95
428
Mary
Davis
330
43
429
Karen
Ewans
400
34
430
Don
Scott
990
96
431
Adam
Miller
730
40
432
John
Jackson
890
22
433
Karen
Scott
980
49
434
Linda
Brown
340
71
435
Don
Taylor
900
72
436
John
Adams
610
47
437
Doug
Jones
10
67
438
James
Davis
850
1
439
Mike
Johnson
270
48
440
Don
Johnson
830
28
441
Jane
McGregor
430
26
442
Jane
Thomas
190
57
443
Lisa
Anderson
390
51
444
Don
Thomas
740
10
445
Doug
Jackson
960
5
446
James
Ewans
680
88
447
Jenny
Brown
410
36
448
Doug
Ewans
260
17
449
Mike
Ewans
500
72
450
Linda
McGregor
240
7
451
Jenny
Jones
990
28
452
Linda
Taylor
960
64
453
Daniel
Wilson
540
60

© 2020 Bryntum AB

" - }, - { - "html": "
Date: Jul 9, 2022 10:07 PM
Page: 15/17
#
First name
Surname
Score
Rank
Percent
453
Daniel
Wilson
540
60
454
Melissa
Johnson
320
52
455
Karen
McGregor
0
63
456
Daniel
Thomas
890
92
457
Don
Jackson
580
78
458
Don
Taylor
50
12
459
Jane
Taylor
230
56
460
Daniel
Adams
530
39
461
Jane
Brown
350
92
462
Mike
More
650
67
463
Lisa
More
720
5
464
Mary
Brown
950
23
465
David
McGregor
200
74
466
Don
Ewans
720
32
467
Adam
More
820
85
468
Linda
Adams
360
47
469
Mike
Brown
930
84
470
Don
Jones
140
55
471
Barbara
Anderson
220
41
472
Doug
Thomas
440
50
473
Doug
Wilson
190
91
474
Karen
Brown
720
86
475
Adam
Johnson
210
79
476
Adam
Jackson
960
94
477
Jenny
Williams
920
37
478
John
Miller
530
100
479
Barbara
Jackson
260
91
480
James
Smith
500
21
481
Doug
McGregor
600
18
482
Jane
Anderson
760
42
483
Jenny
Anderson
650
52
484
Mary
Davis
440
87
485
Karen
Ewans
220
39

© 2020 Bryntum AB

" - }, - { - "html": "
Date: Jul 9, 2022 10:07 PM
Page: 16/17
#
First name
Surname
Score
Rank
Percent
485
Karen
Ewans
220
39
486
Don
Scott
60
92
487
Adam
Miller
130
19
488
John
Jackson
870
42
489
Karen
Scott
800
87
490
Linda
Brown
460
65
491
Don
Taylor
270
5
492
John
Adams
610
74
493
Doug
Jones
870
42
494
James
Davis
930
34
495
Mike
Johnson
650
20
496
Don
Johnson
160
87
497
Jane
McGregor
900
70
498
Jane
Thomas
10
76
499
Lisa
Anderson
50
96
500
Don
Thomas
620
75
501
Doug
Jackson
280
55
502
James
Ewans
730
16
503
Jenny
Brown
60
55
504
Doug
Ewans
20
91
505
Mike
Ewans
950
43
506
Linda
McGregor
710
16
507
Jenny
Jones
470
10
508
Linda
Taylor
230
30
509
Daniel
Wilson
200
77
510
Melissa
Johnson
410
88
511
Karen
McGregor
320
66
512
Daniel
Thomas
840
20
513
Don
Jackson
480
2
514
Don
Taylor
300
87
515
Jane
Taylor
380
17
516
Daniel
Adams
430
43
517
Jane
Brown
20
26
518
Mike
More
430
35

© 2020 Bryntum AB

" - }, - { - "html": "
Date: Jul 9, 2022 10:07 PM
Page: 17/17
#
First name
Surname
Score
Rank
Percent
518
Mike
More
430
35
519
Lisa
More
240
72
520
Mary
Brown
180
21
521
David
McGregor
450
65
522
Don
Ewans
170
8
523
Adam
More
380
27
524
Linda
Adams
370
90
525
Mike
Brown
960
65
526
Don
Jones
530
10
527
Barbara
Anderson
90
40
528
Doug
Thomas
730
47
529
Doug
Wilson
760
84
530
Karen
Brown
690
9
531
Adam
Johnson
470
36
532
Adam
Jackson
320
53

© 2020 Bryntum AB

" - } - ], - "orientation": "portrait", - "format": "A4", - "fileFormat": "pdf", - "fileName": "Grid", - "sendAsBinary": true -} diff --git a/__tests__/samples/parallel/parallel2.json b/__tests__/samples/parallel/parallel2.json deleted file mode 100644 index 6aec710..0000000 --- a/__tests__/samples/parallel/parallel2.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "html": [ - { "html" : "
Date: Dec 21, 2021 11:44 AM
#
First name
Surname
Score
Rank
Percent
1
Don
Taylor
880
99
2
John
Adams
850
55
3
Doug
Jones
330
100
4
James
Davis
790
33
5
Mike
Johnson
780
60
6
Don
Johnson
640
5
7
Jane
McGregor
290
3
8
Jane
Thomas
400
50
9
Lisa
Anderson
890
70
10
Don
Thomas
10
96
11
Doug
Jackson
270
3
12
James
Ewans
140
87
13
Jenny
Brown
560
69
14
Doug
Ewans
550
34
15
Mike
Ewans
70
43
16
Linda
McGregor
60
87
17
Jenny
Jones
290
53
18
Linda
Taylor
390
16
19
Daniel
Wilson
80
49
20
Melissa
Johnson
450
77
21
Karen
McGregor
690
80
22
Daniel
Thomas
620
1
23
Don
Jackson
570
11
24
Don
Taylor
0
90
25
Jane
Taylor
600
30
26
Daniel
Adams
470
24
27
Jane
Brown
740
77
28
Mike
More
430
50
29
Lisa
More
900
75
30
Mary
Brown
980
57
31
David
McGregor
460
8
32
Don
Ewans
740
4
33
Adam
More
210
100
34
Linda
Adams
170
34
35
Mike
Brown
420
55
36
Don
Jones
590
19
37
Barbara
Anderson
730
76
38
Doug
Thomas
350
94
39
Doug
Wilson
530
54
40
Karen
Brown
340
23
41
Adam
Johnson
450
36
42
Adam
Jackson
370
83
43
Jenny
Williams
290
10
44
John
Miller
760
1
45
Barbara
Jackson
370
89
46
James
Smith
950
8
47
Doug
McGregor
360
22
48
Jane
Anderson
280
20
49
Jenny
Anderson
540
55
50
Mary
Davis
530
71

© 2020 Bryntum AB

" } - ], - "orientation": "portrait", - "format": "A4", - "fileFormat": "pdf", - "fileName": "base_https", - "sendAsBinary": true -} diff --git a/__tests__/samples/resources/build/fontawesome/css/fontawesome.css b/__tests__/samples/resources/build/fontawesome/css/fontawesome.css new file mode 100644 index 0000000..a9b2ec8 --- /dev/null +++ b/__tests__/samples/resources/build/fontawesome/css/fontawesome.css @@ -0,0 +1,6243 @@ +/*! + * Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2024 Fonticons, Inc. + */ +.fa { + font-family: var(--fa-style-family, "Font Awesome 6 Free"); + font-weight: var(--fa-style, 900); } + +.fas, +.far, +.fab, +.fa-solid, +.fa-regular, +.fa-brands, +.fa { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + display: var(--fa-display, inline-block); + font-style: normal; + font-variant: normal; + line-height: 1; + text-rendering: auto; } + +.fas::before, +.far::before, +.fab::before, +.fa-solid::before, +.fa-regular::before, +.fa-brands::before, +.fa::before { + content: var(--fa); } + +.fa-classic, +.fas, +.fa-solid, +.far, +.fa-regular { + font-family: 'Font Awesome 6 Free'; } + +.fa-brands, +.fab { + font-family: 'Font Awesome 6 Brands'; } + +.fa-1x { + font-size: 1em; } + +.fa-2x { + font-size: 2em; } + +.fa-3x { + font-size: 3em; } + +.fa-4x { + font-size: 4em; } + +.fa-5x { + font-size: 5em; } + +.fa-6x { + font-size: 6em; } + +.fa-7x { + font-size: 7em; } + +.fa-8x { + font-size: 8em; } + +.fa-9x { + font-size: 9em; } + +.fa-10x { + font-size: 10em; } + +.fa-2xs { + font-size: 0.625em; + line-height: 0.1em; + vertical-align: 0.225em; } + +.fa-xs { + font-size: 0.75em; + line-height: 0.08333em; + vertical-align: 0.125em; } + +.fa-sm { + font-size: 0.875em; + line-height: 0.07143em; + vertical-align: 0.05357em; } + +.fa-lg { + font-size: 1.25em; + line-height: 0.05em; + vertical-align: -0.075em; } + +.fa-xl { + font-size: 1.5em; + line-height: 0.04167em; + vertical-align: -0.125em; } + +.fa-2xl { + font-size: 2em; + line-height: 0.03125em; + vertical-align: -0.1875em; } + +.fa-fw { + text-align: center; + width: 1.25em; } + +.fa-ul { + list-style-type: none; + margin-left: var(--fa-li-margin, 2.5em); + padding-left: 0; } + .fa-ul > li { + position: relative; } + +.fa-li { + left: calc(-1 * var(--fa-li-width, 2em)); + position: absolute; + text-align: center; + width: var(--fa-li-width, 2em); + line-height: inherit; } + +.fa-border { + border-color: var(--fa-border-color, #eee); + border-radius: var(--fa-border-radius, 0.1em); + border-style: var(--fa-border-style, solid); + border-width: var(--fa-border-width, 0.08em); + padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); } + +.fa-pull-left { + float: left; + margin-right: var(--fa-pull-margin, 0.3em); } + +.fa-pull-right { + float: right; + margin-left: var(--fa-pull-margin, 0.3em); } + +.fa-beat { + animation-name: fa-beat; + animation-delay: var(--fa-animation-delay, 0s); + animation-direction: var(--fa-animation-direction, normal); + animation-duration: var(--fa-animation-duration, 1s); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-timing-function: var(--fa-animation-timing, ease-in-out); } + +.fa-bounce { + animation-name: fa-bounce; + animation-delay: var(--fa-animation-delay, 0s); + animation-direction: var(--fa-animation-direction, normal); + animation-duration: var(--fa-animation-duration, 1s); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); } + +.fa-fade { + animation-name: fa-fade; + animation-delay: var(--fa-animation-delay, 0s); + animation-direction: var(--fa-animation-direction, normal); + animation-duration: var(--fa-animation-duration, 1s); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } + +.fa-beat-fade { + animation-name: fa-beat-fade; + animation-delay: var(--fa-animation-delay, 0s); + animation-direction: var(--fa-animation-direction, normal); + animation-duration: var(--fa-animation-duration, 1s); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } + +.fa-flip { + animation-name: fa-flip; + animation-delay: var(--fa-animation-delay, 0s); + animation-direction: var(--fa-animation-direction, normal); + animation-duration: var(--fa-animation-duration, 1s); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-timing-function: var(--fa-animation-timing, ease-in-out); } + +.fa-shake { + animation-name: fa-shake; + animation-delay: var(--fa-animation-delay, 0s); + animation-direction: var(--fa-animation-direction, normal); + animation-duration: var(--fa-animation-duration, 1s); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-timing-function: var(--fa-animation-timing, linear); } + +.fa-spin { + animation-name: fa-spin; + animation-delay: var(--fa-animation-delay, 0s); + animation-direction: var(--fa-animation-direction, normal); + animation-duration: var(--fa-animation-duration, 2s); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-timing-function: var(--fa-animation-timing, linear); } + +.fa-spin-reverse { + --fa-animation-direction: reverse; } + +.fa-pulse, +.fa-spin-pulse { + animation-name: fa-spin; + animation-direction: var(--fa-animation-direction, normal); + animation-duration: var(--fa-animation-duration, 1s); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-timing-function: var(--fa-animation-timing, steps(8)); } + +@media (prefers-reduced-motion: reduce) { + .fa-beat, + .fa-bounce, + .fa-fade, + .fa-beat-fade, + .fa-flip, + .fa-pulse, + .fa-shake, + .fa-spin, + .fa-spin-pulse { + animation-delay: -1ms; + animation-duration: 1ms; + animation-iteration-count: 1; + transition-delay: 0s; + transition-duration: 0s; } } + +@keyframes fa-beat { + 0%, 90% { + transform: scale(1); } + 45% { + transform: scale(var(--fa-beat-scale, 1.25)); } } + +@keyframes fa-bounce { + 0% { + transform: scale(1, 1) translateY(0); } + 10% { + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); } + 30% { + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); } + 50% { + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); } + 57% { + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } + 64% { + transform: scale(1, 1) translateY(0); } + 100% { + transform: scale(1, 1) translateY(0); } } + +@keyframes fa-fade { + 50% { + opacity: var(--fa-fade-opacity, 0.4); } } + +@keyframes fa-beat-fade { + 0%, 100% { + opacity: var(--fa-beat-fade-opacity, 0.4); + transform: scale(1); } + 50% { + opacity: 1; + transform: scale(var(--fa-beat-fade-scale, 1.125)); } } + +@keyframes fa-flip { + 50% { + transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } } + +@keyframes fa-shake { + 0% { + transform: rotate(-15deg); } + 4% { + transform: rotate(15deg); } + 8%, 24% { + transform: rotate(-18deg); } + 12%, 28% { + transform: rotate(18deg); } + 16% { + transform: rotate(-22deg); } + 20% { + transform: rotate(22deg); } + 32% { + transform: rotate(-12deg); } + 36% { + transform: rotate(12deg); } + 40%, 100% { + transform: rotate(0deg); } } + +@keyframes fa-spin { + 0% { + transform: rotate(0deg); } + 100% { + transform: rotate(360deg); } } + +.fa-rotate-90 { + transform: rotate(90deg); } + +.fa-rotate-180 { + transform: rotate(180deg); } + +.fa-rotate-270 { + transform: rotate(270deg); } + +.fa-flip-horizontal { + transform: scale(-1, 1); } + +.fa-flip-vertical { + transform: scale(1, -1); } + +.fa-flip-both, +.fa-flip-horizontal.fa-flip-vertical { + transform: scale(-1, -1); } + +.fa-rotate-by { + transform: rotate(var(--fa-rotate-angle, 0)); } + +.fa-stack { + display: inline-block; + height: 2em; + line-height: 2em; + position: relative; + vertical-align: middle; + width: 2.5em; } + +.fa-stack-1x, +.fa-stack-2x { + left: 0; + position: absolute; + text-align: center; + width: 100%; + z-index: var(--fa-stack-z-index, auto); } + +.fa-stack-1x { + line-height: inherit; } + +.fa-stack-2x { + font-size: 2em; } + +.fa-inverse { + color: var(--fa-inverse, #fff); } + +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen +readers do not read off random characters that represent icons */ + +.fa-0 { + --fa: "\30"; } + +.fa-1 { + --fa: "\31"; } + +.fa-2 { + --fa: "\32"; } + +.fa-3 { + --fa: "\33"; } + +.fa-4 { + --fa: "\34"; } + +.fa-5 { + --fa: "\35"; } + +.fa-6 { + --fa: "\36"; } + +.fa-7 { + --fa: "\37"; } + +.fa-8 { + --fa: "\38"; } + +.fa-9 { + --fa: "\39"; } + +.fa-fill-drip { + --fa: "\f576"; } + +.fa-arrows-to-circle { + --fa: "\e4bd"; } + +.fa-circle-chevron-right { + --fa: "\f138"; } + +.fa-chevron-circle-right { + --fa: "\f138"; } + +.fa-at { + --fa: "\40"; } + +.fa-trash-can { + --fa: "\f2ed"; } + +.fa-trash-alt { + --fa: "\f2ed"; } + +.fa-text-height { + --fa: "\f034"; } + +.fa-user-xmark { + --fa: "\f235"; } + +.fa-user-times { + --fa: "\f235"; } + +.fa-stethoscope { + --fa: "\f0f1"; } + +.fa-message { + --fa: "\f27a"; } + +.fa-comment-alt { + --fa: "\f27a"; } + +.fa-info { + --fa: "\f129"; } + +.fa-down-left-and-up-right-to-center { + --fa: "\f422"; } + +.fa-compress-alt { + --fa: "\f422"; } + +.fa-explosion { + --fa: "\e4e9"; } + +.fa-file-lines { + --fa: "\f15c"; } + +.fa-file-alt { + --fa: "\f15c"; } + +.fa-file-text { + --fa: "\f15c"; } + +.fa-wave-square { + --fa: "\f83e"; } + +.fa-ring { + --fa: "\f70b"; } + +.fa-building-un { + --fa: "\e4d9"; } + +.fa-dice-three { + --fa: "\f527"; } + +.fa-calendar-days { + --fa: "\f073"; } + +.fa-calendar-alt { + --fa: "\f073"; } + +.fa-anchor-circle-check { + --fa: "\e4aa"; } + +.fa-building-circle-arrow-right { + --fa: "\e4d1"; } + +.fa-volleyball { + --fa: "\f45f"; } + +.fa-volleyball-ball { + --fa: "\f45f"; } + +.fa-arrows-up-to-line { + --fa: "\e4c2"; } + +.fa-sort-down { + --fa: "\f0dd"; } + +.fa-sort-desc { + --fa: "\f0dd"; } + +.fa-circle-minus { + --fa: "\f056"; } + +.fa-minus-circle { + --fa: "\f056"; } + +.fa-door-open { + --fa: "\f52b"; } + +.fa-right-from-bracket { + --fa: "\f2f5"; } + +.fa-sign-out-alt { + --fa: "\f2f5"; } + +.fa-atom { + --fa: "\f5d2"; } + +.fa-soap { + --fa: "\e06e"; } + +.fa-icons { + --fa: "\f86d"; } + +.fa-heart-music-camera-bolt { + --fa: "\f86d"; } + +.fa-microphone-lines-slash { + --fa: "\f539"; } + +.fa-microphone-alt-slash { + --fa: "\f539"; } + +.fa-bridge-circle-check { + --fa: "\e4c9"; } + +.fa-pump-medical { + --fa: "\e06a"; } + +.fa-fingerprint { + --fa: "\f577"; } + +.fa-hand-point-right { + --fa: "\f0a4"; } + +.fa-magnifying-glass-location { + --fa: "\f689"; } + +.fa-search-location { + --fa: "\f689"; } + +.fa-forward-step { + --fa: "\f051"; } + +.fa-step-forward { + --fa: "\f051"; } + +.fa-face-smile-beam { + --fa: "\f5b8"; } + +.fa-smile-beam { + --fa: "\f5b8"; } + +.fa-flag-checkered { + --fa: "\f11e"; } + +.fa-football { + --fa: "\f44e"; } + +.fa-football-ball { + --fa: "\f44e"; } + +.fa-school-circle-exclamation { + --fa: "\e56c"; } + +.fa-crop { + --fa: "\f125"; } + +.fa-angles-down { + --fa: "\f103"; } + +.fa-angle-double-down { + --fa: "\f103"; } + +.fa-users-rectangle { + --fa: "\e594"; } + +.fa-people-roof { + --fa: "\e537"; } + +.fa-people-line { + --fa: "\e534"; } + +.fa-beer-mug-empty { + --fa: "\f0fc"; } + +.fa-beer { + --fa: "\f0fc"; } + +.fa-diagram-predecessor { + --fa: "\e477"; } + +.fa-arrow-up-long { + --fa: "\f176"; } + +.fa-long-arrow-up { + --fa: "\f176"; } + +.fa-fire-flame-simple { + --fa: "\f46a"; } + +.fa-burn { + --fa: "\f46a"; } + +.fa-person { + --fa: "\f183"; } + +.fa-male { + --fa: "\f183"; } + +.fa-laptop { + --fa: "\f109"; } + +.fa-file-csv { + --fa: "\f6dd"; } + +.fa-menorah { + --fa: "\f676"; } + +.fa-truck-plane { + --fa: "\e58f"; } + +.fa-record-vinyl { + --fa: "\f8d9"; } + +.fa-face-grin-stars { + --fa: "\f587"; } + +.fa-grin-stars { + --fa: "\f587"; } + +.fa-bong { + --fa: "\f55c"; } + +.fa-spaghetti-monster-flying { + --fa: "\f67b"; } + +.fa-pastafarianism { + --fa: "\f67b"; } + +.fa-arrow-down-up-across-line { + --fa: "\e4af"; } + +.fa-spoon { + --fa: "\f2e5"; } + +.fa-utensil-spoon { + --fa: "\f2e5"; } + +.fa-jar-wheat { + --fa: "\e517"; } + +.fa-envelopes-bulk { + --fa: "\f674"; } + +.fa-mail-bulk { + --fa: "\f674"; } + +.fa-file-circle-exclamation { + --fa: "\e4eb"; } + +.fa-circle-h { + --fa: "\f47e"; } + +.fa-hospital-symbol { + --fa: "\f47e"; } + +.fa-pager { + --fa: "\f815"; } + +.fa-address-book { + --fa: "\f2b9"; } + +.fa-contact-book { + --fa: "\f2b9"; } + +.fa-strikethrough { + --fa: "\f0cc"; } + +.fa-k { + --fa: "\4b"; } + +.fa-landmark-flag { + --fa: "\e51c"; } + +.fa-pencil { + --fa: "\f303"; } + +.fa-pencil-alt { + --fa: "\f303"; } + +.fa-backward { + --fa: "\f04a"; } + +.fa-caret-right { + --fa: "\f0da"; } + +.fa-comments { + --fa: "\f086"; } + +.fa-paste { + --fa: "\f0ea"; } + +.fa-file-clipboard { + --fa: "\f0ea"; } + +.fa-code-pull-request { + --fa: "\e13c"; } + +.fa-clipboard-list { + --fa: "\f46d"; } + +.fa-truck-ramp-box { + --fa: "\f4de"; } + +.fa-truck-loading { + --fa: "\f4de"; } + +.fa-user-check { + --fa: "\f4fc"; } + +.fa-vial-virus { + --fa: "\e597"; } + +.fa-sheet-plastic { + --fa: "\e571"; } + +.fa-blog { + --fa: "\f781"; } + +.fa-user-ninja { + --fa: "\f504"; } + +.fa-person-arrow-up-from-line { + --fa: "\e539"; } + +.fa-scroll-torah { + --fa: "\f6a0"; } + +.fa-torah { + --fa: "\f6a0"; } + +.fa-broom-ball { + --fa: "\f458"; } + +.fa-quidditch { + --fa: "\f458"; } + +.fa-quidditch-broom-ball { + --fa: "\f458"; } + +.fa-toggle-off { + --fa: "\f204"; } + +.fa-box-archive { + --fa: "\f187"; } + +.fa-archive { + --fa: "\f187"; } + +.fa-person-drowning { + --fa: "\e545"; } + +.fa-arrow-down-9-1 { + --fa: "\f886"; } + +.fa-sort-numeric-desc { + --fa: "\f886"; } + +.fa-sort-numeric-down-alt { + --fa: "\f886"; } + +.fa-face-grin-tongue-squint { + --fa: "\f58a"; } + +.fa-grin-tongue-squint { + --fa: "\f58a"; } + +.fa-spray-can { + --fa: "\f5bd"; } + +.fa-truck-monster { + --fa: "\f63b"; } + +.fa-w { + --fa: "\57"; } + +.fa-earth-africa { + --fa: "\f57c"; } + +.fa-globe-africa { + --fa: "\f57c"; } + +.fa-rainbow { + --fa: "\f75b"; } + +.fa-circle-notch { + --fa: "\f1ce"; } + +.fa-tablet-screen-button { + --fa: "\f3fa"; } + +.fa-tablet-alt { + --fa: "\f3fa"; } + +.fa-paw { + --fa: "\f1b0"; } + +.fa-cloud { + --fa: "\f0c2"; } + +.fa-trowel-bricks { + --fa: "\e58a"; } + +.fa-face-flushed { + --fa: "\f579"; } + +.fa-flushed { + --fa: "\f579"; } + +.fa-hospital-user { + --fa: "\f80d"; } + +.fa-tent-arrow-left-right { + --fa: "\e57f"; } + +.fa-gavel { + --fa: "\f0e3"; } + +.fa-legal { + --fa: "\f0e3"; } + +.fa-binoculars { + --fa: "\f1e5"; } + +.fa-microphone-slash { + --fa: "\f131"; } + +.fa-box-tissue { + --fa: "\e05b"; } + +.fa-motorcycle { + --fa: "\f21c"; } + +.fa-bell-concierge { + --fa: "\f562"; } + +.fa-concierge-bell { + --fa: "\f562"; } + +.fa-pen-ruler { + --fa: "\f5ae"; } + +.fa-pencil-ruler { + --fa: "\f5ae"; } + +.fa-people-arrows { + --fa: "\e068"; } + +.fa-people-arrows-left-right { + --fa: "\e068"; } + +.fa-mars-and-venus-burst { + --fa: "\e523"; } + +.fa-square-caret-right { + --fa: "\f152"; } + +.fa-caret-square-right { + --fa: "\f152"; } + +.fa-scissors { + --fa: "\f0c4"; } + +.fa-cut { + --fa: "\f0c4"; } + +.fa-sun-plant-wilt { + --fa: "\e57a"; } + +.fa-toilets-portable { + --fa: "\e584"; } + +.fa-hockey-puck { + --fa: "\f453"; } + +.fa-table { + --fa: "\f0ce"; } + +.fa-magnifying-glass-arrow-right { + --fa: "\e521"; } + +.fa-tachograph-digital { + --fa: "\f566"; } + +.fa-digital-tachograph { + --fa: "\f566"; } + +.fa-users-slash { + --fa: "\e073"; } + +.fa-clover { + --fa: "\e139"; } + +.fa-reply { + --fa: "\f3e5"; } + +.fa-mail-reply { + --fa: "\f3e5"; } + +.fa-star-and-crescent { + --fa: "\f699"; } + +.fa-house-fire { + --fa: "\e50c"; } + +.fa-square-minus { + --fa: "\f146"; } + +.fa-minus-square { + --fa: "\f146"; } + +.fa-helicopter { + --fa: "\f533"; } + +.fa-compass { + --fa: "\f14e"; } + +.fa-square-caret-down { + --fa: "\f150"; } + +.fa-caret-square-down { + --fa: "\f150"; } + +.fa-file-circle-question { + --fa: "\e4ef"; } + +.fa-laptop-code { + --fa: "\f5fc"; } + +.fa-swatchbook { + --fa: "\f5c3"; } + +.fa-prescription-bottle { + --fa: "\f485"; } + +.fa-bars { + --fa: "\f0c9"; } + +.fa-navicon { + --fa: "\f0c9"; } + +.fa-people-group { + --fa: "\e533"; } + +.fa-hourglass-end { + --fa: "\f253"; } + +.fa-hourglass-3 { + --fa: "\f253"; } + +.fa-heart-crack { + --fa: "\f7a9"; } + +.fa-heart-broken { + --fa: "\f7a9"; } + +.fa-square-up-right { + --fa: "\f360"; } + +.fa-external-link-square-alt { + --fa: "\f360"; } + +.fa-face-kiss-beam { + --fa: "\f597"; } + +.fa-kiss-beam { + --fa: "\f597"; } + +.fa-film { + --fa: "\f008"; } + +.fa-ruler-horizontal { + --fa: "\f547"; } + +.fa-people-robbery { + --fa: "\e536"; } + +.fa-lightbulb { + --fa: "\f0eb"; } + +.fa-caret-left { + --fa: "\f0d9"; } + +.fa-circle-exclamation { + --fa: "\f06a"; } + +.fa-exclamation-circle { + --fa: "\f06a"; } + +.fa-school-circle-xmark { + --fa: "\e56d"; } + +.fa-arrow-right-from-bracket { + --fa: "\f08b"; } + +.fa-sign-out { + --fa: "\f08b"; } + +.fa-circle-chevron-down { + --fa: "\f13a"; } + +.fa-chevron-circle-down { + --fa: "\f13a"; } + +.fa-unlock-keyhole { + --fa: "\f13e"; } + +.fa-unlock-alt { + --fa: "\f13e"; } + +.fa-cloud-showers-heavy { + --fa: "\f740"; } + +.fa-headphones-simple { + --fa: "\f58f"; } + +.fa-headphones-alt { + --fa: "\f58f"; } + +.fa-sitemap { + --fa: "\f0e8"; } + +.fa-circle-dollar-to-slot { + --fa: "\f4b9"; } + +.fa-donate { + --fa: "\f4b9"; } + +.fa-memory { + --fa: "\f538"; } + +.fa-road-spikes { + --fa: "\e568"; } + +.fa-fire-burner { + --fa: "\e4f1"; } + +.fa-flag { + --fa: "\f024"; } + +.fa-hanukiah { + --fa: "\f6e6"; } + +.fa-feather { + --fa: "\f52d"; } + +.fa-volume-low { + --fa: "\f027"; } + +.fa-volume-down { + --fa: "\f027"; } + +.fa-comment-slash { + --fa: "\f4b3"; } + +.fa-cloud-sun-rain { + --fa: "\f743"; } + +.fa-compress { + --fa: "\f066"; } + +.fa-wheat-awn { + --fa: "\e2cd"; } + +.fa-wheat-alt { + --fa: "\e2cd"; } + +.fa-ankh { + --fa: "\f644"; } + +.fa-hands-holding-child { + --fa: "\e4fa"; } + +.fa-asterisk { + --fa: "\2a"; } + +.fa-square-check { + --fa: "\f14a"; } + +.fa-check-square { + --fa: "\f14a"; } + +.fa-peseta-sign { + --fa: "\e221"; } + +.fa-heading { + --fa: "\f1dc"; } + +.fa-header { + --fa: "\f1dc"; } + +.fa-ghost { + --fa: "\f6e2"; } + +.fa-list { + --fa: "\f03a"; } + +.fa-list-squares { + --fa: "\f03a"; } + +.fa-square-phone-flip { + --fa: "\f87b"; } + +.fa-phone-square-alt { + --fa: "\f87b"; } + +.fa-cart-plus { + --fa: "\f217"; } + +.fa-gamepad { + --fa: "\f11b"; } + +.fa-circle-dot { + --fa: "\f192"; } + +.fa-dot-circle { + --fa: "\f192"; } + +.fa-face-dizzy { + --fa: "\f567"; } + +.fa-dizzy { + --fa: "\f567"; } + +.fa-egg { + --fa: "\f7fb"; } + +.fa-house-medical-circle-xmark { + --fa: "\e513"; } + +.fa-campground { + --fa: "\f6bb"; } + +.fa-folder-plus { + --fa: "\f65e"; } + +.fa-futbol { + --fa: "\f1e3"; } + +.fa-futbol-ball { + --fa: "\f1e3"; } + +.fa-soccer-ball { + --fa: "\f1e3"; } + +.fa-paintbrush { + --fa: "\f1fc"; } + +.fa-paint-brush { + --fa: "\f1fc"; } + +.fa-lock { + --fa: "\f023"; } + +.fa-gas-pump { + --fa: "\f52f"; } + +.fa-hot-tub-person { + --fa: "\f593"; } + +.fa-hot-tub { + --fa: "\f593"; } + +.fa-map-location { + --fa: "\f59f"; } + +.fa-map-marked { + --fa: "\f59f"; } + +.fa-house-flood-water { + --fa: "\e50e"; } + +.fa-tree { + --fa: "\f1bb"; } + +.fa-bridge-lock { + --fa: "\e4cc"; } + +.fa-sack-dollar { + --fa: "\f81d"; } + +.fa-pen-to-square { + --fa: "\f044"; } + +.fa-edit { + --fa: "\f044"; } + +.fa-car-side { + --fa: "\f5e4"; } + +.fa-share-nodes { + --fa: "\f1e0"; } + +.fa-share-alt { + --fa: "\f1e0"; } + +.fa-heart-circle-minus { + --fa: "\e4ff"; } + +.fa-hourglass-half { + --fa: "\f252"; } + +.fa-hourglass-2 { + --fa: "\f252"; } + +.fa-microscope { + --fa: "\f610"; } + +.fa-sink { + --fa: "\e06d"; } + +.fa-bag-shopping { + --fa: "\f290"; } + +.fa-shopping-bag { + --fa: "\f290"; } + +.fa-arrow-down-z-a { + --fa: "\f881"; } + +.fa-sort-alpha-desc { + --fa: "\f881"; } + +.fa-sort-alpha-down-alt { + --fa: "\f881"; } + +.fa-mitten { + --fa: "\f7b5"; } + +.fa-person-rays { + --fa: "\e54d"; } + +.fa-users { + --fa: "\f0c0"; } + +.fa-eye-slash { + --fa: "\f070"; } + +.fa-flask-vial { + --fa: "\e4f3"; } + +.fa-hand { + --fa: "\f256"; } + +.fa-hand-paper { + --fa: "\f256"; } + +.fa-om { + --fa: "\f679"; } + +.fa-worm { + --fa: "\e599"; } + +.fa-house-circle-xmark { + --fa: "\e50b"; } + +.fa-plug { + --fa: "\f1e6"; } + +.fa-chevron-up { + --fa: "\f077"; } + +.fa-hand-spock { + --fa: "\f259"; } + +.fa-stopwatch { + --fa: "\f2f2"; } + +.fa-face-kiss { + --fa: "\f596"; } + +.fa-kiss { + --fa: "\f596"; } + +.fa-bridge-circle-xmark { + --fa: "\e4cb"; } + +.fa-face-grin-tongue { + --fa: "\f589"; } + +.fa-grin-tongue { + --fa: "\f589"; } + +.fa-chess-bishop { + --fa: "\f43a"; } + +.fa-face-grin-wink { + --fa: "\f58c"; } + +.fa-grin-wink { + --fa: "\f58c"; } + +.fa-ear-deaf { + --fa: "\f2a4"; } + +.fa-deaf { + --fa: "\f2a4"; } + +.fa-deafness { + --fa: "\f2a4"; } + +.fa-hard-of-hearing { + --fa: "\f2a4"; } + +.fa-road-circle-check { + --fa: "\e564"; } + +.fa-dice-five { + --fa: "\f523"; } + +.fa-square-rss { + --fa: "\f143"; } + +.fa-rss-square { + --fa: "\f143"; } + +.fa-land-mine-on { + --fa: "\e51b"; } + +.fa-i-cursor { + --fa: "\f246"; } + +.fa-stamp { + --fa: "\f5bf"; } + +.fa-stairs { + --fa: "\e289"; } + +.fa-i { + --fa: "\49"; } + +.fa-hryvnia-sign { + --fa: "\f6f2"; } + +.fa-hryvnia { + --fa: "\f6f2"; } + +.fa-pills { + --fa: "\f484"; } + +.fa-face-grin-wide { + --fa: "\f581"; } + +.fa-grin-alt { + --fa: "\f581"; } + +.fa-tooth { + --fa: "\f5c9"; } + +.fa-v { + --fa: "\56"; } + +.fa-bangladeshi-taka-sign { + --fa: "\e2e6"; } + +.fa-bicycle { + --fa: "\f206"; } + +.fa-staff-snake { + --fa: "\e579"; } + +.fa-rod-asclepius { + --fa: "\e579"; } + +.fa-rod-snake { + --fa: "\e579"; } + +.fa-staff-aesculapius { + --fa: "\e579"; } + +.fa-head-side-cough-slash { + --fa: "\e062"; } + +.fa-truck-medical { + --fa: "\f0f9"; } + +.fa-ambulance { + --fa: "\f0f9"; } + +.fa-wheat-awn-circle-exclamation { + --fa: "\e598"; } + +.fa-snowman { + --fa: "\f7d0"; } + +.fa-mortar-pestle { + --fa: "\f5a7"; } + +.fa-road-barrier { + --fa: "\e562"; } + +.fa-school { + --fa: "\f549"; } + +.fa-igloo { + --fa: "\f7ae"; } + +.fa-joint { + --fa: "\f595"; } + +.fa-angle-right { + --fa: "\f105"; } + +.fa-horse { + --fa: "\f6f0"; } + +.fa-q { + --fa: "\51"; } + +.fa-g { + --fa: "\47"; } + +.fa-notes-medical { + --fa: "\f481"; } + +.fa-temperature-half { + --fa: "\f2c9"; } + +.fa-temperature-2 { + --fa: "\f2c9"; } + +.fa-thermometer-2 { + --fa: "\f2c9"; } + +.fa-thermometer-half { + --fa: "\f2c9"; } + +.fa-dong-sign { + --fa: "\e169"; } + +.fa-capsules { + --fa: "\f46b"; } + +.fa-poo-storm { + --fa: "\f75a"; } + +.fa-poo-bolt { + --fa: "\f75a"; } + +.fa-face-frown-open { + --fa: "\f57a"; } + +.fa-frown-open { + --fa: "\f57a"; } + +.fa-hand-point-up { + --fa: "\f0a6"; } + +.fa-money-bill { + --fa: "\f0d6"; } + +.fa-bookmark { + --fa: "\f02e"; } + +.fa-align-justify { + --fa: "\f039"; } + +.fa-umbrella-beach { + --fa: "\f5ca"; } + +.fa-helmet-un { + --fa: "\e503"; } + +.fa-bullseye { + --fa: "\f140"; } + +.fa-bacon { + --fa: "\f7e5"; } + +.fa-hand-point-down { + --fa: "\f0a7"; } + +.fa-arrow-up-from-bracket { + --fa: "\e09a"; } + +.fa-folder { + --fa: "\f07b"; } + +.fa-folder-blank { + --fa: "\f07b"; } + +.fa-file-waveform { + --fa: "\f478"; } + +.fa-file-medical-alt { + --fa: "\f478"; } + +.fa-radiation { + --fa: "\f7b9"; } + +.fa-chart-simple { + --fa: "\e473"; } + +.fa-mars-stroke { + --fa: "\f229"; } + +.fa-vial { + --fa: "\f492"; } + +.fa-gauge { + --fa: "\f624"; } + +.fa-dashboard { + --fa: "\f624"; } + +.fa-gauge-med { + --fa: "\f624"; } + +.fa-tachometer-alt-average { + --fa: "\f624"; } + +.fa-wand-magic-sparkles { + --fa: "\e2ca"; } + +.fa-magic-wand-sparkles { + --fa: "\e2ca"; } + +.fa-e { + --fa: "\45"; } + +.fa-pen-clip { + --fa: "\f305"; } + +.fa-pen-alt { + --fa: "\f305"; } + +.fa-bridge-circle-exclamation { + --fa: "\e4ca"; } + +.fa-user { + --fa: "\f007"; } + +.fa-school-circle-check { + --fa: "\e56b"; } + +.fa-dumpster { + --fa: "\f793"; } + +.fa-van-shuttle { + --fa: "\f5b6"; } + +.fa-shuttle-van { + --fa: "\f5b6"; } + +.fa-building-user { + --fa: "\e4da"; } + +.fa-square-caret-left { + --fa: "\f191"; } + +.fa-caret-square-left { + --fa: "\f191"; } + +.fa-highlighter { + --fa: "\f591"; } + +.fa-key { + --fa: "\f084"; } + +.fa-bullhorn { + --fa: "\f0a1"; } + +.fa-globe { + --fa: "\f0ac"; } + +.fa-synagogue { + --fa: "\f69b"; } + +.fa-person-half-dress { + --fa: "\e548"; } + +.fa-road-bridge { + --fa: "\e563"; } + +.fa-location-arrow { + --fa: "\f124"; } + +.fa-c { + --fa: "\43"; } + +.fa-tablet-button { + --fa: "\f10a"; } + +.fa-building-lock { + --fa: "\e4d6"; } + +.fa-pizza-slice { + --fa: "\f818"; } + +.fa-money-bill-wave { + --fa: "\f53a"; } + +.fa-chart-area { + --fa: "\f1fe"; } + +.fa-area-chart { + --fa: "\f1fe"; } + +.fa-house-flag { + --fa: "\e50d"; } + +.fa-person-circle-minus { + --fa: "\e540"; } + +.fa-ban { + --fa: "\f05e"; } + +.fa-cancel { + --fa: "\f05e"; } + +.fa-camera-rotate { + --fa: "\e0d8"; } + +.fa-spray-can-sparkles { + --fa: "\f5d0"; } + +.fa-air-freshener { + --fa: "\f5d0"; } + +.fa-star { + --fa: "\f005"; } + +.fa-repeat { + --fa: "\f363"; } + +.fa-cross { + --fa: "\f654"; } + +.fa-box { + --fa: "\f466"; } + +.fa-venus-mars { + --fa: "\f228"; } + +.fa-arrow-pointer { + --fa: "\f245"; } + +.fa-mouse-pointer { + --fa: "\f245"; } + +.fa-maximize { + --fa: "\f31e"; } + +.fa-expand-arrows-alt { + --fa: "\f31e"; } + +.fa-charging-station { + --fa: "\f5e7"; } + +.fa-shapes { + --fa: "\f61f"; } + +.fa-triangle-circle-square { + --fa: "\f61f"; } + +.fa-shuffle { + --fa: "\f074"; } + +.fa-random { + --fa: "\f074"; } + +.fa-person-running { + --fa: "\f70c"; } + +.fa-running { + --fa: "\f70c"; } + +.fa-mobile-retro { + --fa: "\e527"; } + +.fa-grip-lines-vertical { + --fa: "\f7a5"; } + +.fa-spider { + --fa: "\f717"; } + +.fa-hands-bound { + --fa: "\e4f9"; } + +.fa-file-invoice-dollar { + --fa: "\f571"; } + +.fa-plane-circle-exclamation { + --fa: "\e556"; } + +.fa-x-ray { + --fa: "\f497"; } + +.fa-spell-check { + --fa: "\f891"; } + +.fa-slash { + --fa: "\f715"; } + +.fa-computer-mouse { + --fa: "\f8cc"; } + +.fa-mouse { + --fa: "\f8cc"; } + +.fa-arrow-right-to-bracket { + --fa: "\f090"; } + +.fa-sign-in { + --fa: "\f090"; } + +.fa-shop-slash { + --fa: "\e070"; } + +.fa-store-alt-slash { + --fa: "\e070"; } + +.fa-server { + --fa: "\f233"; } + +.fa-virus-covid-slash { + --fa: "\e4a9"; } + +.fa-shop-lock { + --fa: "\e4a5"; } + +.fa-hourglass-start { + --fa: "\f251"; } + +.fa-hourglass-1 { + --fa: "\f251"; } + +.fa-blender-phone { + --fa: "\f6b6"; } + +.fa-building-wheat { + --fa: "\e4db"; } + +.fa-person-breastfeeding { + --fa: "\e53a"; } + +.fa-right-to-bracket { + --fa: "\f2f6"; } + +.fa-sign-in-alt { + --fa: "\f2f6"; } + +.fa-venus { + --fa: "\f221"; } + +.fa-passport { + --fa: "\f5ab"; } + +.fa-thumbtack-slash { + --fa: "\e68f"; } + +.fa-thumb-tack-slash { + --fa: "\e68f"; } + +.fa-heart-pulse { + --fa: "\f21e"; } + +.fa-heartbeat { + --fa: "\f21e"; } + +.fa-people-carry-box { + --fa: "\f4ce"; } + +.fa-people-carry { + --fa: "\f4ce"; } + +.fa-temperature-high { + --fa: "\f769"; } + +.fa-microchip { + --fa: "\f2db"; } + +.fa-crown { + --fa: "\f521"; } + +.fa-weight-hanging { + --fa: "\f5cd"; } + +.fa-xmarks-lines { + --fa: "\e59a"; } + +.fa-file-prescription { + --fa: "\f572"; } + +.fa-weight-scale { + --fa: "\f496"; } + +.fa-weight { + --fa: "\f496"; } + +.fa-user-group { + --fa: "\f500"; } + +.fa-user-friends { + --fa: "\f500"; } + +.fa-arrow-up-a-z { + --fa: "\f15e"; } + +.fa-sort-alpha-up { + --fa: "\f15e"; } + +.fa-chess-knight { + --fa: "\f441"; } + +.fa-face-laugh-squint { + --fa: "\f59b"; } + +.fa-laugh-squint { + --fa: "\f59b"; } + +.fa-wheelchair { + --fa: "\f193"; } + +.fa-circle-arrow-up { + --fa: "\f0aa"; } + +.fa-arrow-circle-up { + --fa: "\f0aa"; } + +.fa-toggle-on { + --fa: "\f205"; } + +.fa-person-walking { + --fa: "\f554"; } + +.fa-walking { + --fa: "\f554"; } + +.fa-l { + --fa: "\4c"; } + +.fa-fire { + --fa: "\f06d"; } + +.fa-bed-pulse { + --fa: "\f487"; } + +.fa-procedures { + --fa: "\f487"; } + +.fa-shuttle-space { + --fa: "\f197"; } + +.fa-space-shuttle { + --fa: "\f197"; } + +.fa-face-laugh { + --fa: "\f599"; } + +.fa-laugh { + --fa: "\f599"; } + +.fa-folder-open { + --fa: "\f07c"; } + +.fa-heart-circle-plus { + --fa: "\e500"; } + +.fa-code-fork { + --fa: "\e13b"; } + +.fa-city { + --fa: "\f64f"; } + +.fa-microphone-lines { + --fa: "\f3c9"; } + +.fa-microphone-alt { + --fa: "\f3c9"; } + +.fa-pepper-hot { + --fa: "\f816"; } + +.fa-unlock { + --fa: "\f09c"; } + +.fa-colon-sign { + --fa: "\e140"; } + +.fa-headset { + --fa: "\f590"; } + +.fa-store-slash { + --fa: "\e071"; } + +.fa-road-circle-xmark { + --fa: "\e566"; } + +.fa-user-minus { + --fa: "\f503"; } + +.fa-mars-stroke-up { + --fa: "\f22a"; } + +.fa-mars-stroke-v { + --fa: "\f22a"; } + +.fa-champagne-glasses { + --fa: "\f79f"; } + +.fa-glass-cheers { + --fa: "\f79f"; } + +.fa-clipboard { + --fa: "\f328"; } + +.fa-house-circle-exclamation { + --fa: "\e50a"; } + +.fa-file-arrow-up { + --fa: "\f574"; } + +.fa-file-upload { + --fa: "\f574"; } + +.fa-wifi { + --fa: "\f1eb"; } + +.fa-wifi-3 { + --fa: "\f1eb"; } + +.fa-wifi-strong { + --fa: "\f1eb"; } + +.fa-bath { + --fa: "\f2cd"; } + +.fa-bathtub { + --fa: "\f2cd"; } + +.fa-underline { + --fa: "\f0cd"; } + +.fa-user-pen { + --fa: "\f4ff"; } + +.fa-user-edit { + --fa: "\f4ff"; } + +.fa-signature { + --fa: "\f5b7"; } + +.fa-stroopwafel { + --fa: "\f551"; } + +.fa-bold { + --fa: "\f032"; } + +.fa-anchor-lock { + --fa: "\e4ad"; } + +.fa-building-ngo { + --fa: "\e4d7"; } + +.fa-manat-sign { + --fa: "\e1d5"; } + +.fa-not-equal { + --fa: "\f53e"; } + +.fa-border-top-left { + --fa: "\f853"; } + +.fa-border-style { + --fa: "\f853"; } + +.fa-map-location-dot { + --fa: "\f5a0"; } + +.fa-map-marked-alt { + --fa: "\f5a0"; } + +.fa-jedi { + --fa: "\f669"; } + +.fa-square-poll-vertical { + --fa: "\f681"; } + +.fa-poll { + --fa: "\f681"; } + +.fa-mug-hot { + --fa: "\f7b6"; } + +.fa-car-battery { + --fa: "\f5df"; } + +.fa-battery-car { + --fa: "\f5df"; } + +.fa-gift { + --fa: "\f06b"; } + +.fa-dice-two { + --fa: "\f528"; } + +.fa-chess-queen { + --fa: "\f445"; } + +.fa-glasses { + --fa: "\f530"; } + +.fa-chess-board { + --fa: "\f43c"; } + +.fa-building-circle-check { + --fa: "\e4d2"; } + +.fa-person-chalkboard { + --fa: "\e53d"; } + +.fa-mars-stroke-right { + --fa: "\f22b"; } + +.fa-mars-stroke-h { + --fa: "\f22b"; } + +.fa-hand-back-fist { + --fa: "\f255"; } + +.fa-hand-rock { + --fa: "\f255"; } + +.fa-square-caret-up { + --fa: "\f151"; } + +.fa-caret-square-up { + --fa: "\f151"; } + +.fa-cloud-showers-water { + --fa: "\e4e4"; } + +.fa-chart-bar { + --fa: "\f080"; } + +.fa-bar-chart { + --fa: "\f080"; } + +.fa-hands-bubbles { + --fa: "\e05e"; } + +.fa-hands-wash { + --fa: "\e05e"; } + +.fa-less-than-equal { + --fa: "\f537"; } + +.fa-train { + --fa: "\f238"; } + +.fa-eye-low-vision { + --fa: "\f2a8"; } + +.fa-low-vision { + --fa: "\f2a8"; } + +.fa-crow { + --fa: "\f520"; } + +.fa-sailboat { + --fa: "\e445"; } + +.fa-window-restore { + --fa: "\f2d2"; } + +.fa-square-plus { + --fa: "\f0fe"; } + +.fa-plus-square { + --fa: "\f0fe"; } + +.fa-torii-gate { + --fa: "\f6a1"; } + +.fa-frog { + --fa: "\f52e"; } + +.fa-bucket { + --fa: "\e4cf"; } + +.fa-image { + --fa: "\f03e"; } + +.fa-microphone { + --fa: "\f130"; } + +.fa-cow { + --fa: "\f6c8"; } + +.fa-caret-up { + --fa: "\f0d8"; } + +.fa-screwdriver { + --fa: "\f54a"; } + +.fa-folder-closed { + --fa: "\e185"; } + +.fa-house-tsunami { + --fa: "\e515"; } + +.fa-square-nfi { + --fa: "\e576"; } + +.fa-arrow-up-from-ground-water { + --fa: "\e4b5"; } + +.fa-martini-glass { + --fa: "\f57b"; } + +.fa-glass-martini-alt { + --fa: "\f57b"; } + +.fa-square-binary { + --fa: "\e69b"; } + +.fa-rotate-left { + --fa: "\f2ea"; } + +.fa-rotate-back { + --fa: "\f2ea"; } + +.fa-rotate-backward { + --fa: "\f2ea"; } + +.fa-undo-alt { + --fa: "\f2ea"; } + +.fa-table-columns { + --fa: "\f0db"; } + +.fa-columns { + --fa: "\f0db"; } + +.fa-lemon { + --fa: "\f094"; } + +.fa-head-side-mask { + --fa: "\e063"; } + +.fa-handshake { + --fa: "\f2b5"; } + +.fa-gem { + --fa: "\f3a5"; } + +.fa-dolly { + --fa: "\f472"; } + +.fa-dolly-box { + --fa: "\f472"; } + +.fa-smoking { + --fa: "\f48d"; } + +.fa-minimize { + --fa: "\f78c"; } + +.fa-compress-arrows-alt { + --fa: "\f78c"; } + +.fa-monument { + --fa: "\f5a6"; } + +.fa-snowplow { + --fa: "\f7d2"; } + +.fa-angles-right { + --fa: "\f101"; } + +.fa-angle-double-right { + --fa: "\f101"; } + +.fa-cannabis { + --fa: "\f55f"; } + +.fa-circle-play { + --fa: "\f144"; } + +.fa-play-circle { + --fa: "\f144"; } + +.fa-tablets { + --fa: "\f490"; } + +.fa-ethernet { + --fa: "\f796"; } + +.fa-euro-sign { + --fa: "\f153"; } + +.fa-eur { + --fa: "\f153"; } + +.fa-euro { + --fa: "\f153"; } + +.fa-chair { + --fa: "\f6c0"; } + +.fa-circle-check { + --fa: "\f058"; } + +.fa-check-circle { + --fa: "\f058"; } + +.fa-circle-stop { + --fa: "\f28d"; } + +.fa-stop-circle { + --fa: "\f28d"; } + +.fa-compass-drafting { + --fa: "\f568"; } + +.fa-drafting-compass { + --fa: "\f568"; } + +.fa-plate-wheat { + --fa: "\e55a"; } + +.fa-icicles { + --fa: "\f7ad"; } + +.fa-person-shelter { + --fa: "\e54f"; } + +.fa-neuter { + --fa: "\f22c"; } + +.fa-id-badge { + --fa: "\f2c1"; } + +.fa-marker { + --fa: "\f5a1"; } + +.fa-face-laugh-beam { + --fa: "\f59a"; } + +.fa-laugh-beam { + --fa: "\f59a"; } + +.fa-helicopter-symbol { + --fa: "\e502"; } + +.fa-universal-access { + --fa: "\f29a"; } + +.fa-circle-chevron-up { + --fa: "\f139"; } + +.fa-chevron-circle-up { + --fa: "\f139"; } + +.fa-lari-sign { + --fa: "\e1c8"; } + +.fa-volcano { + --fa: "\f770"; } + +.fa-person-walking-dashed-line-arrow-right { + --fa: "\e553"; } + +.fa-sterling-sign { + --fa: "\f154"; } + +.fa-gbp { + --fa: "\f154"; } + +.fa-pound-sign { + --fa: "\f154"; } + +.fa-viruses { + --fa: "\e076"; } + +.fa-square-person-confined { + --fa: "\e577"; } + +.fa-user-tie { + --fa: "\f508"; } + +.fa-arrow-down-long { + --fa: "\f175"; } + +.fa-long-arrow-down { + --fa: "\f175"; } + +.fa-tent-arrow-down-to-line { + --fa: "\e57e"; } + +.fa-certificate { + --fa: "\f0a3"; } + +.fa-reply-all { + --fa: "\f122"; } + +.fa-mail-reply-all { + --fa: "\f122"; } + +.fa-suitcase { + --fa: "\f0f2"; } + +.fa-person-skating { + --fa: "\f7c5"; } + +.fa-skating { + --fa: "\f7c5"; } + +.fa-filter-circle-dollar { + --fa: "\f662"; } + +.fa-funnel-dollar { + --fa: "\f662"; } + +.fa-camera-retro { + --fa: "\f083"; } + +.fa-circle-arrow-down { + --fa: "\f0ab"; } + +.fa-arrow-circle-down { + --fa: "\f0ab"; } + +.fa-file-import { + --fa: "\f56f"; } + +.fa-arrow-right-to-file { + --fa: "\f56f"; } + +.fa-square-arrow-up-right { + --fa: "\f14c"; } + +.fa-external-link-square { + --fa: "\f14c"; } + +.fa-box-open { + --fa: "\f49e"; } + +.fa-scroll { + --fa: "\f70e"; } + +.fa-spa { + --fa: "\f5bb"; } + +.fa-location-pin-lock { + --fa: "\e51f"; } + +.fa-pause { + --fa: "\f04c"; } + +.fa-hill-avalanche { + --fa: "\e507"; } + +.fa-temperature-empty { + --fa: "\f2cb"; } + +.fa-temperature-0 { + --fa: "\f2cb"; } + +.fa-thermometer-0 { + --fa: "\f2cb"; } + +.fa-thermometer-empty { + --fa: "\f2cb"; } + +.fa-bomb { + --fa: "\f1e2"; } + +.fa-registered { + --fa: "\f25d"; } + +.fa-address-card { + --fa: "\f2bb"; } + +.fa-contact-card { + --fa: "\f2bb"; } + +.fa-vcard { + --fa: "\f2bb"; } + +.fa-scale-unbalanced-flip { + --fa: "\f516"; } + +.fa-balance-scale-right { + --fa: "\f516"; } + +.fa-subscript { + --fa: "\f12c"; } + +.fa-diamond-turn-right { + --fa: "\f5eb"; } + +.fa-directions { + --fa: "\f5eb"; } + +.fa-burst { + --fa: "\e4dc"; } + +.fa-house-laptop { + --fa: "\e066"; } + +.fa-laptop-house { + --fa: "\e066"; } + +.fa-face-tired { + --fa: "\f5c8"; } + +.fa-tired { + --fa: "\f5c8"; } + +.fa-money-bills { + --fa: "\e1f3"; } + +.fa-smog { + --fa: "\f75f"; } + +.fa-crutch { + --fa: "\f7f7"; } + +.fa-cloud-arrow-up { + --fa: "\f0ee"; } + +.fa-cloud-upload { + --fa: "\f0ee"; } + +.fa-cloud-upload-alt { + --fa: "\f0ee"; } + +.fa-palette { + --fa: "\f53f"; } + +.fa-arrows-turn-right { + --fa: "\e4c0"; } + +.fa-vest { + --fa: "\e085"; } + +.fa-ferry { + --fa: "\e4ea"; } + +.fa-arrows-down-to-people { + --fa: "\e4b9"; } + +.fa-seedling { + --fa: "\f4d8"; } + +.fa-sprout { + --fa: "\f4d8"; } + +.fa-left-right { + --fa: "\f337"; } + +.fa-arrows-alt-h { + --fa: "\f337"; } + +.fa-boxes-packing { + --fa: "\e4c7"; } + +.fa-circle-arrow-left { + --fa: "\f0a8"; } + +.fa-arrow-circle-left { + --fa: "\f0a8"; } + +.fa-group-arrows-rotate { + --fa: "\e4f6"; } + +.fa-bowl-food { + --fa: "\e4c6"; } + +.fa-candy-cane { + --fa: "\f786"; } + +.fa-arrow-down-wide-short { + --fa: "\f160"; } + +.fa-sort-amount-asc { + --fa: "\f160"; } + +.fa-sort-amount-down { + --fa: "\f160"; } + +.fa-cloud-bolt { + --fa: "\f76c"; } + +.fa-thunderstorm { + --fa: "\f76c"; } + +.fa-text-slash { + --fa: "\f87d"; } + +.fa-remove-format { + --fa: "\f87d"; } + +.fa-face-smile-wink { + --fa: "\f4da"; } + +.fa-smile-wink { + --fa: "\f4da"; } + +.fa-file-word { + --fa: "\f1c2"; } + +.fa-file-powerpoint { + --fa: "\f1c4"; } + +.fa-arrows-left-right { + --fa: "\f07e"; } + +.fa-arrows-h { + --fa: "\f07e"; } + +.fa-house-lock { + --fa: "\e510"; } + +.fa-cloud-arrow-down { + --fa: "\f0ed"; } + +.fa-cloud-download { + --fa: "\f0ed"; } + +.fa-cloud-download-alt { + --fa: "\f0ed"; } + +.fa-children { + --fa: "\e4e1"; } + +.fa-chalkboard { + --fa: "\f51b"; } + +.fa-blackboard { + --fa: "\f51b"; } + +.fa-user-large-slash { + --fa: "\f4fa"; } + +.fa-user-alt-slash { + --fa: "\f4fa"; } + +.fa-envelope-open { + --fa: "\f2b6"; } + +.fa-handshake-simple-slash { + --fa: "\e05f"; } + +.fa-handshake-alt-slash { + --fa: "\e05f"; } + +.fa-mattress-pillow { + --fa: "\e525"; } + +.fa-guarani-sign { + --fa: "\e19a"; } + +.fa-arrows-rotate { + --fa: "\f021"; } + +.fa-refresh { + --fa: "\f021"; } + +.fa-sync { + --fa: "\f021"; } + +.fa-fire-extinguisher { + --fa: "\f134"; } + +.fa-cruzeiro-sign { + --fa: "\e152"; } + +.fa-greater-than-equal { + --fa: "\f532"; } + +.fa-shield-halved { + --fa: "\f3ed"; } + +.fa-shield-alt { + --fa: "\f3ed"; } + +.fa-book-atlas { + --fa: "\f558"; } + +.fa-atlas { + --fa: "\f558"; } + +.fa-virus { + --fa: "\e074"; } + +.fa-envelope-circle-check { + --fa: "\e4e8"; } + +.fa-layer-group { + --fa: "\f5fd"; } + +.fa-arrows-to-dot { + --fa: "\e4be"; } + +.fa-archway { + --fa: "\f557"; } + +.fa-heart-circle-check { + --fa: "\e4fd"; } + +.fa-house-chimney-crack { + --fa: "\f6f1"; } + +.fa-house-damage { + --fa: "\f6f1"; } + +.fa-file-zipper { + --fa: "\f1c6"; } + +.fa-file-archive { + --fa: "\f1c6"; } + +.fa-square { + --fa: "\f0c8"; } + +.fa-martini-glass-empty { + --fa: "\f000"; } + +.fa-glass-martini { + --fa: "\f000"; } + +.fa-couch { + --fa: "\f4b8"; } + +.fa-cedi-sign { + --fa: "\e0df"; } + +.fa-italic { + --fa: "\f033"; } + +.fa-table-cells-column-lock { + --fa: "\e678"; } + +.fa-church { + --fa: "\f51d"; } + +.fa-comments-dollar { + --fa: "\f653"; } + +.fa-democrat { + --fa: "\f747"; } + +.fa-z { + --fa: "\5a"; } + +.fa-person-skiing { + --fa: "\f7c9"; } + +.fa-skiing { + --fa: "\f7c9"; } + +.fa-road-lock { + --fa: "\e567"; } + +.fa-a { + --fa: "\41"; } + +.fa-temperature-arrow-down { + --fa: "\e03f"; } + +.fa-temperature-down { + --fa: "\e03f"; } + +.fa-feather-pointed { + --fa: "\f56b"; } + +.fa-feather-alt { + --fa: "\f56b"; } + +.fa-p { + --fa: "\50"; } + +.fa-snowflake { + --fa: "\f2dc"; } + +.fa-newspaper { + --fa: "\f1ea"; } + +.fa-rectangle-ad { + --fa: "\f641"; } + +.fa-ad { + --fa: "\f641"; } + +.fa-circle-arrow-right { + --fa: "\f0a9"; } + +.fa-arrow-circle-right { + --fa: "\f0a9"; } + +.fa-filter-circle-xmark { + --fa: "\e17b"; } + +.fa-locust { + --fa: "\e520"; } + +.fa-sort { + --fa: "\f0dc"; } + +.fa-unsorted { + --fa: "\f0dc"; } + +.fa-list-ol { + --fa: "\f0cb"; } + +.fa-list-1-2 { + --fa: "\f0cb"; } + +.fa-list-numeric { + --fa: "\f0cb"; } + +.fa-person-dress-burst { + --fa: "\e544"; } + +.fa-money-check-dollar { + --fa: "\f53d"; } + +.fa-money-check-alt { + --fa: "\f53d"; } + +.fa-vector-square { + --fa: "\f5cb"; } + +.fa-bread-slice { + --fa: "\f7ec"; } + +.fa-language { + --fa: "\f1ab"; } + +.fa-face-kiss-wink-heart { + --fa: "\f598"; } + +.fa-kiss-wink-heart { + --fa: "\f598"; } + +.fa-filter { + --fa: "\f0b0"; } + +.fa-question { + --fa: "\3f"; } + +.fa-file-signature { + --fa: "\f573"; } + +.fa-up-down-left-right { + --fa: "\f0b2"; } + +.fa-arrows-alt { + --fa: "\f0b2"; } + +.fa-house-chimney-user { + --fa: "\e065"; } + +.fa-hand-holding-heart { + --fa: "\f4be"; } + +.fa-puzzle-piece { + --fa: "\f12e"; } + +.fa-money-check { + --fa: "\f53c"; } + +.fa-star-half-stroke { + --fa: "\f5c0"; } + +.fa-star-half-alt { + --fa: "\f5c0"; } + +.fa-code { + --fa: "\f121"; } + +.fa-whiskey-glass { + --fa: "\f7a0"; } + +.fa-glass-whiskey { + --fa: "\f7a0"; } + +.fa-building-circle-exclamation { + --fa: "\e4d3"; } + +.fa-magnifying-glass-chart { + --fa: "\e522"; } + +.fa-arrow-up-right-from-square { + --fa: "\f08e"; } + +.fa-external-link { + --fa: "\f08e"; } + +.fa-cubes-stacked { + --fa: "\e4e6"; } + +.fa-won-sign { + --fa: "\f159"; } + +.fa-krw { + --fa: "\f159"; } + +.fa-won { + --fa: "\f159"; } + +.fa-virus-covid { + --fa: "\e4a8"; } + +.fa-austral-sign { + --fa: "\e0a9"; } + +.fa-f { + --fa: "\46"; } + +.fa-leaf { + --fa: "\f06c"; } + +.fa-road { + --fa: "\f018"; } + +.fa-taxi { + --fa: "\f1ba"; } + +.fa-cab { + --fa: "\f1ba"; } + +.fa-person-circle-plus { + --fa: "\e541"; } + +.fa-chart-pie { + --fa: "\f200"; } + +.fa-pie-chart { + --fa: "\f200"; } + +.fa-bolt-lightning { + --fa: "\e0b7"; } + +.fa-sack-xmark { + --fa: "\e56a"; } + +.fa-file-excel { + --fa: "\f1c3"; } + +.fa-file-contract { + --fa: "\f56c"; } + +.fa-fish-fins { + --fa: "\e4f2"; } + +.fa-building-flag { + --fa: "\e4d5"; } + +.fa-face-grin-beam { + --fa: "\f582"; } + +.fa-grin-beam { + --fa: "\f582"; } + +.fa-object-ungroup { + --fa: "\f248"; } + +.fa-poop { + --fa: "\f619"; } + +.fa-location-pin { + --fa: "\f041"; } + +.fa-map-marker { + --fa: "\f041"; } + +.fa-kaaba { + --fa: "\f66b"; } + +.fa-toilet-paper { + --fa: "\f71e"; } + +.fa-helmet-safety { + --fa: "\f807"; } + +.fa-hard-hat { + --fa: "\f807"; } + +.fa-hat-hard { + --fa: "\f807"; } + +.fa-eject { + --fa: "\f052"; } + +.fa-circle-right { + --fa: "\f35a"; } + +.fa-arrow-alt-circle-right { + --fa: "\f35a"; } + +.fa-plane-circle-check { + --fa: "\e555"; } + +.fa-face-rolling-eyes { + --fa: "\f5a5"; } + +.fa-meh-rolling-eyes { + --fa: "\f5a5"; } + +.fa-object-group { + --fa: "\f247"; } + +.fa-chart-line { + --fa: "\f201"; } + +.fa-line-chart { + --fa: "\f201"; } + +.fa-mask-ventilator { + --fa: "\e524"; } + +.fa-arrow-right { + --fa: "\f061"; } + +.fa-signs-post { + --fa: "\f277"; } + +.fa-map-signs { + --fa: "\f277"; } + +.fa-cash-register { + --fa: "\f788"; } + +.fa-person-circle-question { + --fa: "\e542"; } + +.fa-h { + --fa: "\48"; } + +.fa-tarp { + --fa: "\e57b"; } + +.fa-screwdriver-wrench { + --fa: "\f7d9"; } + +.fa-tools { + --fa: "\f7d9"; } + +.fa-arrows-to-eye { + --fa: "\e4bf"; } + +.fa-plug-circle-bolt { + --fa: "\e55b"; } + +.fa-heart { + --fa: "\f004"; } + +.fa-mars-and-venus { + --fa: "\f224"; } + +.fa-house-user { + --fa: "\e1b0"; } + +.fa-home-user { + --fa: "\e1b0"; } + +.fa-dumpster-fire { + --fa: "\f794"; } + +.fa-house-crack { + --fa: "\e3b1"; } + +.fa-martini-glass-citrus { + --fa: "\f561"; } + +.fa-cocktail { + --fa: "\f561"; } + +.fa-face-surprise { + --fa: "\f5c2"; } + +.fa-surprise { + --fa: "\f5c2"; } + +.fa-bottle-water { + --fa: "\e4c5"; } + +.fa-circle-pause { + --fa: "\f28b"; } + +.fa-pause-circle { + --fa: "\f28b"; } + +.fa-toilet-paper-slash { + --fa: "\e072"; } + +.fa-apple-whole { + --fa: "\f5d1"; } + +.fa-apple-alt { + --fa: "\f5d1"; } + +.fa-kitchen-set { + --fa: "\e51a"; } + +.fa-r { + --fa: "\52"; } + +.fa-temperature-quarter { + --fa: "\f2ca"; } + +.fa-temperature-1 { + --fa: "\f2ca"; } + +.fa-thermometer-1 { + --fa: "\f2ca"; } + +.fa-thermometer-quarter { + --fa: "\f2ca"; } + +.fa-cube { + --fa: "\f1b2"; } + +.fa-bitcoin-sign { + --fa: "\e0b4"; } + +.fa-shield-dog { + --fa: "\e573"; } + +.fa-solar-panel { + --fa: "\f5ba"; } + +.fa-lock-open { + --fa: "\f3c1"; } + +.fa-elevator { + --fa: "\e16d"; } + +.fa-money-bill-transfer { + --fa: "\e528"; } + +.fa-money-bill-trend-up { + --fa: "\e529"; } + +.fa-house-flood-water-circle-arrow-right { + --fa: "\e50f"; } + +.fa-square-poll-horizontal { + --fa: "\f682"; } + +.fa-poll-h { + --fa: "\f682"; } + +.fa-circle { + --fa: "\f111"; } + +.fa-backward-fast { + --fa: "\f049"; } + +.fa-fast-backward { + --fa: "\f049"; } + +.fa-recycle { + --fa: "\f1b8"; } + +.fa-user-astronaut { + --fa: "\f4fb"; } + +.fa-plane-slash { + --fa: "\e069"; } + +.fa-trademark { + --fa: "\f25c"; } + +.fa-basketball { + --fa: "\f434"; } + +.fa-basketball-ball { + --fa: "\f434"; } + +.fa-satellite-dish { + --fa: "\f7c0"; } + +.fa-circle-up { + --fa: "\f35b"; } + +.fa-arrow-alt-circle-up { + --fa: "\f35b"; } + +.fa-mobile-screen-button { + --fa: "\f3cd"; } + +.fa-mobile-alt { + --fa: "\f3cd"; } + +.fa-volume-high { + --fa: "\f028"; } + +.fa-volume-up { + --fa: "\f028"; } + +.fa-users-rays { + --fa: "\e593"; } + +.fa-wallet { + --fa: "\f555"; } + +.fa-clipboard-check { + --fa: "\f46c"; } + +.fa-file-audio { + --fa: "\f1c7"; } + +.fa-burger { + --fa: "\f805"; } + +.fa-hamburger { + --fa: "\f805"; } + +.fa-wrench { + --fa: "\f0ad"; } + +.fa-bugs { + --fa: "\e4d0"; } + +.fa-rupee-sign { + --fa: "\f156"; } + +.fa-rupee { + --fa: "\f156"; } + +.fa-file-image { + --fa: "\f1c5"; } + +.fa-circle-question { + --fa: "\f059"; } + +.fa-question-circle { + --fa: "\f059"; } + +.fa-plane-departure { + --fa: "\f5b0"; } + +.fa-handshake-slash { + --fa: "\e060"; } + +.fa-book-bookmark { + --fa: "\e0bb"; } + +.fa-code-branch { + --fa: "\f126"; } + +.fa-hat-cowboy { + --fa: "\f8c0"; } + +.fa-bridge { + --fa: "\e4c8"; } + +.fa-phone-flip { + --fa: "\f879"; } + +.fa-phone-alt { + --fa: "\f879"; } + +.fa-truck-front { + --fa: "\e2b7"; } + +.fa-cat { + --fa: "\f6be"; } + +.fa-anchor-circle-exclamation { + --fa: "\e4ab"; } + +.fa-truck-field { + --fa: "\e58d"; } + +.fa-route { + --fa: "\f4d7"; } + +.fa-clipboard-question { + --fa: "\e4e3"; } + +.fa-panorama { + --fa: "\e209"; } + +.fa-comment-medical { + --fa: "\f7f5"; } + +.fa-teeth-open { + --fa: "\f62f"; } + +.fa-file-circle-minus { + --fa: "\e4ed"; } + +.fa-tags { + --fa: "\f02c"; } + +.fa-wine-glass { + --fa: "\f4e3"; } + +.fa-forward-fast { + --fa: "\f050"; } + +.fa-fast-forward { + --fa: "\f050"; } + +.fa-face-meh-blank { + --fa: "\f5a4"; } + +.fa-meh-blank { + --fa: "\f5a4"; } + +.fa-square-parking { + --fa: "\f540"; } + +.fa-parking { + --fa: "\f540"; } + +.fa-house-signal { + --fa: "\e012"; } + +.fa-bars-progress { + --fa: "\f828"; } + +.fa-tasks-alt { + --fa: "\f828"; } + +.fa-faucet-drip { + --fa: "\e006"; } + +.fa-cart-flatbed { + --fa: "\f474"; } + +.fa-dolly-flatbed { + --fa: "\f474"; } + +.fa-ban-smoking { + --fa: "\f54d"; } + +.fa-smoking-ban { + --fa: "\f54d"; } + +.fa-terminal { + --fa: "\f120"; } + +.fa-mobile-button { + --fa: "\f10b"; } + +.fa-house-medical-flag { + --fa: "\e514"; } + +.fa-basket-shopping { + --fa: "\f291"; } + +.fa-shopping-basket { + --fa: "\f291"; } + +.fa-tape { + --fa: "\f4db"; } + +.fa-bus-simple { + --fa: "\f55e"; } + +.fa-bus-alt { + --fa: "\f55e"; } + +.fa-eye { + --fa: "\f06e"; } + +.fa-face-sad-cry { + --fa: "\f5b3"; } + +.fa-sad-cry { + --fa: "\f5b3"; } + +.fa-audio-description { + --fa: "\f29e"; } + +.fa-person-military-to-person { + --fa: "\e54c"; } + +.fa-file-shield { + --fa: "\e4f0"; } + +.fa-user-slash { + --fa: "\f506"; } + +.fa-pen { + --fa: "\f304"; } + +.fa-tower-observation { + --fa: "\e586"; } + +.fa-file-code { + --fa: "\f1c9"; } + +.fa-signal { + --fa: "\f012"; } + +.fa-signal-5 { + --fa: "\f012"; } + +.fa-signal-perfect { + --fa: "\f012"; } + +.fa-bus { + --fa: "\f207"; } + +.fa-heart-circle-xmark { + --fa: "\e501"; } + +.fa-house-chimney { + --fa: "\e3af"; } + +.fa-home-lg { + --fa: "\e3af"; } + +.fa-window-maximize { + --fa: "\f2d0"; } + +.fa-face-frown { + --fa: "\f119"; } + +.fa-frown { + --fa: "\f119"; } + +.fa-prescription { + --fa: "\f5b1"; } + +.fa-shop { + --fa: "\f54f"; } + +.fa-store-alt { + --fa: "\f54f"; } + +.fa-floppy-disk { + --fa: "\f0c7"; } + +.fa-save { + --fa: "\f0c7"; } + +.fa-vihara { + --fa: "\f6a7"; } + +.fa-scale-unbalanced { + --fa: "\f515"; } + +.fa-balance-scale-left { + --fa: "\f515"; } + +.fa-sort-up { + --fa: "\f0de"; } + +.fa-sort-asc { + --fa: "\f0de"; } + +.fa-comment-dots { + --fa: "\f4ad"; } + +.fa-commenting { + --fa: "\f4ad"; } + +.fa-plant-wilt { + --fa: "\e5aa"; } + +.fa-diamond { + --fa: "\f219"; } + +.fa-face-grin-squint { + --fa: "\f585"; } + +.fa-grin-squint { + --fa: "\f585"; } + +.fa-hand-holding-dollar { + --fa: "\f4c0"; } + +.fa-hand-holding-usd { + --fa: "\f4c0"; } + +.fa-chart-diagram { + --fa: "\e695"; } + +.fa-bacterium { + --fa: "\e05a"; } + +.fa-hand-pointer { + --fa: "\f25a"; } + +.fa-drum-steelpan { + --fa: "\f56a"; } + +.fa-hand-scissors { + --fa: "\f257"; } + +.fa-hands-praying { + --fa: "\f684"; } + +.fa-praying-hands { + --fa: "\f684"; } + +.fa-arrow-rotate-right { + --fa: "\f01e"; } + +.fa-arrow-right-rotate { + --fa: "\f01e"; } + +.fa-arrow-rotate-forward { + --fa: "\f01e"; } + +.fa-redo { + --fa: "\f01e"; } + +.fa-biohazard { + --fa: "\f780"; } + +.fa-location-crosshairs { + --fa: "\f601"; } + +.fa-location { + --fa: "\f601"; } + +.fa-mars-double { + --fa: "\f227"; } + +.fa-child-dress { + --fa: "\e59c"; } + +.fa-users-between-lines { + --fa: "\e591"; } + +.fa-lungs-virus { + --fa: "\e067"; } + +.fa-face-grin-tears { + --fa: "\f588"; } + +.fa-grin-tears { + --fa: "\f588"; } + +.fa-phone { + --fa: "\f095"; } + +.fa-calendar-xmark { + --fa: "\f273"; } + +.fa-calendar-times { + --fa: "\f273"; } + +.fa-child-reaching { + --fa: "\e59d"; } + +.fa-head-side-virus { + --fa: "\e064"; } + +.fa-user-gear { + --fa: "\f4fe"; } + +.fa-user-cog { + --fa: "\f4fe"; } + +.fa-arrow-up-1-9 { + --fa: "\f163"; } + +.fa-sort-numeric-up { + --fa: "\f163"; } + +.fa-door-closed { + --fa: "\f52a"; } + +.fa-shield-virus { + --fa: "\e06c"; } + +.fa-dice-six { + --fa: "\f526"; } + +.fa-mosquito-net { + --fa: "\e52c"; } + +.fa-file-fragment { + --fa: "\e697"; } + +.fa-bridge-water { + --fa: "\e4ce"; } + +.fa-person-booth { + --fa: "\f756"; } + +.fa-text-width { + --fa: "\f035"; } + +.fa-hat-wizard { + --fa: "\f6e8"; } + +.fa-pen-fancy { + --fa: "\f5ac"; } + +.fa-person-digging { + --fa: "\f85e"; } + +.fa-digging { + --fa: "\f85e"; } + +.fa-trash { + --fa: "\f1f8"; } + +.fa-gauge-simple { + --fa: "\f629"; } + +.fa-gauge-simple-med { + --fa: "\f629"; } + +.fa-tachometer-average { + --fa: "\f629"; } + +.fa-book-medical { + --fa: "\f7e6"; } + +.fa-poo { + --fa: "\f2fe"; } + +.fa-quote-right { + --fa: "\f10e"; } + +.fa-quote-right-alt { + --fa: "\f10e"; } + +.fa-shirt { + --fa: "\f553"; } + +.fa-t-shirt { + --fa: "\f553"; } + +.fa-tshirt { + --fa: "\f553"; } + +.fa-cubes { + --fa: "\f1b3"; } + +.fa-divide { + --fa: "\f529"; } + +.fa-tenge-sign { + --fa: "\f7d7"; } + +.fa-tenge { + --fa: "\f7d7"; } + +.fa-headphones { + --fa: "\f025"; } + +.fa-hands-holding { + --fa: "\f4c2"; } + +.fa-hands-clapping { + --fa: "\e1a8"; } + +.fa-republican { + --fa: "\f75e"; } + +.fa-arrow-left { + --fa: "\f060"; } + +.fa-person-circle-xmark { + --fa: "\e543"; } + +.fa-ruler { + --fa: "\f545"; } + +.fa-align-left { + --fa: "\f036"; } + +.fa-dice-d6 { + --fa: "\f6d1"; } + +.fa-restroom { + --fa: "\f7bd"; } + +.fa-j { + --fa: "\4a"; } + +.fa-users-viewfinder { + --fa: "\e595"; } + +.fa-file-video { + --fa: "\f1c8"; } + +.fa-up-right-from-square { + --fa: "\f35d"; } + +.fa-external-link-alt { + --fa: "\f35d"; } + +.fa-table-cells { + --fa: "\f00a"; } + +.fa-th { + --fa: "\f00a"; } + +.fa-file-pdf { + --fa: "\f1c1"; } + +.fa-book-bible { + --fa: "\f647"; } + +.fa-bible { + --fa: "\f647"; } + +.fa-o { + --fa: "\4f"; } + +.fa-suitcase-medical { + --fa: "\f0fa"; } + +.fa-medkit { + --fa: "\f0fa"; } + +.fa-user-secret { + --fa: "\f21b"; } + +.fa-otter { + --fa: "\f700"; } + +.fa-person-dress { + --fa: "\f182"; } + +.fa-female { + --fa: "\f182"; } + +.fa-comment-dollar { + --fa: "\f651"; } + +.fa-business-time { + --fa: "\f64a"; } + +.fa-briefcase-clock { + --fa: "\f64a"; } + +.fa-table-cells-large { + --fa: "\f009"; } + +.fa-th-large { + --fa: "\f009"; } + +.fa-book-tanakh { + --fa: "\f827"; } + +.fa-tanakh { + --fa: "\f827"; } + +.fa-phone-volume { + --fa: "\f2a0"; } + +.fa-volume-control-phone { + --fa: "\f2a0"; } + +.fa-hat-cowboy-side { + --fa: "\f8c1"; } + +.fa-clipboard-user { + --fa: "\f7f3"; } + +.fa-child { + --fa: "\f1ae"; } + +.fa-lira-sign { + --fa: "\f195"; } + +.fa-satellite { + --fa: "\f7bf"; } + +.fa-plane-lock { + --fa: "\e558"; } + +.fa-tag { + --fa: "\f02b"; } + +.fa-comment { + --fa: "\f075"; } + +.fa-cake-candles { + --fa: "\f1fd"; } + +.fa-birthday-cake { + --fa: "\f1fd"; } + +.fa-cake { + --fa: "\f1fd"; } + +.fa-envelope { + --fa: "\f0e0"; } + +.fa-angles-up { + --fa: "\f102"; } + +.fa-angle-double-up { + --fa: "\f102"; } + +.fa-paperclip { + --fa: "\f0c6"; } + +.fa-arrow-right-to-city { + --fa: "\e4b3"; } + +.fa-ribbon { + --fa: "\f4d6"; } + +.fa-lungs { + --fa: "\f604"; } + +.fa-arrow-up-9-1 { + --fa: "\f887"; } + +.fa-sort-numeric-up-alt { + --fa: "\f887"; } + +.fa-litecoin-sign { + --fa: "\e1d3"; } + +.fa-border-none { + --fa: "\f850"; } + +.fa-circle-nodes { + --fa: "\e4e2"; } + +.fa-parachute-box { + --fa: "\f4cd"; } + +.fa-indent { + --fa: "\f03c"; } + +.fa-truck-field-un { + --fa: "\e58e"; } + +.fa-hourglass { + --fa: "\f254"; } + +.fa-hourglass-empty { + --fa: "\f254"; } + +.fa-mountain { + --fa: "\f6fc"; } + +.fa-user-doctor { + --fa: "\f0f0"; } + +.fa-user-md { + --fa: "\f0f0"; } + +.fa-circle-info { + --fa: "\f05a"; } + +.fa-info-circle { + --fa: "\f05a"; } + +.fa-cloud-meatball { + --fa: "\f73b"; } + +.fa-camera { + --fa: "\f030"; } + +.fa-camera-alt { + --fa: "\f030"; } + +.fa-square-virus { + --fa: "\e578"; } + +.fa-meteor { + --fa: "\f753"; } + +.fa-car-on { + --fa: "\e4dd"; } + +.fa-sleigh { + --fa: "\f7cc"; } + +.fa-arrow-down-1-9 { + --fa: "\f162"; } + +.fa-sort-numeric-asc { + --fa: "\f162"; } + +.fa-sort-numeric-down { + --fa: "\f162"; } + +.fa-hand-holding-droplet { + --fa: "\f4c1"; } + +.fa-hand-holding-water { + --fa: "\f4c1"; } + +.fa-water { + --fa: "\f773"; } + +.fa-calendar-check { + --fa: "\f274"; } + +.fa-braille { + --fa: "\f2a1"; } + +.fa-prescription-bottle-medical { + --fa: "\f486"; } + +.fa-prescription-bottle-alt { + --fa: "\f486"; } + +.fa-landmark { + --fa: "\f66f"; } + +.fa-truck { + --fa: "\f0d1"; } + +.fa-crosshairs { + --fa: "\f05b"; } + +.fa-person-cane { + --fa: "\e53c"; } + +.fa-tent { + --fa: "\e57d"; } + +.fa-vest-patches { + --fa: "\e086"; } + +.fa-check-double { + --fa: "\f560"; } + +.fa-arrow-down-a-z { + --fa: "\f15d"; } + +.fa-sort-alpha-asc { + --fa: "\f15d"; } + +.fa-sort-alpha-down { + --fa: "\f15d"; } + +.fa-money-bill-wheat { + --fa: "\e52a"; } + +.fa-cookie { + --fa: "\f563"; } + +.fa-arrow-rotate-left { + --fa: "\f0e2"; } + +.fa-arrow-left-rotate { + --fa: "\f0e2"; } + +.fa-arrow-rotate-back { + --fa: "\f0e2"; } + +.fa-arrow-rotate-backward { + --fa: "\f0e2"; } + +.fa-undo { + --fa: "\f0e2"; } + +.fa-hard-drive { + --fa: "\f0a0"; } + +.fa-hdd { + --fa: "\f0a0"; } + +.fa-face-grin-squint-tears { + --fa: "\f586"; } + +.fa-grin-squint-tears { + --fa: "\f586"; } + +.fa-dumbbell { + --fa: "\f44b"; } + +.fa-rectangle-list { + --fa: "\f022"; } + +.fa-list-alt { + --fa: "\f022"; } + +.fa-tarp-droplet { + --fa: "\e57c"; } + +.fa-house-medical-circle-check { + --fa: "\e511"; } + +.fa-person-skiing-nordic { + --fa: "\f7ca"; } + +.fa-skiing-nordic { + --fa: "\f7ca"; } + +.fa-calendar-plus { + --fa: "\f271"; } + +.fa-plane-arrival { + --fa: "\f5af"; } + +.fa-circle-left { + --fa: "\f359"; } + +.fa-arrow-alt-circle-left { + --fa: "\f359"; } + +.fa-train-subway { + --fa: "\f239"; } + +.fa-subway { + --fa: "\f239"; } + +.fa-chart-gantt { + --fa: "\e0e4"; } + +.fa-indian-rupee-sign { + --fa: "\e1bc"; } + +.fa-indian-rupee { + --fa: "\e1bc"; } + +.fa-inr { + --fa: "\e1bc"; } + +.fa-crop-simple { + --fa: "\f565"; } + +.fa-crop-alt { + --fa: "\f565"; } + +.fa-money-bill-1 { + --fa: "\f3d1"; } + +.fa-money-bill-alt { + --fa: "\f3d1"; } + +.fa-left-long { + --fa: "\f30a"; } + +.fa-long-arrow-alt-left { + --fa: "\f30a"; } + +.fa-dna { + --fa: "\f471"; } + +.fa-virus-slash { + --fa: "\e075"; } + +.fa-minus { + --fa: "\f068"; } + +.fa-subtract { + --fa: "\f068"; } + +.fa-chess { + --fa: "\f439"; } + +.fa-arrow-left-long { + --fa: "\f177"; } + +.fa-long-arrow-left { + --fa: "\f177"; } + +.fa-plug-circle-check { + --fa: "\e55c"; } + +.fa-street-view { + --fa: "\f21d"; } + +.fa-franc-sign { + --fa: "\e18f"; } + +.fa-volume-off { + --fa: "\f026"; } + +.fa-hands-asl-interpreting { + --fa: "\f2a3"; } + +.fa-american-sign-language-interpreting { + --fa: "\f2a3"; } + +.fa-asl-interpreting { + --fa: "\f2a3"; } + +.fa-hands-american-sign-language-interpreting { + --fa: "\f2a3"; } + +.fa-gear { + --fa: "\f013"; } + +.fa-cog { + --fa: "\f013"; } + +.fa-droplet-slash { + --fa: "\f5c7"; } + +.fa-tint-slash { + --fa: "\f5c7"; } + +.fa-mosque { + --fa: "\f678"; } + +.fa-mosquito { + --fa: "\e52b"; } + +.fa-star-of-david { + --fa: "\f69a"; } + +.fa-person-military-rifle { + --fa: "\e54b"; } + +.fa-cart-shopping { + --fa: "\f07a"; } + +.fa-shopping-cart { + --fa: "\f07a"; } + +.fa-vials { + --fa: "\f493"; } + +.fa-plug-circle-plus { + --fa: "\e55f"; } + +.fa-place-of-worship { + --fa: "\f67f"; } + +.fa-grip-vertical { + --fa: "\f58e"; } + +.fa-hexagon-nodes { + --fa: "\e699"; } + +.fa-arrow-turn-up { + --fa: "\f148"; } + +.fa-level-up { + --fa: "\f148"; } + +.fa-u { + --fa: "\55"; } + +.fa-square-root-variable { + --fa: "\f698"; } + +.fa-square-root-alt { + --fa: "\f698"; } + +.fa-clock { + --fa: "\f017"; } + +.fa-clock-four { + --fa: "\f017"; } + +.fa-backward-step { + --fa: "\f048"; } + +.fa-step-backward { + --fa: "\f048"; } + +.fa-pallet { + --fa: "\f482"; } + +.fa-faucet { + --fa: "\e005"; } + +.fa-baseball-bat-ball { + --fa: "\f432"; } + +.fa-s { + --fa: "\53"; } + +.fa-timeline { + --fa: "\e29c"; } + +.fa-keyboard { + --fa: "\f11c"; } + +.fa-caret-down { + --fa: "\f0d7"; } + +.fa-house-chimney-medical { + --fa: "\f7f2"; } + +.fa-clinic-medical { + --fa: "\f7f2"; } + +.fa-temperature-three-quarters { + --fa: "\f2c8"; } + +.fa-temperature-3 { + --fa: "\f2c8"; } + +.fa-thermometer-3 { + --fa: "\f2c8"; } + +.fa-thermometer-three-quarters { + --fa: "\f2c8"; } + +.fa-mobile-screen { + --fa: "\f3cf"; } + +.fa-mobile-android-alt { + --fa: "\f3cf"; } + +.fa-plane-up { + --fa: "\e22d"; } + +.fa-piggy-bank { + --fa: "\f4d3"; } + +.fa-battery-half { + --fa: "\f242"; } + +.fa-battery-3 { + --fa: "\f242"; } + +.fa-mountain-city { + --fa: "\e52e"; } + +.fa-coins { + --fa: "\f51e"; } + +.fa-khanda { + --fa: "\f66d"; } + +.fa-sliders { + --fa: "\f1de"; } + +.fa-sliders-h { + --fa: "\f1de"; } + +.fa-folder-tree { + --fa: "\f802"; } + +.fa-network-wired { + --fa: "\f6ff"; } + +.fa-map-pin { + --fa: "\f276"; } + +.fa-hamsa { + --fa: "\f665"; } + +.fa-cent-sign { + --fa: "\e3f5"; } + +.fa-flask { + --fa: "\f0c3"; } + +.fa-person-pregnant { + --fa: "\e31e"; } + +.fa-wand-sparkles { + --fa: "\f72b"; } + +.fa-ellipsis-vertical { + --fa: "\f142"; } + +.fa-ellipsis-v { + --fa: "\f142"; } + +.fa-ticket { + --fa: "\f145"; } + +.fa-power-off { + --fa: "\f011"; } + +.fa-right-long { + --fa: "\f30b"; } + +.fa-long-arrow-alt-right { + --fa: "\f30b"; } + +.fa-flag-usa { + --fa: "\f74d"; } + +.fa-laptop-file { + --fa: "\e51d"; } + +.fa-tty { + --fa: "\f1e4"; } + +.fa-teletype { + --fa: "\f1e4"; } + +.fa-diagram-next { + --fa: "\e476"; } + +.fa-person-rifle { + --fa: "\e54e"; } + +.fa-house-medical-circle-exclamation { + --fa: "\e512"; } + +.fa-closed-captioning { + --fa: "\f20a"; } + +.fa-person-hiking { + --fa: "\f6ec"; } + +.fa-hiking { + --fa: "\f6ec"; } + +.fa-venus-double { + --fa: "\f226"; } + +.fa-images { + --fa: "\f302"; } + +.fa-calculator { + --fa: "\f1ec"; } + +.fa-people-pulling { + --fa: "\e535"; } + +.fa-n { + --fa: "\4e"; } + +.fa-cable-car { + --fa: "\f7da"; } + +.fa-tram { + --fa: "\f7da"; } + +.fa-cloud-rain { + --fa: "\f73d"; } + +.fa-building-circle-xmark { + --fa: "\e4d4"; } + +.fa-ship { + --fa: "\f21a"; } + +.fa-arrows-down-to-line { + --fa: "\e4b8"; } + +.fa-download { + --fa: "\f019"; } + +.fa-face-grin { + --fa: "\f580"; } + +.fa-grin { + --fa: "\f580"; } + +.fa-delete-left { + --fa: "\f55a"; } + +.fa-backspace { + --fa: "\f55a"; } + +.fa-eye-dropper { + --fa: "\f1fb"; } + +.fa-eye-dropper-empty { + --fa: "\f1fb"; } + +.fa-eyedropper { + --fa: "\f1fb"; } + +.fa-file-circle-check { + --fa: "\e5a0"; } + +.fa-forward { + --fa: "\f04e"; } + +.fa-mobile { + --fa: "\f3ce"; } + +.fa-mobile-android { + --fa: "\f3ce"; } + +.fa-mobile-phone { + --fa: "\f3ce"; } + +.fa-face-meh { + --fa: "\f11a"; } + +.fa-meh { + --fa: "\f11a"; } + +.fa-align-center { + --fa: "\f037"; } + +.fa-book-skull { + --fa: "\f6b7"; } + +.fa-book-dead { + --fa: "\f6b7"; } + +.fa-id-card { + --fa: "\f2c2"; } + +.fa-drivers-license { + --fa: "\f2c2"; } + +.fa-outdent { + --fa: "\f03b"; } + +.fa-dedent { + --fa: "\f03b"; } + +.fa-heart-circle-exclamation { + --fa: "\e4fe"; } + +.fa-house { + --fa: "\f015"; } + +.fa-home { + --fa: "\f015"; } + +.fa-home-alt { + --fa: "\f015"; } + +.fa-home-lg-alt { + --fa: "\f015"; } + +.fa-calendar-week { + --fa: "\f784"; } + +.fa-laptop-medical { + --fa: "\f812"; } + +.fa-b { + --fa: "\42"; } + +.fa-file-medical { + --fa: "\f477"; } + +.fa-dice-one { + --fa: "\f525"; } + +.fa-kiwi-bird { + --fa: "\f535"; } + +.fa-arrow-right-arrow-left { + --fa: "\f0ec"; } + +.fa-exchange { + --fa: "\f0ec"; } + +.fa-rotate-right { + --fa: "\f2f9"; } + +.fa-redo-alt { + --fa: "\f2f9"; } + +.fa-rotate-forward { + --fa: "\f2f9"; } + +.fa-utensils { + --fa: "\f2e7"; } + +.fa-cutlery { + --fa: "\f2e7"; } + +.fa-arrow-up-wide-short { + --fa: "\f161"; } + +.fa-sort-amount-up { + --fa: "\f161"; } + +.fa-mill-sign { + --fa: "\e1ed"; } + +.fa-bowl-rice { + --fa: "\e2eb"; } + +.fa-skull { + --fa: "\f54c"; } + +.fa-tower-broadcast { + --fa: "\f519"; } + +.fa-broadcast-tower { + --fa: "\f519"; } + +.fa-truck-pickup { + --fa: "\f63c"; } + +.fa-up-long { + --fa: "\f30c"; } + +.fa-long-arrow-alt-up { + --fa: "\f30c"; } + +.fa-stop { + --fa: "\f04d"; } + +.fa-code-merge { + --fa: "\f387"; } + +.fa-upload { + --fa: "\f093"; } + +.fa-hurricane { + --fa: "\f751"; } + +.fa-mound { + --fa: "\e52d"; } + +.fa-toilet-portable { + --fa: "\e583"; } + +.fa-compact-disc { + --fa: "\f51f"; } + +.fa-file-arrow-down { + --fa: "\f56d"; } + +.fa-file-download { + --fa: "\f56d"; } + +.fa-caravan { + --fa: "\f8ff"; } + +.fa-shield-cat { + --fa: "\e572"; } + +.fa-bolt { + --fa: "\f0e7"; } + +.fa-zap { + --fa: "\f0e7"; } + +.fa-glass-water { + --fa: "\e4f4"; } + +.fa-oil-well { + --fa: "\e532"; } + +.fa-vault { + --fa: "\e2c5"; } + +.fa-mars { + --fa: "\f222"; } + +.fa-toilet { + --fa: "\f7d8"; } + +.fa-plane-circle-xmark { + --fa: "\e557"; } + +.fa-yen-sign { + --fa: "\f157"; } + +.fa-cny { + --fa: "\f157"; } + +.fa-jpy { + --fa: "\f157"; } + +.fa-rmb { + --fa: "\f157"; } + +.fa-yen { + --fa: "\f157"; } + +.fa-ruble-sign { + --fa: "\f158"; } + +.fa-rouble { + --fa: "\f158"; } + +.fa-rub { + --fa: "\f158"; } + +.fa-ruble { + --fa: "\f158"; } + +.fa-sun { + --fa: "\f185"; } + +.fa-guitar { + --fa: "\f7a6"; } + +.fa-face-laugh-wink { + --fa: "\f59c"; } + +.fa-laugh-wink { + --fa: "\f59c"; } + +.fa-horse-head { + --fa: "\f7ab"; } + +.fa-bore-hole { + --fa: "\e4c3"; } + +.fa-industry { + --fa: "\f275"; } + +.fa-circle-down { + --fa: "\f358"; } + +.fa-arrow-alt-circle-down { + --fa: "\f358"; } + +.fa-arrows-turn-to-dots { + --fa: "\e4c1"; } + +.fa-florin-sign { + --fa: "\e184"; } + +.fa-arrow-down-short-wide { + --fa: "\f884"; } + +.fa-sort-amount-desc { + --fa: "\f884"; } + +.fa-sort-amount-down-alt { + --fa: "\f884"; } + +.fa-less-than { + --fa: "\3c"; } + +.fa-angle-down { + --fa: "\f107"; } + +.fa-car-tunnel { + --fa: "\e4de"; } + +.fa-head-side-cough { + --fa: "\e061"; } + +.fa-grip-lines { + --fa: "\f7a4"; } + +.fa-thumbs-down { + --fa: "\f165"; } + +.fa-user-lock { + --fa: "\f502"; } + +.fa-arrow-right-long { + --fa: "\f178"; } + +.fa-long-arrow-right { + --fa: "\f178"; } + +.fa-anchor-circle-xmark { + --fa: "\e4ac"; } + +.fa-ellipsis { + --fa: "\f141"; } + +.fa-ellipsis-h { + --fa: "\f141"; } + +.fa-chess-pawn { + --fa: "\f443"; } + +.fa-kit-medical { + --fa: "\f479"; } + +.fa-first-aid { + --fa: "\f479"; } + +.fa-person-through-window { + --fa: "\e5a9"; } + +.fa-toolbox { + --fa: "\f552"; } + +.fa-hands-holding-circle { + --fa: "\e4fb"; } + +.fa-bug { + --fa: "\f188"; } + +.fa-credit-card { + --fa: "\f09d"; } + +.fa-credit-card-alt { + --fa: "\f09d"; } + +.fa-car { + --fa: "\f1b9"; } + +.fa-automobile { + --fa: "\f1b9"; } + +.fa-hand-holding-hand { + --fa: "\e4f7"; } + +.fa-book-open-reader { + --fa: "\f5da"; } + +.fa-book-reader { + --fa: "\f5da"; } + +.fa-mountain-sun { + --fa: "\e52f"; } + +.fa-arrows-left-right-to-line { + --fa: "\e4ba"; } + +.fa-dice-d20 { + --fa: "\f6cf"; } + +.fa-truck-droplet { + --fa: "\e58c"; } + +.fa-file-circle-xmark { + --fa: "\e5a1"; } + +.fa-temperature-arrow-up { + --fa: "\e040"; } + +.fa-temperature-up { + --fa: "\e040"; } + +.fa-medal { + --fa: "\f5a2"; } + +.fa-bed { + --fa: "\f236"; } + +.fa-square-h { + --fa: "\f0fd"; } + +.fa-h-square { + --fa: "\f0fd"; } + +.fa-podcast { + --fa: "\f2ce"; } + +.fa-temperature-full { + --fa: "\f2c7"; } + +.fa-temperature-4 { + --fa: "\f2c7"; } + +.fa-thermometer-4 { + --fa: "\f2c7"; } + +.fa-thermometer-full { + --fa: "\f2c7"; } + +.fa-bell { + --fa: "\f0f3"; } + +.fa-superscript { + --fa: "\f12b"; } + +.fa-plug-circle-xmark { + --fa: "\e560"; } + +.fa-star-of-life { + --fa: "\f621"; } + +.fa-phone-slash { + --fa: "\f3dd"; } + +.fa-paint-roller { + --fa: "\f5aa"; } + +.fa-handshake-angle { + --fa: "\f4c4"; } + +.fa-hands-helping { + --fa: "\f4c4"; } + +.fa-location-dot { + --fa: "\f3c5"; } + +.fa-map-marker-alt { + --fa: "\f3c5"; } + +.fa-file { + --fa: "\f15b"; } + +.fa-greater-than { + --fa: "\3e"; } + +.fa-person-swimming { + --fa: "\f5c4"; } + +.fa-swimmer { + --fa: "\f5c4"; } + +.fa-arrow-down { + --fa: "\f063"; } + +.fa-droplet { + --fa: "\f043"; } + +.fa-tint { + --fa: "\f043"; } + +.fa-eraser { + --fa: "\f12d"; } + +.fa-earth-americas { + --fa: "\f57d"; } + +.fa-earth { + --fa: "\f57d"; } + +.fa-earth-america { + --fa: "\f57d"; } + +.fa-globe-americas { + --fa: "\f57d"; } + +.fa-person-burst { + --fa: "\e53b"; } + +.fa-dove { + --fa: "\f4ba"; } + +.fa-battery-empty { + --fa: "\f244"; } + +.fa-battery-0 { + --fa: "\f244"; } + +.fa-socks { + --fa: "\f696"; } + +.fa-inbox { + --fa: "\f01c"; } + +.fa-section { + --fa: "\e447"; } + +.fa-gauge-high { + --fa: "\f625"; } + +.fa-tachometer-alt { + --fa: "\f625"; } + +.fa-tachometer-alt-fast { + --fa: "\f625"; } + +.fa-envelope-open-text { + --fa: "\f658"; } + +.fa-hospital { + --fa: "\f0f8"; } + +.fa-hospital-alt { + --fa: "\f0f8"; } + +.fa-hospital-wide { + --fa: "\f0f8"; } + +.fa-wine-bottle { + --fa: "\f72f"; } + +.fa-chess-rook { + --fa: "\f447"; } + +.fa-bars-staggered { + --fa: "\f550"; } + +.fa-reorder { + --fa: "\f550"; } + +.fa-stream { + --fa: "\f550"; } + +.fa-dharmachakra { + --fa: "\f655"; } + +.fa-hotdog { + --fa: "\f80f"; } + +.fa-person-walking-with-cane { + --fa: "\f29d"; } + +.fa-blind { + --fa: "\f29d"; } + +.fa-drum { + --fa: "\f569"; } + +.fa-ice-cream { + --fa: "\f810"; } + +.fa-heart-circle-bolt { + --fa: "\e4fc"; } + +.fa-fax { + --fa: "\f1ac"; } + +.fa-paragraph { + --fa: "\f1dd"; } + +.fa-check-to-slot { + --fa: "\f772"; } + +.fa-vote-yea { + --fa: "\f772"; } + +.fa-star-half { + --fa: "\f089"; } + +.fa-boxes-stacked { + --fa: "\f468"; } + +.fa-boxes { + --fa: "\f468"; } + +.fa-boxes-alt { + --fa: "\f468"; } + +.fa-link { + --fa: "\f0c1"; } + +.fa-chain { + --fa: "\f0c1"; } + +.fa-ear-listen { + --fa: "\f2a2"; } + +.fa-assistive-listening-systems { + --fa: "\f2a2"; } + +.fa-tree-city { + --fa: "\e587"; } + +.fa-play { + --fa: "\f04b"; } + +.fa-font { + --fa: "\f031"; } + +.fa-table-cells-row-lock { + --fa: "\e67a"; } + +.fa-rupiah-sign { + --fa: "\e23d"; } + +.fa-magnifying-glass { + --fa: "\f002"; } + +.fa-search { + --fa: "\f002"; } + +.fa-table-tennis-paddle-ball { + --fa: "\f45d"; } + +.fa-ping-pong-paddle-ball { + --fa: "\f45d"; } + +.fa-table-tennis { + --fa: "\f45d"; } + +.fa-person-dots-from-line { + --fa: "\f470"; } + +.fa-diagnoses { + --fa: "\f470"; } + +.fa-trash-can-arrow-up { + --fa: "\f82a"; } + +.fa-trash-restore-alt { + --fa: "\f82a"; } + +.fa-naira-sign { + --fa: "\e1f6"; } + +.fa-cart-arrow-down { + --fa: "\f218"; } + +.fa-walkie-talkie { + --fa: "\f8ef"; } + +.fa-file-pen { + --fa: "\f31c"; } + +.fa-file-edit { + --fa: "\f31c"; } + +.fa-receipt { + --fa: "\f543"; } + +.fa-square-pen { + --fa: "\f14b"; } + +.fa-pen-square { + --fa: "\f14b"; } + +.fa-pencil-square { + --fa: "\f14b"; } + +.fa-suitcase-rolling { + --fa: "\f5c1"; } + +.fa-person-circle-exclamation { + --fa: "\e53f"; } + +.fa-chevron-down { + --fa: "\f078"; } + +.fa-battery-full { + --fa: "\f240"; } + +.fa-battery { + --fa: "\f240"; } + +.fa-battery-5 { + --fa: "\f240"; } + +.fa-skull-crossbones { + --fa: "\f714"; } + +.fa-code-compare { + --fa: "\e13a"; } + +.fa-list-ul { + --fa: "\f0ca"; } + +.fa-list-dots { + --fa: "\f0ca"; } + +.fa-school-lock { + --fa: "\e56f"; } + +.fa-tower-cell { + --fa: "\e585"; } + +.fa-down-long { + --fa: "\f309"; } + +.fa-long-arrow-alt-down { + --fa: "\f309"; } + +.fa-ranking-star { + --fa: "\e561"; } + +.fa-chess-king { + --fa: "\f43f"; } + +.fa-person-harassing { + --fa: "\e549"; } + +.fa-brazilian-real-sign { + --fa: "\e46c"; } + +.fa-landmark-dome { + --fa: "\f752"; } + +.fa-landmark-alt { + --fa: "\f752"; } + +.fa-arrow-up { + --fa: "\f062"; } + +.fa-tv { + --fa: "\f26c"; } + +.fa-television { + --fa: "\f26c"; } + +.fa-tv-alt { + --fa: "\f26c"; } + +.fa-shrimp { + --fa: "\e448"; } + +.fa-list-check { + --fa: "\f0ae"; } + +.fa-tasks { + --fa: "\f0ae"; } + +.fa-jug-detergent { + --fa: "\e519"; } + +.fa-circle-user { + --fa: "\f2bd"; } + +.fa-user-circle { + --fa: "\f2bd"; } + +.fa-user-shield { + --fa: "\f505"; } + +.fa-wind { + --fa: "\f72e"; } + +.fa-car-burst { + --fa: "\f5e1"; } + +.fa-car-crash { + --fa: "\f5e1"; } + +.fa-y { + --fa: "\59"; } + +.fa-person-snowboarding { + --fa: "\f7ce"; } + +.fa-snowboarding { + --fa: "\f7ce"; } + +.fa-truck-fast { + --fa: "\f48b"; } + +.fa-shipping-fast { + --fa: "\f48b"; } + +.fa-fish { + --fa: "\f578"; } + +.fa-user-graduate { + --fa: "\f501"; } + +.fa-circle-half-stroke { + --fa: "\f042"; } + +.fa-adjust { + --fa: "\f042"; } + +.fa-clapperboard { + --fa: "\e131"; } + +.fa-circle-radiation { + --fa: "\f7ba"; } + +.fa-radiation-alt { + --fa: "\f7ba"; } + +.fa-baseball { + --fa: "\f433"; } + +.fa-baseball-ball { + --fa: "\f433"; } + +.fa-jet-fighter-up { + --fa: "\e518"; } + +.fa-diagram-project { + --fa: "\f542"; } + +.fa-project-diagram { + --fa: "\f542"; } + +.fa-copy { + --fa: "\f0c5"; } + +.fa-volume-xmark { + --fa: "\f6a9"; } + +.fa-volume-mute { + --fa: "\f6a9"; } + +.fa-volume-times { + --fa: "\f6a9"; } + +.fa-hand-sparkles { + --fa: "\e05d"; } + +.fa-grip { + --fa: "\f58d"; } + +.fa-grip-horizontal { + --fa: "\f58d"; } + +.fa-share-from-square { + --fa: "\f14d"; } + +.fa-share-square { + --fa: "\f14d"; } + +.fa-child-combatant { + --fa: "\e4e0"; } + +.fa-child-rifle { + --fa: "\e4e0"; } + +.fa-gun { + --fa: "\e19b"; } + +.fa-square-phone { + --fa: "\f098"; } + +.fa-phone-square { + --fa: "\f098"; } + +.fa-plus { + --fa: "\2b"; } + +.fa-add { + --fa: "\2b"; } + +.fa-expand { + --fa: "\f065"; } + +.fa-computer { + --fa: "\e4e5"; } + +.fa-xmark { + --fa: "\f00d"; } + +.fa-close { + --fa: "\f00d"; } + +.fa-multiply { + --fa: "\f00d"; } + +.fa-remove { + --fa: "\f00d"; } + +.fa-times { + --fa: "\f00d"; } + +.fa-arrows-up-down-left-right { + --fa: "\f047"; } + +.fa-arrows { + --fa: "\f047"; } + +.fa-chalkboard-user { + --fa: "\f51c"; } + +.fa-chalkboard-teacher { + --fa: "\f51c"; } + +.fa-peso-sign { + --fa: "\e222"; } + +.fa-building-shield { + --fa: "\e4d8"; } + +.fa-baby { + --fa: "\f77c"; } + +.fa-users-line { + --fa: "\e592"; } + +.fa-quote-left { + --fa: "\f10d"; } + +.fa-quote-left-alt { + --fa: "\f10d"; } + +.fa-tractor { + --fa: "\f722"; } + +.fa-trash-arrow-up { + --fa: "\f829"; } + +.fa-trash-restore { + --fa: "\f829"; } + +.fa-arrow-down-up-lock { + --fa: "\e4b0"; } + +.fa-lines-leaning { + --fa: "\e51e"; } + +.fa-ruler-combined { + --fa: "\f546"; } + +.fa-copyright { + --fa: "\f1f9"; } + +.fa-equals { + --fa: "\3d"; } + +.fa-blender { + --fa: "\f517"; } + +.fa-teeth { + --fa: "\f62e"; } + +.fa-shekel-sign { + --fa: "\f20b"; } + +.fa-ils { + --fa: "\f20b"; } + +.fa-shekel { + --fa: "\f20b"; } + +.fa-sheqel { + --fa: "\f20b"; } + +.fa-sheqel-sign { + --fa: "\f20b"; } + +.fa-map { + --fa: "\f279"; } + +.fa-rocket { + --fa: "\f135"; } + +.fa-photo-film { + --fa: "\f87c"; } + +.fa-photo-video { + --fa: "\f87c"; } + +.fa-folder-minus { + --fa: "\f65d"; } + +.fa-hexagon-nodes-bolt { + --fa: "\e69a"; } + +.fa-store { + --fa: "\f54e"; } + +.fa-arrow-trend-up { + --fa: "\e098"; } + +.fa-plug-circle-minus { + --fa: "\e55e"; } + +.fa-sign-hanging { + --fa: "\f4d9"; } + +.fa-sign { + --fa: "\f4d9"; } + +.fa-bezier-curve { + --fa: "\f55b"; } + +.fa-bell-slash { + --fa: "\f1f6"; } + +.fa-tablet { + --fa: "\f3fb"; } + +.fa-tablet-android { + --fa: "\f3fb"; } + +.fa-school-flag { + --fa: "\e56e"; } + +.fa-fill { + --fa: "\f575"; } + +.fa-angle-up { + --fa: "\f106"; } + +.fa-drumstick-bite { + --fa: "\f6d7"; } + +.fa-holly-berry { + --fa: "\f7aa"; } + +.fa-chevron-left { + --fa: "\f053"; } + +.fa-bacteria { + --fa: "\e059"; } + +.fa-hand-lizard { + --fa: "\f258"; } + +.fa-notdef { + --fa: "\e1fe"; } + +.fa-disease { + --fa: "\f7fa"; } + +.fa-briefcase-medical { + --fa: "\f469"; } + +.fa-genderless { + --fa: "\f22d"; } + +.fa-chevron-right { + --fa: "\f054"; } + +.fa-retweet { + --fa: "\f079"; } + +.fa-car-rear { + --fa: "\f5de"; } + +.fa-car-alt { + --fa: "\f5de"; } + +.fa-pump-soap { + --fa: "\e06b"; } + +.fa-video-slash { + --fa: "\f4e2"; } + +.fa-battery-quarter { + --fa: "\f243"; } + +.fa-battery-2 { + --fa: "\f243"; } + +.fa-radio { + --fa: "\f8d7"; } + +.fa-baby-carriage { + --fa: "\f77d"; } + +.fa-carriage-baby { + --fa: "\f77d"; } + +.fa-traffic-light { + --fa: "\f637"; } + +.fa-thermometer { + --fa: "\f491"; } + +.fa-vr-cardboard { + --fa: "\f729"; } + +.fa-hand-middle-finger { + --fa: "\f806"; } + +.fa-percent { + --fa: "\25"; } + +.fa-percentage { + --fa: "\25"; } + +.fa-truck-moving { + --fa: "\f4df"; } + +.fa-glass-water-droplet { + --fa: "\e4f5"; } + +.fa-display { + --fa: "\e163"; } + +.fa-face-smile { + --fa: "\f118"; } + +.fa-smile { + --fa: "\f118"; } + +.fa-thumbtack { + --fa: "\f08d"; } + +.fa-thumb-tack { + --fa: "\f08d"; } + +.fa-trophy { + --fa: "\f091"; } + +.fa-person-praying { + --fa: "\f683"; } + +.fa-pray { + --fa: "\f683"; } + +.fa-hammer { + --fa: "\f6e3"; } + +.fa-hand-peace { + --fa: "\f25b"; } + +.fa-rotate { + --fa: "\f2f1"; } + +.fa-sync-alt { + --fa: "\f2f1"; } + +.fa-spinner { + --fa: "\f110"; } + +.fa-robot { + --fa: "\f544"; } + +.fa-peace { + --fa: "\f67c"; } + +.fa-gears { + --fa: "\f085"; } + +.fa-cogs { + --fa: "\f085"; } + +.fa-warehouse { + --fa: "\f494"; } + +.fa-arrow-up-right-dots { + --fa: "\e4b7"; } + +.fa-splotch { + --fa: "\f5bc"; } + +.fa-face-grin-hearts { + --fa: "\f584"; } + +.fa-grin-hearts { + --fa: "\f584"; } + +.fa-dice-four { + --fa: "\f524"; } + +.fa-sim-card { + --fa: "\f7c4"; } + +.fa-transgender { + --fa: "\f225"; } + +.fa-transgender-alt { + --fa: "\f225"; } + +.fa-mercury { + --fa: "\f223"; } + +.fa-arrow-turn-down { + --fa: "\f149"; } + +.fa-level-down { + --fa: "\f149"; } + +.fa-person-falling-burst { + --fa: "\e547"; } + +.fa-award { + --fa: "\f559"; } + +.fa-ticket-simple { + --fa: "\f3ff"; } + +.fa-ticket-alt { + --fa: "\f3ff"; } + +.fa-building { + --fa: "\f1ad"; } + +.fa-angles-left { + --fa: "\f100"; } + +.fa-angle-double-left { + --fa: "\f100"; } + +.fa-qrcode { + --fa: "\f029"; } + +.fa-clock-rotate-left { + --fa: "\f1da"; } + +.fa-history { + --fa: "\f1da"; } + +.fa-face-grin-beam-sweat { + --fa: "\f583"; } + +.fa-grin-beam-sweat { + --fa: "\f583"; } + +.fa-file-export { + --fa: "\f56e"; } + +.fa-arrow-right-from-file { + --fa: "\f56e"; } + +.fa-shield { + --fa: "\f132"; } + +.fa-shield-blank { + --fa: "\f132"; } + +.fa-arrow-up-short-wide { + --fa: "\f885"; } + +.fa-sort-amount-up-alt { + --fa: "\f885"; } + +.fa-comment-nodes { + --fa: "\e696"; } + +.fa-house-medical { + --fa: "\e3b2"; } + +.fa-golf-ball-tee { + --fa: "\f450"; } + +.fa-golf-ball { + --fa: "\f450"; } + +.fa-circle-chevron-left { + --fa: "\f137"; } + +.fa-chevron-circle-left { + --fa: "\f137"; } + +.fa-house-chimney-window { + --fa: "\e00d"; } + +.fa-pen-nib { + --fa: "\f5ad"; } + +.fa-tent-arrow-turn-left { + --fa: "\e580"; } + +.fa-tents { + --fa: "\e582"; } + +.fa-wand-magic { + --fa: "\f0d0"; } + +.fa-magic { + --fa: "\f0d0"; } + +.fa-dog { + --fa: "\f6d3"; } + +.fa-carrot { + --fa: "\f787"; } + +.fa-moon { + --fa: "\f186"; } + +.fa-wine-glass-empty { + --fa: "\f5ce"; } + +.fa-wine-glass-alt { + --fa: "\f5ce"; } + +.fa-cheese { + --fa: "\f7ef"; } + +.fa-yin-yang { + --fa: "\f6ad"; } + +.fa-music { + --fa: "\f001"; } + +.fa-code-commit { + --fa: "\f386"; } + +.fa-temperature-low { + --fa: "\f76b"; } + +.fa-person-biking { + --fa: "\f84a"; } + +.fa-biking { + --fa: "\f84a"; } + +.fa-broom { + --fa: "\f51a"; } + +.fa-shield-heart { + --fa: "\e574"; } + +.fa-gopuram { + --fa: "\f664"; } + +.fa-earth-oceania { + --fa: "\e47b"; } + +.fa-globe-oceania { + --fa: "\e47b"; } + +.fa-square-xmark { + --fa: "\f2d3"; } + +.fa-times-square { + --fa: "\f2d3"; } + +.fa-xmark-square { + --fa: "\f2d3"; } + +.fa-hashtag { + --fa: "\23"; } + +.fa-up-right-and-down-left-from-center { + --fa: "\f424"; } + +.fa-expand-alt { + --fa: "\f424"; } + +.fa-oil-can { + --fa: "\f613"; } + +.fa-t { + --fa: "\54"; } + +.fa-hippo { + --fa: "\f6ed"; } + +.fa-chart-column { + --fa: "\e0e3"; } + +.fa-infinity { + --fa: "\f534"; } + +.fa-vial-circle-check { + --fa: "\e596"; } + +.fa-person-arrow-down-to-line { + --fa: "\e538"; } + +.fa-voicemail { + --fa: "\f897"; } + +.fa-fan { + --fa: "\f863"; } + +.fa-person-walking-luggage { + --fa: "\e554"; } + +.fa-up-down { + --fa: "\f338"; } + +.fa-arrows-alt-v { + --fa: "\f338"; } + +.fa-cloud-moon-rain { + --fa: "\f73c"; } + +.fa-calendar { + --fa: "\f133"; } + +.fa-trailer { + --fa: "\e041"; } + +.fa-bahai { + --fa: "\f666"; } + +.fa-haykal { + --fa: "\f666"; } + +.fa-sd-card { + --fa: "\f7c2"; } + +.fa-dragon { + --fa: "\f6d5"; } + +.fa-shoe-prints { + --fa: "\f54b"; } + +.fa-circle-plus { + --fa: "\f055"; } + +.fa-plus-circle { + --fa: "\f055"; } + +.fa-face-grin-tongue-wink { + --fa: "\f58b"; } + +.fa-grin-tongue-wink { + --fa: "\f58b"; } + +.fa-hand-holding { + --fa: "\f4bd"; } + +.fa-plug-circle-exclamation { + --fa: "\e55d"; } + +.fa-link-slash { + --fa: "\f127"; } + +.fa-chain-broken { + --fa: "\f127"; } + +.fa-chain-slash { + --fa: "\f127"; } + +.fa-unlink { + --fa: "\f127"; } + +.fa-clone { + --fa: "\f24d"; } + +.fa-person-walking-arrow-loop-left { + --fa: "\e551"; } + +.fa-arrow-up-z-a { + --fa: "\f882"; } + +.fa-sort-alpha-up-alt { + --fa: "\f882"; } + +.fa-fire-flame-curved { + --fa: "\f7e4"; } + +.fa-fire-alt { + --fa: "\f7e4"; } + +.fa-tornado { + --fa: "\f76f"; } + +.fa-file-circle-plus { + --fa: "\e494"; } + +.fa-book-quran { + --fa: "\f687"; } + +.fa-quran { + --fa: "\f687"; } + +.fa-anchor { + --fa: "\f13d"; } + +.fa-border-all { + --fa: "\f84c"; } + +.fa-face-angry { + --fa: "\f556"; } + +.fa-angry { + --fa: "\f556"; } + +.fa-cookie-bite { + --fa: "\f564"; } + +.fa-arrow-trend-down { + --fa: "\e097"; } + +.fa-rss { + --fa: "\f09e"; } + +.fa-feed { + --fa: "\f09e"; } + +.fa-draw-polygon { + --fa: "\f5ee"; } + +.fa-scale-balanced { + --fa: "\f24e"; } + +.fa-balance-scale { + --fa: "\f24e"; } + +.fa-gauge-simple-high { + --fa: "\f62a"; } + +.fa-tachometer { + --fa: "\f62a"; } + +.fa-tachometer-fast { + --fa: "\f62a"; } + +.fa-shower { + --fa: "\f2cc"; } + +.fa-desktop { + --fa: "\f390"; } + +.fa-desktop-alt { + --fa: "\f390"; } + +.fa-m { + --fa: "\4d"; } + +.fa-table-list { + --fa: "\f00b"; } + +.fa-th-list { + --fa: "\f00b"; } + +.fa-comment-sms { + --fa: "\f7cd"; } + +.fa-sms { + --fa: "\f7cd"; } + +.fa-book { + --fa: "\f02d"; } + +.fa-user-plus { + --fa: "\f234"; } + +.fa-check { + --fa: "\f00c"; } + +.fa-battery-three-quarters { + --fa: "\f241"; } + +.fa-battery-4 { + --fa: "\f241"; } + +.fa-house-circle-check { + --fa: "\e509"; } + +.fa-angle-left { + --fa: "\f104"; } + +.fa-diagram-successor { + --fa: "\e47a"; } + +.fa-truck-arrow-right { + --fa: "\e58b"; } + +.fa-arrows-split-up-and-left { + --fa: "\e4bc"; } + +.fa-hand-fist { + --fa: "\f6de"; } + +.fa-fist-raised { + --fa: "\f6de"; } + +.fa-cloud-moon { + --fa: "\f6c3"; } + +.fa-briefcase { + --fa: "\f0b1"; } + +.fa-person-falling { + --fa: "\e546"; } + +.fa-image-portrait { + --fa: "\f3e0"; } + +.fa-portrait { + --fa: "\f3e0"; } + +.fa-user-tag { + --fa: "\f507"; } + +.fa-rug { + --fa: "\e569"; } + +.fa-earth-europe { + --fa: "\f7a2"; } + +.fa-globe-europe { + --fa: "\f7a2"; } + +.fa-cart-flatbed-suitcase { + --fa: "\f59d"; } + +.fa-luggage-cart { + --fa: "\f59d"; } + +.fa-rectangle-xmark { + --fa: "\f410"; } + +.fa-rectangle-times { + --fa: "\f410"; } + +.fa-times-rectangle { + --fa: "\f410"; } + +.fa-window-close { + --fa: "\f410"; } + +.fa-baht-sign { + --fa: "\e0ac"; } + +.fa-book-open { + --fa: "\f518"; } + +.fa-book-journal-whills { + --fa: "\f66a"; } + +.fa-journal-whills { + --fa: "\f66a"; } + +.fa-handcuffs { + --fa: "\e4f8"; } + +.fa-triangle-exclamation { + --fa: "\f071"; } + +.fa-exclamation-triangle { + --fa: "\f071"; } + +.fa-warning { + --fa: "\f071"; } + +.fa-database { + --fa: "\f1c0"; } + +.fa-share { + --fa: "\f064"; } + +.fa-mail-forward { + --fa: "\f064"; } + +.fa-bottle-droplet { + --fa: "\e4c4"; } + +.fa-mask-face { + --fa: "\e1d7"; } + +.fa-hill-rockslide { + --fa: "\e508"; } + +.fa-right-left { + --fa: "\f362"; } + +.fa-exchange-alt { + --fa: "\f362"; } + +.fa-paper-plane { + --fa: "\f1d8"; } + +.fa-road-circle-exclamation { + --fa: "\e565"; } + +.fa-dungeon { + --fa: "\f6d9"; } + +.fa-align-right { + --fa: "\f038"; } + +.fa-money-bill-1-wave { + --fa: "\f53b"; } + +.fa-money-bill-wave-alt { + --fa: "\f53b"; } + +.fa-life-ring { + --fa: "\f1cd"; } + +.fa-hands { + --fa: "\f2a7"; } + +.fa-sign-language { + --fa: "\f2a7"; } + +.fa-signing { + --fa: "\f2a7"; } + +.fa-calendar-day { + --fa: "\f783"; } + +.fa-water-ladder { + --fa: "\f5c5"; } + +.fa-ladder-water { + --fa: "\f5c5"; } + +.fa-swimming-pool { + --fa: "\f5c5"; } + +.fa-arrows-up-down { + --fa: "\f07d"; } + +.fa-arrows-v { + --fa: "\f07d"; } + +.fa-face-grimace { + --fa: "\f57f"; } + +.fa-grimace { + --fa: "\f57f"; } + +.fa-wheelchair-move { + --fa: "\e2ce"; } + +.fa-wheelchair-alt { + --fa: "\e2ce"; } + +.fa-turn-down { + --fa: "\f3be"; } + +.fa-level-down-alt { + --fa: "\f3be"; } + +.fa-person-walking-arrow-right { + --fa: "\e552"; } + +.fa-square-envelope { + --fa: "\f199"; } + +.fa-envelope-square { + --fa: "\f199"; } + +.fa-dice { + --fa: "\f522"; } + +.fa-bowling-ball { + --fa: "\f436"; } + +.fa-brain { + --fa: "\f5dc"; } + +.fa-bandage { + --fa: "\f462"; } + +.fa-band-aid { + --fa: "\f462"; } + +.fa-calendar-minus { + --fa: "\f272"; } + +.fa-circle-xmark { + --fa: "\f057"; } + +.fa-times-circle { + --fa: "\f057"; } + +.fa-xmark-circle { + --fa: "\f057"; } + +.fa-gifts { + --fa: "\f79c"; } + +.fa-hotel { + --fa: "\f594"; } + +.fa-earth-asia { + --fa: "\f57e"; } + +.fa-globe-asia { + --fa: "\f57e"; } + +.fa-id-card-clip { + --fa: "\f47f"; } + +.fa-id-card-alt { + --fa: "\f47f"; } + +.fa-magnifying-glass-plus { + --fa: "\f00e"; } + +.fa-search-plus { + --fa: "\f00e"; } + +.fa-thumbs-up { + --fa: "\f164"; } + +.fa-user-clock { + --fa: "\f4fd"; } + +.fa-hand-dots { + --fa: "\f461"; } + +.fa-allergies { + --fa: "\f461"; } + +.fa-file-invoice { + --fa: "\f570"; } + +.fa-window-minimize { + --fa: "\f2d1"; } + +.fa-mug-saucer { + --fa: "\f0f4"; } + +.fa-coffee { + --fa: "\f0f4"; } + +.fa-brush { + --fa: "\f55d"; } + +.fa-file-half-dashed { + --fa: "\e698"; } + +.fa-mask { + --fa: "\f6fa"; } + +.fa-magnifying-glass-minus { + --fa: "\f010"; } + +.fa-search-minus { + --fa: "\f010"; } + +.fa-ruler-vertical { + --fa: "\f548"; } + +.fa-user-large { + --fa: "\f406"; } + +.fa-user-alt { + --fa: "\f406"; } + +.fa-train-tram { + --fa: "\e5b4"; } + +.fa-user-nurse { + --fa: "\f82f"; } + +.fa-syringe { + --fa: "\f48e"; } + +.fa-cloud-sun { + --fa: "\f6c4"; } + +.fa-stopwatch-20 { + --fa: "\e06f"; } + +.fa-square-full { + --fa: "\f45c"; } + +.fa-magnet { + --fa: "\f076"; } + +.fa-jar { + --fa: "\e516"; } + +.fa-note-sticky { + --fa: "\f249"; } + +.fa-sticky-note { + --fa: "\f249"; } + +.fa-bug-slash { + --fa: "\e490"; } + +.fa-arrow-up-from-water-pump { + --fa: "\e4b6"; } + +.fa-bone { + --fa: "\f5d7"; } + +.fa-table-cells-row-unlock { + --fa: "\e691"; } + +.fa-user-injured { + --fa: "\f728"; } + +.fa-face-sad-tear { + --fa: "\f5b4"; } + +.fa-sad-tear { + --fa: "\f5b4"; } + +.fa-plane { + --fa: "\f072"; } + +.fa-tent-arrows-down { + --fa: "\e581"; } + +.fa-exclamation { + --fa: "\21"; } + +.fa-arrows-spin { + --fa: "\e4bb"; } + +.fa-print { + --fa: "\f02f"; } + +.fa-turkish-lira-sign { + --fa: "\e2bb"; } + +.fa-try { + --fa: "\e2bb"; } + +.fa-turkish-lira { + --fa: "\e2bb"; } + +.fa-dollar-sign { + --fa: "\24"; } + +.fa-dollar { + --fa: "\24"; } + +.fa-usd { + --fa: "\24"; } + +.fa-x { + --fa: "\58"; } + +.fa-magnifying-glass-dollar { + --fa: "\f688"; } + +.fa-search-dollar { + --fa: "\f688"; } + +.fa-users-gear { + --fa: "\f509"; } + +.fa-users-cog { + --fa: "\f509"; } + +.fa-person-military-pointing { + --fa: "\e54a"; } + +.fa-building-columns { + --fa: "\f19c"; } + +.fa-bank { + --fa: "\f19c"; } + +.fa-institution { + --fa: "\f19c"; } + +.fa-museum { + --fa: "\f19c"; } + +.fa-university { + --fa: "\f19c"; } + +.fa-umbrella { + --fa: "\f0e9"; } + +.fa-trowel { + --fa: "\e589"; } + +.fa-d { + --fa: "\44"; } + +.fa-stapler { + --fa: "\e5af"; } + +.fa-masks-theater { + --fa: "\f630"; } + +.fa-theater-masks { + --fa: "\f630"; } + +.fa-kip-sign { + --fa: "\e1c4"; } + +.fa-hand-point-left { + --fa: "\f0a5"; } + +.fa-handshake-simple { + --fa: "\f4c6"; } + +.fa-handshake-alt { + --fa: "\f4c6"; } + +.fa-jet-fighter { + --fa: "\f0fb"; } + +.fa-fighter-jet { + --fa: "\f0fb"; } + +.fa-square-share-nodes { + --fa: "\f1e1"; } + +.fa-share-alt-square { + --fa: "\f1e1"; } + +.fa-barcode { + --fa: "\f02a"; } + +.fa-plus-minus { + --fa: "\e43c"; } + +.fa-video { + --fa: "\f03d"; } + +.fa-video-camera { + --fa: "\f03d"; } + +.fa-graduation-cap { + --fa: "\f19d"; } + +.fa-mortar-board { + --fa: "\f19d"; } + +.fa-hand-holding-medical { + --fa: "\e05c"; } + +.fa-person-circle-check { + --fa: "\e53e"; } + +.fa-turn-up { + --fa: "\f3bf"; } + +.fa-level-up-alt { + --fa: "\f3bf"; } + +.sr-only, +.fa-sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; } + +.sr-only-focusable:not(:focus), +.fa-sr-only-focusable:not(:focus) { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; } diff --git a/__tests__/samples/resources/build/fontawesome/css/solid.css b/__tests__/samples/resources/build/fontawesome/css/solid.css new file mode 100644 index 0000000..6742be3 --- /dev/null +++ b/__tests__/samples/resources/build/fontawesome/css/solid.css @@ -0,0 +1,19 @@ +/*! + * Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2024 Fonticons, Inc. + */ +:root, :host { + --fa-style-family-classic: 'Font Awesome 6 Free'; + --fa-font-solid: normal 900 1em/1 'Font Awesome 6 Free'; } + +@font-face { + font-family: 'Font Awesome 6 Free'; + font-style: normal; + font-weight: 900; + font-display: block; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +.fas, +.fa-solid { + font-weight: 900; } diff --git a/__tests__/samples/resources/build/fontawesome/webfonts/fa-solid-900.ttf b/__tests__/samples/resources/build/fontawesome/webfonts/fa-solid-900.ttf new file mode 100644 index 0000000..1c10972 Binary files /dev/null and b/__tests__/samples/resources/build/fontawesome/webfonts/fa-solid-900.ttf differ diff --git a/__tests__/samples/resources/build/fontawesome/webfonts/fa-solid-900.woff2 b/__tests__/samples/resources/build/fontawesome/webfonts/fa-solid-900.woff2 new file mode 100644 index 0000000..1672102 Binary files /dev/null and b/__tests__/samples/resources/build/fontawesome/webfonts/fa-solid-900.woff2 differ diff --git a/__tests__/samples/resources/build/grid.css b/__tests__/samples/resources/build/grid.css new file mode 100644 index 0000000..ed5fca8 --- /dev/null +++ b/__tests__/samples/resources/build/grid.css @@ -0,0 +1,325 @@ +@charset "UTF-8"; +/*! + * + * Bryntum Grid 7.2.1 (TRIAL VERSION) + * + * Copyright(c) 2026 Bryntum AB + * https://bryntum.com/contact + * https://bryntum.com/license + * + * Bryntum incorporates third-party code licensed under the MIT and Apache-2.0 licenses. + * See the licenses below or visit https://bryntum.com/products/grid/docs/guide/Grid/licenses + * + * # Third Party Notices + * + * Bryntum uses the following third party libraries: + * + * * [Font Awesome 6 Free](https://fontawesome.com/license/free) (MIT/SIL OFL 1.1) + * * [Roboto font (for Material theme only)](https://github.com/google/roboto) (Apache-2.0) + * * [Styling Cross-Browser Compatible Range Inputs with Sass](https://github.com/darlanrod/input-range-sass) (MIT) + * * [Tree Walker polyfill (only applies to Salesforce)](https://github.com/Krinkle/dom-TreeWalker-polyfill) (MIT) + * * [chronograph](https://github.com/bryntum/chronograph) (MIT) + * * [later.js](https://github.com/bunkat/later) (MIT) + * * [Monaco editor (only used in our demos)](https://microsoft.github.io/monaco-editor) (MIT) + * * Map/Set polyfill to fix performance issues for Salesforce LWS (MIT) + * * [Chart.js (when using Chart package)](https://github.com/chartjs/Chart.js) (MIT) + * + * Note: the **chronograph** and **later.js** libraries are used in Bryntum Scheduler Pro and Bryntum Gantt, but they are + * listed for all Bryntum products since the distribution contains trial versions of the thin bundles for all other + * products. TreeWalker is only used in the LWC bundle for Salesforce. Roboto font is only used in the material theme. + * + * ## Font Awesome 6 Free + * + * [Font Awesome Free 6 by @fontawesome](https://fontawesome.com/) + * + * Font Awesome Free is free, open source, and GPL friendly. You can use it for commercial projects, open source projects, + * or really almost whatever you want. + * + * [Full Font Awesome Free license](https://fontawesome.com/license/free) + * + * ## Roboto font + * + * [Apache License Version 2.0, January 2004](https://www.apache.org/licenses/LICENSE-2.0) + * + * TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + * + * 1. Definitions. + * + * "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 + * of this document. + * + * "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + * + * "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are + * under common control with that entity. For the purposes of this definition, + * "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by + * contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial + * ownership of such entity. + * + * "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + * + * "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, + * documentation source, and configuration files. + * + * "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including + * but not limited to compiled object code, generated documentation, and conversions to other media types. + * + * "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as + * indicated by a copyright notice that is included in or attached to the work + * (an example is provided in the Appendix below). + * + * "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work + * and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an + * original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain + * separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + * + * "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or + * additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the + * Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. + * For the purposes of this definition, "submitted" + * means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including + * but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems + * that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding + * communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a + * Contribution." + * + * "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received + * by Licensor and subsequently incorporated within the Work. + * + * 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to + * You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, + * prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such + * Derivative Works in Source or Object form. + * + * 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a + * perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable + * (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise + * transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are + * necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) + * with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity ( + * including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within + * the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this + * License for that Work shall terminate as of the date such litigation is filed. + * + * 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with + * or without modifications, and in Source or Object form, provided that You meet the following conditions: + * + * (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and + * + * (b) You must cause any modified files to carry prominent notices stating that You changed the files; and + * + * (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, + * and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the + * Derivative Works; and + * + * (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute + * must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that + * do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file + * distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the + * Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices + * normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You + * may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the + * NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the + * License. + * + * You may add Your own copyright statement to Your modifications and may provide additional or different license terms and + * conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, + * provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this + * License. + * + * 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for + * inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any + * additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any + * separate license agreement you may have executed with Licensor regarding such Contributions. + * + * 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product + * names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and + * reproducing the content of the NOTICE file. + * + * 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and + * each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, + * MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness + * of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this + * License. + * + * 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or + * otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, + * shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or + * consequential damages of any character arising as a result of this License or out of the use or inability to use the + * Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or + * any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such + * damages. + * + * 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose + * to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or + * rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and + * on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and + * hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason + * of your accepting any such warranty or additional liability. + * + * END OF TERMS AND CONDITIONS + * + * APPENDIX: How to apply the Apache License to your work. + * + * To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by + * brackets "[]" + * replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the + * appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose + * be included on the same "printed page" as the copyright notice for easier identification within third-party archives. + * + * Copyright [yyyy] [name of copyright owner] + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * [APACHE LICENSE, VERSION 2.0](http://www.apache.org/licenses/LICENSE-2.0) + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an " + * AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * ## Styling Cross-Browser Compatible Range Inputs with Sass + * + * Github: [input-range-sass](https://github.com/darlanrod/input-range-sass) + * + * Author: [Darlan Rod](https://github.com/darlanrod) + * + * Version 1.4.1 + * + * The MIT License (MIT) + * + * Copyright (c) 2016 Darlan Rod + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated + * documentation files (the "Software"), to deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit + * persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * ## Tree Walker polyfill + * + * The MIT License (MIT) + * + * [Copyright 2013–2017 Timo Tijhof](https://github.com/Krinkle/dom-TreeWalker-polyfill) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated + * documentation files (the "Software"), to deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit + * persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * ## chronograph + * + * GitHub: [chronograph](https://github.com/bryntum/chronograph) + * + * The MIT License (MIT) + * + * Copyright (c) 2023 Bryntum + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated + * documentation files (the "Software"), to deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit + * persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * ## later.js + * + * GitHub: [later.js](https://github.com/bunkat/later) + * + * The MIT License (MIT) + * + * Copyright © 2013 BunKat + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated + * documentation files (the "Software"), to deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit + * persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * ## Monaco editor + * + * GitHub: [Monaco editor](https://microsoft.github.io/monaco-editor) (MIT) + * + * The MIT License (MIT) + * + * Copyright (c) 2016 - present Microsoft Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated + * documentation files (the "Software"), to deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit + * persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * ## Map/Set polyfill to fix performance issues for Salesforce LWS + * + * Copyright © 2024 Certinia Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * ## Chart.js + * + * GitHub: [Chart.js](https://github.com/chartjs/Chart.js) + * + * The MIT License (MIT) + * + * Copyright (c) 2014-2022 Chart.js Contributors + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ +:root,:host{--bryntum-version: "7.2.1";--b-checkbox-checked-check-content: "\f00c";--b-widget-anchor-width: 1.2em;--b-widget-anchor-height: .6em;--b-widget-font-size: 1em;--b-widget-font-weight: 400;--b-widget-icon-font-family: "Font Awesome 6 Free";--b-widget-icon-font-weight: 900;--b-widget-sub-menu-icon: "\f0da";--b-widget-color: var(--b-text-1);--b-widget-border-color: var(--b-border-3);--b-widget-disabled-color: var(--b-text-3);--b-widget-disabled-background: var(--b-neutral-90);--b-widget-padding: 1em;--b-widget-padding-large: 1.5em;--b-widget-gap: 1em;--b-widget-focus-outline-width: 2px;--b-widget-focus-outline-color: var(--b-primary);--b-widget-floating-box-shadow: var(--b-elevation-2);--b-aligned-above-floating-box-shadow: -3px -1px 6px rgba(0, 0, 0, .12), 3px -2px 6px rgba(0, 0, 0, .24);--b-widget-floating-border: null;--b-label-color: var(--b-widget-color);--b-widget-scrollbar-border-color: var(--b-border-7);--b-widget-anchor-offset: 1px;--b-elevation-0: none;--b-elevation-1: 0 1px 3px 0 rgba(0, 0, 0, .12), 0 1px 1px 0 rgba(0, 0, 0, .1), 0 2px 1px -1px rgba(0, 0, 0, .08);--b-elevation-2: 0 1px 5px 0 rgba(0, 0, 0, .12), 0 2px 2px 0 rgba(0, 0, 0, .1), 0 3px 1px -2px rgba(0, 0, 0, .08);--b-elevation-3: 0 3px 6px rgba(0, 0, 0, .12), 0 3px 6px rgba(0, 0, 0, .24);--b-elevation-4: 0 5px 6px -3px rgba(0, 0, 0, .16), 0 8px 10px 1px rgba(0, 0, 0, .1), 0 3px 14px 2px rgba(0, 0, 0, .08);--b-default-transition-duration: .15s}@media (prefers-reduced-motion: reduce){body:not(.b-siesta-testing){--b-default-transition-duration: 0s}}@property --bi-widget-grid-column{syntax : "*"; inherits : false;}.b-internal{--bi-widget-grid-column: null}.b-widget{display:flex;position:relative;overflow:hidden;color-scheme:var(--b-widget-color-scheme);font-weight:var(--b-widget-font-weight);font-size:var(--b-widget-font-size);grid-column:var(--bi-widget-grid-column)}.b-widget,.b-widget:before,.b-widget:after,.b-widget *,.b-widget *:before,.b-widget *:after{box-sizing:border-box}.b-widget.b-hidden.b-hide-mode-clip{clip:rect(0,0,0,0)!important}.b-widget.b-hidden.b-hide-mode-opacity{opacity:0!important;pointer-events:none}.b-widget.b-hidden.b-hide-mode-display{display:none!important}.b-widget.b-positioned{position:absolute;inset-inline-start:0;inset-block-start:0}.b-widget.b-positionable{position:absolute}.b-widget .b-aria-desc-element{position:absolute;clip-path:polygon(0 0);contain:strict}.b-widget.b-floating,.b-widget.b-positioned{box-shadow:var(--b-widget-floating-box-shadow)}:is(.b-widget.b-floating,.b-widget.b-positioned).b-centered{top:50%;inset-inline-start:50%;z-index:1;translate:calc(-50% * var(--b-rtl-negate)) -50%}.b-widget.b-maximized{position:fixed;translate:none!important;width:100%!important;height:100%!important;max-width:100%!important;max-height:100%!important;top:0!important;inset-inline-start:0!important}.b-widget.b-maximized.b-mobile .b-bottom-toolbar{order:-1;min-height:3.5em}.b-widget.b-maximized.b-mobile .b-bottom-toolbar .b-toolbar-content{padding-block:.5em 0;padding-inline-start:1em!important}.b-widget>.b-focus-trap{position:absolute;display:none;clip:rect(0,0,0,0)}.b-widget.b-focus-trapped.b-contains-focus>.b-focus-trap{display:inherit}.b-widget.b-initializing *{transition:none!important}.b-anchor{position:absolute}.b-anchor svg{position:absolute;top:0;pointer-events:none;overflow:visible}.b-anchor.b-anchor-top,.b-anchor.b-anchor-bottom{left:0;height:calc(var(--b-widget-anchor-height) + var(--bi-align-offset-y, 0px));width:100%}:is(.b-anchor.b-anchor-top,.b-anchor.b-anchor-bottom) svg{width:var(--b-widget-anchor-width);height:var(--b-widget-anchor-height)}.b-anchor.b-anchor-top{bottom:calc(100% - var(--b-widget-anchor-offset))}.b-anchor.b-anchor-top svg{top:auto;bottom:0}.b-anchor.b-anchor-bottom{top:calc(100% - var(--b-widget-anchor-offset))}.b-anchor.b-anchor-bottom svg{rotate:180deg}.b-anchor.b-anchor-start,.b-anchor.b-anchor-end{top:0;width:calc(var(--b-widget-anchor-height) + var(--bi-align-offset-x, 0px));height:100%}:is(.b-anchor.b-anchor-start,.b-anchor.b-anchor-end) svg{height:var(--b-widget-anchor-width);width:var(--b-widget-anchor-height)}.b-anchor.b-anchor-start{inset-inline-end:100%}.b-anchor.b-anchor-start svg{rotate:270deg;transform-origin:var(--b-widget-anchor-height) var(--b-widget-anchor-height)}.b-anchor.b-anchor-end{inset-inline-start:100%}.b-anchor.b-anchor-end svg{rotate:90deg;transform-origin:calc(var(--b-widget-anchor-height) / 2) calc(var(--b-widget-anchor-height) / 2)}.b-anchor.b-anchor-right{inset-inline-start:calc(100% - var(--bi-border-width, 0px));clip-path:rect(0 100% 100% var(--bi-border-width, 0px))}.b-anchor.b-anchor-left{inset-inline-end:calc(100% - var(--bi-border-width, 0px));clip-path:rect(0 calc(100% - var(--bi-border-width, 0px)) 100% 0)}.b-rtl>.b-anchor.b-anchor-right{inset-inline-end:calc(100% - var(--bi-border-width, 0px));inset-inline-start:auto}.b-rtl>.b-anchor.b-anchor-left{inset-inline-start:calc(100% - var(--bi-border-width, 0px));inset-inline-end:auto}.b-float-root{position:fixed!important;inset:0;pointer-events:none;overflow:clip;z-index:14000;contain:strict}.b-float-root.b-safari{user-select:none;-webkit-user-select:none}.b-float-root>.b-floating{position:absolute;contain:layout style;pointer-events:all;transition:opacity .2s;top:0;inset-inline-start:0;z-index:1}.b-float-root>.b-floating:not(.b-popup){box-shadow:var(--b-widget-floating-box-shadow);border-radius:var(--b-widget-border-radius);border:var(--b-widget-floating-border)}.b-firefox :is(.b-float-root>.b-floating){contain:layout}.b-float-root>.b-floating.b-hidden{opacity:0}.b-float-root>.b-floating.b-aligned-above:not(.b-anchored){box-shadow:var(--b-aligned-above-floating-box-shadow)}.b-trial-demo-mode [style*="data:image/svg+xml"]{background-image:none!important}:root,:host{--b-rtl-negate: 1}.b-rtl{direction:rtl;--b-rtl-negate: -1}.b-rtl .b-anchor.b-anchor-start svg{rotate:90deg;transform-origin:calc(var(--b-widget-anchor-height) / 2) calc(var(--b-widget-anchor-height) / 2)}.b-rtl .b-anchor.b-anchor-end svg{rotate:270deg;transform-origin:var(--b-widget-anchor-height) var(--b-widget-anchor-height)}.b-ltr{direction:ltr}.b-aria-live-el{height:0;width:0;position:absolute;inset-inline-start:-9999px;contain:strict}.b-released,.b-hide-display,.b-theme-info{display:none!important}.b-hide-visibility{visibility:hidden!important}.b-hide-offscreen{visibility:hidden!important;position:absolute!important;top:-10000em;left:-10000em}.b-yscroll-pad{display:none}.b-visible-scrollbar .b-show-yscroll-padding>.b-yscroll-pad{display:block;order:9999;border-inline-start:1px solid var(--b-widget-scrollbar-border-color)}.b-visible-scrollbar .b-show-yscroll-padding>.b-yscroll-pad .b-yscroll-pad-sizer{overflow-x:hidden;overflow-y:scroll;margin-inline-start:-1px;height:0;max-width:var(--bi-scrollbar-width)}.b-widget-scroller.b-hide-scroll{scrollbar-width:none}.b-widget-scroller.b-hide-scroll::-webkit-scrollbar{display:none}:is(div,span) .b-color-red{--b-primary: var(--b-color-red)}:is(div,span) .b-color-pink{--b-primary: var(--b-color-pink)}:is(div,span) .b-color-magenta{--b-primary: var(--b-color-magenta)}:is(div,span) .b-color-purple{--b-primary: var(--b-color-purple)}:is(div,span) .b-color-deep-purple{--b-primary: var(--b-color-deep-purple)}:is(div,span) .b-color-violet{--b-primary: var(--b-color-violet)}:is(div,span) .b-color-indigo{--b-primary: var(--b-color-indigo)}:is(div,span) .b-color-blue{--b-primary: var(--b-color-blue)}:is(div,span) .b-color-light-blue{--b-primary: var(--b-color-light-blue)}:is(div,span) .b-color-cyan{--b-primary: var(--b-color-cyan)}:is(div,span) .b-color-teal{--b-primary: var(--b-color-teal)}:is(div,span) .b-color-green{--b-primary: var(--b-color-green)}:is(div,span) .b-color-light-green{--b-primary: var(--b-color-light-green)}:is(div,span) .b-color-lime{--b-primary: var(--b-color-lime)}:is(div,span) .b-color-yellow{--b-primary: var(--b-color-yellow)}:is(div,span) .b-color-amber{--b-primary: var(--b-color-amber)}:is(div,span) .b-color-orange{--b-primary: var(--b-color-orange)}:is(div,span) .b-color-deep-orange{--b-primary: var(--b-color-deep-orange)}:is(div,span) .b-color-brown{--b-primary: var(--b-color-brown)}:is(div,span) .b-color-lighter-gray{--b-primary: var(--b-color-lighter-gray)}:is(div,span) .b-color-light-gray{--b-primary: var(--b-color-light-gray)}:is(div,span) .b-color-gray{--b-primary: var(--b-color-gray)}:is(div,span) .b-color-black{--b-primary: var(--b-color-black)}@keyframes b-anim-fade-in{0%{opacity:0}to{opacity:1}}@keyframes b-anim-fade-out{0%{opacity:1}to{opacity:0}}@keyframes b-anim-slide-in-from-right{30%{translate:-50%;opacity:.5}30.01%{translate:50%}to{translate:0;opacity:1}}@keyframes b-anim-slide-in-from-left{30%{translate:50%;opacity:.5}30.01%{translate:-50%}to{translate:0;opacity:1}}@keyframes b-anim-slide-in-from-below{30%{translate:0 -50%;opacity:.5}30.01%{translate:0 50%}to{translate:0;opacity:1}}@keyframes b-anim-slide-in-from-above{30%{translate:0 50%;opacity:.5}30.01%{translate:0 -50%}to{translate:0;opacity:1}}.b-slide-in-next,.b-slide-in-previous{animation:b-anim-slide-in-from-left .3s ease 0s 1 normal}.b-slide-vertical.b-slide-in-next{animation-name:b-anim-slide-in-from-below}.b-slide-vertical.b-slide-in-previous{animation-name:b-anim-slide-in-from-above}.b-slide-in-next:not(.b-slide-vertical){animation-name:b-anim-slide-in-from-right}.b-slide-in-previous:not(.b-slide-vertical){animation-name:b-anim-slide-in-from-left}.b-rtl.b-slide-in-next:not(.b-slide-vertical){animation-name:b-anim-slide-in-from-left}.b-rtl.b-slide-in-previous:not(.b-slide-vertical){animation-name:b-anim-slide-in-from-right}.b-sliding-child-element{overflow:clip}.b-transition-expand-collapse.b-aligned-below{animation:b-anim-expand-downwards .3s forwards}.b-transition-expand-collapse.b-aligned-above{animation:b-anim-expand-upwards .3s forwards}.b-transition-expand-collapse.b-hiding.b-aligned-below{animation:b-anim-collapse-upwards .3s forwards}.b-transition-expand-collapse.b-hiding.b-aligned-above{animation:b-anim-collapse-downwards .3s forwards}@keyframes b-anim-expand-downwards{0%{clip-path:rect(-25px calc(100% + 25px) 0 -25px);opacity:0}to{clip-path:rect(-25px calc(100% + 25px) calc(100% + 25px) -25px);opacity:1}}@keyframes b-anim-collapse-upwards{0%{clip-path:rect(-25px calc(100% + 25px) calc(100% + 25px) -25px);opacity:1}to{clip-path:rect(-25px calc(100% + 25px) 0 -25px);opacity:0}}@keyframes b-anim-expand-upwards{0%{clip-path:rect(100% calc(100% + 25px) 100% -25px);opacity:0}to{clip-path:rect(-25px calc(100% + 25px) calc(100% + 25px) -25px);opacity:1}}@keyframes b-anim-collapse-downwards{0%{clip-path:rect(-25px calc(100% + 25px) calc(100% + 25px) -25px);opacity:1}to{clip-path:rect(100% calc(100% + 25px) 100% -25px);opacity:0}}:root,:host{--b-color-red: #e53935;--b-color-pink: #d81b60;--b-color-magenta: #c200c2;--b-color-purple: #8e24aa;--b-color-violet: #5e35b1;--b-color-deep-purple: #4527a0;--b-color-indigo: #3949ab;--b-color-blue: #1e88e5;--b-color-light-blue: #03a9f4;--b-color-cyan: #3bc9db;--b-color-teal: #00897b;--b-color-green: #43a047;--b-color-light-green: #8bc34a;--b-color-lime: #c0ca33;--b-color-yellow: #fdd835;--b-color-amber: #ffb300;--b-color-orange: #fb8c00;--b-color-deep-orange: #f4511e;--b-color-brown: #6d4c41;--b-color-lighter-gray: #e0e0e0;--b-color-light-gray: #c0c0c0;--b-color-gray: #757575;--b-color-black: #000000;--b-neutral-100: hsl(0 0 100%);--b-neutral-99: hsl(0 0 99%);--b-neutral-98: hsl(0 0 98%);--b-neutral-97: hsl(0 0 97%);--b-neutral-96: hsl(0 0 96%);--b-neutral-95: hsl(0 0 95%);--b-neutral-94: hsl(0 0 94%);--b-neutral-93: hsl(0 0 93%);--b-neutral-92: hsl(0 0 92%);--b-neutral-91: hsl(0 0 91%);--b-neutral-90: hsl(0 0 90%);--b-neutral-85: hsl(0 0 85%);--b-neutral-80: hsl(0 0 80%);--b-neutral-75: hsl(0 0 75%);--b-neutral-70: hsl(0 0 70%);--b-neutral-65: hsl(0 0 65%);--b-neutral-60: hsl(0 0 60%);--b-neutral-55: hsl(0 0 55%);--b-neutral-50: hsl(0 0 50%);--b-neutral-45: hsl(0 0 45%);--b-neutral-40: hsl(0 0 40%);--b-neutral-35: hsl(0 0 35%);--b-neutral-30: hsl(0 0 30%);--b-neutral-25: hsl(0 0 25%);--b-neutral-20: hsl(0 0 20%);--b-neutral-15: hsl(0 0 15%);--b-neutral-10: hsl(0 0 10%);--b-neutral-5: hsl(0 0 5%);--b-neutral-2: hsl(0 0 2%);--b-neutral-1: hsl(0 0 1%);--b-neutral-0: hsl(0 0 0%);--b-border-1: var(--b-neutral-10);--b-border-2: var(--b-neutral-30);--b-border-3: var(--b-neutral-50);--b-border-4: var(--b-neutral-60);--b-border-5: var(--b-neutral-70);--b-border-6: var(--b-neutral-80);--b-border-7: var(--b-neutral-90);--b-border-8: var(--b-neutral-93);--b-border-9: var(--b-neutral-95);--b-border-10: var(--b-neutral-100);--b-text-1: var(--b-neutral-10);--b-text-2: var(--b-neutral-30);--b-text-3: var(--b-neutral-50);--b-text-4: var(--b-neutral-70);--b-text-5: var(--b-neutral-100)}.b-colorize,.b-bryntum{--b-primary-100: var(--b-mix);--b-primary-99: color-mix(in srgb, var(--b-primary), var(--b-mix) 98%);--b-primary-98: color-mix(in srgb, var(--b-primary), var(--b-mix) 96%);--b-primary-97: color-mix(in srgb, var(--b-primary), var(--b-mix) 94%);--b-primary-96: color-mix(in srgb, var(--b-primary), var(--b-mix) 92%);--b-primary-95: color-mix(in srgb, var(--b-primary), var(--b-mix) 90%);--b-primary-94: color-mix(in srgb, var(--b-primary), var(--b-mix) 88%);--b-primary-93: color-mix(in srgb, var(--b-primary), var(--b-mix) 86%);--b-primary-92: color-mix(in srgb, var(--b-primary), var(--b-mix) 84%);--b-primary-91: color-mix(in srgb, var(--b-primary), var(--b-mix) 82%);--b-primary-90: color-mix(in srgb, var(--b-primary), var(--b-mix) 80%);--b-primary-85: color-mix(in srgb, var(--b-primary), var(--b-mix) 70%);--b-primary-80: color-mix(in srgb, var(--b-primary), var(--b-mix) 60%);--b-primary-75: color-mix(in srgb, var(--b-primary), var(--b-mix) 50%);--b-primary-70: color-mix(in srgb, var(--b-primary), var(--b-mix) 40%);--b-primary-65: color-mix(in srgb, var(--b-primary), var(--b-mix) 30%);--b-primary-60: color-mix(in srgb, var(--b-primary), var(--b-mix) 20%);--b-primary-55: color-mix(in srgb, var(--b-primary), var(--b-mix) 10%);--b-primary-50: var(--b-primary);--b-primary-45: color-mix(in srgb, var(--b-primary), var(--b-opposite) 10%);--b-primary-40: color-mix(in srgb, var(--b-primary), var(--b-opposite) 20%);--b-primary-35: color-mix(in srgb, var(--b-primary), var(--b-opposite) 30%);--b-primary-30: color-mix(in srgb, var(--b-primary), var(--b-opposite) 40%);--b-primary-25: color-mix(in srgb, var(--b-primary), var(--b-opposite) 50%);--b-primary-20: color-mix(in srgb, var(--b-primary), var(--b-opposite) 60%);--b-primary-15: color-mix(in srgb, var(--b-primary), var(--b-opposite) 70%);--b-primary-10: color-mix(in srgb, var(--b-primary), var(--b-opposite) 80%);--b-primary-5: color-mix(in srgb, var(--b-primary), var(--b-opposite) 90%);--b-primary-2: color-mix(in srgb, var(--b-primary), var(--b-opposite) 96%);--b-primary-1: color-mix(in srgb, var(--b-primary), var(--b-opposite) 98%);--b-primary-0: var(--b-opposite)}@supports not (color: color-mix(in srgb,red,blue)){.b-colorize,.b-bryntum{--b-primary-99: linear-gradient(rgba(255, 255, 255, .98), rgba(255, 255, 255, .98)) var(--b-primary);--b-primary-98: linear-gradient(rgba(255, 255, 255, .96), rgba(255, 255, 255, .96)) var(--b-primary);--b-primary-97: linear-gradient(rgba(255, 255, 255, .94), rgba(255, 255, 255, .94)) var(--b-primary);--b-primary-96: linear-gradient(rgba(255, 255, 255, .92), rgba(255, 255, 255, .92)) var(--b-primary);--b-primary-95: linear-gradient(rgba(255, 255, 255, .9), rgba(255, 255, 255, .9)) var(--b-primary);--b-primary-94: linear-gradient(rgba(255, 255, 255, .88), rgba(255, 255, 255, .88)) var(--b-primary);--b-primary-93: linear-gradient(rgba(255, 255, 255, .86), rgba(255, 255, 255, .86)) var(--b-primary);--b-primary-92: linear-gradient(rgba(255, 255, 255, .84), rgba(255, 255, 255, .84)) var(--b-primary);--b-primary-91: linear-gradient(rgba(255, 255, 255, .82), rgba(255, 255, 255, .82)) var(--b-primary);--b-primary-90: linear-gradient(rgba(255, 255, 255, .8), rgba(255, 255, 255, .8)) var(--b-primary);--b-primary-85: linear-gradient(rgba(255, 255, 255, .7), rgba(255, 255, 255, .7)) var(--b-primary);--b-primary-80: linear-gradient(rgba(255, 255, 255, .6), rgba(255, 255, 255, .6)) var(--b-primary);--b-primary-75: linear-gradient(rgba(255, 255, 255, .5), rgba(255, 255, 255, .5)) var(--b-primary);--b-primary-70: linear-gradient(rgba(255, 255, 255, .4), rgba(255, 255, 255, .4)) var(--b-primary);--b-primary-65: linear-gradient(rgba(255, 255, 255, .3), rgba(255, 255, 255, .3)) var(--b-primary);--b-primary-60: linear-gradient(rgba(255, 255, 255, .2), rgba(255, 255, 255, .2)) var(--b-primary);--b-primary-55: linear-gradient(rgba(255, 255, 255, .1), rgba(255, 255, 255, .1)) var(--b-primary);--b-primary-45: linear-gradient(rgba(0, 0, 0, .1), rgba(0, 0, 0, .1)) var(--b-primary);--b-primary-40: linear-gradient(rgba(0, 0, 0, .2), rgba(0, 0, 0, .2)) var(--b-primary);--b-primary-35: linear-gradient(rgba(0, 0, 0, .3), rgba(0, 0, 0, .3)) var(--b-primary);--b-primary-30: linear-gradient(rgba(0, 0, 0, .4), rgba(0, 0, 0, .4)) var(--b-primary);--b-primary-25: linear-gradient(rgba(0, 0, 0, .5), rgba(0, 0, 0, .5)) var(--b-primary);--b-primary-20: linear-gradient(rgba(0, 0, 0, .6), rgba(0, 0, 0, .6)) var(--b-primary);--b-primary-15: linear-gradient(rgba(0, 0, 0, .7), rgba(0, 0, 0, .7)) var(--b-primary);--b-primary-10: linear-gradient(rgba(0, 0, 0, .8), rgba(0, 0, 0, .8)) var(--b-primary);--b-primary-5: linear-gradient(rgba(0, 0, 0, .9), rgba(0, 0, 0, .9)) var(--b-primary);--b-primary-2: linear-gradient(rgba(0, 0, 0, .96), rgba(0, 0, 0, .96)) var(--b-primary);--b-primary-1: linear-gradient(rgba(0, 0, 0, .98), rgba(0, 0, 0, .98)) var(--b-primary)}}.b-fx-highlight{z-index:9999!important;animation:b-anim-fx-highlight 1s ease 0s 1}@keyframes b-anim-fx-highlight{0%{box-shadow:none}50%{box-shadow:0 0 10px 5px var(--b-primary-50)}to{box-shadow:none}}.b-dragging,.b-dragging *{pointer-events:none!important}.b-dragging:not(.b-widget){z-index:100;opacity:.8;box-sizing:border-box}.b-dragging:not(.b-widget).b-drag-unified-proxy{opacity:.65}.b-dragging:not(.b-widget).b-drag-main{z-index:101;opacity:1}.b-drag-proxy{position:absolute!important;top:0;inset-inline-start:0;pointer-events:none!important;box-sizing:border-box}.b-drag-proxy *{box-sizing:border-box}.b-aborting,.b-drag-final-transition{transition-duration:.3s;transition-property:all!important}.b-drag-unified-animation{transition:translate .2s}.b-drag-original.b-hidden{display:none!important}.b-drag-helper-active *{-webkit-user-select:none!important;user-select:none!important}.b-resize-grip{position:absolute;z-index:1}.b-resize-grip-top-start,.b-resize-grip-top-end,.b-resize-grip-bottom-start,.b-resize-grip-bottom-end{width:.5em;height:.5em}.b-resize-grip-top,.b-resize-grip-top-start,.b-resize-grip-top-end{top:0}.b-resize-grip-bottom,.b-resize-grip-bottom-start,.b-resize-grip-bottom-end{bottom:0}.b-resize-grip-start,.b-resize-grip-top-start,.b-resize-grip-bottom-start{inset-inline-start:0}.b-resize-grip-end,.b-resize-grip-top-end,.b-resize-grip-bottom-end{inset-inline-end:0}.b-resize-grip-top,.b-resize-grip-bottom{height:.5em}.b-resize-grip-start,.b-resize-grip-end{width:.5em}.b-resize-grip-top-start,.b-resize-grip-bottom-end{cursor:nwse-resize;z-index:2}.b-resize-grip-top-end,.b-resize-grip-bottom-start{cursor:nesw-resize;z-index:2}.b-resize-grip-top,.b-resize-grip-bottom{cursor:ns-resize;width:100%;inset-inline-start:0}.b-resize-grip-start,.b-resize-grip-end{height:100%;top:0;cursor:ew-resize}.b-no-resize-observer.b-resize-monitored:not(.b-floating){position:relative}.b-no-resize-observer.b-resize-monitored .b-resize-monitors{position:absolute;left:0;top:0;width:100%;height:100%;visibility:hidden;overflow:hidden}.b-no-resize-observer.b-resize-monitored .b-resize-monitors>*{width:100%;height:100%;overflow:hidden}.b-no-resize-observer.b-resize-monitored .b-resize-monitors>.b-resize-monitor-expand:after{content:"";display:block;width:100000px;height:100000px}.b-no-resize-observer.b-resize-monitored .b-resize-monitors>.b-resize-monitor-shrink:after{content:"";display:block;width:200%;height:200%;min-width:1px;min-height:1px}.simulated-mouse{position:absolute;z-index:100;top:10px;left:10px;transition:top .5s,left .5s;pointer-events:none;font-size:16px}.simulated-mouse.quick{transition:top .05s,left .05s}.simulated-mouse:after{position:absolute;content:"\f245" / "";font-family:var(--b-widget-icon-font-family);font-weight:900;z-index:102}.simulated-mouse.drag:before,.simulated-mouse.mousedown:before,.simulated-mouse.dblclick:before,.simulated-mouse.click:before{position:absolute;content:"";border:2px solid transparent;border-radius:50%;animation-name:b-anim-click;animation-duration:.2s;top:0;left:0;translate:-50% -50%;z-index:101;opacity:.7}.simulated-mouse.drag:after{content:"\f25a" / "";left:-3px}.simulated-mouse.dblclick:before{animation-name:b-anim-dblclick;animation-duration:.3s}.simulated-mouse.mousedown:before,.simulated-mouse.drag:before{animation-name:none;width:1.5em;height:1.5em;border-color:red}@keyframes b-anim-click{0%{width:0;height:0}90%{width:1.5em;height:1.5em;border-color:red}to{width:0;height:0;border-color:transparent}}@keyframes b-anim-dblclick{0%{width:0;height:0}40%{width:1.5em;height:1.5em;border-color:red}50%{width:0;height:0}90%{width:1.5em;height:1.5em;border-color:red}to{width:0;height:0;border-color:transparent}}.b-scroll-hidden{visibility:hidden!important;position:absolute!important;top:-10000em;left:-10000em;translate:0 0!important}.b-infinity-scroller{overflow:scroll}.b-infinity-scroller.b-infinity-scroller-smooth{scroll-behavior:smooth}.b-infinity-scroller-item{position:absolute!important}.b-widget-scroller{overflow:hidden;-webkit-overflow-scrolling:touch;overflow-anchor:none;position:relative}.b-hide-scroll{scrollbar-width:none}.b-hide-scroll::-webkit-scrollbar{display:none}.b-scroller-stretcher{position:absolute;height:1px;width:1px;top:0;inset-inline-start:0}.b-icon{display:inline-flex;gap:.5em}.b-icon:before,.b-fw-icon:before{font-style:normal;font-variant:normal;line-height:1;display:grid;place-items:center;font-family:var(--b-widget-icon-font-family);font-weight:var(--b-widget-icon-font-weight);content:var(--fa)}.b-fw-icon:before{width:1em}.b-icon-scroll-left:before{content:var(--b-icon-scroll-left, "\f104")}.b-icon-scroll-right:before{content:var(--b-icon-scroll-right, "\f105")}.b-icon-spin-up:before{content:var(--b-icon-spin-up, "\f0d8")}.b-icon-spin-down:before{content:var(--b-icon-spin-down, "\f0d7")}.b-icon-add:before{content:var(--b-icon-add, "+")}.b-icon-clear:before{content:var(--b-icon-clear, "\f00d")}.b-icon-remove:before{content:var(--b-icon-remove, "\f00d")}.b-icon-close:before{content:var(--b-icon-close, "\f00d")}.b-icon-remove-circle:before{content:var(--b-icon-remove-circle, "\f057")}.b-icon-collapse-down:before{content:var(--b-icon-collapse-down, "\f078")}.b-icon-collapse-left:before{content:var(--b-icon-collapse-left, "\f053")}.b-icon-collapse-right:before{content:var(--b-icon-collapse-right, "\f054")}.b-icon-collapse-up:before{content:var(--b-icon-collapse-up, "\f077")}.b-icon-filter-disable:before{content:var(--b-icon-filter-disable, "\f05e")}.b-icon-search:before{content:var(--b-icon-search, "\f002")}.b-icon-search-plus:before{content:var(--b-icon-search-plus, "\f00e")}.b-icon-search-minus:before{content:var(--b-icon-search-minus, "\f010")}.b-icon-hide:before{content:var(--b-icon-hide, "\f057")}.b-icon-trash:before{content:var(--b-icon-trash, "\f1f8")}.b-icon-edit:before{content:var(--b-icon-edit, "\f303")}.b-icon-show-details:before{content:var(--b-icon-show-details, "\f002")}.b-icon-rename:before{content:var(--b-icon-rename, "\f044")}.b-icon-copy:before{content:var(--b-icon-copy, "\f0c5")}.b-icon-cut:before{content:var(--b-icon-cut, "\f0c4")}.b-icon-paste:before{content:var(--b-icon-paste, "\f0ea")}.b-icon-expand-row:before{content:var(--b-icon-expand-row, "\f107")}.b-icon-expand-column:before{content:var(--b-icon-expand-column, "\f105")}.b-icon-expand{content:var(--b-icon-expand, "\f065")}.b-icon-first:before{content:var(--b-icon-first, "\f100")}:is(.b-rtl .b-icon-first,.b-rtl .b-icon-last,.b-rtl .b-icon-next,.b-rtl .b-icon-previous,.b-rtl .b-icon-scroll-left,.b-rtl .b-icon-scroll-right):before{scale:-1 1}.b-icon-last:before{content:var(--b-icon-last, "\f101")}.b-icon-redo:before{content:var(--b-icon-redo, "\f01e")}.b-icon-reload:before{content:var(--b-icon-reload, "\f01e")}.b-icon-undo:before{content:var(--b-icon-undo, "\f0e2")}.b-icon-compare:before{content:var(--b-icon-compare, "\e13a")}.b-icon-split-horizontal:before,.b-icon-split-vertical:before,.b-icon-split-both:before{min-width:1em!important;width:1em;height:1em;border-radius:2px;border:2px solid currentColor;overflow:hidden}.b-icon-split-horizontal:before{content:var(--b-icon-split-horizontal, "\2503");rotate:90deg;border-left-width:3px;align-items:start;line-height:.8}.b-icon-split-vertical:before{content:var(--b-icon-split-vertical, "\2503");border-top-width:3px;align-items:start;line-height:.8}.b-icon-split-both:before{content:var(--b-icon-split-both, "\254b");border-top-width:3px}.b-icon-download:before{content:var(--b-icon-download, "\f019")}.b-icon-code:before{content:var(--b-icon-code, "\f121")}.b-icon-clipboard:before{content:var(--b-icon-clipboard, "\f328")}.b-icon-filter:before{content:var(--b-icon-filter, "\f0b0")}.b-icon-filter-equal:before{content:var(--b-icon-filter-equal, "\f0b0")}.b-icon-filter-less:before{content:var(--b-icon-filter-less, "\f053")}.b-icon-filter-before:before{content:var(--b-icon-filter-before, "\f053")}.b-icon-filter-more:before{content:var(--b-icon-filter-more, "\f054")}.b-icon-filter-after:before{content:var(--b-icon-filter-after, "\f054")}.b-icon-check:before{content:var(--b-icon-check, "\f00c")}.b-icon-checked:before{content:var(--b-icon-checked, "\f14a")}.b-icon-unchecked:before{content:var(--b-icon-unchecked, "\f0c8")}.b-icon-radio:before{content:var(--b-icon-radio, "\f111")}.b-icon-radio-unchecked:before{content:var(--b-icon-radio-unchecked, "\f111")}.b-icon-radio-checked:before{content:var(--b-icon-radio-checked, "\f192")}.b-icon-calendar:before{content:var(--b-icon-calendar, "\f133")}.b-icon-calendar-day:before{content:var(--b-icon-calendar-day, "\f783")}.b-icon-calendar-plus:before{content:var(--b-icon-calendar-plus, "\f271")}.b-icon-clock:before{content:var(--b-icon-clock, "\f017")}.b-icon-recurring:before{content:var(--b-icon-recurring, "\f021")}.b-icon-duration:before{content:var(--b-icon-duration, "\f254")}.b-icon-milestone:before{content:var(--b-icon-milestone, "\f219")}.b-icon-locked:before{content:var(--b-icon-locked, "\f023")}.b-icon-unlocked:before{content:var(--b-icon-unlocked, "\f09c")}.b-icon-user:before{content:var(--b-icon-user, "\f0c0")}.b-icon-menu:before{content:var(--b-icon-menu, "\f0c9")}.b-icon-menu-horizontal:before{content:var(--b-icon-menu-horizontal, "\f141")}.b-icon-menu-vertical:before{content:var(--b-icon-menu-vertical, "\f142")}.b-icon-info:before{content:var(--b-icon-info, "\f129")}.b-icon-sub-menu:before{content:var(--b-widget-sub-menu-icon)}.b-icon-star:before{content:var(--b-icon-star, "\f005")}.b-icon-warning:before{content:var(--b-icon-warning, "\f071")}.b-icon-columns:before{content:var(--b-icon-columns, "\f0db")}.b-icon-picker:before{content:var(--b-icon-picker, "\f0d7");transition:rotate .2s}.b-icon-picker-rotated:before{content:var(--b-icon-picker-rotated, "\f0d7");rotate:180deg;transition:rotate .2s}.b-icon-resize-horizontal:before{content:var(--b-icon-resize-horizontal, "\f337")}.b-icon-fullscreen:before{content:var(--b-icon-fullscreen, "\f0b2")}.b-icon-cog:before{content:var(--b-icon-cog, "\f013")}:is(.b-linux,.b-windows) .b-icon-cog:before{vertical-align:middle}.b-icon-file-download:before{content:var(--b-icon-file-download, "\f56d")}.b-icon-sync:before{content:var(--b-icon-sync, "\f2f1")}.b-icon-bad-mood-emoji:before{content:var(--b-icon-bad-mood-emoji, "\f119")}.b-icon-circle:before{content:var(--b-icon-circle, "\f111")}.b-icon-square:before{content:var(--b-icon-square, "\f0c8")}.b-icon-merge-cells:before{content:var(--b-icon-merge-cells, "\f5fd")}.b-icon-version:before{content:var(--b-icon-version, "\e5a0")}.b-icon-material:before{content:var(--b-icon-material, "\e4e6")}.b-icon-cost:before{content:var(--b-icon-cost, "\f81d")}.b-icon-paper-plane:before{content:var(--b-icon-paper-plane, "\f1d8")}.b-icon-robot:before{content:var(--b-icon-robot, "\f544")}.b-icon-mic:before{content:var(--b-icon-mic, "\f130")}.b-icon-play:before{content:var(--b-icon-play, "\f04b")}.b-icon-stop:before{content:var(--b-icon-stop, "\f04d")}.b-icon-message:before{content:var(--b-icon-message, "\f27a")}.b-icon-volume-high:before{content:var(--b-icon-volume-high, "\f028")}.b-icon-thumbs-up:before{content:var(--b-icon-thumbs-up, "\f164")}.b-icon-thumbs-down:before{content:var(--b-icon-thumbs-down, "\f165")}.b-icon-exclamation-circle:before{content:"\f06a"}.b-icon-eye:before{content:"\f06e"}.b-icon-up:before{content:var(--b-icon-up, "\f062")}.b-icon-down:before{content:var(--b-icon-down, "\f063")}.b-icon-left:before{content:var(--b-icon-left, "\f060")}.b-icon-right:before{content:var(--b-icon-right, "\f061")}.b-icon-angle-left:before{content:var(--b-icon-angle-left, "\f104")}.b-icon-angle-right:before{content:var(--b-icon-angle-right, "\f105")}.b-icon-before:before{content:var(--b-icon-before, "\f053")}.b-icon-previous:before{content:var(--b-icon-previous, "\f053")}.b-icon-after:before{content:var(--b-icon-after, "\f054")}.b-icon-next:before{content:var(--b-icon-next, "\f054")}.b-icon-move-left-right:before{content:var(--b-icon-move-left-right, "\f337")}.b-icon-move-up-down:before{content:var(--b-icon-move-up-down, "\f338")}.b-icon-circle-arrow-up:before{content:var(--b-icon-circle-arrow-up, "\f0aa")}.b-icon-column-move-left:before{content:var(--b-icon-column-move-left, "\f0a8")}.b-icon-column-move-right:before{content:var(--b-icon-column-move-right, "\f0a9")}.b-icon-hide-column:before{content:var(--b-icon-hide-column, "\f057")}.b-icon-column-pin:before{content:var(--b-icon-column-pin, "\f08d")}.b-icon-column-unpin:before{content:var(--b-icon-column-unpin, "\e68f")}.b-icon-sort:before{content:var(--b-icon-sort, "\f0dc")}.b-icon-sort-asc:before{content:var(--b-icon-sort-asc, "\f15e")}.b-icon-sort-desc:before{content:var(--b-icon-sort-desc, "\f15d")}.b-icon-sorted-asc:before{content:var(--b-icon-sorted-asc, "\f062")}.b-icon-group-asc:before{content:var(--b-icon-group-asc, "\f885")}.b-icon-group-desc:before{content:var(--b-icon-group-desc, "\f160")}.b-icon-group-collapse:before{content:var(--b-icon-group-collapse, "\f056")}.b-icon-group-expand:before{content:var(--b-icon-group-expand, "\f055")}.b-icon-grouped-asc:before{content:var(--b-icon-grouped-asc, "\f012")}.b-icon-tree-expand:before{content:var(--b-icon-tree-expand, "\f105")}.b-icon-tree-collapse:before{content:var(--b-icon-tree-collapse, "\f107")}.b-icon-tree-folder:before{content:var(--b-icon-tree-folder, "\f07b")}.b-icon-tree-folder-open:before{content:var(--b-icon-tree-folder-open, "\f07c")}.b-icon-tree-leaf:before{content:var(--b-icon-tree-leaf, "\f111")}.b-icon-expand-gridregion:before{content:var(--b-icon-expand-gridregion, "\f054")}.b-icon-collapse-gridregion:before{content:var(--b-icon-collapse-gridregion, "\f053")}.b-icon-lock-row:before{content:var(--b-icon-lock-row, "\e73a")}.b-icon-unlock-row:before{content:var(--b-icon-unlock-row, "\e73b")}.b-icon-unassign:before{content:var(--b-icon-unassign, "\f506")}.b-icon-valid:before{content:var(--b-icon-valid, "\f00c")}.b-icon-invalid:before{content:var(--b-icon-invalid, "\f05e")}.b-icon-checking:before{content:var(--b-icon-checking, "\f110")}.b-icon-expand-resource:before{content:var(--b-icon-expand-resource, "\f103")}.b-icon-note:before{content:var(--b-icon-note, "\f249")}.b-icon-advanced:before{content:var(--b-icon-advanced, "\f085")}.b-icon-palette:before{content:var(--b-icon-palette, "\f53f")}.b-icon-renumber:before{content:var(--b-icon-renumber, "\f884")}.b-icon-indent:before{content:var(--b-icon-indent, "\f03c")}.b-icon-outdent:before{content:var(--b-icon-outdent, "\f03b")}.b-icon-subtask:before{content:var(--b-icon-subtask, "\e476")}.b-icon-predecessor:before{content:var(--b-icon-predecessor, "\e477")}.b-icon-successor:before{content:var(--b-icon-successor, "\e47a")}.b-icon-link:before{content:var(--b-icon-link, "\f0c1")}.b-icon-unlink:before{content:var(--b-icon-unlink, "\f127")}.b-icon-calendar-days:before{content:var(--b-icon-calendar-days, "\f073")}.b-icon-calendar-week:before{content:var(--b-icon-calendar-week, "\f784")}.b-icon-bold:before{content:var(--b-icon-bold, "\f032")}.b-icon-underline:before{content:var(--b-icon-underline, "\f0cd")}.b-icon-italic:before{content:var(--b-icon-italic, "\f033")}.b-icon-clock-live{background-color:currentColor;border-radius:50%;width:1em;height:1em;animation-delay:0s;display:grid}.b-icon-clock-live:before,.b-icon-clock-live:after{grid-area:1 / 1 / 1 / 1;position:relative;font-size:1em!important;content:"";width:.1em!important;left:.44em;background:#fff;border-radius:.5em}.b-icon-clock-live:before{top:.15em;height:.4em!important;transform-origin:.05em .35em;animation:b-anim-rotate 6s infinite linear;animation-play-state:paused;animation-delay:inherit}.b-icon-clock-live:after{top:.22em;height:.33em;transform-origin:.05em .3em;animation:b-anim-rotate 72s infinite linear;animation-play-state:paused;animation-delay:inherit}.b-icon-chart:before{content:var(--b-icon-chart, "\f201")}.b-icon-settings:before{content:var(--b-icon-settings, "\f013")}.b-icon-spinner:before{content:var(--b-icon-spinner, "\f110");animation:b-anim-rotate 2s infinite linear}@keyframes b-anim-rotate{0%{rotate:0deg}to{rotate:360deg}}:root,:host{--b-gripper-edge-size: 1em;--b-gripper-horz-cursor: ns-resize;--b-gripper-border: 1px solid rgba(0, 0, 0, .3);--b-gripper-horz-edge-height: var(--b-gripper-edge-size);--b-gripper-horz-height: .25em;--b-gripper-horz-width: 1.2em;--b-gripper-horz-offset: .4em;--b-gripper-horz-transition: opacity .2s, margin-inline-start .2s, width .2s;--b-gripper-vert-cursor: ew-resize;--b-gripper-vert-gradient: repeating-linear-gradient( 90deg, rgba(0, 0, 0, .5), rgba(255, 255, 255, .8) 3px);--b-gripper-vert-edge-width: var(--b-gripper-edge-size);--b-gripper-vert-width: calc(var(--b-gripper-vert-edge-width) / 2);--b-gripper-vert-height: 12px;--b-gripper-vert-offset: 4px;--b-gripper-vert-transition: opacity .2s, margin-top .2s, height .2s}.b-gripper{position:absolute}.b-gripper:after{content:" " / "";position:absolute;opacity:0}.b-hover-top .b-gripper.b-gripper-horz,.b-hover-bottom .b-gripper.b-gripper-horz{cursor:var(--b-gripper-horz-cursor);height:var(--b-gripper-horz-edge-height);left:0;right:0}.b-hover-bottom .b-gripper.b-gripper-horz{bottom:0}.b-gripper.b-gripper-horz:after{width:0;left:50%;margin-inline-start:0;border-top:var(--b-gripper-border);border-bottom:var(--b-gripper-border);height:var(--b-gripper-horz-height)}.b-hover-left .b-gripper.b-gripper-vert,.b-hover-right .b-gripper.b-gripper-vert{top:0;bottom:0;cursor:var(--b-gripper-vert-cursor);width:var(--b-gripper-vert-edge-width)}.b-hover-right .b-gripper.b-gripper-vert{right:0}.b-hover-left .b-gripper.b-gripper-vert{left:0}.b-gripper.b-gripper-vert:after{height:0;top:50%;margin-top:0;background:var(--b-gripper-vert-gradient);width:var(--b-gripper-vert-width)}.b-hover-anim.b-hover-edge .b-gripper-horz:after{opacity:1;margin-inline-start:calc(var(--b-gripper-horz-width) / -2);width:var(--b-gripper-horz-width);transition:var(--b-gripper-horz-transition)}.b-hover-top .b-gripper-horz:after{top:var(--b-gripper-horz-offset)}.b-hover-bottom .b-gripper-horz:after{bottom:var(--b-gripper-horz-offset)}.b-hover-anim.b-hover-edge .b-gripper-vert:after{opacity:1;margin-top:calc(var(--b-gripper-vert-height) / -2);height:var(--b-gripper-vert-height);transition:var(--b-gripper-vert-transition)}.b-hover-left .b-gripper-vert:after{left:var(--b-gripper-vert-offset)}.b-hover-right .b-gripper-vert:after{right:var(--b-gripper-vert-offset)}.b-sftime-picker .b-panel-content{background:var(--b-panel-background);align-items:stretch;padding:.5em;gap:.5em}.b-sftime-picker .b-panel-content .b-widget{margin:0;flex:0 0 auto;width:auto}.b-sftime-picker .b-panel-content .b-number-field{height:100%}.b-sftime-picker .b-panel-content .b-number-field>.b-label{clip-path:polygon(0 0);position:absolute;contain:strict}.b-sftime-picker .b-panel-content .b-number-field:not(.b-first-visible-child):before{content:":";align-self:center;margin-inline-end:.5em;font-weight:700}.b-sftime-picker .b-panel-content .b-number-field input{width:3em}.b-sftime-picker .b-panel-content .b-button{flex:0 0 3em;padding:0}.b-sftime-picker .b-panel-content .b-button .b-button-label{text-overflow:clip}:root,:host{--b-button-box-shadow: null;--b-button-text-align: center;--b-button-disabled-opacity: .4;--b-button-icon-only-border-radius: 50%;--b-button-font-weight: 500;--b-button-gap: .5em;--b-button-height: 3em;--b-button-icon-padding-inline: var(--b-widget-padding);--b-button-end-icon-padding-inline: var(--b-widget-padding);--b-button-menu-padding-inline: var(--b-widget-padding);--b-button-opacity: 1;--b-button-padding-inline: var(--b-widget-padding);--b-button-pressed-box-shadow: none;--b-button-focus-outline-width: var(--b-widget-focus-outline-width);--b-button-focus-outline-offset: calc(var(--b-widget-focus-outline-width) * -1);--b-button-border-radius: var(--b-widget-border-radius);--b-button-elevated-active-box-shadow: var(--b-elevation-1);--b-button-elevated-box-shadow: var(--b-elevation-1);--b-button-elevated-focus-box-shadow: var(--b-elevation-1);--b-button-elevated-hover-box-shadow: var(--b-elevation-2);--b-button-filled-color: var(--b-text-5);--b-button-filled-hover-box-shadow: none;--b-button-tonal-hover-box-shadow: none;--b-button-outlined-border-width: 1px;--b-button-outlined-border-color: var(--b-border-6);--b-button-outlined-disabled-background: transparent;--b-button-outlined-disabled-border-color: var(--b-border-6);--b-button-outlined-background: transparent;--b-button-outlined-pressed-color: unset;--b-button-type-text-background: transparent;--b-button-type-text-disabled-background: transparent;--b-button-disabled-background: var(--b-widget-disabled-background);--b-button-disabled-color: var(--b-neutral-50);--b-button-type-text-focused-background: transparent;--b-button-type-text-text-only-border-radius: unset;--b-button-focus-outline-color: var(--b-primary)}.b-button{display:flex;align-items:center;position:relative;transition-property:box-shadow,font-weight,background,color,border,border-radius;transition-duration:var(--b-default-transition-duration);overflow:hidden;flex-shrink:0;font-family:inherit;text-decoration:none;padding-block:0;contain:style;--b-button-border-width: var(--b-button-idle-border-width);--b-button-border-color: var(--b-button-idle-border-color);--b-widget-font-weight: var(--b-button-font-weight);--bi-button-cursor: pointer;background:var(--b-button-background);border:var(--b-button-border-width) solid var(--b-button-border-color);border-radius:var(--b-button-border-radius);box-shadow:var(--b-button-box-shadow);color:var(--bi-button-applied-color, var(--b-button-color));cursor:var(--bi-button-cursor);gap:var(--b-button-gap);height:var(--b-button-height);max-height:var(--b-button-max-height);opacity:var(--b-button-opacity);padding-inline:var(--b-button-padding-inline);justify-content:var(--b-button-text-align)}.b-button .b-button-label,.b-button i{white-space:nowrap;text-overflow:ellipsis;transition:color .2s;z-index:1;margin:0;cursor:var(--bi-button-cursor)}.b-button .b-button-label{overflow:hidden}.b-button i{flex-shrink:0}.b-button.b-button-elevated{--b-button-background: var(--b-button-elevated-background, var(--b-primary-98));--b-button-hover-background: var(--b-button-elevated-hover-background, var(--b-primary-95));--b-button-focused-background: var(--b-button-elevated-focused-background, var(--b-primary-95));--b-button-active-background: var(--b-button-elevated-active-background, var(--b-primary-95));--b-button-pressed-background: var(--b-button-elevated-pressed-background, var(--b-primary-90));--b-button-pressed-hover-background: var(--b-button-elevated-pressed-hover-background, var(--b-primary-92));--b-button-box-shadow: var(--b-button-elevated-box-shadow);--b-button-hover-box-shadow: var(--b-button-elevated-hover-box-shadow);--b-button-focus-box-shadow: var(--b-button-elevated-focus-box-shadow);--b-button-active-box-shadow: var(--b-button-elevated-active-box-shadow);--b-button-color: var(--b-button-elevated-color, var(--b-primary-40));--b-button-split-color: var(--b-button-elevated-split-color, color-mix(in srgb, var(--b-button-color), transparent 70%))}.b-button.b-button-filled,.b-button.b-raised{--b-button-background: var(--b-button-filled-background, var(--b-primary-45));--b-button-hover-background: var(--b-button-filled-hover-background, var(--b-primary-55));--b-button-focused-background: var(--b-button-filled-focused-background, var(--b-primary-60));--b-button-active-background: var(--b-button-filled-active-background, var(--b-primary-60));--b-button-pressed-background: var(--b-button-filled-pressed-background, var(--b-primary-65));--b-button-pressed-hover-background: var(--b-button-filled-pressed-hover-background, var(--b-primary-70));--b-button-color: var(--b-button-filled-color);--b-button-hover-box-shadow: var(--b-button-filled-hover-box-shadow);--b-button-split-color: var(--b-button-filled-split-color, var(--b-button-color))}.b-button.b-button-tonal{--b-button-background: var(--b-button-tonal-background, var(--b-primary-95));--b-button-hover-background: var(--b-button-tonal-hover-background, var(--b-primary-90));--b-button-focused-background: var(--b-button-tonal-focused-background, var(--b-primary-90));--b-button-active-background: var(--b-button-tonal-active-background, var(--b-primary-85));--b-button-pressed-background: var(--b-button-tonal-pressed-background, var(--b-primary-80));--b-button-pressed-hover-background: var(--b-button-tonal-pressed-hover-background, var(--b-primary-85));--b-button-hover-box-shadow: var(--b-button-tonal-hover-box-shadow);--b-button-color: var(--b-button-tonal-color, var(--b-primary-30));--b-button-split-color: var(--b-button-tonal-split-color, color-mix(in srgb, var(--b-button-tonal-color, var(--b-primary-30)), transparent 70%));--b-button-idle-border-width: var(--b-button-tonal-border-width);--b-button-idle-border-color: var(--b-button-tonal-border-color);--b-button-focus-border-color: var(--b-button-tonal-border-color);--b-button-hover-border-color: var(--b-button-tonal-border-color);--b-button-disabled-border-color: var(--b-button-tonal-border-color)}.b-button.b-button-outlined{--b-button-background: var(--b-button-outlined-background);--b-button-hover-background: var(--b-button-outlined-hover-background, var(--b-primary-95));--b-button-focused-background: var(--b-button-outlined-focused-background, var(--b-primary-90));--b-button-active-background: var(--b-button-outlined-active-background, var(--b-primary-90));--b-button-pressed-background: var(--b-button-outlined-pressed-background, var(--b-primary-90));--b-button-pressed-hover-background: var(--b-button-outlined-pressed-hover-background, var(--b-primary-92));--b-button-color: var(--b-button-outlined-color, var(--b-primary-25));--b-button-pressed-color: var(--b-button-outlined-pressed-color);--b-button-idle-border-width: var(--b-button-outlined-border-width);--b-button-idle-border-color: var(--b-button-outlined-border-color);--b-button-focus-border-color: var(--b-button-outlined-focus-border-color, var(--b-primary));--b-button-hover-border-color: var(--b-button-outlined-hover-border-color, var(--b-primary-80));--b-button-disabled-background: var(--b-button-outlined-disabled-background);--b-button-disabled-border-color: var(--b-button-outlined-disabled-border-color);--b-button-split-color: var(--b-button-outlined-split-color, var(--b-button-border-color))}.b-button.b-button-text,.b-button.b-transparent{--b-button-background: var(--b-button-type-text-background);--b-button-hover-background: var(--b-button-type-text-hover-background, var(--b-primary-95));--b-button-focused-background: var(--b-button-type-text-focused-background);--b-button-active-background: var(--b-button-type-text-active-background, var(--b-primary-90));--b-button-pressed-background: var(--b-button-type-text-pressed-background, var(--b-primary-90));--b-button-pressed-hover-background: var(--b-button-type-text-pressed-hover-background, var(--b-primary-92));--b-button-color: var(--b-button-type-text-color, var(--b-primary-20));--b-button-disabled-background: var(--b-button-type-text-disabled-background);--b-button-split-color: var(--b-button-type-text-split-color, var(--b-button-color))}:is(.b-button.b-button-text,.b-button.b-transparent).b-split-button .b-button-menu-icon{align-self:center}:is(.b-button.b-button-text,.b-button.b-transparent).b-text:not(:has(.b-button-icon)){border-radius:var(--b-button-type-text-text-only-border-radius, var(--b-button-border-radius))}.b-button:focus-visible{outline-offset:var(--b-button-focus-outline-offset);outline:var(--b-button-focus-outline-color) solid var(--b-button-focus-outline-width)}.b-button.b-focus,.b-button:focus-visible{--b-button-background: var(--b-button-focused-background);--b-button-box-shadow: var(--b-button-focus-box-shadow);--b-button-border-color: var(--b-button-focus-border-color)}:is(.b-button:hover,.b-button .b-hover):where(:not(:active,.b-disabled)){--b-button-background: var(--b-button-hover-background);--b-button-box-shadow: var(--b-button-hover-box-shadow);--b-button-border-color: var(--b-button-hover-border-color)}.b-button.b-active,.b-button:active{--b-button-background: var(--b-button-active-background);--b-button-box-shadow: var(--b-button-active-box-shadow)}.b-button.b-rotate-vertical{padding-inline:0;padding-block:var(--b-button-padding-inline);width:var(--b-button-height);height:auto}.b-button.b-rotate-vertical .b-button-label{writing-mode:vertical-lr}.b-button.b-rotate-left{flex-direction:column-reverse}.b-button.b-rotate-left .b-button-label{rotate:180deg}.b-button.b-rotate-left i{rotate:270deg}.b-button.b-rotate-right{flex-direction:column}.b-button.b-rotate-right i{rotate:90deg}.b-button.b-pressed{--bi-button-applied-color: var(--b-button-pressed-color);--b-button-background: var(--b-button-pressed-background);--b-button-box-shadow: var(--b-button-pressed-box-shadow)}.b-button.b-pressed:hover{--b-button-background: var(--b-button-pressed-hover-background)}.b-button.b-icon-align-start{--b-button-padding-inline: var(--b-button-icon-padding-inline)}.b-button.b-icon-align-end{--b-button-padding-inline: var(--b-button-end-icon-padding-inline)}.b-button.b-icon-align-end .b-button-icon{order:1}.b-button.b-disabled{--b-button-color: var(--b-button-disabled-color);--b-button-background: var(--b-button-disabled-background);--b-button-opacity: var(--b-button-disabled-opacity);--b-button-box-shadow: none;--b-button-border-color: var(--b-button-disabled-border-color);--bi-button-cursor: normal}.b-button:not(.b-text,.b-has-menu-icon,.b-tab){aspect-ratio:1 / 1;--b-button-padding-inline: 0;--b-button-border-radius: var(--b-button-icon-only-border-radius)}.b-button.b-has-menu-icon:not(.b-text){--b-button-padding-inline: var(--b-button-menu-padding-inline)}.b-button .b-button-menu-icon:before{transition:rotate .2s}.b-button.b-menu-visible .b-button-menu-icon:before{rotate:180deg}.b-button-custom-content{display:flex;align-items:center}.b-using-keyboard .b-button-key{text-decoration:underline}.b-split-button{padding-inline-end:0}.b-split-button .b-button-menu-icon{display:grid;place-content:center;align-self:stretch;transition:border .2s;padding-inline:var(--b-button-padding-inline);border-inline-start:1px solid var(--b-button-split-color)}.b-split-button i:first-child{flex:1 0 auto;text-align:end}.b-split-button .b-button-label{flex:1 0 auto;text-align:start}:root,:host{--b-tab-border-radius: 0;--b-tab-indicator-border-radius: 0;--b-tab-font-weight: 500;--b-tab-padding: 0 var(--b-widget-padding-large);--b-tab-icon-only-padding: 0 var(--b-widget-padding);--b-tab-indicator-display: block;--b-tab-hover-indicator-opacity: 0;--b-tab-background: transparent;--b-tab-color: var(--b-neutral-40);--b-tab-close-color: var(--b-neutral-50);--b-tab-close-hover-color: var(--b-neutral-30);--b-tab-active-background: var(--b-tab-background);--b-tab-border: null;--b-tab-active-border: null;--b-tab-hover-border: var(--b-tab-border);--b-tab-label-position: null;--b-tab-indicator-height: .2em;--b-tab-hover-color: var(--b-neutral-20);--b-tab-active-tab-color: var(--b-neutral-0);--b-tab-invalid-indicator-color: var(--b-color-red);--b-tab-indicator-hidden-color: transparent;--b-tab-invalid-border: null;--bi-tab-indicator-opacity: 0}.b-button.b-tab{border:var(--b-tab-border);--b-button-background: var(--b-tab-background);--b-button-border-radius: var(--b-tab-border-radius);--b-button-hover-background: var(--b-tab-hover-background, var(--b-primary-95));--b-button-focused-background: var(--b-tab-focus-background, var(--b-primary-90));--b-button-color: var(--b-tab-color);--b-button-font-weight: var(--b-tab-font-weight);--b-button-padding: var(--b-tab-padding);--b-tab-indicator-applied-color: var(--b-tab-indicator-hidden-color, transparent)}.b-button.b-tab.b-active{--b-tab-border: var(--b-tab-active-border);--b-button-background: var(--b-tab-active-background);--b-tab-color: var(--b-tab-active-tab-color);--b-tab-indicator-applied-color: var(--b-tab-indicator-color);--bi-tab-indicator-opacity: 1}.b-button.b-tab:hover:where(:not(.b-active)){--b-tab-color: var(--b-tab-hover-color);--b-tab-border: var(--b-tab-hover-border);--b-button-background: var(--b-tab-hover-background, var(--b-primary-95))}.b-button.b-tab.b-invalid{--b-tab-indicator-applied-color: var(--b-tab-invalid-indicator-color);--bi-tab-indicator-opacity: 1;--b-tab-border: var(--b-tab-invalid-border)}.b-button.b-tab:not(.b-text){--b-button-icon-padding: var(--b-tab-icon-only-padding)}.b-button.b-tab .b-button-label{display:grid;place-items:center;align-self:stretch;position:var(--b-tab-label-position)}.b-tab-bar.b-dock-top{--b-tab-indicator-inset: auto 0 0 0}.b-tab-bar.b-dock-right{--b-tab-indicator-inset: 0 auto 0 0}.b-tab-bar.b-dock-bottom{--b-tab-indicator-inset: 0 0 auto 0}.b-tab-bar.b-dock-left{--b-tab-indicator-inset: 0 auto 0 0}.b-tab-indicator{position:absolute;transition:opacity .2s,background .2s;opacity:var(--bi-tab-indicator-opacity);inset:var(--b-tab-indicator-inset, auto 0 0 0);display:var(--b-tab-indicator-display);background:var(--b-tab-indicator-applied-color, var(--b-tab-active-tab-color));block-size:var(--b-tab-indicator-height);border-radius:var(--b-tab-indicator-border-radius)}.b-tab-close{font-size:.8em;cursor:pointer;color:var(--b-tab-close-color)}.b-tab-close:hover{color:var(--b-tab-close-hover-color)}.b-tab.b-drag-proxy{transition:background-color .3s;opacity:.9;background-color:var(--b-toolbar-background)}.b-aisettings-panel{padding-block:1em}.b-aisettings-panel .b-field-inner{justify-content:end}:root,:host{--b-chat-button-color: #FFF}.b-bryntum{--b-chat-button-background: var(--b-primary)}.b-chat-button.b-button{position:absolute;bottom:1em;inset-inline-end:1em;border:none;border-radius:50%;font-size:1em;width:2.75em;height:2.75em;display:grid;place-items:center;padding:0;margin:0;box-shadow:0 2px 8px #63636333;scale:1;transition:scale .2s;min-height:0;z-index:10000;outline:none;color:var(--b-chat-button-color);background:var(--b-chat-button-background)}.b-chat-button.b-button .b-button-menu-icon{display:none}.b-chat-button.b-button i{position:relative;display:grid;place-items:center;font-size:1.3em}.b-chat-button.b-button:hover{scale:1.1}.b-chat-button.b-button:active{scale:1}.b-using-keyboard .b-chat-button.b-button:focus:not(:active){box-shadow:0 0 .8em #3183fe}.b-chat-button.b-button.b-chat-button-animating i:before{animation:b-anim-chat-button-icon-transition .2s}.b-chat-button.b-button.b-chat-closed{--bi-content: "\f27a"}.b-chat-button.b-button.b-chat-closed-previous{--bi-previous-content: "\f27a"}.b-chat-button.b-button.b-chat-open{--bi-content: "\f00d"}.b-chat-button.b-button.b-chat-open-previous{--bi-previous-content: "\f00d"}.b-chat-button.b-button.b-voice-speaking{--bi-content: "\e473"}.b-chat-button.b-button.b-voice-speaking i{animation:b-anim-voice-speaking .7s infinite}.b-chat-button.b-button.b-voice-speaking-previous{--bi-previous-content: "\e473"}.b-chat-button.b-button.b-voice-waiting{--bi-content: "\f110";animation:b-anim-rotate 2s infinite linear}.b-chat-button.b-button.b-voice-waiting-previous{--bi-previous-content: "\f110"}.b-chat-button.b-button.b-voice-active{--bi-content: "\f130"}.b-chat-button.b-button.b-voice-active i{animation:b-anim-voice-active .9s ease-out infinite}.b-chat-button.b-button.b-voice-active-previous{--bi-previous-content: "\f130"}.b-chat-button.b-button.b-voice-inactive{--bi-content: "\f130";background:#aaa}.b-chat-button.b-button.b-voice-inactive-previous{--bi-previous-content: "\f130"}.b-chat-button.b-button .b-button-icon:before{content:var(--bi-content)}@keyframes b-anim-voice-speaking{0%{transform:none;opacity:1}49.9%{transform:none}50%{transform:scaleX(-1);opacity:.5}to{transform:scaleX(-1);opacity:1}}@keyframes b-anim-voice-active{0%{transform:scale(1);opacity:1}25%{transform:scale(.95)}60%{transform:scale(1.05);opacity:.8}to{transform:scale(1);opacity:1}}@keyframes b-anim-chat-button-icon-transition{0%{font-size:1em;content:var(--bi-previous-content)}50%{font-size:.1em}to{font-size:1em;content:var(--bi-content)}}@starting-style{.b-chat-button.b-button{scale:0}.b-chat-button.b-button i:after{opacity:0}}:root,:host{--b-chat-panel-border-radius: 1em;--b-chat-panel-message-them-align-self: flex-start;--b-chat-panel-message-them-background: var(--b-neutral-90);--b-chat-panel-message-them-color: var(--b-text-2);--b-chat-panel-intro-color: var(--b-neutral-50);--b-chat-panel-example-prompt-color: var(--b-neutral-70);--b-chat-panel-example-prompt-hover-color: var(--b-neutral-40);--b-chat-panel-message-us-align-self: flex-end;--b-chat-panel-message-us-color: #FFF;--b-chat-panel-message-color: var(--b-chat-panel-message-us-color);--b-chat-panel-tool-color: var(--b-color-lighter-gray);--b-chat-panel-tool-color-active: var(--b-color-gray);--b-chat-panel-tool-hover-color: var(--b-color-light-gray);--b-chat-panel-font-size: .8em;--b-chat-panel-loading-color: var(--b-text-3);--b-chat-panel-option-hover-background: color-mix(in srgb, var(--b-chat-panel-message-us-background), transparent 90%);--b-chat-panel-avatar-size: 5em}.b-internal{--bi-value: null}.b-chat-bubbles{display:flex;flex-flow:column nowrap;gap:.5em;overflow-x:clip;overflow-y:auto}.b-chat-bubbles:before{content:""}.b-chat-bubbles .b-message{display:flex;flex-direction:column;gap:.2em;overflow:clip;width:100%;flex-shrink:0;align-self:var(--b-chat-panel-message-align-self)}.b-chat-bubbles .b-bubble{padding:.5em .75em;opacity:1;transition:opacity .2s,translate .2s;translate:0;z-index:1;min-height:2.5em;line-height:1.5em;max-width:80%;word-wrap:break-word;overflow:auto;border-radius:var(--b-chat-panel-border-radius);align-self:var(--b-chat-panel-message-align-self);background:var(--b-chat-panel-message-background);color:var(--b-chat-panel-message-color)}.b-chat-bubbles .b-bubble .b-aborted{opacity:.3}.b-chat-bubbles .b-bubble .b-failed{color:var(--b-color-red)}.b-chat-bubbles .b-bubble strong{font-weight:600}.b-chat-bubbles .b-undone .b-bubble{opacity:.3}.b-chat-bubbles .b-async .b-bubble{width:3.5em;display:flex;align-items:center;overflow:clip}.b-chat-bubbles .b-async .b-asyncstatus{font-size:.8em;opacity:.8;padding-inline-start:.2em}.b-chat-bubbles .b-bubble-loading{position:relative;inset-inline-start:-2em;width:.5em;height:.5em;border-radius:50%;animation:b-anim-jumping-dots 2s infinite;box-shadow:2em 0 0 0 var(--b-chat-panel-loading-color),2.75em 0 0 0 var(--b-chat-panel-loading-color),3.5em 0 0 0 var(--b-chat-panel-loading-color)}.b-chat-bubbles .b-bubble-tools{display:flex;padding-inline:.75em;gap:.5em;align-items:center;transition:opacity .2s,translate .2s;transition-delay:.2s;justify-content:var(--b-chat-panel-message-them-align-self)}.b-chat-bubbles .b-bubble-tools .b-undone-tag{border-radius:1em;font-size:.75em;padding-inline:.5em;background:var(--b-color-red);color:var(--b-neutral-100)}.b-chat-bubbles .b-bubble-tool{font-size:var(--b-chat-panel-font-size);color:var(--b-chat-panel-tool-color)}.b-chat-bubbles .b-bubble-tool:hover{--b-chat-panel-tool-color: var(--b-chat-panel-tool-hover-color)}.b-chat-bubbles button.b-bubble-tool{cursor:pointer;border:none;background:transparent;padding-inline:0}.b-chat-bubbles .b-timestamp{font-size:.7em;color:var(--b-chat-panel-tool-color)}.b-chat-bubbles .b-us{--b-chat-panel-message-align-self: var(--b-chat-panel-message-us-align-self);--b-chat-panel-message-background: var(--b-chat-panel-message-us-background, var(--b-primary));--b-chat-panel-message-color: var(--b-chat-panel-message-us-color)}.b-chat-bubbles .b-them{--b-chat-panel-message-align-self: var(--b-chat-panel-message-them-align-self);--b-chat-panel-message-background: var(--b-chat-panel-message-them-background);--b-chat-panel-message-color: var(--b-chat-panel-message-them-color)}.b-chat-bubbles .b-confidence{position:relative;width:1em;height:.6em;border-radius:.25em;border:1px solid var(--b-chat-panel-tool-color);overflow:clip}.b-chat-bubbles .b-confidence:before{display:block;position:absolute;content:"";height:100%;opacity:.6;width:calc(var(--bi-value) * 100%);background:var(--b-chat-panel-tool-color)}.b-chat-bubbles .b-options{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.5em;opacity:1;transition:height .2s,opacity .2s,gap .2s;height:auto;overflow:hidden;align-items:var(--b-chat-panel-message-us-align-self)}.b-chat-bubbles .b-options:has(.b-selected){gap:0}.b-chat-bubbles .b-options:has(.b-selected) .b-option{pointer-events:none}.b-chat-bubbles .b-options:has(.b-selected) .b-option:not(.b-selected){opacity:0;height:0;min-height:0;padding-block:0;display:none;transition-delay:0s}.b-chat-bubbles .b-option{background:none;font-size:1em;padding:.5em .75em;opacity:1;transition:opacity .2s,translate .2s,height .2s,min-height .2s,padding .2s,display .2s;transition-delay:.2s;translate:0;min-height:2.5em;line-height:1.5em;overflow:hidden;transition-behavior:allow-discrete;interpolate-size:allow-keywords;border:1px solid var(--b-chat-panel-tool-color);border-radius:var(--b-chat-panel-border-radius)}.b-chat-bubbles .b-option:not(.b-outdated):hover{cursor:pointer;background:var(--b-chat-panel-option-hover-background)}.b-chat-bubbles .b-option.b-selected{border:none;background:var(--b-chat-panel-message-us-background, var(--b-primary));color:var(--b-chat-panel-message-us-color)}.b-chat-bubbles .b-option:nth-child(2){transition-delay:.3s}.b-chat-bubbles .b-option:nth-child(3){transition-delay:.4s}.b-chat-bubbles .b-option:nth-child(4){transition-delay:.5s}.b-chat-bubbles .b-option:nth-child(5){transition-delay:.6s}.b-chat-bubbles .b-option:nth-child(6){transition-delay:.7s}.b-chat-bubbles .b-option.b-outdated{opacity:.3;transition-delay:0s}.b-chat-bubbles .b-bottom-anchor{min-height:1px}@starting-style{.b-chat-bubbles.b-animate .b-bubble{opacity:0;translate:0 1em}.b-chat-bubbles.b-animate .b-bubble-tools{opacity:0;translate:0 -1em}.b-chat-bubbles.b-animate .b-option{translate:-100% 0;opacity:0}}@keyframes b-anim-jumping-dots{0%{box-shadow:2em 0 0 0 var(--b-chat-panel-loading-color),2.75em 0 0 0 var(--b-chat-panel-loading-color),3.5em 0 0 0 var(--b-chat-panel-loading-color)}16.667%{box-shadow:2em -.5em 0 0 var(--b-chat-panel-loading-color),2.75em 0 0 0 var(--b-chat-panel-loading-color),3.5em 0 0 0 var(--b-chat-panel-loading-color)}33.333%{box-shadow:2em 0 0 0 var(--b-chat-panel-loading-color),2.75em 0 0 0 var(--b-chat-panel-loading-color),3.5em 0 0 0 var(--b-chat-panel-loading-color)}50%{box-shadow:2em 0 0 0 var(--b-chat-panel-loading-color),2.75em -.5em 0 0 var(--b-chat-panel-loading-color),3.5em 0 0 0 var(--b-chat-panel-loading-color)}66.667%{box-shadow:2em 0 0 0 var(--b-chat-panel-loading-color),2.75em 0 0 0 var(--b-chat-panel-loading-color),3.5em 0 0 0 var(--b-chat-panel-loading-color)}83.333%{box-shadow:2em 0 0 0 var(--b-chat-panel-loading-color),2.75em 0 0 0 var(--b-chat-panel-loading-color),3.5em -.5em 0 0 var(--b-chat-panel-loading-color)}to{box-shadow:2em 0 0 0 var(--b-chat-panel-loading-color),2.75em 0 0 0 var(--b-chat-panel-loading-color),3.5em 0 0 0 var(--b-chat-panel-loading-color)}}.b-chat-panel-mixin.b-panel>header{gap:.5em}.b-chat-panel-mixin.b-panel>header:after{display:none}.b-float-root>.b-chat-panel-mixin.b-panel.b-floating{--b-aligned-above-floating-box-shadow: var(--b-widget-floating-box-shadow )}.b-chat-panel-mixin.b-panel .b-chat-panel-mixin-content{--b-panel-with-header-padding: 0}.b-chat-panel-mixin.b-panel .b-chat-panel-mixin-content>div{padding-inline:1em}.b-chat-panel-mixin.b-panel .b-chat-bubbles{padding-top:1em;flex:1}.b-chat-panel-mixin.b-panel .b-intro{display:flex;flex-direction:column;align-items:center;gap:.5em;text-align:center;margin-bottom:1em;color:var(--b-chat-panel-intro-color)}.b-chat-panel-mixin.b-panel .b-intro div{line-height:1.5em}.b-chat-panel-mixin.b-panel .b-intro .b-chat-avatar{border-radius:50%;margin-bottom:1em;background:var(--b-primary);width:var(--b-chat-panel-avatar-size)}.b-chat-panel-mixin.b-panel .b-example-prompt{font-size:.9em;font-style:italic;cursor:pointer;color:var(--b-chat-panel-example-prompt-color)}.b-chat-panel-mixin.b-panel .b-example-prompt:before{content:'"'}.b-chat-panel-mixin.b-panel .b-example-prompt:after{content:'"'}.b-chat-panel-mixin.b-panel .b-example-prompt:hover{color:var(--b-chat-panel-example-prompt-hover-color)}.b-chat-panel-mixin.b-panel .b-text-field{padding-bottom:1em}.b-chat-panel-mixin.b-panel .b-text-field .b-field-inner{border-radius:var(--b-chat-panel-border-radius)}.b-chat-panel-mixin.b-panel .b-text-field .b-field-trigger{color:var(--b-chat-panel-tool-color)}.b-chat-panel-mixin.b-panel .b-text-field .b-field-trigger:before{font-size:1.5em}.b-chat-panel-mixin.b-panel .b-text-field .b-field-trigger:hover{color:var(--b-chat-panel-tool-hover-color)}.b-chat-panel-mixin.b-panel .b-text-field .b-field-trigger.b-send-chat-msg{transition:color .2s}.b-using-keyboard :is(.b-chat-panel-mixin.b-panel .b-text-field .b-field-trigger).b-icon-mic:focus{padding-inline-end:0;margin-inline-end:.6em;outline-offset:.4em}.b-chat-panel-mixin.b-panel .b-text-field .b-send-chat-msg:not(.b-disabled){color:var(--b-chat-panel-tool-color-active)}.b-is-speaking button.b-bubble-tool[data-ref=readAloud],.b-aichat-panel-mixin.b-panel .b-text-field .b-is-recording,.b-aichat-panel-mixin.b-panel .b-text-field .b-is-recording:hover{color:#00f}.b-bubble ul,.b-bubble ol{padding-inline-start:1em}.b-bubble>p:first-child{margin-block-start:0}.b-bubble>p:last-child{margin-block-end:0}.b-aichat-panel-mixin .b-panel-header .b-tool[data-ref=offline]{color:#f99d9d}.b-confirmation-dialog:not(.b-centered,.b-dragged-by-user){top:.5em;inset-inline-start:calc(100% - .5em);translate:-100%;transition:top .4s ease,inset-inline-start .4s ease}.b-confirmation-dialog .b-approve-button{--b-primary: var(--b-color-green )}.b-confirmation-dialog .b-reject-button{--b-primary: var(--b-color-red)}.b-confirmation-dialog .b-message-icon{font-size:2em;color:var(--b-primary)}.b-confirmation-dialog .b-message{align-items:center}.b-confirmation-dialog .b-confirmation-dialog-content>*{white-space:nowrap}.b-confirmation-dialog .b-records-item{background-color:var(--b-neutral-90);display:flex;align-items:center;border-radius:1em;padding:.5em}@media (max-width: 500px){.b-confirmation-dialog .b-toolbar-fill,.b-confirmation-dialog .b-approve-button label,.b-confirmation-dialog .b-reject-button label{display:none}}@media (max-width: 400px){.b-confirmation-dialog .b-highlight-button label{display:none}}@media (max-width: 300px){.b-confirmation-dialog .b-preview-button label{display:none}}.b-panel.b-checkbox-group{gap:var(--bi-field-gap)}.b-panel.b-checkbox-group .b-fieldset-content.b-inline{flex-wrap:wrap}.b-panel.b-checkbox-group .b-fieldset-content.b-inline label{white-space:nowrap}.b-panel.b-checkbox-group.b-invalid .b-checkbox label:before{outline-offset:2px;outline:1px solid var(--b-color-red)}:root,:host{--b-container-gap: var(--b-widget-gap);--b-container-padding: 0;--b-container-color: var(--b-widget-color);--b-divider-font-size: .9em;--b-divider-line-color: var(--b-border-5);--b-divider-text-color: var(--b-border-4);--b-divider-font-weight: null;--b-divider-margin-block: 1em;--b-container-border-width: 1px;--b-container-border-color: var(--b-border-7)}.b-internal{--bi-container-columns: null}.b-container{min-width:0;min-height:0;color:var(--b-container-color);gap:var(--b-container-gap);padding:var(--b-container-padding);align-content:var(--b-container-align-content)}.b-container:where(:not(.b-panel)){display:grid;grid-auto-rows:min-content}.b-container:where(:not(.b-panel)).b-columns{grid-template-columns:repeat(var(--bi-container-columns),auto)}.b-container.b-vbox{display:flex;flex-direction:column}.b-container.b-vbox.b-single-child:not(.b-toolbar-content)>.b-container{align-self:stretch;flex:1 1 auto}.b-container.b-hbox{display:flex;flex-flow:row nowrap}.b-container.b-hbox.b-single-child:not(.b-toolbar-content)>.b-container{align-self:stretch;flex:1 1 auto}.b-container.b-field-align-end .b-field-inner{justify-content:flex-end;justify-self:end}.b-container.b-bordered{border:var(--b-container-border-width) solid var(--b-container-border-color);border-radius:var(--b-widget-border-radius)}.b-content-element:has(>.b-splitter){gap:0}.b-content-element:has(>.b-splitter.b-moving) *{transition:none!important}:is(.b-container,.b-panel).b-label-align-before{--b-field-align-before-label-column: span 1;--b-field-align-before-field-column: span 1}.b-container.b-label-align-before,.b-panel.b-label-align-before>.b-panel-body-wrap>.b-panel-content,.b-panel.b-label-align-before>.b-panel-overlay>.b-panel-body-wrap>.b-panel-content{grid-template-columns:repeat(var(--bi-container-columns, 1),max-content 1fr);grid-auto-rows:min-content}:is(.b-container.b-label-align-before,.b-panel.b-label-align-before>.b-panel-body-wrap>.b-panel-content,.b-panel.b-label-align-before>.b-panel-overlay>.b-panel-body-wrap>.b-panel-content)>.b-has-label{display:contents;--b-field-label-padding: 0}:is(.b-container.b-label-align-before,.b-panel.b-label-align-before>.b-panel-body-wrap>.b-panel-content,.b-panel.b-label-align-before>.b-panel-overlay>.b-panel-body-wrap>.b-panel-content)>.b-has-label>label{grid-row:auto}:is(.b-container.b-label-align-before,.b-panel.b-label-align-before>.b-panel-body-wrap>.b-panel-content,.b-panel.b-label-align-before>.b-panel-overlay>.b-panel-body-wrap>.b-panel-content)>.b-has-label>.b-field-inner{grid-row:auto}.b-content-element{position:relative}.b-content-element.b-text-content{display:block;overflow:auto}.b-divider{justify-content:center;grid-column:1 / -1;margin-block:var(--b-divider-margin-block)}.b-divider:before{content:"";width:100%;border-bottom:1px solid var(--b-divider-line-color);position:absolute;top:50%}.b-divider[data-text]:after{display:flex;padding:0 1em;content:attr(data-text);z-index:1;color:var(--b-divider-text-color);background:var(--b-parent-background-color, var(--b-panel-background));font-size:var(--b-divider-font-size);font-weight:var(--b-divider-font-weight)}.b-undo-redo-base.b-toolbar{gap:.5em;align-items:center}:root,:host{--b-button-group-border-width: 0px;--b-button-group-border-radius: var(--b-button-border-radius);--b-button-group-box-shadow: none;--b-button-group-border-color: transparent;--b-button-group-padded-padding: .3em;--b-button-group-padded-background: var(--b-neutral-95);--b-button-group-padded-active-background: var(--b-neutral-97);--b-button-group-padded-pressed-background: var(--b-neutral-100);--b-button-group-padded-pressed-hover-background: var(--b-neutral-98);--b-button-group-padded-pressed-box-shadow: 0 1px 3px 0 rgb(0 0 0 /.05), 0 1px 1px 0 rgb(0 0 0 /.04), 0 2px 1px -1px rgb(0 0 0 /.03);--b-button-group-padded-pressed-border: null;--b-button-group-padded-button-opacity: .5;--b-button-group-padded-border: null;--b-button-group-padded-filled-pressed-color: var(--b-neutral-100)}.b-bryntum{--b-button-group-padded-filled-pressed-background: var(--b-primary-50);--b-button-group-padded-filled-pressed-hover-background: var(--b-primary-55)}.b-button-group{display:flex;gap:0;flex-shrink:0;align-items:center;width:min-content;height:min-content;transition-property:box-shadow,border,opacity,background;box-shadow:var(--b-button-group-box-shadow);border:var(--b-button-group-border-width) solid var(--b-button-group-border-color);opacity:var(--bi-button-group-opacity, 1);transition-duration:var(--b-default-transition-duration)}.b-button-group.b-columned{width:100%;flex-wrap:wrap}.b-button-group.b-button-group-tonal .b-button{--bi-button-group-button-border-end-width: 1px;--b-button-group-border-color: color-mix(in oklab, var(--b-button-tonal-color), transparent 80%)}.b-button-group.b-button-group-elevated{--b-button-group-box-shadow: var(--b-button-elevated-box-shadow)}.b-button-group.b-button-group-outlined{--b-button-group-border-color: var(--b-button-outlined-border-color);--b-button-group-border-width: var(--b-button-outlined-border-width);--bi-button-group-button-border-end-width: var(--b-button-outlined-border-width)}.b-button-group.b-button-group-outlined.b-disabled{--b-button-group-border-color: var(--b-button-outlined-disabled-border-color);--bi-button-group-opacity: var(--b-button-disabled-opacity)}.b-button-group.b-button-group-outlined.b-disabled .b-button{--b-button-disabled-opacity: 1}.b-button-group.b-rotate-vertical{flex-direction:column}.b-button-group .b-button{--b-button-border-width: 0;--b-button-box-shadow: none}.b-button-group .b-button:not(.b-button-text){--b-button-border-radius: 0}.b-button-group .b-button:not(.b-last-visible-child){border-inline-end:var(--bi-button-group-button-border-end-width) solid var(--b-button-group-border-color)}.b-button-group .b-button:not(.b-text,.b-button-text){aspect-ratio:unset;min-width:3.25em}.b-button-group .b-button:focus{z-index:3}.b-button-group .b-pressed{z-index:2}.b-button-group:where(.b-no-gap:not(.b-button-group-text,.b-button-group-padded,.b-button-group-padded-filled)){border-radius:var(--b-button-group-border-radius)}.b-button-group:where(.b-no-gap:not(.b-button-group-text,.b-button-group-padded,.b-button-group-padded-filled)) .b-first-visible-child{border-start-start-radius:calc(var(--b-button-group-border-radius) - var(--b-button-group-border-width));border-end-start-radius:calc(var(--b-button-group-border-radius) - var(--b-button-group-border-width))}.b-button-group:where(.b-no-gap:not(.b-button-group-text,.b-button-group-padded,.b-button-group-padded-filled)) .b-last-visible-child{border-start-end-radius:calc(var(--b-button-group-border-radius) - var(--b-button-group-border-width));border-end-end-radius:calc(var(--b-button-group-border-radius) - var(--b-button-group-border-width))}.b-button-group-padded,.b-button-group-padded-filled{background:var(--b-button-group-padded-background);border-radius:var(--b-button-group-border-radius);padding:var(--b-button-group-padded-padding);border:var(--b-button-group-padded-border);gap:3px}:is(.b-button-group-padded,.b-button-group-padded-filled) .b-button{background:transparent;transition-property:opacity,background,box-shadow,border;transition-duration:var(--b-default-transition-duration);border-radius:calc(var(--b-button-group-border-radius) - 1px);height:calc(var(--b-button-height) - var(--b-button-group-padded-padding) * 2);opacity:var(--b-button-group-padded-button-opacity)}:is(.b-button-group-padded,.b-button-group-padded-filled) .b-button:hover,:is(.b-button-group-padded,.b-button-group-padded-filled) .b-button.b-pressed{opacity:1}:is(.b-button-group-padded,.b-button-group-padded-filled) .b-button:active{background:var(--b-button-group-padded-active-background)}:is(.b-button-group-padded,.b-button-group-padded-filled) .b-button.b-pressed{background:var(--b-button-group-padded-pressed-background);border:var(--b-button-group-padded-pressed-border);box-shadow:var(--b-button-group-padded-pressed-box-shadow)}:is(.b-button-group-padded,.b-button-group-padded-filled):not(.b-toggle-group){gap:var(--b-button-group-padded-padding)}:is(.b-button-group-padded,.b-button-group-padded-filled):not(.b-toggle-group) .b-button.b-pressed:hover{background:var(--b-button-group-padded-pressed-hover-background)}.b-button-group-padded-filled .b-button.b-pressed{box-shadow:none;background:var(--b-button-group-padded-filled-pressed-background);color:var(--b-button-group-padded-filled-pressed-color)}.b-button-group-padded-filled:not(.b-toggle-group) .b-button.b-pressed:hover{background:var(--b-button-group-padded-filled-pressed-hover-background)}:root,:host{--b-editor-background: transparent;--b-editor-border-radius: var(--b-widget-border-radius)}.b-editor{display:flex;overflow:visible;background:var(--b-editor-background);border-radius:var(--b-editor-border-radius)}.b-editor .b-label{display:none}.b-editor .b-field{display:flex;width:100%;height:100%;--b-text-field-input-height: 100%}.b-editor .b-field-inner{height:100%}.b-field-filter-picker{display:flex;flex-flow:row wrap;overflow:visible;--b-container-gap: 1em;--b-text-field-default-width: 100%}.b-field-filter-picker-property,.b-field-filter-picker-operator,.b-field-filter-picker-values,.b-field-filter-picker-case-sensitive,.b-field-filter-picker-values-multiple{flex:1;min-width:10em}:is(.b-field-filter-picker-property,.b-field-filter-picker-operator,.b-field-filter-picker-values,.b-field-filter-picker-case-sensitive,.b-field-filter-picker-values-multiple).b-hidden{display:none}.b-field-filter-picker-values-multiple{display:flex;align-items:center;gap:var(--b-container-gap)}.b-field-filter-picker-values-multiple .b-field{flex:1}.b-combo.b-field-filter-picker-combo-locked{margin-top:.25em;--b-text-field-border-width: 0;--b-text-field-input-padding: 0;--b-text-field-input-height: 3em;--b-text-field-background: transparent}:root,:host{--b-panel-gap: var(--b-widget-gap);--b-panel-background: var(--b-neutral-100);--b-panel-header-color: var(--b-widget-color);--b-panel-overlay-box-shadow: var(--b-elevation-1);--b-panel-drawer-box-shadow: var(--b-elevation-4);--b-panel-header-font-size: 1.2em;--b-panel-header-font-weight: calc(var(--b-widget-font-weight) + 100);--b-panel-header-text-align: start;--b-panel-header-gap: var(--b-widget-gap);--b-panel-padding: var(--b-widget-padding-large);--b-panel-with-header-padding: var(--b-panel-padding);--b-panel-bottom-toolbar-padding: var(--b-widget-padding-large);--b-panel-bottom-toolbar-background: transparent;--b-panel-top-toolbar-margin-inline: null;--b-panel-top-toolbar-border-radius: null;--b-panel-with-header-top-toolbar-background: var(--b-neutral-97);--b-panel-header-padding: var(--b-widget-padding-large);--b-panel-border: null;--b-panel-header-background: transparent;--b-drawer-size: 30em;--b-panel-overlay-border: null;--b-default-panel-transition: background var(--b-default-transition-duration), color var(--b-default-transition-duration), border-color var(--b-default-transition-duration)}.b-panel{display:flex;flex-direction:column;gap:0;outline:none;transition:var(--b-default-panel-transition);overflow:clip;background:var(--b-panel-background);border:var(--b-panel-border)}.b-panel.b-columns .b-panel-content{display:grid;grid-auto-rows:min-content;grid-template-columns:repeat(var(--bi-container-columns),auto)}.b-panel.b-panel-has-header>.b-panel-body-wrap>.b-top-toolbar:not(.b-tab-bar){margin-inline:var(--b-panel-top-toolbar-margin-inline);border-radius:var(--b-panel-top-toolbar-border-radius);background:var(--b-panel-with-header-top-toolbar-background)}.b-panel>.b-panel-overlay,.b-panel>.b-panel-body-wrap{z-index:0}.b-panel>.b-panel-collapse-size-locker{position:absolute!important}.b-panel .b-panel-overlay-right{border-inline-start:var(--b-panel-overlay-border)}.b-panel:not(.b-panel-collapsible-overlay).b-collapsed>.b-panel-collapse-size-locker{clip:rect(0,0,0,0)}:is(.b-panel:not(.b-panel-collapsible-overlay).b-panel-collapse-down:not(.b-panel-has-header),.b-panel:not(.b-panel-collapsible-overlay).b-header-dock-bottom.b-panel-collapse-down,.b-panel:not(.b-panel-collapsible-overlay).b-header-dock-bottom.b-panel-collapse-up)>.b-panel-collapse-size-locker{top:0}:is(.b-panel:not(.b-panel-collapsible-overlay).b-panel-collapse-up:not(.b-panel-has-header),.b-panel:not(.b-panel-collapsible-overlay).b-header-dock-top.b-panel-collapse-up,.b-panel:not(.b-panel-collapsible-overlay).b-header-dock-top.b-panel-collapse-down)>.b-panel-collapse-size-locker{bottom:0}:is(.b-panel:not(.b-panel-collapsible-overlay).b-panel-collapse-left:not(.b-panel-has-header),.b-panel:not(.b-panel-collapsible-overlay).b-header-dock-left.b-panel-collapse-left,.b-panel:not(.b-panel-collapsible-overlay).b-header-dock-left.b-panel-collapse-right)>.b-panel-collapse-size-locker{right:0}:is(.b-panel:not(.b-panel-collapsible-overlay).b-panel-collapse-right:not(.b-panel-has-header),.b-panel:not(.b-panel-collapsible-overlay).b-header-dock-right.b-panel-collapse-left,.b-panel:not(.b-panel-collapsible-overlay).b-header-dock-right.b-panel-collapse-right)>.b-panel-collapse-size-locker{left:0}.b-panel.b-panel-collapsible-overlay{background:transparent}.b-panel.b-panel-collapsible-overlay:not(.b-collapsing,.b-expanding,.b-panel-overlay-revealed,.b-panel-overlay-revealing)>.b-panel-overlay>.b-panel-overlay-header{display:none}.b-panel.b-panel-collapsible-overlay.b-panel-overlay-revealed>.b-panel-overlay{box-shadow:var(--b-panel-overlay-box-shadow);overflow:visible}.b-panel.b-panel-collapsible-overlay>.b-panel-header{transition:translate .2s ease-in-out}.b-panel.b-panel-collapsible-overlay.b-collapsed>.b-panel-header>.b-collapsify-hide{display:none}:is(.b-panel.b-panel-collapsible-overlay.b-collapsing,.b-panel.b-panel-collapsible-overlay.b-expanding)>.b-panel-header{opacity:0}.b-panel.b-panel-collapsible-overlay:not(.b-collapsed,.b-collapsing)>.b-panel-overlay>.b-panel-overlay-header{display:none}.b-panel.b-panel-collapsible-overlay.b-collapsing,.b-panel.b-panel-collapsible-overlay.b-expanding,.b-panel.b-panel-collapsible-overlay.b-panel-overlay-revealing,.b-panel.b-panel-collapsible-overlay.b-panel-overlay-revealed{overflow:visible;z-index:1}.b-panel.b-panel-collapsible-overlay.b-collapsing{overflow:visible}.b-panel.b-panel-collapsible-overlay.b-collapsing>.b-panel-header{z-index:-1}.b-panel.b-panel-collapsible-overlay.b-collapsing.b-panel-collapse-up>.b-panel-header{translate:0 -100%}.b-panel.b-panel-collapsible-overlay.b-collapsing.b-panel-collapse-down>.b-panel-header{translate:0 100%}.b-panel.b-panel-collapsible-overlay.b-collapsing.b-panel-collapse-right>.b-panel-header{translate:100% 0}.b-panel.b-panel-collapsible-overlay.b-collapsing.b-panel-collapse-left>.b-panel-header{translate:-100% 0}.b-panel.b-panel-collapsible-overlay.b-collapsed:not(.b-expanding){border:none}.b-panel.b-panel-collapsible-overlay.b-collapsed:not(.b-expanding)>.b-panel-collapse-size-locker{transition:translate .2s cubic-bezier(.06,1.1,.58,1),clip-path .2s ease-out,top .2s ease-out,right .2s ease-out,bottom .2s ease-out,left .2s ease-out}.b-panel.b-panel-collapsible-overlay.b-collapsed:not(.b-expanding).b-panel-collapse-up>.b-panel-collapse-size-locker{translate:0 -100%}.b-panel.b-panel-collapsible-overlay.b-collapsed:not(.b-expanding).b-panel-collapse-up.b-panel-overlay-revealed>.b-panel-collapse-size-locker{clip-path:inset(0 0 -20px 0);translate:0 0}.b-panel.b-panel-collapsible-overlay.b-collapsed:not(.b-expanding).b-panel-collapse-down>.b-panel-collapse-size-locker{translate:0 100%}.b-panel.b-panel-collapsible-overlay.b-collapsed:not(.b-expanding).b-panel-collapse-down.b-panel-overlay-revealed>.b-panel-collapse-size-locker{clip-path:inset(-20px 0 0 0);translate:0 0}.b-panel.b-panel-collapsible-overlay.b-collapsed:not(.b-expanding).b-panel-collapse-left>.b-panel-collapse-size-locker{translate:-100% 0}.b-panel.b-panel-collapsible-overlay.b-collapsed:not(.b-expanding).b-panel-collapse-left.b-panel-overlay-revealed>.b-panel-collapse-size-locker{clip-path:inset(0 -20px 0 0);translate:0 0}.b-panel.b-panel-collapsible-overlay.b-collapsed:not(.b-expanding).b-panel-collapse-right>.b-panel-collapse-size-locker{translate:100% 0}.b-panel.b-panel-collapsible-overlay.b-collapsed:not(.b-expanding).b-panel-collapse-right.b-panel-overlay-revealed>.b-panel-collapse-size-locker{clip-path:inset(0 0 0 -20px);translate:0 0}.b-panel.b-panel-collapsible-overlay.b-expanding{flex:none!important;overflow:visible}.b-panel.b-header-dock-right,.b-panel.b-header-dock-bottom{justify-content:flex-end}.b-panel.b-collapsed:not(.b-expanding,.b-panel-overlay-revealed,.b-panel-overlay-revealing){visibility:hidden;flex:0 1 0}.b-panel.b-collapsed>.b-panel-collapse-revealer{visibility:visible;cursor:pointer}.b-panel.b-collapsed>.b-panel-collapse-revealer.b-dock-right,.b-panel.b-collapsed>.b-panel-collapse-revealer .b-dock-left{height:100%;border-block:none}.b-panel .b-panel-collapser-header{display:none}.b-panel.b-collapse-unflex{flex-grow:unset!important;flex-basis:unset!important;flex-shrink:0!important}:is(.b-panel.b-collapsed,.b-panel.b-collapsing) .b-panel-collapser-header{display:flex}:is(.b-panel.b-collapsed,.b-panel.b-collapsing).b-header-dock-top,:is(.b-panel.b-collapsed,.b-panel.b-collapsing).b-header-dock-bottom{min-height:auto!important}:is(:is(.b-panel.b-collapsed,.b-panel.b-collapsing).b-header-dock-top,:is(.b-panel.b-collapsed,.b-panel.b-collapsing).b-header-dock-bottom).b-panel-collapsible-overlay:not(.b-panel-overlay-revealed,.b-panel-overlay-revealing){height:unset!important}.b-vbox>:is(:is(.b-panel.b-collapsed,.b-panel.b-collapsing).b-header-dock-top,:is(.b-panel.b-collapsed,.b-panel.b-collapsing).b-header-dock-bottom){flex:none!important}:is(.b-panel.b-collapsed,.b-panel.b-collapsing).b-header-dock-right,:is(.b-panel.b-collapsed,.b-panel.b-collapsing).b-header-dock-left{min-width:auto!important}:is(:is(.b-panel.b-collapsed,.b-panel.b-collapsing).b-header-dock-right,:is(.b-panel.b-collapsed,.b-panel.b-collapsing).b-header-dock-left).b-panel-collapsible-overlay:not(.b-panel-overlay-revealed,.b-panel-overlay-revealing){width:unset!important}.b-hbox>:is(:is(.b-panel.b-collapsed,.b-panel.b-collapsing).b-header-dock-right,:is(.b-panel.b-collapsed,.b-panel.b-collapsing).b-header-dock-left){flex:none!important}.b-panel.b-collapsed:not(.b-expanding,.b-panel-overlay-revealed,.b-panel-overlay-revealing).b-header-dock-right,.b-panel.b-collapsed:not(.b-expanding,.b-panel-overlay-revealed,.b-panel-overlay-revealing).b-header-dock-left{width:unset!important;flex:unset!important}.b-drawer-panel{--b-panel-overlay-box-shadow: var(--b-panel-drawer-box-shadow)}.b-drawer-panel:not(.b-positioned,.b-floating){flex:unset}.b-drawer-panel.b-panel-overlay-revealed>header.b-panel-collapse-revealer{display:none}.b-drawer-panel>header.b-panel-collapse-revealer{display:none}.b-drawer-panel.b-panel-collapse-up{min-height:var(--b-drawer-size);height:auto;inset:0 0 auto}.b-drawer-panel.b-panel-collapse-right{width:var(--b-drawer-size);inset:0 0 0 auto}.b-drawer-panel.b-panel-collapse-down{min-height:var(--b-drawer-size);height:auto;inset:auto 0 0}.b-drawer-panel.b-panel-collapse-left{width:var(--b-drawer-size);inset:0 auto 0 0}.b-panel-overlay{background:var(--b-panel-background)}.b-panel-header{display:flex;flex-direction:row;align-items:center;flex-shrink:0;z-index:1;transition:background var(--b-default-transition-duration),color var(--b-default-transition-duration),border var(--b-default-transition-duration);background:var(--b-panel-header-background);color:var(--b-panel-header-color);padding:var(--b-panel-header-padding);gap:var(--b-panel-header-gap);border-bottom:var(--b-panel-header-border-bottom)}.b-panel-collapsible>.b-panel-header{cursor:pointer}.b-panel-header.b-dock-top{border-top-left-radius:inherit;border-top-right-radius:inherit}.b-panel-header.b-dock-right{flex-flow:column nowrap;border-start-end-radius:inherit;border-end-end-radius:inherit;order:100}.b-panel-header.b-dock-right,.b-panel-header.b-dock-bottom{order:100}.b-panel-header.b-dock-left{flex-flow:column-reverse nowrap;border-start-start-radius:inherit;border-end-start-radius:inherit}.b-panel-header.b-dock-left .b-header-title{rotate:180deg}:is(.b-panel-header.b-dock-right,.b-panel-header.b-dock-left) .b-header-title{writing-mode:vertical-lr}.b-panel-header .b-header-title{align-items:center;flex:1;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;font-size:var(--b-panel-header-font-size);font-weight:var(--b-panel-header-font-weight);text-align:var(--b-panel-header-text-align);gap:var(--b-panel-header-gap)}.b-panel-header .b-header-title.b-header-html-title,.b-panel-header .b-header-title.b-panel-ui-toolbar{display:flex}.b-panel-body-wrap{overflow:hidden;border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.b-panel-body-wrap .b-top-toolbar .b-button.b-button-text{--b-button-type-text-color: var(--b-panel-top-toolbar-button-type-text-color, var(--b-primary-20))}.b-panel-body-wrap .b-bottom-toolbar{background:var(--b-panel-bottom-toolbar-background);--b-toolbar-padding: var(--b-panel-bottom-toolbar-padding)}.b-panel-collapser{z-index:0}.b-panel-content{flex:1;overflow:clip;border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;gap:var(--b-panel-gap);padding:var(--b-panel-padding)}.b-panel-content:where(:not(.b-vbox,.b-hbox)){display:grid;grid-auto-rows:min-content;align-items:center}.b-panel-content.b-vbox{--b-text-field-default-width: 100%}.b-panel-has-header:where(:not(:has(.b-top-toolbar:not(.b-hidden,.b-tab-bar))))>.b-panel-body-wrap>.b-panel-content{padding:var(--b-panel-with-header-padding)}.b-panel .b-panel-content:has(+.b-bottom-toolbar:not(.b-bordered,.b-hidden)){padding-block-end:0}.b-collapse-tool:before{rotate:var(--b-panel-collapse-tool-rotate)}.b-collapse-tool:not(.b-collapsing):before{transition:all .2s ease-in-out}.b-collapse-tool.b-rotate-left,.b-collapse-tool.b-rotate-right{--b-panel-collapse-tool-rotate: 0deg}.b-collapse-tool.b-collapsed{--b-panel-collapse-tool-rotate: 180deg}.b-panel-ui-plain{--b-panel-header-background: var(--b-panel-background);--b-panel-header-color: var(--b-widget-color)}.b-panel-ui-toolbar{--b-panel-header-background: var(--b-grid-header-background, var(--b-toolbar-background));--b-panel-header-color: var(--b-widget-color);--b-panel-header-font-size: var(--b-widget-font-size);--b-panel-header-padding: 1em;--b-panel-header-border-bottom: 1px solid var(--b-grid-header-border-color, var(--b-border-5))}:root,:host{--b-calendar-panel-day-font-size: unset;--b-calendar-panel-day-header-font-weight: 500;--b-calendar-panel-week-width: 2em;--b-calendar-panel-week-number-display: none;--b-calendar-panel-cell-display: flex;--b-calendar-panel-cell-padding: none;--b-calendar-panel-cell-font-size: 1em;--b-calendar-panel-cell-font-weight: var(--b-widget-font-weight);--b-calendar-panel-disabled-cell-opacity: .4;--b-calendar-panel-non-working-cell-display: flex;--b-calendar-panel-gap: 0em;--b-calendar-panel-day-color: unset;--b-calendar-panel-color: var(--b-widget-color);--b-calendar-panel-other-month-color: var(--b-neutral-60);--b-calendar-panel-weeks-gap: .5em}.b-internal{--bi-min-column-width: null}.b-calendar-panel{user-select:none;-webkit-user-select:none}.b-calendar-panel.b-show-week-column{--b-calendar-panel-week-number-display: flex}.b-calendar-panel.b-hide-other-month-cells .b-other-month{visibility:hidden;pointer-events:none}.b-calendar-panel.b-disable-other-month-cells .b-other-month{pointer-events:none;opacity:var(--b-calendar-panel-disabled-cell-opacity)}.b-calendar-panel.b-shade-past-dates .b-past-date{opacity:var(--b-calendar-panel-disabled-cell-opacity)}.b-calendar-panel-content{gap:0;padding:0}.b-calendar-panel-content.b-hide-non-working-days .b-non-working-day{display:none}.b-calendar-panel-row{display:flex}.b-week-number-cell{flex-direction:column;justify-content:center;cursor:pointer;display:var(--b-calendar-panel-week-number-display);font-size:var(--b-calendar-panel-day-font-size);width:var(--b-calendar-panel-week-width);color:var(--b-calendar-panel-week-number-color, var(--b-primary-20))}.b-calendar-week-days .b-week-number-cell{flex-direction:row;font-size:var(--b-calendar-panel-day-font-size)}.b-calendar-day-header{flex:1;justify-content:center;display:flex;color:var(--b-calendar-panel-day-color);font-size:var(--b-calendar-panel-day-font-size);min-width:var(--bi-min-column-width);font-weight:var(--b-calendar-panel-day-header-font-weight)}.b-calendar-week-days{padding-inline:var(--b-calendar-panel-gap);gap:var(--b-calendar-panel-gap)}.b-weeks-container{display:flex;flex-flow:column nowrap;padding-block:var(--b-calendar-panel-weeks-gap);gap:var(--b-calendar-panel-weeks-gap)}.b-weeks-container .b-calendar-panel-row{flex:1;min-height:var(--bi-min-row-height, 0)}.b-calendar-panel-days{display:flex;flex:1;gap:var(--b-calendar-panel-gap)}.b-calendar-panel-cell{flex:1;justify-content:center;align-items:center;position:relative;transition:padding var(--b-default-transition-duration);color:var(--b-calendar-panel-color);display:var(--b-calendar-panel-cell-display);padding:var(--b-calendar-panel-cell-padding);background:var(--b-calendar-panel-cell-background);font-weight:var(--b-calendar-panel-cell-font-weight);font-size:var(--b-calendar-panel-cell-font-size);min-width:var(--bi-min-column-width)}.b-calendar-panel-cell.b-other-month{--b-calendar-panel-color: var(--b-calendar-panel-other-month-color)}.b-calendar-panel-cell.b-disabled-date{opacity:var(--b-calendar-panel-disabled-cell-opacity)}:root,:host{--b-date-picker-min-width: 25em;--b-date-picker-title-font-weight: 600;--b-date-picker-day-font-size: 1em;--b-date-picker-date-padding: .5em;--b-date-picker-date-font-size: 1em;--b-date-picker-today-font-weight: inherit;--b-date-picker-selected-font-weight: 600;--b-date-picker-selected-week-border-radius: 2px;--b-date-picker-cell-margin-block: 2px;--b-date-picker-toolbar-font-size: 1em;--b-date-picker-day-color: var(--b-neutral-20);--b-date-picker-date-color: var(--b-neutral-30);--b-date-picker-today-background: transparent;--b-date-picker-selected-color: var(--b-primary-30);--b-date-picker-header-padding: 1.5em 0;--b-date-picker-color: var(--b-primary)}.b-date-picker{position:relative;opacity:1;flex-shrink:0;color:var(--b-date-picker-color);min-width:var(--b-date-picker-min-width);--b-calendar-panel-day-color: var(--b-date-picker-day-color);--b-calendar-panel-day-font-size: var(--b-date-picker-day-font-size);--b-calendar-panel-color: var(--b-date-picker-date-color);--b-calendar-panel-cell-background: transparent;--b-calendar-panel-cell-font-size: var(--b-date-picker-date-font-size);--b-panel-header-padding: var(--b-date-picker-header-padding)}.b-date-picker.b-date-picker-has-payload{--b-calendar-panel-cell-display: block}.b-date-picker.b-floating .b-weeks-container{max-height:24em}.b-date-picker .b-top-toolbar{--b-toolbar-background: transparent;--b-toolbar-gap: 0}.b-date-picker .b-top-toolbar>.b-toolbar-content>.b-widget{font-size:var(--b-date-picker-toolbar-font-size)}.b-date-picker .b-top-toolbar .b-button{min-width:2em;--b-button-type-text-color: var(--b-date-picker-toolbar-color, var(--b-primary-30))}.b-date-picker .b-top-toolbar .b-widget{--b-primary: inherit}.b-date-picker .b-top-toolbar .b-text-field{color:var(--b-date-picker-toolbar-color, var(--b-primary-30));--b-text-field-background: transparent}.b-date-picker .b-top-toolbar i{font-size:.9em}:is(.b-date-picker [data-ref=monthButton],.b-date-picker [data-ref=yearButton]) .b-button-label{font-size:1.1em}.b-date-picker .b-calendar-panel-cell{cursor:pointer;line-height:1;margin-block:var(--b-date-picker-cell-margin-block)}.b-date-picker .b-calendar-panel-cell:hover{--b-date-picker-date-background: var(--b-date-picker-date-hover-background, var(--b-primary-95));color:var(--b-date-picker-date-hover-color)}.b-date-picker .b-calendar-panel-cell:focus-visible{outline:none}.b-date-picker .b-calendar-panel-cell:focus-visible:after{content:"";position:absolute;z-index:1;border-radius:.25em;pointer-events:none;inset:calc(var(--b-widget-focus-outline-width) * -1) var(--b-widget-focus-outline-width);outline:var(--b-widget-focus-outline-width) solid var(--b-widget-focus-outline-color);outline-offset:-1px}:is(.b-date-picker .b-calendar-panel-cell:not(.b-range-end):last-child,.b-date-picker .b-calendar-panel-cell:not(.b-range-end).b-last-visible-cell):before{clip-path:polygon(0 0,calc(100% - 10px) 0,100% 50%,calc(100% - 10px) 100%,0 100%)}:is(.b-date-picker .b-calendar-panel-cell:not(.b-range-start):first-child,.b-date-picker .b-calendar-panel-cell:not(.b-range-start).b-first-visible-cell):before{clip-path:polygon(10px 0,100% 0,100% 100%,10px 100%,0 50%)}.b-date-picker .b-date-picker-cell-payload{pointer-events:none;position:absolute;inset:auto 0 0;display:flex;justify-content:center;overflow:clip;z-index:1;font-weight:var(--b-widget-font-weight)}.b-date-picker .b-month-picker,.b-date-picker .b-year-picker{inset:0;z-index:1}.b-date-picker .b-selected-date:not(.b-in-range){--b-date-picker-date-hover-background: var(--b-date-picker-selected-hover-background, var(--b-date-picker-selected-background, var(--b-primary-90)));--b-calendar-panel-color: var(--b-date-picker-selected-color);--b-date-picker-date-background: var(--b-date-picker-selected-background, var(--b-primary-90));--b-calendar-panel-cell-font-weight: var(--b-date-picker-selected-font-weight);--b-date-picker-date-border: var(--b-date-picker-selected-border)}.b-date-picker .b-today,.b-date-picker .b-today:not(.b-in-range){--b-date-picker-date-border: var(--b-date-picker-today-border, 1px solid var(--b-date-picker-today-color, var(--b-primary-50)))}.b-date-picker .b-today{--b-date-picker-date-hover-background: var(--b-date-picker-today-hover-background, var(--b-primary-95));--b-calendar-panel-color: var(--b-date-picker-today-color, var(--b-primary-50));--b-calendar-panel-date-background: var(--b-date-picker-today-background);--b-calendar-panel-cell-font-weight: var(--b-date-picker-today-font-weight)}.b-date-picker.b-highlight-selected-week .b-calendar-week:has(.b-selected-date){background:var(--b-date-picker-selected-week-background, var(--b-primary-95));border-radius:var(--b-date-picker-selected-week-border-radius)}.b-date-picker .b-in-range{--b-date-picker-selected-color: var(--b-date-picker-selected-range-color)}:is(.b-date-picker .b-range-start:where(:not(.b-range-end)),.b-date-picker .b-range-end:where(:not(.b-range-start)),.b-date-picker .b-in-range):before{content:"";position:absolute;display:block;height:100%;inset-inline-start:0;background:var(--b-date-picker-selected-range-background, var(--b-primary-96))}.b-date-picker .b-range-start:before{inset-inline-start:50%;width:calc(50% + var(--b-calendar-panel-gap))}.b-date-picker .b-in-range:before{width:calc(100% + var(--b-calendar-panel-gap))}.b-date-picker .b-range-end:before{width:50%}.b-date-picker .b-out-of-range{opacity:var(--b-calendar-panel-disabled-cell-opacity)}.b-date-picker-cell-inner{display:flex;flex-direction:column;align-items:center;justify-content:center;border-radius:50%;height:100%;position:relative;z-index:1;aspect-ratio:1 / 1;min-width:2.25em;background:var(--b-date-picker-date-background);padding:var(--b-date-picker-date-padding);outline:var(--b-date-picker-date-border)}.b-date-picker-title{display:flex;flex-direction:row;flex:1;align-items:center;justify-content:center;gap:.3em;overflow:visible}.b-date-picker-month-button,.b-date-picker-year-button{padding:0;background:transparent;border-radius:1px;font-weight:var(--b-date-picker-title-font-weight);--b-button-focus-outline-offset: 1px}.b-carousel-content:not(.b-carousel-empty){padding:0}.b-carousel-content>.b-carousel-content{overflow:clip}.b-carousel-content.b-carousel-empty>.b-carousel-inner-ct,.b-carousel-content:not(.b-carousel-empty)>.b-carousel-empty-text{display:none}.b-multi-date-picker.b-widget.b-floating,.b-multi-date-picker.b-widget.b-floating .b-carousel-inner-ct{border-radius:var(--b-popup-border-radius)}.b-multi-date-picker .b-top-toolbar{--b-toolbar-gap: var(--b-date-range-field-gap)}.b-multi-date-picker [data-ref=yearButton],.b-multi-date-picker [data-ref=monthButton]{color:var(--b-button-type-text-color);opacity:1}.b-multi-date-picker-nav-floating{overflow:visible}.b-multi-date-picker-nav-floating>.b-multi-date-picker-nav-button{position:absolute;top:50%;z-index:1;box-shadow:var(--b-elevation-1);--b-button-type-text-background: var(--b-panel-background);--b-button-type-text-hover-background: var(--b-primary-97)}.b-multi-date-picker-nav-floating>.b-multi-date-picker-next-button{inset-inline-end:0;translate:calc(50% * var(--b-rtl-negate)) -50%}.b-multi-date-picker-nav-floating>.b-multi-date-picker-prev-button{inset-inline-start:0;translate:calc(-50% * var(--b-rtl-negate)) -50%}.b-multi-date-picker-content>.b-carousel-inner-ct .b-date-picker-content .b-calendar-week,.b-multi-date-picker-content>.b-carousel-inner-ct .b-date-picker-content .b-calendar-week-days{padding-inline:1.5em}.b-multi-date-picker-content>.b-carousel-inner-ct [data-ref=nextMonth],.b-multi-date-picker-content>.b-carousel-inner-ct [data-ref=prevMonth],.b-multi-date-picker-content>.b-carousel-inner-ct [data-ref=prevYear],.b-multi-date-picker-content>.b-carousel-inner-ct [data-ref=nextYear]{display:none}.b-multi-date-picker-content>.b-carousel-inner-ct .b-date-picker.b-carousel-visible.b-carousel-first>.b-top-focus-trap,.b-multi-date-picker-content>.b-carousel-inner-ct .b-date-picker.b-carousel-visible.b-carousel-last>.b-end-focus-trap{display:none}.b-multi-date-picker-content>.b-carousel-inner-ct .b-date-picker.b-carousel-reserve [data-ref=monthField]{pointer-events:none}.b-multi-date-picker-content>.b-carousel-inner-ct .b-date-picker.b-carousel-reserve [data-ref=yearButton]{display:none}.b-demo-code-editor{width:490px;flex:unset;--b-toolbar-padding: .5em;--b-panel-padding: 0;--b-panel-background: var(--b-neutral-100);--b-text-field-input-height: 3em;--b-panel-overlay-border: none;--b-toolbar-background: transparent}.b-demo-code-editor .b-top-toolbar{height:58px;--b-toolbar-gap: 0}@media (min-width : 2000px){.b-demo-code-editor{width:700px}}.b-demo-code-editor:not(.b-collapsed){border-inline-start:var(--b-splitter-size, 4px) solid var(--b-border-7)}:is(.b-demo-code-editor.b-collapsed,.b-demo-code-editor.b-collapsing) .b-panel-collapse-revealer{display:none}.b-demo-code-editor:not(.b-resizing){transition:border-width .1s}.b-demo-code-editor .b-code-editor-body-wrap,.b-demo-code-editor .b-panel-overlay{overflow:hidden}.b-demo-code-editor .b-panel-content{direction:ltr}.b-demo-code-editor.b-resizing *{user-select:none;-webkit-user-select:none}.b-demo-code-editor.b-over-resize-handle{cursor:ew-resize}.b-demo-code-editor.b-hidden{display:flex!important;border-inline-start-width:0}.b-demo-code-editor .b-bottom-toolbar{transition:background-color .2s}.readonly :is(.b-demo-code-editor .b-bottom-toolbar){background-color:#ff8d46}.b-demo-code-editor .b-bottom-toolbar [data-ref=cursorPos]{margin-inline-start:auto}.b-demo-code-editor .b-bottom-toolbar .b-toolbar-content{padding:1em!important}.b-demo-code-editor.invalid .b-bottom-toolbar{color:#fff;background:#b71c1c}.b-demo-code-editor [data-ref=filesCombo]{margin-inline-end:.5em}.b-demo-code-editor-file-picker{--b-list-item-gap: 0}.b-demo-code-editor-file-picker .b-editor-file-type{margin-inline-end:.5em}:root,:host{--b-field-label-padding: 0;--b-field-label-default-gap: var(--b-widget-gap);--b-field-label-above-gap: .5em;--b-field-label-before-gap: var(--b-widget-gap);--b-field-default-template-areas: "before inner";--b-field-default-template-columns: auto 1fr;--b-field-default-label-padding: 0 1em 0 0;--b-field-error-tip-primary: var(--b-color-red);--b-field-align-before-label-column: unset;--b-field-align-before-field-column: unset}@property --bi-field-template-areas{syntax : "*"; inherits : false;}@property --bi-field-template-columns{syntax : "*"; inherits : false;}.b-field,.b-slider{display:grid;grid-template-rows:100%;align-items:center;justify-items:start;flex-shrink:0;--bi-field-template-areas: "inner";--bi-field-template-columns: 1fr;grid-template-areas:var(--bi-field-template-areas);grid-template-columns:var(--bi-field-template-columns);color:var(--b-primary);gap:var(--bi-field-gap);--b-field-label-grid-area: before}:is(.b-field,.b-slider) .b-field-inner{display:grid;align-items:center;justify-items:center;grid-area:inner;max-height:100%}:is(.b-field,.b-slider) .b-label{align-self:center;grid-area:var(--b-field-label-grid-area);padding:var(--b-field-label-padding)}.b-vbox>:is(.b-field,.b-slider).b-label-above .b-label{align-self:flex-start}:is(.b-field,.b-slider).b-has-label{--bi-field-template-areas: var(--b-field-default-template-areas);--bi-field-template-columns: var(--b-field-default-template-columns);--bi-field-gap: var(--b-field-label-default-gap)}:is(.b-field,.b-slider).b-has-label.b-required .b-label:after{content:"*"}:is(.b-field,.b-slider).b-label-align-before,:is(.b-field,.b-slider).b-label-before{--bi-field-template-columns: auto 1fr;--bi-field-template-areas: "before inner";--b-field-label-grid-area: before;--bi-field-gap: var(--b-field-label-before-gap)}:is(.b-field,.b-slider).b-label-above{grid-template-rows:auto 1fr;--bi-field-template-columns: 1fr;--bi-field-template-areas: "above" "inner";--b-field-label-grid-area: above;--bi-field-gap: var(--b-field-label-above-gap)}:is(.b-field,.b-slider).b-label-align-before .b-label{grid-column:var(--b-field-align-before-label-column)}:is(.b-field,.b-slider).b-label-align-before .b-field-inner{grid-column:var(--b-field-align-before-field-column)}:is(:is(.b-field,.b-slider).b-read-only,:is(.b-field,.b-slider).b-disabled) .b-field-trigger{pointer-events:none;opacity:.5}.b-field-container-wrap{display:flex;flex:1 1 auto;overflow:hidden;position:relative;gap:var(--b-container-gap)}.b-field-container-wrap>.b-container{width:100%}.b-field.b-collapsed:not(.b-field-container-inline)>.b-field-container-wrap{height:0}.b-field.b-collapsed.b-field-container-inline>.b-field-container-wrap{opacity:0}.b-field-container:not(.b-field-container-inline) .b-field-container{gap:var(--b-container-gap)}.b-field-container-inline{gap:var(--b-container-gap);--bi-field-template-areas: "inner container";--bi-field-template-columns: max-content 1fr}.b-field-container-inline .b-field-container-wrap{grid-area:container;width:100%}.b-field-container-inline .b-field-container{width:100%;display:flex;flex-direction:row;flex-wrap:nowrap}:root,:host{--b-checkbox-size: 1.25em;--b-checkbox-border-radius: calc(var(--b-widget-border-radius) / 2);--b-checkbox-check-font-size: .9em;--b-checkbox-disabled-opacity: .4;--b-checkbox-inner-gap: 1em;--b-checkbox-ring-content: none;--b-checkbox-border-width: 1px;--b-checkbox-border-color: var(--b-widget-border-color);--b-checkbox-checked-border-color: var(--b-widget-border-color);--b-checkbox-checked-check-color: var(--b-neutral-100);--b-checkbox-disabled-checked-check-color: var(--b-neutral-100);--b-checkbox-hover-border-color: var(--b-border-3);--b-checkbox-focus-outline-width: var(--b-widget-focus-outline-width);--b-checkbox-focus-outline-offset: 2px;--b-checkbox-focus-outline-color: var(--b-widget-focus-outline-color);--bi-checkbox-ring-opacity: 0}.b-checkbox{width:fit-content;overflow:visible}.b-checkbox>.b-field-inner>input{grid-area:input;appearance:none;margin:0}.b-checkbox:not(.b-disabled) input{cursor:pointer}:is(.b-checkbox:focus-within,.b-checkbox.b-focus) input{outline:none}:is(.b-checkbox:focus-within,.b-checkbox.b-focus) input:focus-visible~.b-checkbox-box,:is(.b-checkbox:focus-within,.b-checkbox.b-focus).b-focus input~.b-checkbox-box{outline:var(--b-checkbox-focus-outline-width) solid var(--b-checkbox-focus-outline-color);outline-offset:var(--b-checkbox-focus-outline-offset)}.b-checkbox>.b-field-inner{grid-template-areas:"input"}.b-checkbox.b-text>.b-field-inner{grid-template-areas:"input after";gap:var(--b-checkbox-inner-gap)}.b-checkbox .b-checkbox-label{grid-area:after;white-space:nowrap;justify-self:stretch;overflow:hidden;text-overflow:ellipsis;user-select:none;-webkit-user-select:none;color:var(--b-label-color)}.b-checkbox label{cursor:pointer}.b-checkbox:not(.b-disabled):has(input:hover),.b-checkbox:not(.b-disabled).b-hover{--bi-checkbox-ring-opacity: var(--b-checkbox-ring-hover-opacity)}.b-checkbox:not(.b-disabled):has(input:focus-visible),.b-checkbox:not(.b-disabled).b-focus{--bi-checkbox-ring-opacity: var(--b-checkbox-ring-focus-opacity)}.b-checkbox:not(.b-disabled):has(input:active),.b-checkbox:not(.b-disabled).b-active{--bi-checkbox-ring-opacity: var(--b-checkbox-ring-active-opacity)}.b-checkbox:not(.b-slide-toggle)>.b-field-inner{grid-template-columns:var(--b-checkbox-size)}.b-checkbox:not(.b-slide-toggle)>.b-field-inner input{aspect-ratio:1 / 1;width:var(--b-checkbox-size)}.b-checkbox:not(.b-slide-toggle).b-text>.b-field-inner{grid-template-columns:var(--b-checkbox-size) auto}.b-checkbox:not(.b-slide-toggle)>.b-field-inner:before{content:var(--b-checkbox-ring-content);background:var(--b-primary);grid-area:input;border-radius:50%;pointer-events:none;transition:opacity .3s;aspect-ratio:1 / 1;width:calc(var(--b-checkbox-size) * 2.25);opacity:var(--bi-checkbox-ring-opacity)}.b-checkbox:not(.b-slide-toggle) input:checked~.b-checkbox-box{--b-checkbox-background: var(--b-checkbox-checked-background);--b-checkbox-border-color: var(--b-checkbox-checked-border-color)}.b-checkbox:not(.b-slide-toggle) input:checked~.b-checkbox-box:after{scale:1}.b-checkbox:not(.b-slide-toggle).b-disabled{--b-checkbox-border-color: var(--b-checkbox-disabled-border-color, var(--b-widget-disabled-color));--b-checkbox-checked-border-color: var(--b-checkbox-disabled-background, var(--b-widget-disabled-color));--b-checkbox-checked-check-color: var(--b-checkbox-disabled-checked-check-color);--b-checkbox-checked-background: var(--b-checkbox-disabled-checked-background, var(--b-widget-disabled-background));--b-label-color: var(--b-checkbox-disabled-background, var(--b-widget-disabled-color));--b-checkbox-opacity: var(--b-checkbox-disabled-opacity)}.b-checkbox:not(.b-slide-toggle):not(.b-disabled):has(input:hover),.b-checkbox:not(.b-slide-toggle):not(.b-disabled).b-hover{--bi-checkbox-ring-opacity: var(--b-checkbox-ring-hover-opacity);--b-checkbox-background: var(--b-checkbox-hover-background);--b-checkbox-border-color: var(--b-checkbox-hover-border-color)}:is(.b-checkbox:not(.b-slide-toggle):not(.b-disabled):has(input:hover),.b-checkbox:not(.b-slide-toggle):not(.b-disabled).b-hover) input:checked~.b-checkbox-box{--b-checkbox-background: var(--b-checkbox-checked-hover-background)}.b-checkbox:not(.b-slide-toggle):not(.b-disabled):has(input:focus-visible),.b-checkbox:not(.b-slide-toggle):not(.b-disabled).b-focus{--bi-checkbox-ring-opacity: var(--b-checkbox-ring-focus-opacity)}.b-checkbox:not(.b-slide-toggle):not(.b-disabled):has(input:active),.b-checkbox:not(.b-slide-toggle):not(.b-disabled).b-active{--bi-checkbox-ring-opacity: var(--b-checkbox-ring-active-opacity)}.b-checkbox-box{grid-area:input;pointer-events:none;display:flex;align-items:center;justify-content:center;transition:background .2s ease,border .2s ease;width:var(--b-checkbox-size);height:var(--b-checkbox-size);border-radius:var(--b-checkbox-border-radius);border:var(--b-checkbox-border-width) solid var(--b-checkbox-border-color);background:var(--b-checkbox-background);opacity:var(--b-checkbox-opacity, 1)}.b-checkbox-box:after{transition:scale .2s ease,border .2s ease;scale:0;font-family:var(--b-widget-icon-font-family);font-weight:var(--b-widget-icon-font-weight);content:var(--b-checkbox-checked-check-content);color:var(--b-checkbox-checked-check-color);font-size:var(--b-checkbox-check-font-size)}.b-menu>.b-menu-body-wrap .b-menu-content>.b-checkbox{margin-inline-start:var(--b-checkbox-inner-gap)}.b-field-container:not(.b-field-container-inline)>.b-field-container-wrap{margin-top:.5em;margin-inline-start:calc(var(--b-checkbox-size) + var(--b-checkbox-inner-gap))}.b-container.b-label-align-before .b-checkbox:not(.b-has-label){grid-column:2 / 2}:root,:host{--b-field-filter-picker-group-gap: 4em}.b-field-filter-picker-group .b-no-visible-children{display:none}.b-field-filter-picker-group [data-ref=pickers]{--b-container-gap: 0}.b-field-filter-picker-group-row{position:relative;flex-shrink:0;align-items:baseline;overflow:visible;padding-top:var(--b-field-filter-picker-group-gap);padding-bottom:.5em}.b-field-filter-picker-group-row:first-child{--b-field-filter-picker-group-gap: 0}.b-field-filter-picker-group-row:first-child:before{display:none}.b-field-filter-picker-group-row:before{content:attr(data-separator-text);font-size:85%;position:absolute;text-align:center;width:100%;top:.15em;background-position:0 50%;background-size:100% 1px;background-repeat:no-repeat;background-image:linear-gradient(to right,var(--b-border-5),var(--b-border-5) 44%,transparent 44%,transparent 56%,var(--b-border-5) 56%);height:var(--b-field-filter-picker-group-gap);line-height:var(--b-field-filter-picker-group-gap)}.b-field-filter-picker-group-row:not(.b-field-filter-picker-group-row-removable){padding-inline-end:2.25em}.b-field-filter-picker-group-row [data-ref=pickers]{gap:0}.b-field-filter-picker-group-filter-active{width:2.3em;align-self:center}.b-field-filter-picker-group-filter-active.b-slide-toggle{width:3.5em}.b-field-filter-picker-group-other-filters{padding:.5em 0}.b-field-filter-picker-group-add-button{align-self:center}.b-field-filter-picker-group-remove{margin-inline-start:.25em}:root,:host{--b-radio-check-gap: .2em;--b-radio-background: var(--b-neutral-100);--b-radio-checked-background: var(--b-radio-background);--b-radio-checked-border-color: var(--b-radio-checked-color)}.b-radio.b-checkbox{--b-checkbox-border-radius: 50%;--b-checkbox-checked-check-content: "";--b-checkbox-checked-check-color: var(--b-primary);--b-checkbox-background: var(--b-radio-background);--b-checkbox-checked-background: var(--b-radio-checked-background);--b-checkbox-checked-border-color: var(--b-radio-checked-border-color);--b-checkbox-checked-hover-background: var(--b-radio-checked-background);--b-checkbox-check-font-size: 1em}.b-radio.b-checkbox .b-checkbox-box:after{border-radius:50%;aspect-ratio:1 / 1;width:100%;background:var(--b-radio-checked-color, var(--b-primary));border:var(--b-radio-check-gap) solid var(--b-radio-checked-background)}:root,:host{--b-slide-toggle-border-width: var(--b-checkbox-border-width);--b-slide-toggle-width: 2.75em;--b-slide-toggle-height: 1.75em;--b-slide-toggle-thumb-size: 1em;--b-slide-toggle-border-radius: calc(var(--b-slide-toggle-height) / 2);--b-slide-toggle-checked-thumb-size: 1em;--b-slide-toggle-thumb-offset: .15em;--b-slide-toggle-font-size: 1em;--b-slide-toggle-disabled-opacity: .5;--b-slide-toggle-inner-gap: .5em;--b-slide-toggle-label-before-padding: 0 .5em 0 0;--b-slide-toggle-ring-color: var(--b-neutral-60);--b-slide-toggle-disabled-background: var(--b-neutral-85);--b-slide-toggle-disabled-thumb-background: var(--b-neutral-100);--b-slide-toggle-focus-outline-width: var(--b-checkbox-focus-outline-width);--b-slide-toggle-focus-outline-offset: var(--b-checkbox-focus-outline-offset);--b-slide-toggle-thumb-border: null;--b-slide-toggle-checked-thumb-border: null;--b-slide-toggle-thumb-color: var(--b-primary);--b-slide-toggle-thumb-background: var(--b-neutral-100);--b-slide-toggle-hovered-thumb-background: var(--b-neutral-95);--b-slide-toggle-checked-thumb-background: var(--b-neutral-100);--b-slide-toggle-checked-border-color: var(--b-slide-toggle-checked-background);--b-slide-toggle-checked-ring-color: var(--b-primary);--b-slide-toggle-checked-thumb-offset: 4px}.b-internal{--bi-slidetoggle-thumb-position: null}.b-slide-toggle{--bi-slidetoggle-thumb-position: calc(var(--b-slide-toggle-thumb-offset) + (var(--b-slide-toggle-checked-thumb-size) - var(--b-slide-toggle-thumb-size)) / 2);--b-checkbox-inner-gap: var(--b-slide-toggle-inner-gap);--b-checkbox-label-before-padding: var(--b-slide-toggle-label-before-padding)}.b-slide-toggle .b-field-inner{grid-template-columns:max-content}.b-slide-toggle input{width:100%;height:100%}.b-slide-toggle input:checked~.b-slide-toggle-toggle{--b-slide-toggle-background: var(--b-slide-toggle-checked-background, var(--b-primary));--b-slide-toggle-thumb-background: var(--b-slide-toggle-checked-thumb-background);--b-slide-toggle-thumb-border: var(--b-slide-toggle-checked-thumb-border);--b-slide-toggle-thumb-size: var(--b-slide-toggle-checked-thumb-size);--b-slide-toggle-border-color: var(--b-slide-toggle-checked-border-color);--b-slide-toggle-ring-color: var(--b-slide-toggle-checked-ring-color);--bi-slidetoggle-thumb-position: calc(var(--b-slide-toggle-width) - var(--b-slide-toggle-checked-thumb-size) - var(--b-slide-toggle-checked-thumb-offset))}.b-slide-toggle:not(.b-disabled):hover,.b-slide-toggle:not(.b-disabled).b-hover,.b-slide-toggle:not(.b-disabled):focus-within,.b-slide-toggle:not(.b-disabled).b-focus,.b-slide-toggle:not(.b-disabled).b-active,.b-slide-toggle:not(.b-disabled):active{--b-slide-toggle-thumb-background: var(--b-slide-toggle-hovered-thumb-background);--b-slide-toggle-background: var(--b-slide-toggle-hover-background)}:is(.b-slide-toggle:not(.b-disabled):hover,.b-slide-toggle:not(.b-disabled).b-hover,.b-slide-toggle:not(.b-disabled):focus-within,.b-slide-toggle:not(.b-disabled).b-focus,.b-slide-toggle:not(.b-disabled).b-active,.b-slide-toggle:not(.b-disabled):active) input:checked~.b-slide-toggle-toggle{--b-slide-toggle-thumb-background: var(--b-slide-toggle-checked-hovered-thumb-background);--b-slide-toggle-background: var(--b-slide-toggle-checked-hover-background, var(--b-primary))}:is(.b-slide-toggle:not(.b-disabled):focus-within,.b-slide-toggle:not(.b-disabled).b-focus):has(:focus-visible) .b-slide-toggle-toggle,:is(.b-slide-toggle:not(.b-disabled):focus-within,.b-slide-toggle:not(.b-disabled).b-focus).b-focus .b-slide-toggle-toggle{outline:var(--b-slide-toggle-focus-outline-width) solid var(--b-slide-toggle-focus-outline-color, var(--b-checkbox-focus-outline-color));outline-offset:var(--b-slide-toggle-focus-outline-offset)}.b-slide-toggle.b-disabled{--b-slide-toggle-opacity: var(--b-slide-toggle-disabled-opacity);--b-slide-toggle-border-color: var(--b-slide-toggle-disabled-border-color);--b-slide-toggle-checked-border-color: var(--b-slide-toggle-disabled-border-color)}.b-slide-toggle.b-disabled input:checked~.b-slide-toggle-toggle{--b-slide-toggle-background: var(--b-slide-toggle-disabled-background);--b-slide-toggle-thumb-background: var(--b-slide-toggle-disabled-thumb-background);--b-slide-toggle-checked-border-color: var(--b-slide-toggle-disabled-background)}.b-slide-toggle-toggle{display:flex;align-items:center;pointer-events:none;grid-area:input;transition:background .2s,border .2s,opacity .2s;font-size:var(--b-slide-toggle-font-size);width:var(--b-slide-toggle-width);height:var(--b-slide-toggle-height);background:var(--b-slide-toggle-background);border:var(--b-slide-toggle-border-width) solid var(--b-slide-toggle-border-color);border-radius:var(--b-slide-toggle-border-radius);opacity:var(--b-slide-toggle-opacity, 1)}.b-slide-toggle-thumb{aspect-ratio:1 / 1;border-radius:50%;transition:background .2s ease,width .2s ease,margin .2s ease;position:relative;background:var(--b-slide-toggle-thumb-background);border:var(--b-slide-toggle-thumb-border);color:var(--b-slide-toggle-thumb-color);width:var(--b-slide-toggle-thumb-size);margin-inline-start:var(--bi-slidetoggle-thumb-position)}.b-slide-toggle-thumb:before{border-radius:50%;pointer-events:none;transition:opacity .5s ease;aspect-ratio:1 / 1;display:block;position:absolute;top:50%;inset-inline-start:50%;translate:calc(-50% * var(--b-rtl-negate)) -50%;content:var(--b-checkbox-ring-content);background:var(--b-slide-toggle-ring-color);opacity:var(--bi-checkbox-ring-opacity);width:calc(var(--b-slide-toggle-checked-thumb-size) * 1.7)}.b-date-time-field{width:unset;--b-text-field-default-width: 22em}.b-date-time-field.b-field>div.b-field-inner{display:flex}.b-date-time-field.b-field>div.b-field-inner:has(.b-field-trigger.b-align-start),.b-date-time-field.b-field>div.b-field-inner:has(.b-field-trigger.b-align-end){padding-inline:0}.b-date-time-field .b-date-field,.b-date-time-field .b-time-field{border-top-left-radius:0;border-bottom-left-radius:0;grid-template-areas:"inner";grid-template-columns:1fr;--b-text-field-background: transparent}:is(.b-date-time-field .b-date-field,.b-date-time-field .b-time-field) .b-label{display:none}:is(.b-date-time-field .b-date-field,.b-date-time-field .b-time-field) .b-field-inner:before{content:none}.b-date-time-field .b-date-field{flex:1 1 53%}.b-date-time-field .b-date-field .b-step-trigger-forward.b-align-end{padding-inline-end:calc(var(--b-text-field-input-padding) / 2)}.b-date-time-field .b-time-field{flex:1 1 46%}.b-date-time-field .b-time-field .b-field-trigger.b-align-start{padding-inline-start:calc(var(--b-text-field-input-padding) / 2)}:root,:host{--b-text-field-font-weight: normal;--b-text-field-padding: 0;--b-text-field-input-font-size: var(--b-widget-font-size);--b-text-field-input-padding: 0;--b-text-field-border-style: solid;--b-text-field-focus-border-style: solid;--b-text-field-disabled-opacity: .4;--b-text-field-outlined-border-radius: var(--b-widget-border-radius);--b-field-trigger-gap: .75em;--b-field-trigger-edge-gap: 1em;--b-text-field-default-template-areas: "before inner";--b-text-field-default-template-columns: auto 1fr;--b-text-field-default-label-padding: 0 var(--b-widget-padding) 0 0;--b-text-field-label-grid-area: before;--b-text-field-label-color: var(--b-widget-color);--b-text-field-input-color: var(--b-widget-color);--b-text-field-border-color: var(--b-widget-border-color);--b-text-field-label-above-grid-area: above;--b-text-field-label-font-size: var(--b-label-font-size);--b-text-field-empty-label-font-size: var(--b-text-field-label-font-size);--b-text-field-label-scale: 1;--b-text-field-empty-label-scale: 1;--b-text-field-trigger-read-only-color: var(--b-neutral-85);--b-text-field-trigger-disabled-color: var(--b-neutral-40);--b-text-field-filled-background: var(--b-neutral-95);--b-text-field-filled-hover-background: var(--b-neutral-90);--b-text-field-filled-focus-background: var(--b-neutral-90);--b-text-field-filled-border-width: 0;--b-text-field-filled-border-radius: var(--b-widget-border-radius);--b-text-field-filled-input-padding: 1em;--b-text-field-filled-no-label-input-padding: 1em;--b-text-field-filled-focus-border-width: 0;--b-text-field-filled-focus-label-color: var(--b-widget-color);--b-text-field-outlined-background: var(--b-neutral-100);--b-text-field-outlined-border-width: 1px;--b-text-field-outlined-border-color: var(--b-border-5);--b-text-field-outlined-input-padding: var(--b-widget-padding);--b-text-field-outlined-focus-border-width: var(--b-widget-focus-outline-width);--b-text-field-outlined-label-background: transparent;--b-text-field-outlined-label-padding: 0;--b-text-field-outlined-label-before-padding: 0;--b-text-field-outlined-label-above-padding: 0;--b-text-field-outlined-hover-border-color: var(--b-border-4);--b-text-field-outlined-hover-background: var(--b-neutral-100);--b-text-field-outlined-focus-background: var(--b-neutral-100);--b-text-field-outlined-focus-label-color: var(--b-widget-color);--b-text-field-filled-material-label-position: static;--b-field-trigger-color: var(--b-neutral-60);--b-spin-trigger-font-size: 1em;--b-text-field-invalid-border-color: var(--b-color-red);--b-text-field-invalid-label-color: var(--b-color-red);--b-text-field-color: var(--b-primary);--b-text-field-focus-border-color: var(--b-primary);--b-text-field-default-width: 12.5em;--bi-text-field-input-width: 100%}.b-internal{--b-text-field-opacity: null;--b-text-field-border-width: null;--b-text-field-focus-border-width: null;--b-text-field-focus-label-color: null;--bi-text-field-empty-label-padding: null}.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field{position:relative;height:fit-content;width:fit-content;overflow:visible;border-radius:var(--b-text-field-border-radius);color:var(--b-text-field-color);--b-field-label-grid-area: var(--b-text-field-label-grid-area);--b-field-label-padding: var(--b-text-field-label-padding);--b-field-default-template-areas: var(--b-text-field-default-template-areas);--b-field-default-template-columns: var(--b-text-field-default-template-columns);--b-field-default-label-padding: var(--b-text-field-default-label-padding);--b-label-color: var(--b-text-field-label-color)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field):where(:not(.b-has-width)){width:var(--b-text-field-default-width)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field)>.b-field-inner{display:flex;min-width:0;position:relative;overflow:hidden;transition:background var(--b-default-transition-duration);background:var(--b-text-field-background);border-radius:var(--b-text-field-border-radius);padding:var(--b-text-field-padding);opacity:var(--b-text-field-opacity);width:var(--bi-text-field-input-width)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field)>.b-field-inner:before{content:"";position:absolute;inset:0;background:transparent;border-radius:inherit;pointer-events:none;transition:border .1s;z-index:1;border-width:var(--b-text-field-border-width);border-style:var(--b-text-field-border-style);border-color:var(--b-text-field-border-color)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field) bry-time,:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field) input,:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field) textarea,:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field) .b-display-field-value{border:none;background:transparent;width:100%;font-family:inherit;outline:none;text-align:inherit;color:var(--b-text-field-input-color);font-weight:var(--b-text-field-font-weight);height:var(--b-text-field-input-height);font-size:var(--b-text-field-input-font-size);padding:var(--b-text-field-input-padding)}:is(:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field) bry-time,:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field) input,:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field) textarea,:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field) .b-display-field-value)::selection{background:var(--b-text-field-selection-background, var(--b-primary-85))}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field) input::placeholder{color:var(--bi-text-field-placeholder-color, var(--b-text-4));font-style:var(--b-text-field-placeholder-font-style)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field).b-label-above{border-top-left-radius:0;border-top-right-radius:0;--b-field-label-grid-area: var(--b-text-field-label-above-grid-area)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field) label{z-index:2;line-height:1em;align-self:start;transition:top .2s ease,left .2s ease,font-size .2s ease,padding .2s ease,scale .2s ease;transform-origin:top left;font-size:var(--b-text-field-label-font-size)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field).b-has-label:not(.b-label-before,.b-label-align-before){--bi-text-field-placeholder-color: var(--b-text-field-label-above-placeholder-color, var(--b-text-4))}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field).b-has-label:not(.b-label-before,.b-label-align-before) label{scale:var(--b-text-field-label-scale);position:var(--b-text-field-material-label-position);top:var(--b-text-field-material-label-top);inset-inline-start:var(--b-text-field-material-label-left);cursor:var(--b-text-field-material-label-cursor)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field) .b-field-trigger{display:flex;flex-direction:column;align-self:stretch;align-items:center;justify-content:center;cursor:pointer;flex:0 0 auto;min-width:1em;gap:0;color:var(--b-field-trigger-color)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field) .b-field-trigger.b-align-start{padding-inline-start:var(--b-field-trigger-gap)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field) .b-field-trigger.b-align-start:first-child{padding-inline-start:var(--b-field-trigger-edge-gap)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field) .b-field-trigger.b-align-end{padding-inline-end:var(--b-field-trigger-gap)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field) .b-field-trigger.b-align-end:last-child,:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field) .b-field-trigger.b-align-end.b-last-trigger{padding-inline-end:var(--b-field-trigger-edge-gap)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field) .b-spin-trigger .b-icon{font-size:var(--b-spin-trigger-font-size)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field) .b-field-container-wrap{grid-row:1}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field).b-disabled{--b-text-field-opacity: var(--b-text-field-disabled-opacity);--b-text-field-label-color: var(--b-widget-disabled-color)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field).b-disabled .b-field-trigger{cursor:auto;color:var(--b-text-field-trigger-disabled-color)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field).b-read-only .b-field-trigger{cursor:auto;color:var(--b-text-field-trigger-read-only-color)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field):not(.b-has-label) input,:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field):not(.b-has-label) span{padding:var(--b-text-field-no-label-input-padding, var(--b-text-field-input-padding))}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field).b-text-field-filled{--b-text-field-background: var(--b-text-field-filled-background);--b-text-field-hover-background: var(--b-text-field-filled-hover-background);--b-text-field-border-width: var(--b-text-field-filled-border-width);--b-text-field-border-radius: var(--b-text-field-filled-border-radius);--b-text-field-input-padding: var(--b-text-field-filled-input-padding);--b-text-field-no-label-input-padding: var(--b-text-field-filled-no-label-input-padding);--b-text-field-focus-border-width: var(--b-text-field-filled-focus-border-width);--b-text-field-label-before-padding: var(--b-text-field-filled-label-before-padding);--b-text-field-label-above-padding: var(--b-text-field-filled-label-above-padding);--b-text-field-hover-border-color: var(--b-text-field-filled-hover-border-color);--b-text-field-focus-background: var(--b-text-field-filled-focus-background);--b-text-field-focus-label-color: var(--b-text-field-filled-focus-label-color);--b-text-field-material-label-position: var(--b-text-field-filled-material-label-position);--b-text-field-material-label-top: var(--b-text-field-filled-material-label-top);--b-text-field-material-label-left: var(--b-text-field-filled-material-label-left);--b-text-field-material-label-cursor: var(--b-text-field-filled-material-label-cursor);--b-text-field-material-empty-label-font-size: var(--b-text-field-filled-material-empty-label-font-size);--b-text-field-material-empty-label-top: var(--b-text-field-filled-material-empty-label-top);--b-text-field-material-empty-label-left: var(--b-text-field-filled-material-empty-label-left)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field).b-text-field-filled:where(.b-has-start-trigger:not(.b-no-steppers)),:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field).b-text-field-filled:has(.b-has-start-trigger:not(.b-no-steppers)){--b-text-field-material-label-left: var(--b-text-field-filled-material-trigger-label-left);--b-text-field-material-empty-label-left: var(--b-text-field-filled-material-trigger-empty-label-left)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field).b-text-field-outlined{--b-text-field-background: var(--b-text-field-outlined-background);--b-text-field-border-radius: var(--b-text-field-outlined-border-radius);--b-text-field-border-width: var(--b-text-field-outlined-border-width);--b-text-field-border-color: var(--b-text-field-outlined-border-color);--b-text-field-input-padding: var(--b-text-field-outlined-input-padding);--b-text-field-focus-border-width: var(--b-text-field-outlined-focus-border-width);--b-text-field-label-before-padding: var(--b-text-field-outlined-label-before-padding);--b-text-field-label-above-padding: var(--b-text-field-outlined-label-above-padding);--b-text-field-hover-border-color: var(--b-text-field-outlined-hover-border-color);--b-text-field-hover-background: var(--b-text-field-outlined-hover-background);--b-text-field-focus-label-color: var(--b-text-field-outlined-focus-label-color);--b-text-field-focus-background: var(--b-text-field-outlined-focus-background);--b-text-field-material-label-position: var(--b-text-field-outlined-material-label-position, static);--b-text-field-material-label-top: var(--b-text-field-outlined-material-label-top);--b-text-field-material-label-left: var(--b-text-field-outlined-material-label-left);--b-text-field-material-label-cursor: var(--b-text-field-outlined-material-label-cursor);--b-text-field-material-empty-label-background: var(--b-text-field-outlined-material-empty-label-background);--b-text-field-material-empty-label-top: var(--b-text-field-outlined-material-empty-label-top);--b-text-field-material-empty-label-left: var(--b-text-field-outlined-material-empty-label-left)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field).b-text-field-outlined:where(.b-has-start-trigger:not(.b-no-steppers)){--b-text-field-material-empty-label-left: var(--b-text-field-outlined-material-trigger-empty-label-left)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field).b-text-field-outlined:where(:not(.b-label-before,.b-label-align-before)){--b-text-field-label-padding: var(--b-text-field-outlined-label-padding)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field).b-text-field-outlined:where(:not(.b-label-before,.b-label-align-before)) label:before{content:"";position:absolute;inset:0;z-index:-1;background:var(--b-text-field-outlined-label-background)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field):hover:where(:not(.b-disabled)){--b-text-field-background: var(--b-text-field-hover-background);--b-text-field-border-color: var(--b-text-field-hover-border-color)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field):focus-within{--b-text-field-background: var(--b-text-field-focus-background);--b-text-field-border-width: var(--b-text-field-focus-border-width);--b-text-field-border-style: var(--b-text-field-focus-border-style);--b-text-field-border-color: var(--b-text-field-focus-border-color)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field):focus-within:not(.b-label-before,.b-label-align-before){--b-text-field-label-color: var(--b-text-field-focus-label-color)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field).b-widget.b-empty:not(:focus-within){--b-text-field-label-font-size: var(--b-text-field-empty-label-font-size);--b-text-field-label-padding: var(--b-text-field-empty-label-padding);--b-text-field-label-scale: var(--b-text-field-empty-label-scale);--b-text-field-outlined-label-above-padding: var(--b-text-field-outlined-material-empty-label-padding);--b-text-field-label-background: var(--b-text-field-material-empty-label-background);--b-text-field-material-label-top: var(--b-text-field-material-empty-label-top);--b-text-field-material-label-left: var(--b-text-field-material-empty-label-left);--b-text-field-outlined-label-background: var(--b-text-field-outlined-material-empty-label-background)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field).b-invalid:where(:not(.b-disabled)){--b-text-field-border-color: var(--b-text-field-invalid-border-color);--b-text-field-label-color: var(--b-text-field-invalid-label-color);--b-text-field-focus-label-color: var(--b-text-field-invalid-label-color)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field) .b-field-clear-clone{position:absolute;animation:b-shrink-width .3s}.b-theme-transition .b-text-field .b-field-inner:before{transition-duration:var(--b-default-transition-duration)}.b-field-hint{align-self:stretch;overflow:visible;pointer-events:none;position:relative;white-space:nowrap;width:0}.b-field-no-hint .b-field-hint{display:none}.b-field-hint-content{position:absolute;inset-inline-end:.6em;top:50%;translate:0 -50%;color:var(--b-text-field-input-color);font-size:var(--b-label-font-size);font-weight:var(--b-label-font-weight)}.b-container:where(:not(.b-toolbar))>.b-field,.b-panel:where(:not(.b-toolbar))>.b-panel-body-wrap>.b-panel-content>.b-field,.b-panel:where(:not(.b-toolbar))>.b-panel-overlay>.b-panel-body-wrap>.b-panel-content>.b-field,.b-grid-header>.b-field{--b-text-field-default-width: 100%}@keyframes b-shrink-width{0%{max-width:200px}to{max-width:0}}:root,:host{--b-combo-filled-chip-view-padding-top: 1.55em;--b-combo-filled-label-before-chip-view-padding-top: .5em;--b-combo-outlined-chip-view-padding-top: .6em;--b-combo-outlined-label-before-chip-view-padding-top: .5em;--b-combo-chip-font-size: .9em;--b-combo-chip-view-margin-block: 0;--b-combo-chip-view-padding: .6em 1em;--b-combo-chip-view-min-height: 3em}.b-combo [data-ref=expand]:before{transition:rotate .2s ease}.b-combo.b-open [data-ref=expand]:before{rotate:180deg}.b-combo.b-not-editable :not(.b-field-trigger){cursor:pointer}.b-combo.b-uses-chip-view .b-field-inner{justify-items:start}.b-combo.b-uses-chip-view:not(.b-empty) input::placeholder{visibility:hidden}.b-combo.b-text-field-filled{--b-combo-chip-view-padding-top: var(--b-combo-filled-chip-view-padding-top)}.b-combo.b-text-field-outlined{--b-combo-chip-view-padding-top: var(--b-combo-outlined-chip-view-padding-top)}:is(.b-combo.b-label-align-before,.b-combo.b-label-before).b-text-field-filled{--b-combo-chip-view-padding-top: var(--b-combo-filled-label-before-chip-view-padding-top)}:is(.b-combo.b-label-align-before,.b-combo.b-label-before).b-text-field-outlined{--b-combo-chip-view-padding-top: var(--b-combo-outlined-label-before-chip-view-padding-top)}:is(.b-combo.b-hide-trigger,.b-combo.b-read-only) .b-field-trigger.b-icon-picker{display:none}.b-combo-chip-view{color:inherit;flex:1;align-self:stretch;padding-top:var(--b-combo-chip-view-padding-top);min-height:var(--b-combo-chip-view-min-height);margin-block:var(--b-combo-chip-view-margin-block);--b-chip-view-chip-font-size: var(--b-combo-chip-font-size);--b-chip-view-padding: var(--b-combo-chip-view-padding)}.b-combo-chip-view.b-chip-view input{flex:1;height:auto;order:99999;padding:0;align-self:center}.b-combo-picker.b-empty:not(.b-masked)[data-add-new-value]:after{content:attr(data-add-new-value);display:block;cursor:pointer;padding:var(--b-list-item-padding);color:var(--b-list-item-color)}.b-float-root>.b-combo-picker{padding:var(--b-menu-padding)}:is(.b-color-field,.b-color-box-combo) .b-color-box{grid-area:before;width:1.5em;flex-shrink:0;transition:color var(--b-default-transition-duration);border-radius:var(--b-color-picker-color-border-radius);margin-inline:var(--b-widget-padding) 0}:is(.b-color-field,.b-color-box-combo) .b-color-box.b-no-color{background:none;border:1px solid var(--b-color-picker-color-no-color-color)}.b-color-box{width:1em;aspect-ratio:1 / 1;background:currentColor;margin-inline-end:.5em;color:var(--b-primary)}.b-date-field.b-no-steppers .b-step-trigger{display:none}:root,:host{--b-date-range-field-gap: .5em}.b-date-range-field:not(.b-has-width){width:auto}.b-date-range-field .b-field-container-wrap{grid-area:inner}.b-date-range-field .b-field-container{--b-container-gap: var(--b-date-range-field-gap)}.b-date-range-field .b-field{grid-template-areas:"inner";grid-template-columns:1fr}.b-date-range-field .b-start-date{width:13em}.b-date-range-field .b-end-date{width:11em;--b-field-trigger-gap: 0}.b-date-range-field .b-end-time,.b-date-range-field .b-start-time{flex:7 7 auto}.b-date-range-picker .b-start-date,.b-date-range-picker .b-end-date{width:13em}.b-date-range-picker.b-date-range-field-picker .b-end-date{width:11em}.b-display-field span{display:flex;min-width:10em;align-items:center}:root,:host{--b-text-area-field-padding: var(--b-widget-padding)}.b-text-area-field{height:auto}.b-text-area-field .b-field-inner{height:100%;--b-text-field-input-padding: var(--b-text-area-field-padding)}.b-text-area-field textarea{font-family:inherit;height:100%;min-height:var(--b-text-field-input-height)}:root,:host{--b-text-area-picker-field-picker-color: var(--b-neutral-20)}.b-text-area-picker-field-picker{display:flex;min-height:10em;border:none;outline:none;padding:1em;background:var(--b-text-area-picker-field-picker-background, var(--b-primary-98));color:var(--b-text-area-picker-field-picker-color)}.b-text-area-picker-field-picker:focus{border-color:var(--b-primary)}.b-time-field bry-time{align-items:center;--b-time-field-button-background: color-mix(in srgb, currentColor, #fff 85%);--b-time-field-input-background: transparent}.b-time-field.b-empty .b-field-trigger{animation-delay:-300s}.b-time-field.b-empty:not(.b-contains-focus) bry-time{opacity:0}.b-time-field.b-no-steppers .b-step-trigger{display:none}.b-time-field .b-step-trigger:before{transition:color .3s}.b-time-field.b-rtl .b-step-trigger:before{transform:scaleX(-1)}:root,:host{--b-field-set-border-radius: var(--b-widget-border-radius);--b-field-set-border-width: 1px;--b-field-set-padding: var(--b-panel-padding);--b-field-set-border-color: var(--b-border-3);--b-field-set-background: var(--b-neutral-100);--b-field-set-label-font-size: .8em}.b-field-set{position:relative;overflow:visible;align-items:stretch;gap:0;color:var(--b-primary);--b-panel-with-header-padding: var(--b-field-set-padding)}.b-field-set fieldset{background:var(--b-field-set-background);border:var(--b-field-set-border-width) solid var(--b-field-set-border-color);border-radius:var(--b-field-set-border-radius);padding:var(--b-field-set-padding);margin:0}.b-field-set.b-columns fieldset{grid-template-columns:repeat(var(--bi-container-columns),auto)}.b-field-set:not(.b-label-align-before)>.b-label{position:absolute;inset-block-start:0;inset-inline-start:0;translate:calc(1em * var(--b-rtl-negate)) -50%;padding-inline:.5em;z-index:1;line-height:1em;font-size:var(--b-field-set-label-font-size)}.b-field-set:not(.b-label-align-before)>.b-label:before{content:"";position:absolute;inset:0;z-index:-1;clip-path:inset(calc(.5em - var(--b-field-set-border-width)) 0 0 0);background:var(--b-field-set-background)}.b-field-set.b-label-align-before:not(:has(.b-inline))>.b-label{align-self:start}legend.b-field-set-legend{position:absolute;top:-10000px;clip:rect(0,0,0,0)}.b-toolbar-content>.b-field-set{--b-field-set-background: var(--b-toolbar-background, var(--b-neutral-100))}:root,:host{--b-radio-group-gap: var(--b-widget-gap)}.b-radio-group{width:fit-content;gap:var(--bi-field-gap);--b-field-set-border-width: 0;--b-field-set-border-radius: 0;--b-field-set-padding: 0;--b-field-label-above-gap: 0;--b-field-set-background: transparent;--b-panel-background: transparent}.b-radio-group>.b-panel-header{padding-inline:var(--b-field-set-padding)}.b-radio-group:not(:has(.b-inline)){--b-panel-gap: var(--b-radio-group-gap)}.b-radio-group:not(:has(.b-inline)) .b-radio-group-content{width:fit-content}.b-radio-group:has(.b-inline){overflow:visible}.b-radio-group:has(.b-inline)>.b-label:not(.b-align-start){scale:var(--b-text-field-label-scale)}.b-radio-group:has(.b-inline)>div{grid-area:inner}.b-radio-group:has(.b-inline) .b-panel-body-wrap{overflow:visible}.b-radio-group .b-radio-group-body-wrap,.b-radio-group fieldset.b-radio-group-content{overflow:visible}.b-radio-group.b-label-before{flex-direction:row;gap:var(--b-field-label-before-gap)}.b-radio-group.b-label-above>.b-label{align-self:flex-start;margin-bottom:.75em}.b-radio-group.b-has-label>.b-label{position:static;translate:none;padding-inline:0;font-size:var(--b-label-font-size)}.b-radio-group.b-has-label>.b-label:before{content:none}:root,:host{--b-popup-border-radius: var(--b-widget-border-radius);--b-popup-text-popup-width: 25em;--b-popup-close-icon-content: "\f00d";--b-popup-maximize-icon-content: "\f065";--b-popup-padding: var(--b-widget-padding-large);--b-popup-background: var(--b-panel-background);--b-modal-mask-background: var(--b-mask-background);--b-popup-border: null}.b-popup.b-panel{--b-panel-background: var(--b-popup-background);--b-panel-padding: var(--b-popup-padding);border:var(--b-popup-border)}.b-popup.b-panel .b-panel{--b-panel-background: var(--b-popup-background)}.b-popup{border-radius:var(--b-popup-border-radius)}.b-popup .b-panel-body-wrap{border-radius:inherit}.b-popup .b-panel-body-wrap>.b-bottom-toolbar{background:transparent}.b-popup.b-header-dock-top .b-panel-body-wrap{border-start-start-radius:0;border-start-end-radius:0}.b-popup:where(.b-anchored){overflow:visible}.b-text-popup{max-width:var(--b-popup-text-popup-width);--b-panel-gap: 0}.b-text-popup .b-popup-content{display:flex;flex-direction:column}.b-popup-close:before{content:var(--b-popup-close-icon-content)}.b-popup-expand:before{content:var(--b-popup-maximize-icon-content)}.b-tooltip-loading .b-icon{display:inline-block;margin-inline-end:.5em}@media (max-width : 480px){.b-popup{max-width:100%!important}}.b-modal-mask{position:fixed;inset:0;pointer-events:all;z-index:1;background:var(--b-modal-mask-background);color:var(--b-modal-mask-color, var(--b-primary))}.b-modal-mask.b-modal-transparent{--b-modal-mask-background: transparent}.b-internal{--bi-hint-highlight-top: null;--bi-hint-highlight-left: null;--bi-hint-highlight-width: null;--bi-hint-highlight-height: null}.b-hint code{padding:2px 4px;line-height:1;background:var(--b-neutral-80)}.b-hint .b-description{line-height:1.7em}.b-hint .b-mask{--b-mask-background: color-mix(in srgb, var(--b-neutral-70), transparent 90%);--b-mask-text-background: transparent;--b-elevation-1: none;--b-mask-text-color: transparent}.b-hint.b-floating{width:max-content;max-width:37em;transition:top .5s,inset-inline-start .5s}.b-hint.b-floating [data-ref=steps]{margin-inline-end:auto}.b-hint.b-floating.b-no-title .b-hint-header{max-height:0;padding:0}.b-hint.b-floating.b-no-title .b-popup-close{position:absolute;inset-block-start:var(--b-widget-padding-large);inset-inline-end:var(--b-widget-padding-large)}.b-hint.b-floating.b-no-title .b-hint-content{padding-inline-end:calc(var(--b-widget-padding-large) * 2);padding-block:var(--b-widget-padding-large) 0}.b-hint.b-floating,.b-hint.b-floating .b-hint-body-wrap{border-radius:.5em}.b-hint.b-floating .b-button{height:2.75em}.b-hint.b-floating .b-tooltip-header .b-tool{position:absolute;top:.5em;right:.5em}.b-float-root .b-hint-highlighter{--bi-hint-highlight-color: var(--b-color-orange);background-color:transparent;pointer-events:none!important;transition:left .5s,top .5s,width .5s,height .5s,background-color .7s;border-radius:3px;outline:2px solid var(--bi-hint-highlight-color);left:var(--bi-hint-highlight-left);top:var(--bi-hint-highlight-top);width:var(--bi-hint-highlight-width);height:var(--bi-hint-highlight-height)}.b-float-root .b-hint-highlighter.b-hint-highlighter-ping{z-index:99999;animation:b-anim-hint-highlighter-ping 1.2s 3 linear}.b-float-root .b-hint-highlighter.b-hint-highlighter-center{background-color:var(--bi-hint-highlight-color);border-radius:50%;outline-offset:-2px;z-index:-1}.b-float-root .b-hint-highlighter.b-realigning{transition:none!important}@keyframes b-anim-hint-highlighter-ping{0%{outline-color:var(--bi-hint-highlight-color);outline-offset:-2px;outline-width:2px}70%{outline-offset:20px;outline-color:color-mix(in srgb,var(--bi-hint-highlight-color) 40%,transparent 60%);outline-width:10px}95%{outline-offset:20px;outline-color:transparent;outline-width:10px}96%{outline-offset:-2px;outline-color:transparent;outline-width:2px}to{outline-offset:-2px;outline-color:var(--bi-hint-highlight-color);outline-width:2px}}.b-modal-mask[owned-by*=b-hint]{--bi-hint-highlight-radius: var(--b-widget-border-radius, 0px);clip-path:polygon(0% 0%,100% 0%,100% 100%,0% 100%,0% 0%,var(--bi-hint-highlight-left) var(--bi-hint-highlight-top),var(--bi-hint-highlight-left) calc(var(--bi-hint-highlight-top) + var(--bi-hint-highlight-height)),calc(var(--bi-hint-highlight-left) + var(--bi-hint-highlight-width)) calc(var(--bi-hint-highlight-top) + var(--bi-hint-highlight-height)),calc(var(--bi-hint-highlight-left) + var(--bi-hint-highlight-width)) var(--bi-hint-highlight-top),var(--bi-hint-highlight-left) var(--bi-hint-highlight-top));transition:all .5s}@supports (clip-path: shape(from 0 0,close)){.b-modal-mask[owned-by*=b-hint]{clip-path:shape(evenodd from 0% 0%,line to 100% 0%,line to 100% 100%,line to 0% 100%,line to 0% 0%,line to calc(var(--bi-hint-highlight-left) + var(--bi-hint-highlight-radius)) var(--bi-hint-highlight-top),arc to var(--bi-hint-highlight-left) calc(var(--bi-hint-highlight-top) + var(--bi-hint-highlight-radius)) of var(--bi-hint-highlight-radius),line to var(--bi-hint-highlight-left) calc(var(--bi-hint-highlight-top) + var(--bi-hint-highlight-height) - var(--bi-hint-highlight-radius)),arc to calc(var(--bi-hint-highlight-left) + var(--bi-hint-highlight-radius)) calc(var(--bi-hint-highlight-top) + var(--bi-hint-highlight-height)) of var(--bi-hint-highlight-radius),line to calc(var(--bi-hint-highlight-left) + var(--bi-hint-highlight-width) - var(--bi-hint-highlight-radius)) calc(var(--bi-hint-highlight-top) + var(--bi-hint-highlight-height)),arc to calc(var(--bi-hint-highlight-left) + var(--bi-hint-highlight-width)) calc(var(--bi-hint-highlight-top) + var(--bi-hint-highlight-height) - var(--bi-hint-highlight-radius)) of var(--bi-hint-highlight-radius),line to calc(var(--bi-hint-highlight-left) + var(--bi-hint-highlight-width)) calc(var(--bi-hint-highlight-top) + var(--bi-hint-highlight-radius)),arc to calc(var(--bi-hint-highlight-left) + var(--bi-hint-highlight-width) - var(--bi-hint-highlight-radius)) var(--bi-hint-highlight-top) of var(--bi-hint-highlight-radius),line to calc(var(--bi-hint-highlight-left) + var(--bi-hint-highlight-radius)) var(--bi-hint-highlight-top),line to 0% 0%)}}:root,:host{--b-menu-border-radius: var(--b-widget-border-radius);--b-menu-background: var(--b-panel-background);--b-menu-padding: 0}.b-menu.b-popup{min-height:2em;user-select:none;-webkit-user-select:none;background:var(--b-menu-background);--b-panel-padding: var(--b-menu-padding);--b-popup-border-radius: var(--b-menu-border-radius)}.b-menu.b-popup .b-menu-body-wrap{border-radius:0}.b-menu-content{gap:0}.b-menu-content>:not(.b-menu-item){margin:1em}.b-menu-custom-content{display:flex}.b-menu-with-submenu .b-menu-item:not(.b-has-submenu){--bi-menu-item-margin-inline-end: 2em}:root,:host{--b-message-dialog-min-width: 20em;--b-message-dialog-button-min-width: 6.5em;--bi-messagedialog-display: none}.b-message-dialog{user-select:none;-webkit-user-select:none;min-width:var(--b-message-dialog-min-width)}.b-message-dialog .b-button{min-width:var(--b-message-dialog-button-min-width)}.b-message-dialog .b-message-dialog-input,.b-message-dialog .b-message-dialog-ok-button,.b-message-dialog .b-message-dialog-cancel-button{display:var(--bi-messagedialog-display)}:is(.b-message-dialog.b-message-dialog-prompt,.b-message-dialog.b-message-dialog-confirm) .b-message-dialog-ok-button,:is(.b-message-dialog.b-message-dialog-prompt,.b-message-dialog.b-message-dialog-confirm) .b-message-dialog-cancel-button{--bi-messagedialog-display: flex}.b-message-dialog.b-message-dialog-prompt .b-message-dialog-input,.b-message-dialog.b-message-dialog-alert .b-message-dialog-ok-button{--bi-messagedialog-display: flex}.b-message-dialog .b-message-dialog-message{display:block}:root,:host{--b-tooltip-plain-padding: .5em;--b-tooltip-rich-padding: var(--b-widget-padding);--b-tooltip-rich-border-radius: var(--b-widget-border-radius-large);--b-tooltip-plain-font-size: .9em;--b-tooltip-text-gap: 1em;--b-tooltip-flex-direction: column;--b-tooltip-align-items: flex-start;--b-tooltip-content-display: flex;--b-tooltip-plain-color: var(--b-widget-color);--b-tooltip-rich-color: var(--b-widget-color);--b-tooltip-rich-background: var(--b-neutral-100);--b-tooltip-z-index: 2}.b-tooltip.b-popup{color:var(--b-primary);z-index:var(--b-tooltip-z-index)}.b-tooltip.b-popup:not(.b-allow-over){user-select:none;-webkit-user-select:none}.b-tooltip.b-popup.b-plain-tooltip{--b-popup-background: var(--b-tooltip-plain-background, var(--b-neutral-100));--b-panel-padding: var(--b-tooltip-plain-padding);--b-tooltip-color: var(--b-tooltip-plain-color);--b-widget-font-size: var(--b-tooltip-plain-font-size);--b-popup-border-radius: var(--b-widget-border-radius)}.b-tooltip.b-popup.b-plain-tooltip .b-tooltip-content{display:block;text-align:center}.b-rich-tooltip{--b-popup-background: var(--b-tooltip-rich-background);--b-tooltip-color: var(--b-tooltip-rich-color);--b-panel-padding: var(--b-tooltip-rich-padding);--b-popup-border-radius: var(--b-tooltip-rich-border-radius)}.b-rich-tooltip .b-tooltip-content{flex-wrap:wrap;display:var(--b-tooltip-content-display);flex-direction:var(--b-tooltip-flex-direction);align-items:var(--b-tooltip-align-items)}.b-tooltip-content{color:var(--b-tooltip-color)}.b-tooltip-content:where(.b-text-content){--b-panel-gap: var(--b-tooltip-text-gap)}.b-tooltip-content:where(.b-text-content)>*{margin-block:0}:root,:host{--b-year-picker-gap: .5em;--b-year-picker-padding: var(--b-year-picker-gap);--b-year-picker-title-font-weight: 600;--b-year-picker-year-font-weight: var(--b-widget-font-weight);--b-year-picker-year-color: var(--b-neutral-30)}.b-month-picker-body-wrap,.b-year-picker-body-wrap{height:100%}.b-month-picker-content,.b-year-picker-content{grid-template-columns:repeat(4,1fr);grid-auto-rows:auto;place-items:center;height:100%;gap:var(--b-year-picker-gap);padding:var(--b-year-picker-padding)}:is(.b-month-picker-content,.b-year-picker-content) .b-button{width:100%;padding:.5em 0;--b-button-font-weight: var(--b-year-picker-year-font-weight);--b-button-color: var(--b-year-picker-year-color);--b-button-hover-background: var(--b-year-picker-hover-background, var(--b-date-picker-date-hover-background, var(--b-primary-95)))}:is(.b-month-picker-content,.b-year-picker-content) .b-button.b-selected{--b-button-background: var(--b-year-picker-selected-background, var(--b-date-picker-selected-background, var(--b-primary-90)));--b-button-color: var(--b-year-picker-selected-color);--b-button-font-weight: var(--b-year-picker-title-font-weight)}.b-month-picker-title,.b-year-picker-title{flex:1;background:transparent;font-weight:var(--b-year-picker-title-font-weight)}:is(.b-month-picker-title,.b-year-picker-title) .b-button-label{font-size:1.1em}.b-time-picker{max-height:39em}.b-time-picker .b-list{background-color:transparent;align-items:center;scroll-snap-type:block}.b-time-picker-item{aspect-ratio:1;flex-shrink:0;width:3em;scroll-snap-align:start;display:grid;place-content:center;cursor:pointer;border-radius:var(--b-widget-border-radius)}.b-time-picker-item:hover,.b-time-picker-item[aria-selected=true]{outline:var(--b-widget-focus-outline-width) solid var(--b-widget-focus-outline-color);outline-offset:calc(var(--b-widget-focus-outline-width) * -1)}.b-time-picker-content{justify-content:center}:root,:host{--b-toolbar-gap: var(--b-widget-gap);--b-toolbar-padding: var(--b-widget-padding);--b-toolbar-separator-height: 2em;--b-toolbar-justify-content: flex-start;--b-toolbar-background: var(--b-panel-background);--b-toolbar-separator-color: var(--b-neutral-50)}.b-toolbar{display:flex;flex-direction:row;gap:0;overflow:hidden;flex-shrink:0;transition:background-color .2s;background:var(--b-toolbar-background)}.b-toolbar.b-dock-left,.b-toolbar.b-dock-right{flex-direction:column;--bi-toolbar-min-width: var(--b-toolbar-min-size, unset)}.b-toolbar.b-dock-top,.b-toolbar.b-dock-bottom{align-items:center;flex-wrap:nowrap;--bi-toolbar-min-height: var(--b-toolbar-min-size, unset)}:is(.b-toolbar.b-dock-top,.b-toolbar.b-dock-bottom) .b-box-center.b-toolbar-content>.b-button{height:100%;min-height:var(--b-button-height)}.b-toolbar .b-overflow-button{margin:var(--b-toolbar-padding);place-content:center}.b-toolbar .b-overflow-button.b-rotate-vertical{rotate:90deg;align-self:center}.b-toolbar .b-overflow-button:active{background:var(--b-neutral-90)}.b-toolbar .b-box-center.b-toolbar-content,.b-toolbar .b-html{align-items:center}.b-box-center.b-toolbar-content{flex:1;overflow:hidden;gap:var(--b-toolbar-gap);padding:var(--b-toolbar-padding);min-height:var(--bi-toolbar-min-height);min-width:var(--bi-toolbar-min-width);justify-content:var(--b-toolbar-justify-content)}.b-toolbar-separator{border-inline-end:1px solid var(--b-toolbar-separator-color);min-height:var(--b-toolbar-separator-height)}.b-toolbar-fill{flex:1}.b-toolbar-overflow-menu>.b-panel-body-wrap>.b-menu-content .b-widget{flex:0 0 auto!important;width:auto}.b-confirmation-bar{--b-toolbar-justify-content: flex-end}.b-paging-toolbar [data-ref=pageNumber]{width:auto}.b-paging-toolbar [data-ref=pageNumber] .b-field-inner{width:3.5em}.b-paging-toolbar [data-ref=pageNumber] input{text-align:center}:root,:host{--b-tab-bar-border-bottom-width: 1px;--b-tab-bar-border-bottom-color: var(--b-border-6);--b-tab-bar-background: transparent;--b-tab-bar-padding: 0}.b-tab-bar{--b-panel-bottom-toolbar-padding: var(--b-tab-bar-padding);--b-toolbar-gap: 0;--b-toolbar-padding: var(--b-tab-bar-padding);--b-toolbar-background: var(--b-tab-bar-background);transition:border var(--b-default-transition-duration),background var(--b-default-transition-duration);border-bottom:var(--b-tab-bar-border-bottom-width) solid var(--b-tab-bar-border-bottom-color)}.b-tab-bar .b-overflow-button{padding-inline:1em;margin-inline:.5em}.demo-header{display:flex;padding-inline:.7em 0;padding-block:0;flex:0 0 auto;background:var(--b-demo-header-background);border-bottom:1px solid var(--b-border-6);transition:background-color var(--b-default-transition-duration),padding var(--b-default-transition-duration),font-size .1s,border-color var(--b-default-transition-duration)}.demo-header a{text-decoration:none}.demo-header .b-icon{font-size:1.1em}.demo-header .title{margin-inline-end:auto;display:flex;align-items:center;white-space:nowrap;color:var(--b-text-1)}.demo-header .title:focus-visible{outline-offset:var(--b-button-focus-outline-offset);outline:var(--b-button-focus-outline-width) solid var(--b-widget-focus-outline-color);border-radius:var(--b-widget-border-radius)}.demo-header .title h1{display:flex;align-items:center;margin:0;font-weight:600;font-size:1.1em}.demo-header .title svg{margin-inline-end:.75em;height:2em;width:2em;background:#0076f8;padding-inline-end:.2em;border-radius:5px}.demo-header .title svg g{fill:#fff}.demo-header .b-toolbar{font-size:.9em;--b-toolbar-padding: .7em;--b-toolbar-background: transparent}:root,:host{--b-file-field-button-background: var(--b-primary);--b-file-field-button-color: var(--b-neutral-100)}.b-file-field input[type=file]{font-family:inherit;color:var(--b-label-color)}.b-file-field input[type=file]::file-selector-button{padding:.5em 1em;border-radius:.25em;cursor:pointer;font-weight:500;margin-inline-end:1em;border:none;font-family:inherit;background:var(--b-file-field-button-background);color:var(--b-file-field-button-color)}.b-file-field input[type=file]::file-selector-button:hover{background:color-mix(in srgb,var(--b-file-field-button-background),#fff 10%)}.b-file-picker{overflow:visible}:root,:host{--b-histogram-bar-border-width: null;--b-histogram-bar0-border-width: null;--b-histogram-bar1-border-width: null;--b-histogram-bar2-border-width: null;--b-histogram-bar3-border-width: null;--b-histogram-bar4-border-width: null;--b-histogram-bar5-border-width: null;--b-histogram-transition-duration: .3s;--b-histogram-bar-legend-font-size: .8em;--b-histogram-bar-color: var(--b-color-green);--b-histogram-bar-border-color: null;--b-histogram-bar0-color: var(--b-color-green);--b-histogram-bar0-border-color: null;--b-histogram-bar1-color: var(--b-color-blue);--b-histogram-bar1-border-color: null;--b-histogram-bar2-color: var(--b-color-indigo);--b-histogram-bar2-border-color: null;--b-histogram-bar3-color: var(--b-color-teal);--b-histogram-bar3-border-color: null;--b-histogram-bar4-color: var(--b-color-orange);--b-histogram-bar4-border-color: null;--b-histogram-bar5-color: var(--b-color-lime);--b-histogram-bar5-border-color: null;--b-histogram-exceeds-top-bar-color: var(--b-color-red);--b-histogram-outline-color: #f99}.b-histogram{background-color:#fff;padding:1px;contain:strict}.b-histogram svg *{vector-effect:non-scaling-stroke}.b-histogram rect{fill:var(--b-histogram-bar-color);stroke-width:var(--b-histogram-bar-border-width);stroke:var(--b-histogram-bar-border-color);transition-property:x,y,width,height,fill;transition-duration:var(--b-histogram-transition-duration)}.b-histogram rect.b-series-index-0{fill:var(--b-histogram-bar0-color);stroke-width:var(--b-histogram-bar0-border-width);stroke:var(--b-histogram-bar0-border-color)}.b-histogram rect.b-series-index-1{fill:var(--b-histogram-bar1-color);stroke-width:var(--b-histogram-bar1-border-width);stroke:var(--b-histogram-bar1-border-color)}.b-histogram rect.b-series-index-2{fill:var(--b-histogram-bar2-color);stroke-width:var(--b-histogram-bar2-border-width);stroke:var(--b-histogram-bar2-border-color)}.b-histogram rect.b-series-index-3{fill:var(--b-histogram-bar3-color);stroke-width:var(--b-histogram-bar3-border-width);stroke:var(--b-histogram-bar3-border-color)}.b-histogram rect.b-series-index-4{fill:var(--b-histogram-bar4-color);stroke-width:var(--b-histogram-bar4-border-width);stroke:var(--b-histogram-bar4-border-color)}.b-histogram rect.b-series-index-5{fill:var(--b-histogram-bar5-color);stroke-width:var(--b-histogram-bar5-border-width);stroke:var(--b-histogram-bar5-border-color)}.b-histogram rect.b-exceeds-top{fill:var(--b-histogram-exceeds-top-bar-color)}.b-histogram text.b-bar-legend{writing-mode:tb;text-anchor:end;font-size:var(--b-histogram-bar-legend-font-size);pointer-events:none}.b-histogram svg{overflow:visible}.b-histogram path{fill:transparent;stroke:var(--b-histogram-outline-color);transition:d var(--b-histogram-transition-duration);pointer-events:none}:root,:host{--b-scale-line-color: var(--b-neutral-60);--b-scale-label-color: var(--b-neutral-30)}.b-scale{contain:strict}.b-scale svg *{vector-effect:non-scaling-stroke}.b-scale.b-scale-vertical text.b-scale-tick-label{translate:0 .3em}.b-scale.b-scale-vertical.b-align-right{text-anchor:end}.b-scale.b-scale-horizontal text.b-scale-tick-label{text-anchor:middle}.b-scale path{stroke:var(--b-scale-line-color);pointer-events:none}.b-scale text{fill:var(--b-scale-label-color)}:root,:host{--b-label-font-size: var(--b-widget-font-size);--b-label-font-weight: 400;--b-label-disabled-color: var(--b-neutral-50)}.b-label{white-space:nowrap;align-items:center;transition:color var(--b-default-transition-duration);user-select:none;-webkit-user-select:none;color:var(--b-label-color);font-size:var(--b-label-font-size);font-weight:var(--b-label-font-weight)}.b-disabled>.b-label{--b-label-color: var(--b-label-disabled-color)}.b-hbox,.b-vbox{display:flex;align-items:stretch;justify-content:flex-start;position:relative}:is(.b-hbox,.b-vbox)>.b-box-center{flex:1 1 auto;overflow:hidden}.b-hbox{flex-flow:row nowrap}.b-vbox{flex-flow:column nowrap}.b-box-justify-stretch{justify-content:stretch}:root,:host{--bi-card-margin: 1em}.b-card-container{display:flex;flex-flow:row nowrap;align-items:stretch;overflow:hidden;padding:0;position:relative}.b-card-container.b-animating{overflow:hidden}.b-card-container>.b-card-item{flex:1 0 100%;align-items:stretch;max-width:100%;min-width:100%}.b-card-container.b-hide-child-headers>.b-panel:not(.b-positioned)>.b-panel-header{display:none}.b-slide-in-left{animation:b-anim-card-slide-in-left calc(.3s * var(--bi-duration-debug-factor, 1)) ease 0s 1}.b-slide-out-right{pointer-events:none;left:var(--bi-card-margin);animation:b-anim-card-slide-out-right calc(.3s * var(--bi-duration-debug-factor, 1)) ease 0s 1}.b-slide-in-right{animation:b-anim-card-slide-in-right calc(.3s * var(--bi-duration-debug-factor, 1)) ease 0s 1}.b-slide-out-left{pointer-events:none;margin-inline-start:calc(var(--bi-card-margin) * -1);margin-inline-end:var(--bi-card-margin);animation:b-anim-card-slide-out-left calc(.3s * var(--bi-duration-debug-factor, 1)) ease 0s 1}@keyframes b-anim-card-slide-in-left{0%{translate:-100% 0}to{translate:0}}@keyframes b-anim-card-slide-out-right{0%{translate:-100% 0}to{translate:0}}@keyframes b-anim-card-slide-in-right{0%{translate:0}to{translate:-100% 0}}@keyframes b-anim-card-slide-out-left{0%{translate:0}to{translate:-100% 0}}.b-fit-container{display:flex;flex-flow:row nowrap;align-items:stretch;overflow:hidden;position:relative}.b-fit-container>.b-fit-item{flex:1 0 auto;margin:0;max-width:100%;align-self:stretch!important}:root,:host{--b-list-multi-select-gap: 0;--b-list-item-gap: .75em;--b-list-item-padding: .75em;--b-list-multi-select-item-padding: var(--b-list-item-padding);--b-list-item-border-radius: 0;--b-list-item-group-padding: .75em .75em .75em 2em;--b-list-selected-icon-size: 1.25em;--b-list-selected-icon-content: var(--b-checkbox-checked-check-content);--b-list-checkbox-checked-check-color: var(--b-text-5);--b-list-item-group-header-font-weight: calc(var(--b-widget-font-weight) + 200);--b-list-background: transparent;--b-list-title-background: var(--b-neutral-100);--b-list-item-color: var(--b-widget-color);--b-list-title-font-weight: 500}.b-list{display:flex;flex-direction:column;padding:0;margin:0;background:var(--b-list-background);border-radius:var(--b-list-border-radius)}.b-list.b-floating{--b-list-border-radius: var(--b-widget-border-radius);--b-list-background: var(--b-list-floating-background, var(--b-primary-100))}.b-list .b-empty-text{pointer-events:none}.b-list .b-select-all-item{position:sticky;top:0;z-index:1;background:var(--b-list-title-background);font-weight:var(--b-list-title-font-weight)}:has(.b-list-title)>:is(.b-list .b-select-all-item){top:2em}.b-list.b-multi-select{gap:var(--b-list-multi-select-gap)}.b-list-item{display:flex;cursor:pointer;overflow:clip;user-select:none;-webkit-user-select:none;flex-shrink:0;background:var(--b-list-item-background);color:var(--b-list-item-color);font-weight:var(--b-list-item-font-weight);padding:var(--b-list-item-padding);border-radius:var(--b-list-item-border-radius)}.b-list-item .b-selected-icon{display:flex;align-items:center;justify-content:center;transition:all .2s;width:var(--b-list-selected-icon-size);height:var(--b-list-selected-icon-size);border-radius:var(--b-checkbox-border-radius);border:var(--b-checkbox-border-width) solid var(--b-checkbox-border-color);background:var(--b-checkbox-background)}.b-list-item .b-selected-icon:before{transition:scale .2s ease;scale:0;content:var(--b-checkbox-checked-check-content);color:var(--b-list-checkbox-checked-check-color);font-size:var(--b-checkbox-check-font-size)}.b-multi-select>.b-list-item{--b-list-item-padding: var(--b-list-multi-select-item-padding)}.b-multi-select>.b-list-item.b-selected .b-selected-icon:before{scale:1}.b-multi-select>.b-list-item.b-selected .b-list-item-content{--b-checkbox-background: var(--b-list-checkbox-checked-background);--b-checkbox-border-color: var(--b-list-checkbox-checked-border-color, var(--b-list-checkbox-checked-background))}.b-list-item:focus{outline:none}.b-list-item.b-list-item-group-header{--b-list-item-font-weight: var(--b-list-item-group-header-font-weight)}.b-list-item.b-out-of-view:before{content:"..."}.b-grouped>.b-list-item:not(.b-list-item-group-header,.b-list-item-tree-parent){--b-list-item-padding: var(--b-list-item-group-padding)}.b-list-item.b-selected{--b-list-item-background: var(--b-list-item-selected-background, var(--b-primary-95))}.b-list-item.b-active,.b-list-item:focus-visible{--b-list-item-background: var(--b-list-item-focus-background, var(--b-primary-85))}.b-list-title{position:sticky;top:0;z-index:1;font-weight:var(--b-list-title-font-weight);background:var(--b-list-title-background)}.b-list-expander-icon{pointer-events:all;width:1.1em;height:1em}.b-list-item:is(.b-list-item-group-header,.b-list-item-tree-parent) .b-list-expander-icon{margin-inline-start:auto;margin-inline-end:0}.b-list-item-content{display:flex;align-items:center;flex:1;gap:var(--b-list-item-gap)}:root,:host{--b-chip-view-gap: .25em;--b-chip-view-padding: 0;--b-chip-view-chip-border-radius: 1.5em;--b-chip-view-chip-border-width: 1px;--b-chip-view-chip-font-size: 1em;--b-chip-view-chip-gap: .5em;--b-chip-view-chip-padding-block: .25em;--b-chip-view-chip-padding-inline: .75em;--b-chip-view-chip-border-color: transparent;--b-chip-view-chip-color: var(--b-text-1);--b-chip-view-chip-selected-color: var(--b-text-1)}.b-chip-view{display:flex;flex-flow:row wrap;background:transparent;align-items:center;--b-list-multi-select-gap: var(--b-chip-view-gap);padding:var(--b-chip-view-padding)}.b-chip-view.b-transitioning-height{transition:height .2s ease-in-out}.b-chip-view.b-adding-item.b-prevent-scroll{overflow:clip!important}.b-chip{display:flex;cursor:pointer;outline:none;overflow:clip;opacity:1;transition:opacity .2s linear,translate .2s ease-in,max-width .2s,background .2s;translate:0 0;max-width:15em;align-items:center;line-height:1.2em;border:var(--b-chip-view-chip-border-width) solid var(--b-chip-view-chip-border-color);background:var(--b-chip-view-chip-background, var(--b-primary-90));font-size:var(--b-chip-view-chip-font-size);border-radius:var(--b-chip-view-chip-border-radius);padding-block:var(--b-chip-view-chip-padding-block);padding-inline:var(--b-chip-view-chip-padding-inline)}.b-chip:hover{--b-chip-view-chip-background: var(--b-chip-view-chip-hover-background, var(--b-primary-85))}.b-chip.b-selected{--b-chip-view-chip-background: var(--b-chip-view-chip-selected-background, var(--b-primary-75));--b-chip-view-chip-color: var(--b-chip-view-chip-selected-color)}.b-chip.b-active{--b-chip-view-chip-background: var(--b-chip-view-chip-active-background, var(--b-primary-85));--b-chip-view-chip-color: var(--b-chip-view-chip-selected-color)}.b-chip.b-selected.b-active{--b-chip-view-chip-background: var(--b-chip-view-chip-active-selected-background, var(--b-primary-75))}.b-chip:focus-visible{--b-chip-view-chip-border-color: var(--b-chip-view-chip-focus-border-color, var(--b-primary-35))}.b-chip.b-removing.b-anim-collapse{transition:opacity .2s linear,max-width .2s ease-out;opacity:0;max-width:0}.b-chip.b-adding.b-anim-slide-up{opacity:0;translate:0 1em}.b-chip.b-adding.b-anim-expand{max-width:0;opacity:0}.b-chip-content{display:flex;overflow:clip;white-space:nowrap;align-items:center;gap:var(--b-chip-view-chip-gap);color:var(--b-chip-view-chip-color)}:root,:host{--b-color-picker-color-border-radius: var(--b-widget-border-radius);--b-color-picker-color-outline-width: 2px;--b-color-picker-color-outline: var(--b-color-picker-color-outline-width) solid currentColor;--b-color-picker-color-hover-outline: var(--b-color-picker-color-outline-width) solid currentColor;--b-color-picker-color-active-outline: var(--b-color-picker-color-outline-width) solid color-mix(in oklab, currentColor, transparent 50%);--b-color-picker-color-outline-offset: 2px;--b-color-picker-color-size: 2em;--b-color-picker-gap: .8em;--b-color-picker-padding: var(--b-widget-padding);--b-color-picker-color-no-color-color: #ccc;--b-color-picker-columns: 5}.b-color-picker{display:grid;overflow:visible;--b-menu-padding: var(--b-color-picker-padding);grid-gap:var(--b-color-picker-gap);grid-template-columns:repeat(var(--b-color-picker-columns),1fr);--b-list-background: transparent}.b-color-picker.b-combo-picker,.b-color-picker.b-color-column-picker{grid-template-columns:repeat(auto-fill,minmax(var(--b-color-picker-color-size),1fr));min-width:calc(var(--b-color-picker-color-size) * 4 + var(--b-color-picker-gap) * 3)}:is(.b-color-picker.b-combo-picker,.b-color-picker.b-color-column-picker) .b-color-picker-swatch{width:100%}.b-color-picker-swatch{display:grid;aspect-ratio:1 / 1;cursor:pointer;background-color:currentColor;position:relative;place-items:center;overflow:clip;outline-offset:calc(var(--b-color-picker-color-outline-width) * -1);transition:outline-offset .2s;outline:var(--b-color-picker-color-hover-outline);border-radius:var(--b-color-picker-color-border-radius);color:var(--b-primary);width:var(--b-color-picker-color-size)}.b-color-picker-swatch.b-color-active{outline:var(--b-color-picker-color-active-outline);outline-offset:var(--b-color-picker-color-outline-offset)}.b-color-picker-swatch.b-selected,.b-color-picker-swatch:hover{outline:var(--b-color-picker-color-hover-outline);outline-offset:var(--b-color-picker-color-outline-offset)}.b-color-picker-swatch.b-no-color{background-color:transparent;border:1px solid currentColor;color:var(--b-color-picker-color-no-color-color)}.b-color-picker-swatch.b-no-color:before{content:"";position:absolute;height:300%;border-inline-end:1px solid currentColor;rotate:135deg}:root,:host{--b-mask-border-radius: var(--b-widget-border-radius);--b-mask-padding: var(--b-widget-padding);--b-mask-text-background: var(--b-popup-background, var(--b-neutral-100));--b-mask-progress-height: .25em;--b-mask-background: color-mix(in srgb, var(--b-neutral-0), transparent 85%);--b-mask-text-color: var(--b-widget-color);--b-mask-progress-color: color-mix(in srgb, var(--b-mask-text-color), transparent 30%);--b-mask-color: var(--b-primary);--b-mask-transition-duration: .5s}.b-mask{position:absolute;inset:0;display:grid;place-items:center;z-index:100;opacity:1;background:var(--b-mask-background);color:var(--b-mask-color);transition:opacity var(--b-mask-transition-duration)}.b-mask.b-delayed-show{opacity:0}@starting-style{.b-mask{opacity:0}}.b-mask-rendition-text{--b-mask-color: transparent;--b-mask-text-color: var(--b-text-2)}.b-mask-rendition-text .b-mask-content{box-shadow:none}.b-mask-content{position:relative;overflow:hidden;background:var(--b-mask-text-background);box-shadow:var(--b-elevation-1);border-radius:var(--b-mask-border-radius)}.b-mask-progress-bar{height:var(--b-mask-progress-height);background:var(--b-mask-progress-color)}.b-mask-text{display:flex;gap:.5em;user-select:none;-webkit-user-select:none;align-items:center;color:var(--b-mask-text-color);padding:var(--b-mask-padding)}.b-masked{position:relative}:root,:host{--b-menu-item-gap: var(--b-widget-gap);--b-menu-item-icon-width: 1em;--b-menu-item-min-width: 12em;--b-menu-item-padding: var(--b-widget-padding);--b-menu-item-font-weight: var(--b-widget-font-weight);--b-menu-item-separator-border-color: var(--b-border-6);--b-menu-item-color: var(--b-widget-color);--b-menu-item-icon-color: var(--b-menu-item-color);--b-menu-item-disabled-color: var(--b-widget-disabled-color);--b-menu-item-disabled-icon-color: var(--b-neutral-70);--b-menu-item-background: transparent;--b-menu-item-hover-color: var(--b-widget-color);--b-menu-item-focus-color: var(--b-widget-color);--b-menu-item-hover-icon-color: var(--b-widget-color);--b-menu-item-focus-icon-color: var(--b-widget-color);--b-menu-item-border-radius: null;--b-menu-item-separator-height: 1px;--b-menu-item-separator-inset: 0}.b-menu-item{display:flex;align-items:center;outline:none;overflow:clip;flex-shrink:0;background:var(--b-menu-item-background);border-radius:var(--b-menu-item-border-radius);color:var(--b-menu-item-color);font-weight:var(--b-menu-item-font-weight);gap:var(--b-menu-item-gap);min-width:var(--b-menu-item-min-width);padding:var(--b-menu-item-padding)}.b-menu-item.b-separator:not(.b-first-visible-child){overflow:visible;margin-top:calc(var(--b-menu-item-separator-height) * 2 - 1px)}.b-menu-item.b-separator:not(.b-first-visible-child):before{content:"";display:block;position:absolute;inset-inline:var(--b-menu-item-separator-inset);top:calc(var(--b-menu-item-separator-height) * -1);border-top:1px solid var(--b-menu-item-separator-border-color)}.b-menu-item:not(.b-disabled){cursor:pointer}.b-menu-item:hover{--b-menu-item-color: var(--b-menu-item-hover-color);--b-menu-item-background: var(--b-menu-item-hover-background, var(--b-primary-90));--b-menu-item-icon-color: var(--b-menu-item-hover-icon-color)}.b-menu-item:focus-within{--b-menu-item-color: var(--b-menu-item-focus-color);--b-menu-item-background: var(--b-menu-item-focus-background, var(--b-primary-90));--b-menu-item-icon-color: var(--b-menu-item-focus-icon-color)}.b-menu-item.b-disabled{--b-menu-item-color: var(--b-menu-item-disabled-color);--b-menu-item-icon-color: var(--b-menu-item-disabled-icon-color)}.b-menu-item.b-rtl .b-icon-sub-menu:before{rotate:180deg}.b-menu-item-icon{justify-self:center;color:var(--b-menu-item-icon-color);width:var(--b-menu-item-icon-width)}.b-menu-text{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-inline-start:calc(var(--b-menu-item-icon-width) + var(--b-menu-item-gap));margin-inline-end:var(--bi-menu-item-margin-inline-end)}.b-menu:not(.b-menu-with-icon) .b-menu-text,.b-menu-item-icon~.b-menu-text{margin-inline-start:0}:root,:host{--b-badge-font-size: .7em;--b-badge-height: 1.7em;--b-badge-background: var(--b-color-red);--b-badge-color: var(--b-neutral-100);--b-badge-offset: -.6em}.b-widget.b-badge{overflow:visible}.b-badge:after{content:attr(data-badge);position:absolute;display:flex;align-items:center;justify-content:center;z-index:5;padding-inline:.3em;background:var(--b-badge-background);border-radius:var(--b-badge-height);color:var(--b-badge-color);font-size:var(--b-badge-font-size);height:var(--b-badge-height);min-width:var(--b-badge-height);inset-inline-end:var(--b-badge-offset);inset-block-start:var(--b-badge-offset)}.b-formula-field-list{--b-panel-header-padding: var(--b-list-item-padding);--b-panel-header-font-size: 1em}.b-widget.b-tooltip.b-field-error-tip{--b-primary: var(--b-field-error-tip-primary);--b-tooltip-plain-background: var(--b-field-error-tip-background);--b-tooltip-plain-color: var(--b-field-error-tip-color)}:root,:host{--b-progress-bar-background: var(--b-neutral-90)}.b-progress-bar{display:flex;flex-direction:column;width:100%;margin-bottom:1em}.b-progress-bar .b-label{font-size:.95em}.b-progress-bar .b-progress-bar-label{margin-inline-end:3em}.b-progress-bar-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:.5em}.b-progress-bar-track{position:relative;width:100%;height:.43em;overflow:hidden;border-radius:var(--b-widget-border-radius);background:var(--b-progress-bar-background)}.b-progress-bar-fill{height:100%;transition:width .2s ease;border-radius:var(--b-widget-border-radius);background:var(--b-primary)}.b-rich-text-field{overflow:visible;height:10em;color:var(--b-text-field-input-color)}.b-rich-text-field .b-field-inner{overflow:visible;align-items:flex-start}.b-rich-text-field .b-rich-text-field-container{width:100%;height:100%;padding:.5em;outline:none}.b-cell-editor .b-rich-text-field{height:100%;min-height:100%}:root,:host{--b-slider-thumb-size: 1.5em;--b-slider-thumb-elevation: var(--b-elevation-1);--b-slider-thumb-border: null;--b-slider-track-height: .5em;--b-slider-step-size: calc(var(--b-slider-track-height) * .4);--b-slider-step-width: unset;--b-slider-step-height: unset;--b-slider-step-opacity: .5;--b-slider-ring-content: none;--b-slider-value-border-radius: var(--b-widget-border-radius);--b-slider-thumb-value-size: 1.75em;--b-slider-thumb-text-color: var(--b-neutral-100);--b-slider-step-lesser-color: var(--b-neutral-100);--b-slider-value-color: var(--b-neutral-100);--b-slider-disabled-color: var(--b-neutral-80);--b-slider-disabled-thumb-color: var(--b-neutral-80);--b-slider-disabled-track-color: var(--b-neutral-90);--b-slider-track-color: var(--b-neutral-85);--b-slider-track-border: null;--b-slider-thumb-focus-outline-offset: 2px;--b-slider-thumb-focus-outline-width: var(--b-widget-focus-outline-width);--b-slider-step-border-radius: 50%}.b-internal{--bi-slider-value-percent: null;--bi-slider-value: null;--bi-slider-max: null;--bi-slider-min: null}.b-slider{place-items:center;gap:.75em;display:grid;overflow:visible;min-height:calc(var(--b-slider-thumb-value-size) + var(--b-slider-thumb-focus-outline-width) * 2 + var(--b-slider-thumb-focus-outline-offset) * 2);--bi-slider-value-percent: calc(((var(--bi-slider-value) - var(--bi-slider-min)) / (var(--bi-slider-max) - var(--bi-slider-min))) * 100%)}.b-slider.b-label-above>.b-label.b-align-start{justify-self:start}.b-slider .b-field-inner{width:100%;grid-template-areas:"track"}.b-slider.b-text:not(.b-show-value) .b-field-inner{grid-template-areas:"track" "below";gap:.5em}.b-slider input{grid-area:track;appearance:none;opacity:0;cursor:pointer;width:100%;height:100%}.b-slider:not(.b-disabled) .b-field-inner:hover{--bi-checkbox-ring-opacity: var(--b-checkbox-ring-hover-opacity)}.b-slider:not(.b-disabled) .b-field-inner:has(input:active){--bi-checkbox-ring-opacity: var(--b-checkbox-ring-active-opacity)}.b-slider:not(.b-disabled) .b-field-inner:has(input:focus){--bi-checkbox-ring-opacity: var(--b-checkbox-ring-focus-opacity)}.b-slider:not(.b-disabled) .b-field-inner:has(input:focus-visible) .b-slider-thumb{outline:var(--b-slider-thumb-focus-outline-width) solid var(--b-slider-thumb-focus-outline-color, var(--b-primary-60));outline-offset:var(--b-slider-thumb-focus-outline-offset)}.b-slider.b-thumb-value{--b-slider-thumb-size: var(--b-slider-thumb-value-size)}.b-slider.b-thumb-value .b-slider-thumb:after{display:grid;counter-reset:variable var(--bi-slider-value);content:counter(variable);font-size:.7em;width:100%;height:100%;place-items:center;line-height:1em;color:var(--b-slider-thumb-text-color)}.b-slider.b-show-value .b-slider-internal-label{grid-column:-1;padding:.5em;font-size:.9em;position:relative;z-index:1;min-width:2.75em;text-align:center;background:var(--b-slider-value-background, var(--b-primary-30));border-radius:var(--b-slider-value-border-radius);color:var(--b-slider-value-color)}.b-slider.b-show-value .b-slider-internal-label:before{content:"";width:.75em;aspect-ratio:1 / 1;background:inherit;rotate:45deg;position:absolute;inset-inline-start:0;top:50%;translate:calc(-50% * var(--b-rtl-negate)) -50%}.b-slider.b-widget.b-disabled{--b-slider-color: var(--b-slider-disabled-color);--b-slider-thumb-color: var(--b-slider-disabled-thumb-color);--b-slider-track-color: var(--b-slider-disabled-track-color);--b-slider-value-background: var(--b-slider-disabled-thumb-color)}.b-grid-cell .b-slider{width:100%}.b-slider-track{display:flex;align-items:center;grid-area:track;border-radius:.25em;position:relative;pointer-events:none;transition:background .2s;background:var(--b-slider-track-color);border:var(--b-slider-track-border);height:var(--b-slider-track-height);width:calc(100% - var(--b-slider-thumb-size))}.b-slider-progress{border-radius:inherit;height:100%;pointer-events:none;transition:background .2s;width:var(--bi-slider-value-percent);background:var(--b-slider-color, var(--b-primary))}.b-slider-thumb{position:absolute;flex-shrink:0;aspect-ratio:1/ 1;border-radius:50%;translate:calc(-50% * var(--b-rtl-negate));background-color:currentColor;z-index:1;outline:0 solid transparent;outline-offset:0;transition:color .2s,scale .2s,outline .2s,outline-offset .2s;inset-inline-start:var(--bi-slider-value-percent);color:var(--b-slider-thumb-color, var(--b-slider-color, var(--b-primary)));width:var(--b-slider-thumb-size);box-shadow:var(--b-slider-thumb-elevation);border:var(--b-slider-thumb-border)}.b-slider-thumb:before{content:var(--b-slider-ring-content);display:block;background:currentColor;position:absolute;top:50%;left:50%;translate:calc(-50% * var(--b-rtl-negate)) -50%;transform-origin:center center;border-radius:50%;pointer-events:none;transition:opacity .5s ease;aspect-ratio:1 / 1;opacity:var(--bi-checkbox-ring-opacity);width:calc(var(--b-slider-thumb-size) * 1.75)}.b-slider-steps{display:flex;position:absolute;width:100%;height:100%;justify-content:space-evenly;align-items:center}.b-slider-step{background-color:var(--b-slider-step-color, var(--b-slider-color, var(--b-primary)));border-radius:var(--b-slider-step-border-radius);width:var(--b-slider-step-width, var(--b-slider-step-size));height:var(--b-slider-step-height, var(--b-slider-step-size));opacity:var(--b-slider-step-opacity)}.b-slider-step.b-less{--b-slider-color: var(--b-slider-step-lesser-color)}.b-slider-internal-label{color:var(--b-label-color)}:root,:host{--b-splitter-size: 4px;--b-splitter-hover-size: 8px;--b-splitter-touch-hover-size: 16px;--b-splitter-disabled-size: 1px;--b-splitter-color: var(--b-border-6);--b-splitter-hover-color: var(--b-border-7);--b-splitter-disabled-color: var(--b-border-7);--b-splitter-button-size: 1em;--b-splitter-touch-button-size: 1.3em;--b-splitter-button-icon-color: var(--b-border-4);--b-splitter-button-hover-color: var(--b-border-2);--bi-splitter-overflow: visible;--bi-splitter-inner-top: 0;--bi-splitter-inner-left: 0;--bi-splitter-inner-translate: 0 0}.b-splitter{position:relative;touch-action:none;background:var(--b-splitter-color);flex:0 0 var(--b-splitter-size);overflow:var(--bi-splitter-overflow);flex-grow:0!important;--bi-splitter-inner-size: var(--b-splitter-size)}.b-splitter.b-disabled{pointer-events:none;--b-splitter-size: var(--b-splitter-disabled-size);--b-splitter-color: var(--b-splitter-disabled-color);--bi-splitter-overflow: clip}:is(.b-splitter.b-hover,.b-splitter.b-moving,.b-splitter.b-show-buttons) .b-splitter-buttons{display:flex}.b-splitter:after{content:"";position:absolute;z-index:10000;transition:all .2s;background:var(--b-splitter-color);top:var(--bi-splitter-inner-top);left:var(--bi-splitter-inner-left);width:var(--bi-splitter-inner-width);height:var(--bi-splitter-inner-height);translate:var(--bi-splitter-inner-translate)}.b-splitter.b-horizontal{min-height:var(--b-splitter-size)}.b-splitter.b-horizontal:after{--bi-splitter-inner-height: var(--bi-splitter-inner-size);--bi-splitter-inner-width: 100%}.b-splitter.b-horizontal:not(.b-drag-disabled){cursor:ns-resize}.b-splitter.b-horizontal:not(.b-drag-disabled):hover,.b-splitter.b-horizontal:not(.b-drag-disabled).b-hover,.b-splitter.b-horizontal:not(.b-drag-disabled).b-moving{--b-splitter-color: var(--b-splitter-hover-color)}:is(.b-splitter.b-horizontal:not(.b-drag-disabled):hover,.b-splitter.b-horizontal:not(.b-drag-disabled).b-hover,.b-splitter.b-horizontal:not(.b-drag-disabled).b-moving):after{--bi-splitter-inner-top: 50%;--bi-splitter-inner-translate: 0 -50%;--bi-splitter-inner-size: var(--b-splitter-hover-size)}.b-splitter.b-horizontal .b-splitter-buttons{rotate:90deg}.b-splitter.b-vertical{min-width:var(--b-splitter-size)}.b-splitter.b-vertical:after{--bi-splitter-inner-height: 100%;--bi-splitter-inner-width: var(--bi-splitter-inner-size)}.b-splitter.b-vertical:not(.b-drag-disabled){cursor:ew-resize}.b-splitter.b-vertical:not(.b-drag-disabled):hover,.b-splitter.b-vertical:not(.b-drag-disabled).b-hover,.b-splitter.b-vertical:not(.b-drag-disabled).b-moving{--b-splitter-color: var(--b-splitter-hover-color)}:is(.b-splitter.b-vertical:not(.b-drag-disabled):hover,.b-splitter.b-vertical:not(.b-drag-disabled).b-hover,.b-splitter.b-vertical:not(.b-drag-disabled).b-moving):after{--bi-splitter-inner-left: 50%;--bi-splitter-inner-translate: -50% 0;--bi-splitter-inner-size: var(--b-splitter-hover-size)}.b-splitter:last-child,.b-splitter:first-child{visibility:hidden;flex:0;min-width:0}@media (pointer : coarse){.b-splitter{--b-splitter-hover-size: var(--b-splitter-touch-hover-size)}}.b-splitter.b-rtl .b-splitter-buttons{translate:50% -50%}.b-splitter.b-rtl.b-vertical .b-splitter-buttons{scale:-1 1}.b-splitter.b-rtl .b-splitter-button-expand{justify-content:flex-end;translate:100%}.b-splitter.b-rtl .b-splitter-button-collapse{justify-content:flex-start;translate:-100%}.b-splitter-buttons{display:none;position:absolute;height:2.4em;width:2.4em;z-index:10001;inset-inline-start:50%;translate:-50% -50%;transition:top .2s ease-in-out,inset-inline-start .2s ease-in-out;font-size:var(--b-splitter-button-size)}.b-splitter-buttons:has(.b-disabled){pointer-events:none}.b-splitter-button-collapse,.b-splitter-button-expand{flex:1;cursor:pointer;display:flex;align-items:center;position:relative;padding-top:.1em;background:var(--b-splitter-color)}:is(.b-splitter-button-collapse,.b-splitter-button-expand):hover .b-splitter-button-icon{color:var(--b-splitter-button-hover-color)}:is(.b-splitter-button-collapse,.b-splitter-button-expand).b-disabled{cursor:default;visibility:hidden!important;pointer-events:none}:is(.b-splitter-button-collapse,.b-splitter-button-expand):not(.b-disabled){pointer-events:auto}.b-splitter-button-collapse{border-top-left-radius:100% 50%;border-bottom-left-radius:100% 50%;justify-content:flex-end}.b-splitter-button-expand{border-top-right-radius:100% 50%;border-bottom-right-radius:100% 50%}.b-splitter-button-icon{cursor:pointer;height:1.5em;font-size:1.3em;font-weight:400;align-content:center;color:var(--b-splitter-button-icon-color)}.b-splitter-button-touch-area{height:3em;top:-.3em;width:2em;position:absolute}.b-splitter-button-collapse .b-splitter-button-touch-area{inset-inline-start:-.9em}.b-splitter-button-expand .b-splitter-button-touch-area{inset-inline-end:-.9em}:root,:host{--b-toast-padding: var(--b-widget-padding);--b-toast-border-radius: var(--b-widget-border-radius);--b-toast-transition-duration: .25s;--b-toast-progress-height: .25em;--b-toast-color: var(--b-widget-color)}.b-internal{--bi-toast-side: null}.b-float-root>.b-toast{display:block;overflow-x:clip;overflow-y:auto;top:auto;inset-inline-end:2em;inset-inline-start:auto;max-width:60%;max-height:60%;line-height:1.4em;cursor:pointer;transition:var(--bi-toast-side) var(--b-toast-transition-duration) ease-in,translate var(--b-toast-transition-duration) ease-in,background .2s,color .2s;background:var(--b-toast-background, var(--b-primary-98));color:var(--b-toast-color);padding:var(--b-toast-padding);border-radius:var(--b-toast-border-radius)}.b-float-root>.b-toast:is(.b-side-top-start,.b-side-top-end){top:0}.b-float-root>.b-toast:is(.b-side-top-start,.b-side-bottom-start){inset-inline-start:2em;inset-inline-end:auto}.b-float-root>.b-toast.b-toast-hide.b-side-bottom-end,.b-float-root>.b-toast.b-toast-hide.b-side-bottom-start{bottom:0!important;translate:0 100%!important}.b-float-root>.b-toast.b-toast-hide.b-side-top-end,.b-float-root>.b-toast.b-toast-hide.b-side-top-start{top:0!important;translate:0 -100%!important}.b-float-root>.b-toast.b-icon:before{margin-inline-end:.5em}.b-toast-progress{position:absolute;top:0;inset-inline-start:0;animation-name:b-toast-progress;animation-timing-function:linear;height:var(--b-toast-progress-height);background:var(--b-toast-progress-color, var(--b-primary-50))}@keyframes b-toast-progress{0%{width:0}to{width:100%}}.b-tool{display:grid;appearance:none;background-color:transparent;border:none;border-radius:50%;cursor:pointer;padding:0;width:1.25em;place-content:center;transition:color .2s;aspect-ratio:1 / 1;color:var(--b-panel-header-color)}.b-tool:focus-visible{outline:var(--b-widget-focus-outline-width) solid var(--b-widget-focus-outline-color)}.b-tool.b-disabled{opacity:.4}:root,:host{--b-avatar-size: 2.5em;--b-avatar-initials-text-transform: uppercase;--b-avatar-initials-font-weight: 600;--b-avatar-border-radius: 50%;--b-avatar-aspect-ratio: 1 / 1;--b-avatar-icon-font-size: 1.1em;--b-avatar-border: null}.b-colorize{--b-avatar-background: var(--b-primary-85);--b-avatar-icon-color: var(--b-primary-30);--b-avatar-initials-color: var(--b-primary-30)}.b-resource-avatar{touch-action:pan-x pan-y;display:grid;place-items:center;flex-shrink:0;width:var(--b-avatar-size);height:var(--b-avatar-size);background:var(--b-avatar-background);border-radius:var(--b-avatar-border-radius);border:var(--b-avatar-border)}.b-resource-avatar.b-resource-icon:before{color:var(--b-avatar-icon-color);font-size:var(--b-avatar-icon-font-size)}i.b-resource-avatar{display:grid}.b-resource-initials{color:var(--b-avatar-initials-color);font-weight:var(--b-avatar-initials-font-weight);text-transform:var(--b-avatar-initials-text-transform)}.b-ripple-clip{position:absolute;inset:0;z-index:0;border-radius:inherit;overflow:clip;pointer-events:none}.b-ripple-clip:before{position:absolute;content:"";width:0;aspect-ratio:1 / 1;border-radius:50%;opacity:0;transition:width .2s linear,opacity .1s linear;translate:-50% -50%;inset-inline-start:var(--b-click-x);inset-block-start:var(--b-click-y);background:var(--b-ripple-background);mix-blend-mode:var(--b-ripple-blend-mode)}.b-ripple-clip.b-animate:before{opacity:1;width:200%}:root,:host{--b-grid-column-transition-duration: var(--b-default-transition-duration);--b-grid-row-transition-duration: var(--b-default-transition-duration);--b-grid-empty-padding: var(--b-widget-padding);--b-grid-empty-color: var(--b-text-2);--b-grid-panel-header-padding: var(--b-panel-header-padding);--b-grid-panel-header-border-bottom: var(--b-grid-header-border-width) solid var(--b-grid-header-border-color);--b-grid-background: var(--b-neutral-100);--b-grid-cell-border-width: 1px;--b-grid-cell-focused-outline-width: var(--b-widget-focus-outline-width);--b-grid-cell-focused-outline-color: var(--b-widget-focus-outline-color);--b-grid-cell-gap: .5em;--b-grid-cell-padding-block: 0;--b-grid-cell-padding-inline: var(--b-widget-padding);--b-grid-cell-font-size: 1em;--b-grid-cell-font-weight: var(--b-widget-font-weight);--b-grid-row-height: 45px;--b-grid-row-border-width: 1px;--b-grid-row-zindex: 1;--b-grid-splitter-width: 1px;--b-grid-cell-border-color: var(--b-border-7);--b-grid-cell-background: var(--b-neutral-100);--b-grid-cell-color: var(--b-widget-color);--b-grid-cell-selected-color: var(--b-widget-color);--b-grid-row-border-color: var(--b-grid-cell-border-color);--b-grid-cell-dirty-color: var(--b-color-red);--b-grid-splitter-narrow-color: var(--b-neutral-80);--bi-grid-cell-overflow: clip;--b-grid-row-placeholder-color: var(--b-neutral-95);--b-grid-cell-highlight-color: color-mix(in srgb, var(--b-color-yellow) 20%, var(--b-neutral-100))}.b-grid-base{overflow:clip;min-width:0;--b-panel-bottom-toolbar-padding: var(--b-grid-header-padding);--b-panel-header-border-bottom: var(--b-grid-panel-header-border-bottom);--b-panel-header-padding: var(--b-grid-panel-header-padding);--b-panel-background: var(--b-grid-background);--b-panel-top-toolbar-margin-inline: 0;--b-panel-top-toolbar-border-radius: 0}.b-grid-base:where(.b-outer:not(.b-auto-height)){height:100%}.b-grid-base.b-auto-height{height:auto;flex:none}.b-grid-base.b-auto-height .b-grid-vertical-scroller{position:relative}.b-grid-base.b-auto-height.b-grid-empty .b-grid-body-container{height:unset!important;flex:1}.b-grid-base .b-empty-text{display:none}.b-grid-base.b-grid-empty .b-empty-text{display:block;position:relative;color:var(--b-grid-empty-color);padding:var(--b-grid-empty-padding);z-index:10}.b-grid-base .b-editing{overflow:visible;contain:unset;z-index:2}.b-grid-base.b-splicing-rows-toggle .b-grid-row:is(.b-adding,.b-removing,.b-repositioning),.b-grid-base.b-splicing-rows-remove .b-grid-row:is(.b-removing,.b-repositioning),.b-grid-base.b-splicing-rows-insert .b-grid-row:is(.b-adding,.b-repositioning){transition:top var(--b-grid-row-transition-duration),left var(--b-grid-row-transition-duration);z-index:calc(var(--b-grid-row-zindex) - 1);pointer-events:none}.b-grid-base.b-collapsing-column .b-collapsing,.b-grid-base.b-collapsing-column .b-collapsing .b-grid-header:not(:first-child){min-width:0!important;overflow:clip!important;padding:0}.b-grid-base.b-collapsing-column .b-collapsing .b-grid-header:not(:first-child){width:0!important}.b-grid-base .b-expanding-start .b-grid-header:not(:first-child){min-width:0!important;width:0!important;padding:0}.b-grid-base.b-expanding-column .b-expanding .b-grid-header:not(:first-child){min-width:0!important}:is(.b-grid-base.b-collapsing-column,.b-grid-base.b-expanding-column,.b-grid-base.b-showing-column,.b-grid-base.b-hiding-column,.b-grid-base.b-toggling-columns) .b-grid-header{transition-property:min-width,max-width,width,flex,padding;transition-duration:var(--b-grid-column-transition-duration)}:is(.b-grid-base.b-collapsing-column,.b-grid-base.b-expanding-column,.b-grid-base.b-showing-column,.b-grid-base.b-hiding-column,.b-grid-base.b-toggling-columns) .b-grid-cell{transition-property:padding;transition-duration:var(--b-grid-column-transition-duration)}.b-grid-base .b-grid-header:is(.b-showing,.b-hiding){min-width:0!important;padding:0!important}.b-grid-base .b-grid-header:is(.b-showing,.b-hiding).b-flex{flex:0!important}.b-grid-base .b-toggling-all-expand.b-grid-header{width:0!important}.b-fill-last-column .b-grid-footers:not(.b-has-flex,.b-horizontal-overflow) .b-grid-footer:last-child,.b-fill-last-column .b-grid-headers:not(.b-has-flex,.b-horizontal-overflow) .b-last-parent,.b-fill-last-column .b-grid-headers:not(.b-has-flex,.b-horizontal-overflow) .b-last-leaf:not(.b-drop-placeholder){flex-grow:1;border-inline-end-color:transparent}.b-fill-last-column .b-grid-headers:not(.b-has-flex,.b-horizontal-overflow) .b-last-parent>.b-grid-header-text{border-inline-end-color:transparent}.b-fill-last-column .b-grid-cell:last-child,.b-fill-last-column .b-row-expander-row-expanded .b-grid-cell:nth-last-child(2){--b-grid-cell-border-width: 0}.b-grid-panel-body{display:flex;flex-direction:column;flex:1;position:relative;overflow:hidden}.b-grid-panel-body:not(.b-auto-height)>.b-grid-body-container{flex:1 1 0;contain:strict}.b-grid-panel-body:not(.b-auto-height)>.b-grid-body-container>.b-grid-vertical-scroller{min-height:100%}.b-grid-base.b-enable-sticky .b-sticky-cell,.b-grid-base.b-enable-sticky .b-grid-sub-grid,.b-grid-base.b-enable-sticky .b-grid-vertical-scroller,.b-grid-base.b-enable-sticky .b-grid-row{overflow:visible!important}.b-grid-base>.b-panel-body-wrap{--b-toolbar-background: var(--b-grid-toolbar-background)}.b-grid-base>.b-panel-body-wrap>.b-top-toolbar{transition:background-color var(--b-default-transition-duration),border var(--b-default-transition-duration);border-bottom:var(--b-grid-header-container-border-width) solid var(--b-grid-header-border-color)}.b-grid-base:not(.b-auto-height)>.b-panel-body-wrap>.b-bottom-toolbar{border-top:var(--b-grid-header-container-border-width) solid var(--b-grid-header-border-color)}.b-grid-body-container{position:relative}.b-grid-vertical-scroller{display:flex;overflow:clip}.b-grid-base .fa{font-family:inherit}.b-grid-base .fa:before{font-family:var(--b-widget-icon-font-family);font-weight:var(--b-widget-icon-font-weight)}.b-no-transitions .b-grid-row{transition:none!important}.b-grid-base.b-highlighting-fade .b-grid-cell:not(.b-highlighted):before{content:"";position:absolute;inset:0;opacity:.8;transition:opacity .4s;pointer-events:none;background-color:var(--b-grid-cell-background, var(--b-neutral-100))}.b-grid-base:not(.b-highlighting-fade) .b-grid-cell.b-highlighted{transition:background-color .4s;background-color:var(--b-grid-cell-highlight-color)}:root,:host{--b-group-bar-separator-icon: "\f054";--b-group-bar-separator-color: var(--b-neutral-50)}.b-group-bar{display:flex;flex-wrap:nowrap;flex:1;align-self:center;gap:2.2em;min-height:2em;--b-chip-view-chip-padding: .5em 1em;--b-chip-view-chip-gap: 1em;--b-chip-view-chip-border-radius: var(--b-button-border-radius)}.b-group-bar .b-chip{position:relative;overflow:visible}.b-group-bar .b-chip:not(:last-child):after{position:absolute;inset-inline-end:-1.5em;color:var(--b-group-bar-separator-color);content:var(--b-group-bar-separator-icon);font-family:var(--b-widget-icon-font-family);font-weight:var(--b-widget-icon-font-weight)}.b-rtl :is(.b-group-bar .b-chip):not(:last-child):after{scale:-1 0}.b-group-bar .b-drop-target{opacity:.5}.b-group-bar .b-drop-target .b-chip-content{visibility:hidden}.b-grid-reordering-columns-with-group-bar.b-grid-header.b-drag-proxy{min-width:10em!important;padding-inline:1em;border-radius:var(--b-button-border-radius)}.b-grid-reordering-columns-with-group-bar.b-grid-header.b-drag-proxy .b-grid-header-text{padding:.5em 0}.b-grid-reordering-columns-with-group-bar.b-grid-header.b-drag-proxy,.b-grid-reordering-columns-with-group-bar.b-grid-header.b-drag-proxy .b-grid-header-text-content{width:auto!important}.b-grid-base.b-dragging-header:not(.b-tree-group) .b-group-bar .b-drop-target{display:none}.b-grid-base.b-dragging-header:not(.b-tree-group) .b-group-bar .b-chip:after{content:none}.b-grid-base.b-dragging-header:not(.b-tree-group) .b-group-bar:hover .b-chip{display:none}.b-grid-base.b-dragging-header:not(.b-tree-group) .b-group-bar:hover .b-drop-target{display:flex}.b-sparkline-cell .b-chart{background:transparent}:root,:host{--b-quick-find-font-weight: var(--b-grid-cell-font-weight);--b-quick-find-badge-offset: .4em;--b-quick-find-badge-font-size: .7em;--b-quick-find-primary: var(--b-secondary);--b-quick-find-badge-color: var(--b-grid-header-color)}:is(.b-grid-row.b-hover,.b-grid-row.b-selected) .b-colorize{--b-quick-find-background: var(--b-quick-find-row-hover-background, var(--b-primary-95))}.b-cell-editor{--b-widget-floating-box-shadow: none}.b-cell-editor .b-field{border-radius:0;background:var(--b-grid-cell-applied-background);--b-text-field-input-padding: var(--b-grid-cell-padding-block) var(--b-grid-cell-padding-inline)}.b-grid-cell.b-editing{color:transparent}.b-grid-cell.b-editing:not(.b-tree-cell)>:not(.b-editor),.b-grid-cell.b-editing.b-tree-cell>.b-tree-cell-value{visibility:hidden}.b-grid-cell.b-editing,.b-grid-cell.b-after-edit{--bi-grid-cell-selected-color-transition-duration: 0ms}.b-chart-designer-popup>.b-popup-body-wrap>.b-popup-content{padding-top:0}.b-chart-cell .b-chart{background:none}:root,:host{--b-column-drag-toolbar-border-radius: var(--b-popup-border-radius);--b-column-drag-toolbar-opacity: .6;--b-column-drag-toolbar-hover-opacity: .9;--b-column-drag-toolbar-button-border-width: 0;--b-column-drag-toolbar-box-shadow: var(--b-widget-floating-box-shadow);--b-column-drag-toolbar-disabled-icon-color: var(--b-neutral-85);--b-column-drag-toolbar-button-box-shadow: none;--b-column-drag-toolbar-button-hover-box-shadow: none;--b-column-drag-toolbar-button-color: var(--b-neutral-20);--b-column-drag-toolbar-button-background: transparent;--b-column-drag-toolbar-title-color: var(--b-neutral-20);--b-column-drag-toolbar-background: var(--b-neutral-100)}.b-column-drag-toolbar{position:absolute;top:calc(100% - 3em);left:50%;z-index:100;animation-name:b-anim-show-column-drag-toolbar;animation-duration:.2s;translate:-50%;display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;justify-content:center;transition:opacity .2s,top .2s;padding:1em 1em .5em;font-size:.8em;border:var(--b-popup-border);border-radius:var(--b-column-drag-toolbar-border-radius);background:var(--b-column-drag-toolbar-background);box-shadow:var(--b-column-drag-toolbar-box-shadow);opacity:var(--b-column-drag-toolbar-opacity)}.b-column-drag-toolbar.b-closer{top:50%;translate:-50% -50%}.b-column-drag-toolbar.b-hover{--b-column-drag-toolbar-opacity: var(--b-column-drag-toolbar-hover-opacity)}.b-column-drag-toolbar.b-remove{animation-name:b-anim-hide-column-drag-toolbar;animation-duration:.2s;top:100%;--b-column-drag-toolbar-opacity: 0}.b-column-drag-toolbar.b-remove.b-closer{animation-name:b-anim-hide-column-drag-toolbar-closer}.b-column-drag-toolbar>.b-title{flex-basis:100%;margin-bottom:1em;text-align:center;color:var(--b-column-drag-toolbar-title-color)}.b-column-drag-toolbar>.b-title:before{content:"Drag header downwards"}.b-column-drag-toolbar.b-closer>.b-title:before{content:"Drop header on a button"}.b-column-drag-toolbar .b-group{display:inline-flex;flex-direction:column;align-items:center;margin-inline-end:1.5em}.b-column-drag-toolbar .b-group:last-child{margin-inline-end:0}.b-column-drag-toolbar .b-group .b-title{margin-block:.5em;color:var(--b-column-drag-toolbar-title-color)}.b-column-drag-toolbar .b-buttons{display:inline-flex;flex-direction:row}.b-column-drag-toolbar .b-target-button{display:inline-flex;flex-direction:column;align-items:center;transition:all .2s;padding:1em 0;width:7.5em;margin-inline-end:.5em;color:var(--b-column-drag-toolbar-button-color);border:var(--b-column-drag-toolbar-button-border-width) solid var(--b-column-drag-toolbar-button-border-color, var(--b-primary-40));border-radius:var(--b-column-drag-toolbar-border-radius);background:var(--b-column-drag-toolbar-button-background);box-shadow:var(--b-column-drag-toolbar-button-box-shadow)}.b-column-drag-toolbar .b-target-button:last-child{margin-inline-end:0}.b-column-drag-toolbar .b-target-button i{font-size:2.5em;pointer-events:none;transition:all .2s;color:var(--b-column-drag-toolbar-icon-color, var(--b-primary-60))}.b-column-drag-toolbar .b-target-button.b-hover:not([data-disabled=true]){--b-column-drag-toolbar-icon-color: var(--b-column-drag-toolbar-default-hover-icon-color, var(--b-primary-60));--b-column-drag-toolbar-button-color: var(--b-column-drag-toolbar-default-hover-color, var(--b-primary-60));--b-column-drag-toolbar-button-background: var(--b-column-drag-toolbar-default-hover-background, var(--b-primary-95));--b-column-drag-toolbar-button-box-shadow: var(--b-column-drag-toolbar-button-hover-box-shadow)}.b-column-drag-toolbar .b-target-button.b-hover:not([data-disabled=true]) i{scale:1.1}.b-column-drag-toolbar .b-target-button.b-activate i{scale:1.1;rotate:180deg}.b-column-drag-toolbar .b-target-button[data-ref^=group]{--b-primary: var(--b-secondary)}.b-column-drag-toolbar .b-target-button[data-disabled=true]{--b-column-drag-toolbar-button-color: var(--b-column-drag-toolbar-disabled-icon-color);--b-column-drag-toolbar-icon-color: var(--b-column-drag-toolbar-disabled-icon-color)}@keyframes b-anim-show-column-drag-toolbar{0%{top:100%;opacity:0}to{top:calc(100% - 3em);opacity:.4}}@keyframes b-anim-hide-column-drag-toolbar{0%{top:calc(100% - 3em);opacity:.4}to{top:100%;opacity:0}}@keyframes b-anim-hide-column-drag-toolbar-closer{0%{top:50%;opacity:.4}to{top:100%;opacity:0}}.b-column-rename-editor{--b-editor-background: var(--b-grid-header-background);--b-text-field-font-weight: var(--b-grid-header-font-weight)}:root,:host{--b-column-reorder-invalid-color: var(--b-color-red);--b-column-reorder-stretched-background: var(--b-primary-95)}.b-grid-header.b-drag-proxy{line-height:normal;transition:background-color .3s;border-inline-end:none;font-weight:var(--b-grid-header-font-weight);background-color:var(--b-grid-header-background);outline:1px solid var(--b-grid-header-border-color)}.b-grid-header.b-drag-proxy.b-grid-header-parent{justify-content:stretch}.b-grid-header.b-drag-proxy.b-grid-header-parent>.b-grid-header-text{border-inline-end:none}.b-grid-header.b-drag-proxy .b-grid-header:last-child{border-inline-end:none}.b-grid-header.b-drop-placeholder{opacity:.3}.b-grid-header.b-drag-invalid{--b-grid-header-color: var(--b-column-reorder-invalid-color);outline:1px solid var(--b-column-reorder-invalid-color)}.b-column-reorder-stretched{outline:none;--b-grid-header-background: var(--b-column-reorder-stretched-background)}.b-column-reorder-stretched>*{display:none!important}:root,:host{--b-column-resize-handle-width: 1em;--b-column-resize-touch-handle-width: 1.5em;--b-column-resize-header-resizing-background: var(--b-grid-header-hover-background);--b-column-resize-touch-resizing-icon: "\f07e"}.b-column-resize .b-grid-header-parent{overflow:visible}.b-column-resize .b-grid-header-resizable:not(.b-last-leaf){overflow:visible}.b-column-resize .b-grid-header-resizable .b-grid-header-resize-handle{position:absolute;inset-block:0;background:transparent;z-index:3;cursor:col-resize;display:block;inset-inline-end:calc(-1 * var(--b-column-resize-handle-width) / 2);width:var(--b-column-resize-handle-width)}.b-column-resize.b-touch{--b-column-resize-handle-width: var(--b-column-resize-touch-handle-width)}.b-column-resize.b-touch .b-grid-header.b-resizing{overflow:visible;z-index:100}.b-column-resize.b-touch .b-grid-header.b-resizing:before{position:absolute;top:50%;inset-inline-end:0;translate:calc(50% * var(--b-rtl-negate)) -50%;border-radius:50%;padding:1em;z-index:1;background:var(--b-neutral-90);content:var(--b-column-resize-touch-resizing-icon);font-family:var(--b-widget-icon-font-family);font-weight:var(--b-widget-icon-font-weight)}.b-grid-header.b-resizing{--b-grid-header-background: var(--b-column-resize-header-resizing-background)}html.b-export-root,.b-export-root body{margin:0}html.b-print-root,.b-print-root body{margin:0;height:auto;overflow:unset;display:block;-webkit-print-color-adjust:exact!important;print-color-adjust:exact!important}html.b-export-root{overflow:auto}.b-export-root body,.b-print-root body{position:relative}body:not(.b-single-page-unscaled) .b-page-wrap{contain:strict}.b-export .b-time-ranges-canvas{display:block;width:100%;height:100%;position:absolute;inset:0;contain:none}.b-export .b-grid-base{min-height:0!important}.b-export .b-export-content{display:flex;flex-direction:column;height:100%}.b-export .b-export-body{flex:1;contain:strict}.b-export .b-grid-header-container{margin-inline-end:0!important;border-inline-end:none!important}.b-export .b-grid-body-container.b-widget-scroller{overflow-y:hidden!important}.b-export .b-grid-footer-container{padding-inline-end:0!important}.b-export .b-virtual-scrollers{display:none}.b-export.b-visible-scrollbar .b-show-yscroll-padding>.b-yscroll-pad{display:none}.b-export.b-multi-page .b-export-content{width:100%;height:100%}.b-export.b-multi-page .b-export-body{overflow:hidden}.b-export.b-single-page-unscaled{display:flex}.b-export.b-single-page-unscaled .b-export-body{contain:content}.b-export-header,.b-export-header *{box-sizing:border-box}@media print{.b-page-wrap{overflow:hidden}.b-grid-body-container{contain:paint!important}}.b-export-dialog .b-bottom-toolbar .b-button{width:7.5em}.b-float-root .b-export-loading-toast{display:flex;gap:.5em;align-items:center}html.b-print-root,.b-print-root body{margin:0;height:auto;overflow:unset;display:block}.b-print-root .b-float-root,.b-print-root .b-scrollbar-measure-element,.b-print-root .b-grid-header-resize-handle{display:none!important}.b-print:not(.b-safari) .b-page-wrap{page-break-after:always}:root,:host{--b-fill-handle-handle-size: .8em}.b-fill-handle-handle{translate:-50% -50%;position:absolute;cursor:crosshair;z-index:200;background-clip:content-box;user-select:none;-webkit-user-select:none;background:var(--b-grid-cell-focused-outline-color);border:1px solid var(--b-grid-cell-background);width:var(--b-fill-handle-handle-size);height:var(--b-fill-handle-handle-size)}.b-fill-handle-handle-right-edge{border-right:0;translate:-100% -50%;width:.5em}.b-fill-selection-border{position:absolute;border-radius:.1em;pointer-events:none;z-index:2;user-select:none;-webkit-user-select:none;border:var(--b-grid-cell-focused-outline-width) solid var(--b-grid-cell-focused-outline-color)}.b-indicate-crop{opacity:.4}.b-rtl .b-fill-handle-handle{translate:50% -50%}.b-rtl .b-fill-handle-handle.b-fill-handle-handle-left-edge{border-right:0;translate:100% -50%;width:.5em}:root,:host{--b-grid-filter-icon: "\f0b0";--b-grid-header-filtered-font-weight: var(--b-grid-header-font-weight);--b-grid-header-filtered-color: var(--b-grid-header-color);--bi-grid-filter-icon-opacity: 0;--bi-grid-filter-icon-active-opacity: 1;--bi-grid-filter-icon-header-hover-opacity: .5;--bi-grid-filter-icon-hover-opacity: .8;--bi-grid-filter-icon-size: 0;--bi-grid-filter-icon-margin-inline-start: 0}.b-filter-icon{cursor:pointer;transition-property:opacity,font-size;font-size:var(--bi-grid-filter-icon-size);opacity:var(--bi-grid-filter-icon-opacity);margin-inline-start:var(--bi-grid-filter-icon-margin-inline-start);transition-duration:var(--b-grid-header-icon-transition-duration)}.b-filter-icon:before{content:var(--b-grid-filter-icon);font-family:var(--b-widget-icon-font-family);font-weight:var(--b-widget-icon-font-weight)}.b-filter-icon:hover{--bi-grid-filter-icon-opacity: var(--bi-grid-filter-icon-hover-opacity)}.b-grid-header.b-filter{--b-grid-header-font-weight: var(--b-grid-header-filtered-font-weight);--b-grid-header-color: var(--b-grid-header-filtered-color);--bi-grid-filter-icon-opacity: var(--bi-grid-filter-icon-active-opacity)}.b-grid-header.b-filter,.b-grid-base:not(.b-column-resizing,.b-dragging-header) .b-grid-header.b-filterable:hover{--bi-grid-filter-icon-size: var(--b-grid-header-icon-font-size);--bi-grid-filter-icon-margin-inline-start: var(--b-grid-header-gap)}.b-grid-base:not(.b-column-resizing,.b-dragging-header) .b-grid-header.b-filterable:not(.b-filter):hover{--bi-grid-filter-icon-opacity: var(--bi-grid-filter-icon-header-hover-opacity)}.b-grid-base:not(.b-filter,.b-multifilter) .b-filter-icon{pointer-events:none;--bi-grid-filter-icon-opacity: .2}.b-filter-popup-legacy-mode .b-field{width:16em}.b-filter-popup:not(.b-filter-popup-legacy-mode) .b-panel-content{padding-inline:0}.b-filter-popup .b-field-filter-picker-group-row{padding-inline:var(--b-panel-padding)}.b-filter-popup .b-field-filter-picker-group{width:36em}.b-filter-popup .b-field-filter-picker-operator{grid-column:1}.b-filter-popup .b-field-filter-picker-values{grid-column:2}.b-filter-popup .b-field-filter-picker-values-multiple{grid-column:1}.b-filter-popup .b-field-filter-picker-property{display:none}.b-filter-bar-field{margin:0 0 var(--b-grid-header-padding) 0;width:100%}.b-filter-bar-compact .b-grid-header.b-filter-bar-enabled{flex-direction:row}.b-filter-bar-compact .b-grid-header.b-filter-bar-enabled .b-grid-header-text{order:1;min-height:3.5em}.b-filter-bar-compact .b-grid-header.b-filter-bar-enabled .b-sort-icon{margin-inline-start:0}.b-filter-bar-compact .b-grid-header.b-filter-bar-enabled .b-grid-header-text-content{display:none}:is(.b-filter-bar-compact .b-grid-header.b-filter-bar-enabled.b-grid-header-align-end,.b-filter-bar-compact .b-grid-header.b-filter-bar-enabled.b-grid-header-align-right) .b-field{order:100000}:is(.b-filter-bar-compact .b-grid-header.b-filter-bar-enabled.b-grid-header-align-end,.b-filter-bar-compact .b-grid-header.b-filter-bar-enabled.b-grid-header-align-right) input{text-align:end}.b-filter-bar-compact .b-grid-header.b-filter-bar-enabled.b-grid-header-align-center input{text-align:center}.b-filter-bar-compact .b-grid-header.b-filter-bar-enabled.b-grid-header-align-end .b-field{order:100000}.b-filter-bar-compact .b-grid-header.b-filter-bar-enabled.b-grid-header-align-end input{text-align:end}.b-filter-bar-compact .b-grid-header.b-filter-bar-enabled:hover .b-filter-bar-field input,.b-filter-bar-compact .b-grid-header.b-filter-bar-enabled:hover .b-filter-bar-field input::placeholder{color:var(--b-grid-header-hover-color)}.b-filter-bar-compact .b-filter-bar-field{margin:0;height:100%;flex:1;--b-text-field-input-padding: 0;--b-text-field-border-width: 0;--b-text-field-border-radius: 0;--b-combo-chip-view-padding-top: 0;--b-combo-chip-view-padding: 0;--b-text-field-background: transparent;--b-field-trigger-color: var(--b-grid-header-icon-color)}.b-filter-bar-compact .b-filter-bar-field input::placeholder{color:var(--b-grid-header-color);font-size:var(--b-grid-header-font-size);font-weight:var(--b-grid-header-font-weight);text-transform:var(--b-grid-header-text-transform)}.b-filter-bar-compact .b-filter-bar-field>.b-field-inner{gap:.5em}.b-filter-bar-compact .b-filter-bar-field>.b-field-inner:before{transition:none}.b-filter-bar-compact .b-filter-bar-field:not(:focus-within) .b-field-trigger[data-ref=expand],.b-filter-bar-compact .b-filter-bar-field:not(:focus-within) .b-field-trigger[data-ref=clear],.b-filter-bar-compact .b-filter-bar-field:not(:focus-within) .b-field-trigger[data-ref=spin],.b-filter-bar-compact .b-filter-bar-field:not(:focus-within) .b-field-trigger[data-ref=back],.b-filter-bar-compact .b-filter-bar-field:not(:focus-within) .b-field-trigger[data-ref=forward]{display:none}.b-filter-bar-compact .b-filter-bar-field:focus-within:not(.b-empty) .b-icon-remove,.b-filter-bar-compact .b-filter-bar-field:focus-within .b-field-trigger:not(.b-step-trigger,.b-icon-remove,.b-spintrigger){display:flex}.b-filter-bar-compact .b-filter-bar-field:not(.b-empty) input::placeholder{color:transparent}.b-filter-bar-compact.b-dragging .b-filter-bar-field{display:none}:root,:host{--b-group-header-font-weight: 500;--b-group-header-border-width: var(--b-grid-row-border-width);--b-group-header-zindex: 5;--b-group-header-collapsing-zindex: 7;--b-group-collapse-icon: "\f107";--b-group-header-icon: "\f5fd";--b-group-header-background: var(--b-neutral-100);--b-group-header-color: var(--b-neutral-20);--b-group-header-icon-color: var(--b-neutral-20);--b-group-header-border-color: var(--b-grid-row-border-color);--b-group-header-stripe-background: var(--b-neutral-97);--b-group-count-badge-background: var(--b-neutral-95);--b-group-count-badge-color: var(--b-text-2)}.b-no-row-lines{--b-group-header-border-width: 0}.b-grid-header.b-group .b-sort-icon:after{font-style:normal;content:var(--b-group-header-icon);font-family:var(--b-widget-icon-font-family);font-weight:var(--b-widget-icon-font-weight)}.b-group-row{--b-grid-cell-background: var(--b-group-header-background);--b-grid-row-border-width: var(--b-group-header-border-width);--b-grid-row-border-color: var(--b-group-header-border-color);--b-grid-row-zindex: var(--b-group-header-zindex)}.b-group-row.b-collapsing,.b-group-row.b-expanding{--b-grid-row-zindex: var(--b-group-header-collapsing-zindex)}.b-group-row .b-grid-cell{--b-grid-cell-border-color: transparent}.b-hide-row-hover .b-group-row{--b-grid-cell-hover-background: var(--b-group-header-background);--b-grid-cell-selected-background: var(--b-group-header-background);--b-grid-cell-hover-selected-background: var(--b-group-header-background)}.b-stripe .b-group-row{--b-grid-row-border-width: var(--b-stripe-border-width);--b-group-header-background: var(--b-group-header-stripe-background)}.b-hide-row-hover :is(.b-stripe .b-group-row){--b-grid-cell-hover-background: var(--b-group-header-stripe-background);--b-grid-cell-selected-background: var(--b-group-header-stripe-background);--b-grid-cell-hover-selected-background: var(--b-group-header-stripe-background)}.b-grid-cell.b-group-title{contain:size layout style;z-index:1;justify-content:flex-start;text-align:start;--b-grid-cell-color: var(--b-group-header-color);--b-grid-cell-font-weight: var(--b-group-header-font-weight);--bi-grid-cell-overflow: visible;gap:var(--b-widget-gap)}.b-group-state-icon{display:grid;place-items:center;font-style:normal;cursor:pointer;width:1em;transition:rotate .2s;color:var(--b-group-header-icon-color)}.b-group-state-icon:before{content:var(--b-group-collapse-icon);font-family:var(--b-widget-icon-font-family);font-weight:var(--b-widget-icon-font-weight)}.b-grid-group-collapsed .b-group-state-icon{rotate:-90deg}.b-group-count{display:grid;place-items:center;min-width:2em;width:2em;height:2em;border-radius:50%;font-size:.7em;background:var(--b-group-count-badge-background);color:var(--b-group-count-badge-color)}:root,:host{--b-group-summary-background: var(--b-neutral-99)}.b-grid-row.b-group-footer{--b-grid-cell-border-color: transparent;--b-grid-cell-background: var(--b-group-summary-background)}.b-grid-row.b-group-footer td{padding:.25em 0}.b-grid-row.b-group-footer .b-grid-summary-label{padding-inline-end:1em}.b-grid-row.b-group-footer .b-grid-summary-value{width:100%}.b-grid-group-collapsed.b-header-summary .b-group-title{--bi-grid-cell-overflow: clip}:root,:host{--b-locked-rows-separator-width: 1px;--b-locked-rows-separator-color: var(--b-grid-splitter-color, var(--b-grid-splitter-narrow-color))}.b-locked-rows{z-index:1}.b-locked-rows [aria-rowcount="1"] .b-virtual-scrollers{flex-basis:0}.b-locked-rows:has(.b-widget-scroller.b-grid-empty){overflow:visible}.b-locked-rows:has(.b-widget-scroller.b-grid-empty) .b-grid-body-wrap,.b-locked-rows:has(.b-widget-scroller.b-grid-empty) .b-grid-panel-body{overflow:visible}.b-locked-rows:has(.b-grid-row){box-shadow:var(--b-grid-header-box-shadow);border-bottom:var(--b-locked-rows-separator-width) solid var(--b-locked-rows-separator-color)}.b-locked-rows .b-widget-scroller.b-grid-empty{min-height:0}.b-locked-rows .b-grid-row.b-last{--b-grid-row-border-width: 0}.b-merge-cells .b-single-child .b-grid-sub-grid:not(.b-grid-sub-grid-collapsed,.b-time-axis-sub-grid,.b-horizontal-overflow){overflow:clip!important}.b-merge-cells .b-grid-row:not(.b-selected,.b-hover) .b-merged-cell{border-bottom:none}.b-merge-cells .b-grid-row:is(.b-selected,.b-hover):has(.b-merged-cell){overflow:visible}.b-merge-cells .b-grid-row:is(.b-selected,.b-hover) .b-merged-cell{top:-1px;height:calc(100% + 1px);border-top:var(--b-grid-row-border-width) solid var(--b-grid-row-border-color)}.b-grid-merged-cells{position:absolute;contain:strict;z-index:2;display:flex;align-items:flex-start;border-bottom:var(--b-grid-cell-border-width) solid var(--b-grid-cell-border-color);--b-grid-cell-background: transparent;--b-grid-row-border-color: transparent;--bi-grid-cell-overflow: visible}.b-merge-cells-passthrough .b-grid-merged-cells{pointer-events:none}.b-grid-merged-cells .b-grid-cell{position:sticky;top:0;flex:1;contain:none}.b-grid-merged-cells.b-selected{background:var(--b-grid-cell-selected-background)}:root,:host{--b-grid-summary-label-font-size: 1em;--b-grid-summary-value-font-size: 1em}.b-summary-wrap{display:grid;column-gap:1em;grid-template-columns:min-content auto;align-items:center;width:100%}.b-summary-wrap .b-grid-summary-label{font-size:var(--b-grid-summary-label-font-size)}.b-summary-wrap .b-grid-summary-value{overflow:clip;text-overflow:ellipsis;font-size:var(--b-grid-summary-value-font-size)}.b-summary-wrap .b-grid-summary-value.b-no-label{grid-column:span 2}:root,:host{--b-quick-find-header-inset: 0;--b-quick-find-hit-padding: .2em 0;--b-quick-find-header-badge-color: var(--b-grid-header-color)}.b-quick-hit-cell{background:var(--b-quick-find-background, var(--b-primary-95))}.b-quick-hit-text{border-radius:2px;--b-primary: var(--b-quick-find-primary);font-weight:var(--b-quick-find-font-weight);background:var(--b-quick-find-background, var(--b-primary-95));line-height:.8}.b-quick-hit-text{padding:var(--b-quick-find-hit-padding)}.b-quick-hit-header{position:absolute;z-index:1;display:grid;place-items:center;--b-primary: var(--b-quick-find-primary);inset:var(--b-quick-find-header-inset);background:var(--b-quick-find-background, var(--b-primary-95))}.b-quick-hit-cell-badge,.b-quick-hit-header .b-quick-hit-badge{position:absolute;line-height:1;font-size:var(--b-quick-find-badge-font-size);inset-inline-end:var(--b-quick-find-badge-offset);top:var(--b-quick-find-badge-offset)}.b-quick-hit-header .b-quick-hit-badge{color:var(--b-quick-find-header-badge-color)}.b-quick-hit-cell-badge{color:var(--b-quick-find-badge-color)}:root,:host{--b-grid-splitter-zindex: 10;--b-region-resize-splitter-width: var(--b-splitter-size);--b-region-resize-splitter-width-hover: var(--b-splitter-hover-size);--b-region-resize-splitter-touch-width-hover: var(--b-splitter-touch-hover-size);--b-region-resize-splitter-collapsed-width: var(--b-region-resize-splitter-width);--b-region-resize-splitter-color: var(--b-splitter-color);--b-region-resize-button-color: var(--b-splitter-button-icon-color);--b-region-resize-splitter-hover-color: var(--b-splitter-hover-color);--b-region-resize-button-hover-color: var(--b-splitter-button-hover-color);--bi-grid-splitter-button-size: 1em;--bi-grid-splitter-button-display: flex}.b-grid-base.b-split{--b-grid-splitter-color: var(--b-region-resize-splitter-color)}.b-grid-base.b-split .b-grid-splitter:not(.b-disabled){--b-grid-splitter-width: var(--b-region-resize-splitter-width)}@media (pointer : coarse){.b-grid-base.b-split{--b-region-resize-splitter-width-hover: var(--b-region-resize-splitter-touch-width-hover)}}.b-grid-splitter{position:relative;pointer-events:var(--bi-grid-splitter-pointer-events, none);z-index:var(--b-grid-splitter-zindex)}@media (any-pointer : coarse){.b-grid-splitter{--bi-grid-splitter-button-size: 1.3em}}.b-split .b-grid-splitter{--bi-grid-splitter-pointer-events: all}.b-grid-splitter.b-disabled{--bi-grid-splitter-pointer-events: none}.b-grid-base.b-split.b-rtl .b-grid-splitter-inner .b-grid-splitter-buttons .b-grid-splitter-button-collapse,.b-grid-base.b-split.b-rtl .b-grid-splitter-inner .b-grid-splitter-buttons .b-grid-splitter-button-expand{scale:-1}.b-grid-base.b-split.b-rtl .b-grid-splitter-inner .b-grid-splitter-buttons .b-grid-splitter-button-expand{justify-content:flex-end}.b-grid-base.b-split.b-rtl .b-grid-splitter-inner .b-grid-splitter-buttons .b-grid-splitter-button-collapse{justify-content:flex-start}.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)){overflow:visible}.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)) .b-grid-splitter-inner{position:absolute;inset-block:0;left:50%;translate:-50%;background:inherit;flex-direction:column;align-items:center;opacity:0;transition:opacity .2s;display:var(--bi-grid-splitter-button-display);width:var(--b-region-resize-splitter-width-hover)}.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)).b-grid-splitter-collapsed{cursor:initial;--b-grid-splitter-width: var(--b-region-resize-splitter-collapsed-width);--b-grid-splitter-color: var(--b-region-resize-splitter-hover-color)}.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)).b-grid-splitter-collapsed .b-grid-splitter-inner{opacity:1}.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)).b-grid-splitter-collapsed:not(.b-grid-splitter-allow-collapse) .b-grid-splitter-button-collapse,.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)).b-grid-splitter-collapsed.b-grid-splitter-allow-collapse .b-grid-splitter-button-expand{visibility:hidden}.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)).b-grid-splitter-collapsed .b-grid-splitter-buttons{--bi-grid-splitter-buttons-opacity: 1;--bi-grid-splitter-buttons-scale: 1}.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)).b-left-only:not(.b-grid-splitter-collapsed) .b-grid-splitter-button-expand,.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)).b-right-only:not(.b-grid-splitter-collapsed) .b-grid-splitter-button-collapse{visibility:hidden}.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)) .b-grid-splitter-buttons{display:flex;position:absolute;translate:0 -50%;height:2.4em;width:2.4em;transition:scale .1s,opacity .1s;opacity:var(--bi-grid-splitter-buttons-opacity, 0);scale:var(--bi-grid-splitter-buttons-scale, 0);font-size:var(--bi-grid-splitter-button-size)}.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)) .b-grid-splitter-button-collapse,.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)) .b-grid-splitter-button-expand{flex:1;cursor:pointer;display:flex;align-items:center;background:var(--b-grid-splitter-color)}:is(.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)) .b-grid-splitter-button-collapse,.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)) .b-grid-splitter-button-expand):hover{--b-region-resize-button-color: var(--b-region-resize-button-hover-color)}.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)) .b-grid-splitter-button-collapse{border-top-left-radius:100% 50%;border-bottom-left-radius:100% 50%;justify-content:flex-end;padding-right:.1em}.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)) .b-grid-splitter-button-expand{border-top-right-radius:100% 50%;border-bottom-right-radius:100% 50%;padding-left:.1em}.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)) .b-grid-splitter-button-icon{cursor:pointer;height:1.5em;fill:var(--b-region-resize-button-color)}.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)).b-hover,.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)).b-partner-splitter-hover,.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)).b-touching,.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)).b-moving{--b-grid-splitter-color: var(--b-region-resize-splitter-hover-color);--bi-region-resize-splitter-inner-width: var(--b-region-resize-splitter-width-hover)}:is(.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)).b-hover,.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)).b-partner-splitter-hover,.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)).b-touching,.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)).b-moving) .b-grid-splitter-inner{opacity:1}:is(.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)).b-hover,.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)).b-partner-splitter-hover,.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)).b-touching,.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)).b-moving):not(.b-partner-splitter-hover){--bi-grid-splitter-buttons-scale: 1;--bi-grid-splitter-buttons-opacity: 1}.b-grid-base.b-split:not(.b-grid-splitter-no-drag) .b-grid-splitter:not(.b-disabled,.b-grid-splitter-collapsed) .b-grid-splitter-inner{cursor:col-resize}.b-grid-header-scroller.b-collapsed,.b-grid-footer-scroller.b-collapsed,.b-virtual-scroller.b-collapsed{width:0;min-width:0!important}.b-grid-splitter-button-collapse .b-splitter-button-touch-area{left:-.9em}.b-grid-splitter-button-expand .b-splitter-button-touch-area{right:-.9em}.b-drag-helper-active .b-grid-base.b-split .b-grid-splitter{pointer-events:none!important}.b-hide-splitter-buttons{--bi-grid-splitter-button-display: none}.b-row-editor .b-bottom-toolbar .b-toolbar-content{justify-content:flex-end}.b-row-editor.b-read-only [data-ref=save]{display:none}.b-row-editor :is(.b-panel-overlay-right,.b-panel-overlay-left) .b-toolbar-content>*{flex:1 1 33%;max-width:10em}:root,:host{--b-row-expander-border-bottom-width: var(--b-grid-row-border-width);--b-row-expander-font-weight: var(--b-grid-cell-font-weight);--b-row-expander-border-bottom-color: var(--b-grid-row-border-color);--b-row-expander-color: var(--b-grid-cell-color)}.b-row-expander-body{display:flex;inset-inline:0;background:var(--b-row-expander-background);color:var(--b-row-expander-color);font-weight:var(--b-row-expander-font-weight);padding:var(--b-row-expander-padding, 0);outline:none}.b-row-expander-body,.b-row-expander-body.b-no-resize-observer.b-resize-monitored{position:absolute}.b-row-expander-body:focus-visible{outline:var(--b-widget-focus-outline-width) solid var(--b-widget-focus-outline-color);outline-offset:calc(var(--b-widget-focus-outline-width) * -1)}.b-grid-vertical-scroller>.b-row-expander-body{z-index:100;transition:height .3s,top .3s;overflow:hidden}.b-row-expander-loading{justify-content:center;align-items:center;font-size:1.2em;display:flex;width:100%}.b-row-expander-loading .b-icon-spinner{margin-inline-end:.5em}.b-grid-base .b-grid-row [data-column=expanderActionColumn] .b-icon{transition:rotate .15s ease-in-out;font-size:1em;rotate:180deg}.b-row-expander-disabled [data-column=expanderActionColumn]{opacity:.2;pointer-events:none}.b-row-expander.b-grid-base.b-animating.b-row-expander-animating.b-auto-height .b-grid-body-container,.b-row-expander.b-grid-base.b-animating.b-row-expander-animating.b-auto-height .b-grid-vertical-scroller{transition:height .3s;overflow-y:hidden!important}.b-row-expander.b-grid-base.b-animating.b-row-expander-animating.b-auto-height .b-yscroll-pad{display:none}.b-row-expander.b-grid-base.b-animating.b-row-expander-animating .b-grid-row{transition:height .3s,top .3s}.b-grid-base .b-row-expander-row-expanded:not(.b-row-is-collapsing) [data-column=expanderActionColumn] .b-icon-collapse-left{rotate:270deg}.b-grid-base .b-row-expander-row-expanded:not(.b-row-is-collapsing) [data-column=expanderActionColumn] .b-icon-collapse-right{rotate:90deg}.b-row-expander-row-expanded{border-bottom:var(--b-row-expander-border-bottom-width) solid var(--b-row-expander-border-bottom-color)}:root,:host{--b-row-reorder-indicator-size: 2px;--b-row-reorder-grip-icon: "\f58e";--b-row-reorder-indicator-color: var(--b-secondary);--b-row-reorder-indicator-invalid-color: var(--b-color-red);--b-row-reorder-box-shadow: var(--b-elevation-1);--b-row-reorder-invalid-background: color-mix(in oklab, var(--b-row-reorder-indicator-invalid-color), transparent 80%);--b-row-reorder-proxy-opacity: .5}.b-row-drop-indicator{display:none;pointer-events:none}.b-row-reordering .b-row-drop-indicator{position:absolute;display:block;left:0;width:100%;z-index:2000;top:calc(var(--b-row-reorder-indicator-size) / -2);height:var(--b-row-reorder-indicator-size);background-color:var(--b-row-reorder-indicator-color)}.b-row-reordering .b-row-drop-indicator.b-drag-invalid{--b-row-reorder-indicator-color: var(--b-row-reorder-indicator-invalid-color)}.b-row-reordering .b-grid-body-container{z-index:4}.b-row-reordering .b-drag-original{opacity:.3}.b-row-reordering .b-grid-group-collapsed.b-row-reordering-target{--b-grid-cell-background: var(--b-grid-cell-hover-background)}.b-row-reordering .b-row-reordering-target{z-index:9999;box-shadow:0 1px 0 0 var(--b-row-reorder-indicator-color) inset,0 -1px 0 0 var(--b-row-reorder-indicator-color) inset}.b-row-reorder-grip{display:grid;grid-template-columns:auto 1fr}.b-row-reorder-grip.b-grid-cell-align-end{justify-items:end}.b-row-reorder-grip.b-grid-cell-align-end:before{margin-inline-end:auto}.b-row-reorder-grip.b-grid-cell-align-right{justify-items:right}.b-row-reorder-grip.b-grid-cell-align-center{justify-items:center}.b-row-reorder-grip:before{display:inline-flex;align-self:stretch;align-items:center;cursor:move;font-size:.8em;content:var(--b-row-reorder-grip-icon);font-family:var(--b-widget-icon-font-family);font-weight:var(--b-widget-icon-font-weight);padding-inline:var(--b-grid-cell-padding-inline);margin-inline-start:calc(var(--b-grid-cell-padding-inline) * -1)}:is(.b-show-grip-on-hover.b-row-reordering,.b-show-grip-on-hover .b-grid-row:not(:hover,.b-hover)) .b-row-reorder-grip:before{visibility:hidden}.b-row-reorder-proxy{display:flex;flex-direction:column;width:auto!important;height:auto!important;z-index:10000;overflow:visible}.b-row-reorder-proxy .b-grid-row{position:relative}.b-row-reorder-proxy.b-drag-copy .b-row-proxy-copy{display:flex}.b-row-reorder-proxy .b-row-proxy-copy{display:none;height:1em;width:1em;align-items:center;justify-content:center;position:absolute;inset-inline-start:-.5em;top:-.5em;border-radius:50%;padding:.75em;z-index:20000;background:var(--b-panel-background);box-shadow:var(--b-row-reorder-box-shadow)}.b-row-reorder-proxy .b-grid-row{width:100%;position:relative}.b-row-reorder-proxy.b-dragging{transition:margin-top .2s,opacity .2s;background:transparent;opacity:var(--b-row-reorder-proxy-opacity)}.b-row-reorder-proxy.b-dragging.b-drag-invalid{--b-grid-cell-background: var(--b-row-reorder-invalid-background)}.b-row-reorder-proxy.b-dragging .b-grid-row{transition:transform .2s,background-color .2s}.b-row-drag-count-indicator:before{inset-inline-end:-.7em}.b-grid-tree-grouped .b-tree-parent-row .b-row-reorder-grip:before{content:none}.b-row-resize .b-grid-row.b-resize-handle{cursor:row-resize!important}.b-row-resize .b-grid-row.b-resizing{z-index:2}.b-row-resize.b-row-resizing .b-grid-row{pointer-events:none}.b-row-resize.b-row-resizing *{cursor:row-resize!important}.b-search-hit-cell{background:var(--b-quick-find-background, var(--b-primary-95))}.b-search-hit-text{padding:.3em 0;--b-primary: var(--b-quick-find-primary);font-weight:var(--b-quick-find-font-weight);background:var(--b-quick-find-background, var(--b-primary-95))}.b-search-hit-field{position:absolute;inset:0;padding:.5em 0;background:var(--b-quick-find-background, var(--b-primary-95))}.b-search-hit-cell-badge{position:absolute;line-height:1;color:var(--b-quick-find-badge-color);font-size:var(--b-quick-find-badge-font-size);inset-inline-end:var(--b-quick-find-badge-offset);top:var(--b-quick-find-badge-offset)}:root,:host{--b-sort-header-icon: "\f062";--b-sort-header-index-font-size: .6em;--b-sort-header-index-color: inherit;--bi-grid-sort-icon-rotate: 0;--bi-grid-sort-icon-opacity: 0;--bi-grid-sort-icon-size: 0;--bi-grid-sort-icon-margin-inline-start: 0}.b-sort-hover-icon .b-grid-header.b-sortable{cursor:pointer}.b-sort-hover-icon .b-grid-header.b-sortable:not(.b-sort,.b-resizing):hover{--bi-grid-sort-icon-opacity: .5;--bi-grid-sort-icon-size: var(--b-grid-header-icon-font-size);--bi-grid-sort-icon-margin-inline-start: var(--b-grid-header-gap)}.b-grid-base.b-sort.b-dragging-header .b-grid-header:not(.b-sort){--bi-grid-sort-icon-opacity: 0;--bi-grid-sort-icon-size: 0;--bi-grid-sort-icon-margin-inline-start: 0}.b-sort-icon{transition-property:opacity,color,font-size,margin;overflow:hidden;white-space:nowrap;color:var(--b-grid-header-icon-color);opacity:var(--bi-grid-sort-icon-opacity);font-size:var(--bi-grid-sort-icon-size);margin-inline-start:var(--bi-grid-sort-icon-margin-inline-start);transition-duration:var(--b-grid-header-icon-transition-duration)}.b-sort-icon:before{display:inline-block;transition:rotate .2s;content:var(--b-sort-header-icon);font-family:var(--b-widget-icon-font-family);font-weight:var(--b-widget-icon-font-weight);rotate:var(--bi-grid-sort-icon-rotate)}:is(.b-grid-header.b-asc,.b-grid-header.b-desc) .b-sort-icon{--bi-grid-sort-icon-opacity: 1;--bi-grid-sort-icon-size: var(--b-grid-header-icon-font-size);--bi-grid-sort-icon-margin-inline-start: var(--b-grid-header-gap)}.b-grid-header.b-desc .b-sort-icon{--bi-grid-sort-icon-rotate: 180deg}.b-sort .b-grid-header-text[data-sort-index]:before{content:attr(data-sort-index);position:relative;top:1em;z-index:30;order:1;color:var(--b-sort-header-index-color);font-size:var(--b-sort-header-index-font-size)}.b-split-container{display:flex;height:100%;position:relative;overflow:hidden}.b-split-container.b-split-horizontal,.b-split-container.b-split-both{flex-direction:column}.b-split-container.b-split-vertical{flex-direction:row}.b-split-container .b-split-top,.b-split-container .b-split-bottom{display:flex;flex:1}.b-split-container>.b-grid-base,.b-split-container>div>.b-grid-base{flex:1;flex-basis:0;height:unset!important}.b-sticky-cells .b-grid-sticky-row{position:absolute;top:0;left:0;min-width:auto;border:0 none;padding:0;contain:initial}.b-sticky-cells .b-grid-sticky-row .b-grid-cell{width:min-content;contain:initial;padding:0;border:0 none}.b-sticky-cells .b-sticky-cells-current-top-row .b-sticky-content-el{visibility:hidden}.b-sticky-cells .b-sticky-cells-current-top-row.b-not-enough-height .b-sticky-content-el{visibility:visible;align-self:flex-end}:root,:host{--b-stripe-odd-color: var(--b-neutral-98);--b-stripe-even-color: var(--b-neutral-100);--b-stripe-border-width: 0}.b-stripe{--b-grid-row-border-width: var(--b-stripe-border-width)}.b-stripe .b-grid-row.b-odd{--b-grid-cell-background: var(--b-stripe-odd-color)}.b-stripe .b-grid-row.b-even{--b-grid-cell-background: var(--b-stripe-even-color)}.b-stripe .b-hide-row-hover .b-grid-row.b-odd{--b-grid-cell-hover-background: var(--b-stripe-odd-color);--b-grid-cell-selected-background: var(--b-stripe-odd-color);--b-grid-cell-hover-selected-background: var(--b-stripe-odd-color)}.b-stripe .b-hide-row-hover .b-grid-row.b-even{--b-grid-cell-hover-background: var(--b-stripe-even-color);--b-grid-cell-selected-background: var(--b-stripe-even-color);--b-grid-cell-hover-selected-background: var(--b-stripe-even-color)}.b-summary-disabled .b-grid-footer-container{display:none}.b-grid-footer.b-focused:focus-visible{outline:var(--b-grid-cell-focused-outline-width) solid var(--b-grid-cell-focused-outline-color);outline-offset:var(--b-grid-cell-focused-outline-offset, calc(var(--b-grid-cell-focused-outline-width) * -1))}.b-generated-parent .b-grid-cell .b-grid-tree-group-summary{display:flex;justify-content:inherit}:root,:host{--b-grid-footer-outline-width: var(--b-grid-header-border-width);--b-grid-footer-outline-color: var(--b-grid-header-border-color);--b-grid-footer-box-shadow: none;--b-grid-footer-border-width: var(--b-grid-header-border-width);--b-grid-footer-padding: var(--b-grid-header-padding);--b-grid-footer-background: var(--b-neutral-100);--b-grid-footer-border-color: var(--b-grid-header-border-color);--b-grid-footer-color: var(--b-grid-header-color)}.b-grid-footer-container{outline:var(--b-grid-footer-outline-width) solid var(--b-grid-footer-outline-color);box-shadow:var(--b-grid-footer-box-shadow)}.b-grid-footer-container.b-hidden{display:none}.b-grid-footer-scroller{display:flex;position:relative;overflow:clip;flex-shrink:0;min-width:0}.b-grid-footers{display:inline-flex;align-items:stretch;height:100%;white-space:nowrap;line-height:initial}.b-grid-footer{display:flex;flex-shrink:0;align-items:stretch;transition:background-color .2s;color:var(--b-grid-footer-color);background:var(--b-grid-footer-background);border-inline-end:var(--b-grid-footer-border-width) solid var(--b-grid-footer-border-color);font-weight:var(--b-grid-footer-font-weight);padding:var(--b-grid-footer-padding);text-align:var(--b-grid-footer-text-align)}.b-grid-footer:last-child{--b-grid-footer-border-width: 0}.b-grid-footer-align-start,.b-grid-footer-align-left{--b-grid-footer-text-align: start}.b-grid-footer-align-center{--b-grid-footer-text-align: center}.b-grid-footer-align-end,.b-grid-footer-align-right{--b-grid-footer-text-align: end}:root,:host{--b-grid-header-font-size: inherit;--b-grid-header-font-weight: 500;--b-grid-header-padding: var(--b-grid-cell-padding-inline);--b-grid-header-text-transform: none;--b-grid-header-text-align: start;--b-grid-header-gap: .5em;--b-grid-header-icon-font-size: 1em;--b-grid-header-border-width: var(--b-grid-cell-border-width);--b-grid-header-container-border-width: 1px;--b-grid-header-zindex: 1;--b-grid-header-icon-transition-duration: var(--b-default-transition-duration);--b-grid-header-background: var(--b-neutral-100);--b-grid-header-box-shadow: var(--b-elevation-0);--b-grid-header-color: var(--b-widget-color);--b-grid-header-icon-color: var(--b-grid-header-color);--b-grid-header-border-color: var(--b-grid-cell-border-color);--b-grid-header-hover-color: var(--b-widget-color)}.b-grid-headers,.b-grid-footers{contain:paint style layout;flex:1 1 auto;z-index:var(--b-grid-header-zindex)}div.b-grid-header-container,.b-grid-footer-container{display:flex;z-index:var(--b-grid-header-zindex)}div.b-grid-header-container.b-hidden{clip-path:inset(0 0 100% 0);contain:strict;border-bottom:none}div.b-grid-header-container .b-yscroll-pad{border-bottom:var(--b-grid-header-container-border-width) solid var(--b-grid-header-border-color)}.b-grid-header-scroller{display:flex;position:relative;overflow:clip;min-width:0;box-shadow:var(--b-grid-header-box-shadow)}.b-grid-headers{display:flex;flex-flow:row nowrap;align-items:stretch;overflow:clip;line-height:initial;position:relative}.b-grid-header{position:relative;display:flex;user-select:none;-webkit-user-select:none;flex-direction:column;flex-shrink:0;align-items:stretch;justify-content:center;overflow:clip;transition:background-color var(--b-default-transition-duration),border var(--b-default-transition-duration);contain:style;--b-grid-header-applied-background: var(--b-grid-header-background);background:var(--b-grid-header-applied-background);border-inline-end:var(--b-grid-header-border-width) solid var(--b-grid-header-border-color);color:var(--b-grid-header-color);font-size:var(--b-grid-header-font-size);font-weight:var(--b-grid-header-font-weight);text-transform:var(--b-grid-header-text-transform)}.b-grid-header.b-depth-0:hover{color:var(--b-grid-header-hover-color);--b-grid-header-applied-background: var(--b-grid-header-hover-background, var(--b-primary-98));--b-grid-header-icon-color: var(--b-grid-header-hover-color)}.b-grid-header.b-focused:focus-visible{outline:var(--b-grid-cell-focused-outline-width) solid var(--b-grid-cell-focused-outline-color);outline-offset:calc(var(--b-grid-cell-focused-outline-width) * -1)}.b-grid-header.b-depth-0{width:0;padding-inline:var(--b-grid-header-padding);border-block-end:var(--b-grid-header-container-border-width) solid var(--b-grid-header-border-color)}.b-fill-last-column .b-grid-header.b-last-leaf:not(.b-drop-placeholder){border-inline-end:none}.b-grid-header:has(.b-widget) .b-grid-header-text-content:empty{display:none}.b-grid-header-parent{border-inline-end:none;flex-basis:auto;padding-inline:0}.b-grid-header-parent>.b-grid-header-text{flex:1 1 auto;padding:var(--b-grid-header-padding)}.b-grid-header-parent:where(:not(.b-last-parent))>.b-grid-header-text{transition:background-color var(--b-default-transition-duration),border var(--b-default-transition-duration);border-inline-end:var(--b-grid-header-border-width) solid var(--b-grid-header-border-color)}.b-grid-header-children{display:flex;flex-flow:row nowrap;flex:1 1 auto;transition:border var(--b-default-transition-duration);border-top:var(--b-grid-header-border-width) solid var(--b-grid-header-border-color)}.b-grid-header-children>*{width:inherit}.b-grid-header-text{display:flex;align-items:center;padding-block:var(--b-grid-header-padding)}.b-grid-header-text:has(.b-widget){gap:var(--b-grid-header-gap)}.b-grid-header-text-content{flex:1;overflow:clip;text-overflow:ellipsis;white-space:nowrap;width:0;text-align:var(--b-grid-header-text-align)}.b-grid-header-text-content.b-has-text>*{margin-inline-end:var(--b-grid-header-gap)}.b-grid-header-align-right,.b-grid-header-align-end{--b-grid-header-text-align: end}.b-grid-header-align-center{--b-grid-header-text-align: center}:is(.b-writing-mode-sideways-lr,.b-writing-mode-sideways-rl,.b-writing-mode-vertical-lr,.b-writing-mode-vertical-rl) .b-grid-header-text-content{display:flex;text-align:start;align-items:var(--b-grid-header-text-align)}.b-writing-mode-sideways-lr .b-grid-header-text-content{writing-mode:sideways-lr}.b-writing-mode-sideways-rl .b-grid-header-text-content{writing-mode:sideways-rl}.b-writing-mode-horizontal-tb .b-grid-header-text-content{writing-mode:horizontal-tb}.b-writing-mode-vertical-lr .b-grid-header-text-content{writing-mode:vertical-lr}.b-writing-mode-vertical-rl .b-grid-header-text-content{writing-mode:vertical-rl}.b-grid-header-collapse-button{background:transparent;--b-button-height: 1em;--b-button-type-text-color: var(--b-neutral-60)}.b-grid-header-collapse-button:hover{--b-button-color: var(--b-grid-header-color)}.b-check-header-with-checkbox{align-items:center}.b-check-header-with-checkbox .b-grid-header-text{display:none}:root{--bi-grid-cell-dirty-indicator-clip-path: polygon(0% 50%, 0% 0%, 50% 0%);--bi-grid-cell-dirty-indicator-clip-path-rtl: polygon(100% 50%, 50% 0%, 100% 0%);--b-grid-cell-auto-height-padding-block: var(--b-grid-cell-padding-inline)}.b-no-column-lines,.b-no-column-lines .b-grid-sub-grid{--b-grid-cell-border-width: 0;--b-grid-header-border-width: 0}.b-no-row-lines{--b-grid-row-border-width: 0}.b-grid-sub-grid{position:relative}.b-grid-sub-grid.b-hidden{display:none}.b-grid-sub-grid-collapsed{width:0;min-width:0!important;overflow:hidden!important}.b-animating .b-grid-header-scroller,.b-animating .b-grid-sub-grid{transition-property:width,flex,min-width;transition-duration:.3s}.b-grid-row{position:absolute;display:flex;flex-direction:row;align-items:stretch;inset-inline-start:0;overflow:clip;contain:layout;height:var(--b-grid-row-height);z-index:var(--b-grid-row-zindex)}.b-grid-sub-grid .b-grid-row{min-width:100%}.b-grid-row.b-hover .b-grid-cell{--b-grid-cell-applied-background: var(--b-grid-cell-hover-background, var(--b-primary-98));--b-grid-cell-color: var(--b-grid-cell-selected-color);--b-grid-link-color: var(--b-grid-row-hover-link-color, var(--b-primary-30))}.b-selected :is(.b-grid-row .b-grid-cell),.b-grid-row .b-grid-cell.b-selected{--b-grid-cell-applied-background: var(--b-grid-cell-selected-background, var(--b-primary-96));--b-grid-cell-color: var(--b-grid-cell-selected-color);--b-grid-link-color: var(--b-grid-row-hover-link-color, var(--b-primary-30));transition:background-color var(--b-default-transition-duration),color var(--bi-grid-cell-selected-color-transition-duration, var(--b-default-transition-duration))}.b-grid-row.b-hover.b-selected .b-grid-cell{--b-grid-cell-applied-background: var(--b-grid-cell-hover-selected-background, var(--b-primary-94))}.b-grid-row.fa{display:flex}.b-grid-row.fa:before{content:none}.b-grid-row.b-row-placeholder .b-grid-cell{color:transparent;clip-path:inset(1em 1em 1em 1em)}.b-grid-row.b-row-placeholder .b-grid-cell>*:not(.b-editor){display:none}.b-grid-row.b-row-placeholder .b-grid-cell:after{content:"";position:absolute;inset:1em;border-radius:5px;background:var(--b-grid-row-placeholder-color)}.b-hide-row-hover{--b-grid-cell-hover-background: var(--b-grid-cell-background);--b-grid-cell-selected-background: var(--b-grid-cell-background);--b-grid-cell-hover-selected-background: var(--b-grid-cell-background)}.b-grid-body-container.b-vertical-overflow .b-grid-row.b-last .b-grid-cell{--b-grid-row-border-color: transparent}.b-grid-cell{position:absolute;display:flex;flex-shrink:0;contain:strict;align-items:center;white-space:nowrap;height:100%;background:var(--b-grid-cell-applied-background, var(--b-grid-cell-background));color:var(--b-grid-cell-color);border-inline-end:var(--b-grid-cell-border-width) solid var(--b-grid-cell-border-color);border-bottom:var(--b-grid-row-border-width) solid var(--b-grid-row-border-color);font-size:var(--b-grid-cell-font-size);font-weight:var(--b-grid-cell-font-weight);gap:var(--b-grid-cell-gap);overflow:var(--bi-grid-cell-overflow);padding-inline:var(--b-grid-cell-padding-inline);padding-block:var(--b-grid-cell-padding-block)}.b-grid-cell:not(.b-focused) *,.b-grid-cell:not(.b-focused) *:before,.b-grid-cell:not(.b-focused) *:after{transition:none}.b-theme-transition .b-grid-cell{transition:background-color var(--b-default-transition-duration),border var(--b-default-transition-duration)}.b-windows .b-grid-cell{contain:layout}.b-grid-cell.b-focused:focus-visible{outline:var(--b-grid-cell-focused-outline-width) solid var(--b-grid-cell-focused-outline-color);outline-offset:var(--b-grid-cell-focused-outline-offset, calc(var(--b-grid-cell-focused-outline-width) * -1))}.b-grid-cell.b-hover{--b-grid-cell-applied-background: var(--b-grid-cell-hover-background, var(--b-primary-98));--b-grid-cell-color: var(--b-grid-cell-selected-color)}.b-grid-cell.b-selected{--b-grid-cell-applied-background: var(--b-grid-cell-selected-background, var(--b-primary-96));--b-grid-cell-color: var(--b-grid-cell-selected-color)}.b-grid-cell.b-auto-height{white-space:normal}.b-grid-cell.b-auto-height:not(.b-tree-cell){--b-grid-cell-padding-block: var(--b-grid-cell-auto-height-padding-block)}.b-grid-cell.b-measuring-auto-height{contain:paint style layout;align-self:baseline;height:auto}.b-grid-no-text-selection .b-grid-cell{user-select:none;-webkit-user-select:none}.b-grid-cell a{color:var(--b-grid-link-color, var(--b-primary-30))}.b-supports-has.b-use-ellipsis:not(.b-grid-measuring) .b-grid-row{height:var(--b-grid-row-height)}.b-supports-has.b-use-ellipsis:not(.b-grid-measuring) .b-grid-row .b-grid-cell:not(.b-auto-height,.b-row-reorder-grip,:has(*)){display:block;text-overflow:ellipsis;line-height:var(--b-grid-row-height)}.b-grid-cell-align-right,.b-grid-cell-align-end{justify-content:flex-end;text-align:end}.b-grid-cell-align-center{justify-content:center;text-align:center}.b-rtl{--bi-grid-cell-dirty-indicator-clip-path: var(--bi-grid-cell-dirty-indicator-clip-path-rtl) }.b-show-dirty .b-cell-dirty:not(.b-editing):after,.b-show-dirty-during-edit .b-cell-dirty:after{content:"";z-index:2;position:absolute;top:0;inset-inline-start:1px;width:1.2em;height:1.2em;background-color:var(--b-grid-cell-dirty-color);clip-path:var(--bi-grid-cell-dirty-indicator-clip-path)}.b-grid-splitter{transition:background var(--b-default-transition-duration);background:var(--b-grid-splitter-color, var(--b-grid-splitter-narrow-color));flex:0 0 var(--b-grid-splitter-width)}.b-grid-splitter .b-grid-splitter-inner{display:none}.b-virtual-scrollers{z-index:3;display:flex;flex-direction:row;contain:paint style layout}.b-firefox .b-virtual-scrollers{contain:paint layout}.b-overlay-scrollbar.b-firefox.b-windows .b-virtual-scrollers,.b-overlay-scrollbar.b-firefox.b-windows .b-virtual-scrollers .b-virtual-scroller{pointer-events:auto}.b-overlay-scrollbar .b-virtual-scrollers{position:absolute;left:0;right:0;bottom:0;pointer-events:none}.b-overlay-scrollbar .b-virtual-scrollers .b-virtual-scroller{height:16px;pointer-events:none}.b-virtual-scrollers .b-virtual-scroller{overflow-x:scroll;overflow-y:hidden}.b-virtual-scrollers .b-virtual-width{height:1px}.b-overlay-scrollbar .b-virtual-scroller:hover,.b-overlay-scrollbar .b-virtual-scroller.b-show-virtual-scroller{pointer-events:all;opacity:1;transition:opacity .5s}:root,:host{--b-action-column-button-size: 1.1em;--b-action-column-color: var(--b-widget-color);--b-action-column-row-hover-color: var(--b-widget-color);--b-action-column-readonly-color: var(--b-widget-disabled-color);--b-action-column-hover-color: var(--b-neutral-10)}.b-action-ct{display:flex;flex-flow:row nowrap;gap:.5em}.b-action-item{aspect-ratio:1 / 1;border-radius:50%;font-size:var(--b-action-column-button-size);color:var(--b-action-column-color);pointer-events:var(--bi-action-column-pointer-events, auto)}.b-action-item:hover{--b-action-column-color: var(--b-action-column-hover-color)}.b-action-item:focus-visible{outline-offset:3px;outline:currentColor solid 3px}.b-grid-base.b-read-only.b-action-column-readonly{--b-action-column-color: var(--b-action-column-readonly-color);--bi-action-column-pointer-events: none}.b-grid-row.b-hover,.b-grid-row.b-selected{--b-action-column-color: var(--b-action-column-row-hover-color)}:root,:host{--b-color-column-border-width: 0;--b-color-column-empty-border-width: 1px;--b-color-column-border-color: transparent;--b-color-column-empty-border-color: var(--b-border-7);--b-color-column-picker-width: 11em}.b-color-cell-swatch{border-radius:1em;cursor:pointer;width:1.5em;height:1.5em;margin-inline:1em;flex-shrink:0;--b-primary: transparent;background:var(--b-primary);border:var(--b-color-column-border-width) solid var(--b-color-column-border-color)}.b-color-cell-swatch.b-empty{--b-color-column-border-width: var(--b-color-column-empty-border-width);--b-color-column-border-color: var(--b-color-column-empty-border-color)}.b-color-cell-swatch.b-show-color-name{margin-inline:0}.b-color-column-picker{width:var(--b-color-column-picker-width)}:root,:host{--b-percent-column-bar-border-radius: var(--b-widget-border-radius);--b-percent-column-bar-max-height: .6em;--b-percent-column-bar-border: none;--b-percent-column-circle-thickness: .5em;--b-percent-column-circle-label-font-size: .8em;--b-percent-column-bar-background: var(--b-neutral-95);--b-percent-column-low-fill-background: var(--b-color-orange);--b-percent-column-wide-value-color: var(--b-neutral-100);--b-percent-column-low-value-color: var(--b-secondary);--b-percent-column-zero-value-color: transparent;--b-percent-column-circle-background: var(--b-grid-cell-border-color);--b-percent-column-circle-label-color: var(--b-grid-cell-color);--bi-percent-column-transition: none}.b-percent-bar-outer{display:flex;height:30%;overflow:hidden;width:100%;outline-offset:-1px;background:var(--b-percent-column-bar-background);outline:var(--b-percent-column-bar-border);border-radius:var(--b-percent-column-bar-border-radius);max-height:var(--b-percent-column-bar-max-height)}.b-percent-bar-outer.b-low{--b-percent-column-fill-background: var(--b-percent-column-low-value-color);--b-percent-column-value-color: var(--b-percent-column-low-value-color)}.b-percent-bar-outer.b-zero{--b-percent-column-value-color: var(--b-percent-column-zero-value-color)}.b-percent-bar-outer .b-percent-bar{z-index:1;background:var(--b-percent-column-fill-background, var(--b-primary-50));width:var(--bi-percent-bar-value);transition:var(--bi-percent-column-transition)}.b-percent-bar-value{display:flex;align-items:center;justify-content:flex-start;flex:1;font-size:.6em;container-name:percent-column-value;container-type:size;z-index:1}.b-percent-bar-value label{transition:translate .5s,color .5s;margin-inline-start:.5em;color:var(--b-percent-column-value-color, var(--b-primary-50));translate:var(--bi-percent-column-value-translate, 0)}@property --bi-percent-column-circle-angle{syntax : ""; inherits : false; initial-value : 0turn;}.b-percent-done-circle{--bi-percent-column-circle-angle: 0;display:flex;align-items:center;justify-content:center;margin:0 auto;max-height:3em;max-width:3em;border-radius:50%;background:conic-gradient(var(--b-percent-column-circle-done-color, var(--b-primary)) 0 var(--bi-percent-column-circle-angle),transparent var(--bi-percent-column-circle-angle) 1turn) var(--b-percent-column-circle-background)}.b-percent-done-circle:after{content:attr(data-value);display:flex;align-items:center;justify-content:center;border-radius:50%;width:calc(100% - var(--b-percent-column-circle-thickness));height:calc(100% - var(--b-percent-column-circle-thickness));background:var(--b-percent-column-circle-label-background, var(--b-grid-cell-background));font-size:var(--b-percent-column-circle-label-font-size);color:var(--b-percent-column-circle-label-color)}.b-animating .b-percent-done-circle{transition:--bi-percent-column-circle-angle .3s,height .3s,width .3s}@container percent-column-value (width < 2em){label{margin-inline-start:-.5em!important;--b-percent-column-value-color: var(--b-percent-column-wide-value-color);--bi-percent-column-value-translate: -100%}}.b-grid-body-container.b-scrolling .b-percent-bar,.b-grid-body-container.b-scrolling .b-percent-bar *{transition:none}.b-animating,.b-grid-row-updating{--bi-percent-column-transition: width .5s, padding .5s, background-color .5s}:root,:host{--b-rating-column-icon-size: 1.2em;--b-rating-column-empty-color: var(--b-neutral-95);--b-rating-column-filled-color: var(--b-color-yellow)}.b-rating-cell .b-rating-icon{font-size:var(--b-rating-column-icon-size);color:var(--bi-rating-column-icon-color);opacity:var(--bi-rating-column-icon-opacity, 1);transition:var(--bi-rating-column-icon-transition, all var(--b-default-transition-duration) linear)}.b-theme-transition :is(.b-rating-cell .b-rating-icon){transition:color var(--b-default-transition-duration)}.b-rating-cell .b-empty{--bi-rating-column-icon-color: var(--b-rating-column-empty-color);--bi-rating-column-icon-opacity: var(--bi-rating-column-empty-opacity, 1)}.b-rating-cell .b-filled{--bi-rating-column-icon-color: var(--b-rating-column-filled-color)}.b-rating-cell-inner{display:flex}.b-grid-base:not(.b-read-only) .b-rating-cell-inner:not(.b-not-editable) .b-rating-icon{cursor:pointer}.b-grid-base:not(.b-read-only) .b-rating-cell-inner:not(.b-not-editable) .b-rating-icon:hover~.b-icon{--bi-rating-column-icon-color: var(--b-rating-column-empty-color);--bi-rating-column-empty-opacity: 1}.b-grid-base:not(.b-read-only) .b-rating-cell-inner:not(.b-not-editable):hover .b-rating-icon{--bi-rating-column-icon-color: var(--b-rating-column-filled-color);--bi-rating-column-empty-opacity: .4}.b-grid-body-container.b-scrolling .b-rating-icon{--bi-rating-column-icon-transition: none}:root,:host{--b-row-number-column-background: var(--b-neutral-97)}.b-grid-base .b-grid-cell.b-row-number-cell{--b-grid-cell-background: var(--b-row-number-column-background)}:root,:host{--b-tree-loading-icon: "\f110";--b-tree-icon-width: 1.25em;--b-tree-cell-gap: var(--b-widget-gap);--b-tree-parent-font-weight: 500;--b-tree-indent-size: 1.7em;--b-tree-leaf-icon-font-size: .3em;--b-tree-expander-icon-font-size: 1.2em;--b-tree-expander-color: var(--b-text-3);--b-tree-expander-row-hover-color: var(--b-tree-expander-color);--b-tree-parent-color: var(--b-grid-cell-color);--b-tree-icon-color: var(--b-tree-expander-color);--b-tree-icon-row-hover-color: var(--b-tree-expander-color);--b-tree-line-width: 2px;--b-tree-line-color: var(--b-neutral-85);--b-tree-line-offset: .45em}.b-internal{--b-tree-level: null}.b-tree-expander{position:relative;top:1px;cursor:pointer;display:grid;place-items:center}.b-loading-children .b-tree-expander.b-icon:before{animation:b-anim-rotate 2s infinite linear;content:var(--b-tree-loading-icon)}.b-grid-cell.b-tree-cell{align-items:stretch;gap:0}.b-grid-cell.b-tree-cell.b-selected,.b-grid-cell.b-tree-cell.b-hover{--b-grid-cell-color: var(--b-grid-cell-selected-color)}.b-tree-cell-inner{gap:var(--b-tree-cell-gap)}.b-tree-leaf-cell .b-tree-cell-inner:before{margin-inline-end:.6em;text-align:center;font-family:var(--b-widget-icon-font-family);font-weight:var(--b-widget-icon-font-weight);color:var(--b-tree-expander-color);width:var(--b-tree-icon-width);min-width:var(--b-tree-icon-width)}.b-tree-icon,.b-icon-tree-leaf,.b-icon-tree-folder,.b-icon-tree-folder-open,.b-icon-tree-expand,.b-icon-tree-collapse{text-align:center;color:var(--b-tree-expander-color);width:var(--b-tree-icon-width);min-width:var(--b-tree-icon-width)}.b-tree-icon{color:var(--b-tree-icon-color)}.b-icon-tree-leaf:before{vertical-align:middle;width:100%;font-size:var(--b-tree-leaf-icon-font-size)}.b-icon-tree-folder:before,.b-icon-tree-folder-open:before{margin-inline-start:.1em}:is(.b-icon-tree-expand,.b-icon-tree-collapse).b-empty-parent{visibility:hidden}:is(.b-icon-tree-expand,.b-icon-tree-collapse):before{font-size:var(--b-tree-expander-icon-font-size)}.b-tree:not(.b-show-tree-lines) .b-tree-cell-inner{padding-inline-start:calc(var(--b-tree-indent-size) * var(--b-tree-level))}.b-tree:not(.b-show-tree-lines) .b-tree-leaf-cell .b-tree-parent-has-icon{padding-inline-start:calc(var(--b-tree-indent-size) * var(--b-tree-level) + var(--b-tree-icon-width) + var(--b-tree-cell-gap))}.b-tree-line{flex-shrink:0;transition:border-color var(--b-default-transition-duration);border-color:var(--b-tree-line-color);width:var(--b-tree-indent-size)}.b-tree-line:before{content:"";display:block;border-inline-start-color:inherit;border-inline-start-style:solid;height:100%;position:relative;border-inline-start-width:var(--b-tree-line-width);inset-inline-start:var(--b-tree-line-offset)}.b-tree-cell-inner{display:flex;align-items:center;flex-shrink:0;flex-grow:1;padding-block:.5em}.b-tree-cell-inner.b-text-value{flex-shrink:1;overflow:hidden}.b-tree-cell-inner.b-text-value .b-tree-cell-value{display:initial;overflow:hidden;text-overflow:ellipsis}.b-tree-cell.b-auto-height .b-tree-cell-inner,.b-tree-cell.b-auto-height{flex-shrink:1}a.b-tree-cell-inner{text-decoration:none}a.b-tree-cell-inner:hover .b-tree-cell-value{text-decoration:underline}.b-tree-parent-row .b-grid-cell{font-weight:var(--b-tree-parent-font-weight);--b-grid-cell-color: var(--b-tree-parent-color)}.b-tree-parent-row .b-grid-cell.b-selected,.b-tree-parent-row .b-grid-cell.b-hover{--b-grid-cell-color: var(--b-grid-cell-selected-color)}.b-tree-cell-value{flex:1;display:flex;align-items:center;gap:var(--b-grid-cell-gap)}.b-touch .b-tree-expander{width:1.1em}.b-touch .b-icon-tree-expand:before,.b-touch .b-icon-tree-collapse:before{font-size:1.8em}.b-touch .b-icon-tree-leaf:before{font-size:.6em}.b-touch .b-tree-icon,.b-touch .b-tree-leaf-cell:not(.b-tree-parent-cell):before{font-size:1.2em}:is(.b-grid-row,.b-grid-cell).b-hover,:is(.b-grid-row,.b-grid-cell).b-selected{--b-tree-expander-color: var(--b-tree-expander-row-hover-color);--b-tree-icon-color: var(--b-tree-icon-row-hover-color)}.b-widget-cell{--b-button-max-height: 80%}.b-aifilter-field .b-mask-text{padding:.5em}.b-aifilter-field-result-popup{--b-primary: var(--b-color-yellow);--b-popup-background: var(--b-primary-95)}.b-checklist-filter-combo-picker.b-panel{padding:0;--b-panel-padding: 0;--b-list-item-padding: .75em var(--b-widget-padding)}.b-checklist-filter-combo-picker.b-panel [data-ref=searchField]{width:100%}.b-checklist-filter-combo-picker.b-panel .b-list-item-content{display:flex}.b-checklist-filter-combo-picker.b-panel .b-checklist-filter-combo-item-text{flex-grow:1}.b-checklist-filter-combo-picker.b-panel .b-bottom-toolbar{--b-toolbar-padding: var(--b-widget-padding)}.b-chart-content{position:absolute;width:100%;top:0;bottom:0}.b-chart-show-controls{padding-top:1em}.b-chart-controls{position:absolute;z-index:1;top:0;inset-inline-end:0;gap:0}.b-chart{transition:background var(--b-default-transition-duration);background:var(--b-neutral-100)}:root,:host{--b-chart-designer-labels-list-padding-block: 1em}.b-grid-chart-designer-content{padding:0}.b-grid-chart-designer-content .b-chart[data-ref=preview]{background:var(--b-primary-100);border-radius:var(--b-widget-border-radius)}.b-chart-designer-settings{flex:0 0 22em;overflow:clip;transition:flex-basis .3s}.b-chart-designer-settings .b-list{background:transparent}.b-chart-designer-settings .b-tab-panel-item{padding:1em .5em .5em;--b-panel-header-padding: 0}.b-chart-designer-settings .b-chart-layout-tab{padding-top:0}.b-chart-designer-settings .b-chart-appearance-tab{padding-block:0}.b-chart-designer-settings .b-chart-appearance-tab .b-panel-header{background:transparent}.b-chart-designer-settings [data-ref=labelsSeriesList]{padding-block:var(--b-chart-designer-labels-list-padding-block)}.b-chart-designer-settings [data-ref=seriesList]{gap:1em;padding-block:1em;--b-list-item-multi-select-hover-background: transparent;--b-list-item-padding: 0}.b-chart-designer-settings [data-ref=labelsSeriesList],.b-chart-designer-settings [data-ref=seriesList]{padding-inline:1em;border:1px solid var(--b-text-field-outlined-border-color);border-radius:var(--b-widget-border-radius)}.b-chart-designer-minimal .b-chart-designer-settings{flex-basis:0}.b-chart-type-list{display:grid;grid-template-columns:4.5em 4.5em 4.5em;width:100%;column-gap:1em;overflow:visible;--b-list-item-selected-background: var(--b-primary-97);--b-list-item-focus-background: var(--b-primary-97);--b-list-item-multi-selected-focus-background: var(--b-primary-97)}.b-chart-type-list .b-list-item-group-header{font-weight:500;grid-column:1 / -1}.b-chart-type-list .b-list-item:not(.b-list-item-group-header){padding:0;border:1px solid var(--b-text-field-outlined-border-color);border-radius:var(--b-widget-border-radius)}.b-chart-type-list .b-list-item:not(.b-list-item-group-header).b-selected{outline:1px solid var(--b-widget-focus-outline-color);outline-offset:2px}.b-chart-type-thumbnail{width:4em;height:3em}.b-chart-appearance-tab{gap:0}.b-chart-appearance-tab .b-multi-section .b-panel{--b-panel-header-font-weight: 400}.b-chart-appearance-tab .b-panel{flex-shrink:0;--b-panel-header-font-size: 1em;--b-panel-with-header-padding: 0;--b-panel-header-padding: 1em 0}.b-slider-with-field.b-hbox{margin-top:1px;flex-wrap:wrap}.b-slider-with-field.b-hbox>.b-label{min-width:100%}.b-slider-with-field.b-hbox .b-slider{flex:1}.b-slider-with-field.b-hbox .b-number-field{gap:0;width:6em}.b-slider-with-field.b-hbox .b-number-field .b-label{display:none}.b-font-picker [data-ref=family]{flex:1 1 60%}.b-font-picker [data-ref=size]{flex:1 0 30%}.b-font-picker.b-hbox{flex-wrap:wrap}.b-font-picker,.b-font-picker>.b-container{gap:.6em} diff --git a/__tests__/samples/resources/build/svalbard-dark.css b/__tests__/samples/resources/build/svalbard-dark.css new file mode 100644 index 0000000..6fd9c62 --- /dev/null +++ b/__tests__/samples/resources/build/svalbard-dark.css @@ -0,0 +1,325 @@ +@charset "UTF-8"; +/*! + * + * Bryntum Grid 7.2.1 (TRIAL VERSION) + * + * Copyright(c) 2026 Bryntum AB + * https://bryntum.com/contact + * https://bryntum.com/license + * + * Bryntum incorporates third-party code licensed under the MIT and Apache-2.0 licenses. + * See the licenses below or visit https://bryntum.com/products/grid/docs/guide/Grid/licenses + * + * # Third Party Notices + * + * Bryntum uses the following third party libraries: + * + * * [Font Awesome 6 Free](https://fontawesome.com/license/free) (MIT/SIL OFL 1.1) + * * [Roboto font (for Material theme only)](https://github.com/google/roboto) (Apache-2.0) + * * [Styling Cross-Browser Compatible Range Inputs with Sass](https://github.com/darlanrod/input-range-sass) (MIT) + * * [Tree Walker polyfill (only applies to Salesforce)](https://github.com/Krinkle/dom-TreeWalker-polyfill) (MIT) + * * [chronograph](https://github.com/bryntum/chronograph) (MIT) + * * [later.js](https://github.com/bunkat/later) (MIT) + * * [Monaco editor (only used in our demos)](https://microsoft.github.io/monaco-editor) (MIT) + * * Map/Set polyfill to fix performance issues for Salesforce LWS (MIT) + * * [Chart.js (when using Chart package)](https://github.com/chartjs/Chart.js) (MIT) + * + * Note: the **chronograph** and **later.js** libraries are used in Bryntum Scheduler Pro and Bryntum Gantt, but they are + * listed for all Bryntum products since the distribution contains trial versions of the thin bundles for all other + * products. TreeWalker is only used in the LWC bundle for Salesforce. Roboto font is only used in the material theme. + * + * ## Font Awesome 6 Free + * + * [Font Awesome Free 6 by @fontawesome](https://fontawesome.com/) + * + * Font Awesome Free is free, open source, and GPL friendly. You can use it for commercial projects, open source projects, + * or really almost whatever you want. + * + * [Full Font Awesome Free license](https://fontawesome.com/license/free) + * + * ## Roboto font + * + * [Apache License Version 2.0, January 2004](https://www.apache.org/licenses/LICENSE-2.0) + * + * TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + * + * 1. Definitions. + * + * "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 + * of this document. + * + * "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + * + * "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are + * under common control with that entity. For the purposes of this definition, + * "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by + * contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial + * ownership of such entity. + * + * "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + * + * "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, + * documentation source, and configuration files. + * + * "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including + * but not limited to compiled object code, generated documentation, and conversions to other media types. + * + * "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as + * indicated by a copyright notice that is included in or attached to the work + * (an example is provided in the Appendix below). + * + * "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work + * and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an + * original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain + * separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + * + * "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or + * additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the + * Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. + * For the purposes of this definition, "submitted" + * means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including + * but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems + * that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding + * communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a + * Contribution." + * + * "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received + * by Licensor and subsequently incorporated within the Work. + * + * 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to + * You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, + * prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such + * Derivative Works in Source or Object form. + * + * 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a + * perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable + * (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise + * transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are + * necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) + * with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity ( + * including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within + * the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this + * License for that Work shall terminate as of the date such litigation is filed. + * + * 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with + * or without modifications, and in Source or Object form, provided that You meet the following conditions: + * + * (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and + * + * (b) You must cause any modified files to carry prominent notices stating that You changed the files; and + * + * (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, + * and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the + * Derivative Works; and + * + * (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute + * must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that + * do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file + * distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the + * Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices + * normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You + * may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the + * NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the + * License. + * + * You may add Your own copyright statement to Your modifications and may provide additional or different license terms and + * conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, + * provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this + * License. + * + * 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for + * inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any + * additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any + * separate license agreement you may have executed with Licensor regarding such Contributions. + * + * 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product + * names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and + * reproducing the content of the NOTICE file. + * + * 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and + * each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, + * MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness + * of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this + * License. + * + * 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or + * otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, + * shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or + * consequential damages of any character arising as a result of this License or out of the use or inability to use the + * Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or + * any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such + * damages. + * + * 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose + * to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or + * rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and + * on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and + * hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason + * of your accepting any such warranty or additional liability. + * + * END OF TERMS AND CONDITIONS + * + * APPENDIX: How to apply the Apache License to your work. + * + * To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by + * brackets "[]" + * replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the + * appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose + * be included on the same "printed page" as the copyright notice for easier identification within third-party archives. + * + * Copyright [yyyy] [name of copyright owner] + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * [APACHE LICENSE, VERSION 2.0](http://www.apache.org/licenses/LICENSE-2.0) + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an " + * AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * ## Styling Cross-Browser Compatible Range Inputs with Sass + * + * Github: [input-range-sass](https://github.com/darlanrod/input-range-sass) + * + * Author: [Darlan Rod](https://github.com/darlanrod) + * + * Version 1.4.1 + * + * The MIT License (MIT) + * + * Copyright (c) 2016 Darlan Rod + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated + * documentation files (the "Software"), to deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit + * persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * ## Tree Walker polyfill + * + * The MIT License (MIT) + * + * [Copyright 2013–2017 Timo Tijhof](https://github.com/Krinkle/dom-TreeWalker-polyfill) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated + * documentation files (the "Software"), to deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit + * persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * ## chronograph + * + * GitHub: [chronograph](https://github.com/bryntum/chronograph) + * + * The MIT License (MIT) + * + * Copyright (c) 2023 Bryntum + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated + * documentation files (the "Software"), to deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit + * persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * ## later.js + * + * GitHub: [later.js](https://github.com/bunkat/later) + * + * The MIT License (MIT) + * + * Copyright © 2013 BunKat + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated + * documentation files (the "Software"), to deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit + * persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * ## Monaco editor + * + * GitHub: [Monaco editor](https://microsoft.github.io/monaco-editor) (MIT) + * + * The MIT License (MIT) + * + * Copyright (c) 2016 - present Microsoft Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated + * documentation files (the "Software"), to deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit + * persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * ## Map/Set polyfill to fix performance issues for Salesforce LWS + * + * Copyright © 2024 Certinia Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * ## Chart.js + * + * GitHub: [Chart.js](https://github.com/chartjs/Chart.js) + * + * The MIT License (MIT) + * + * Copyright (c) 2014-2022 Chart.js Contributors + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ +:root:not(.b-nothing),:host(:not(.b-nothing)){--b-primary: var(--b-color-blue);--b-secondary: var(--b-color-orange);--b-elevation-1: 0 1px 3px 0 rgb(0 0 0 /.22), 0 1px 1px 0 rgb(0 0 0 /.2), 0 2px 1px -1px rgb(0 0 0 /.18);--b-elevation-2: 0 1px 5px 0 rgb(0 0 0 /.22), 0 2px 2px 0 rgb(0 0 0 /.2), 0 3px 1px -2px rgb(0 0 0 /.18);--b-neutral-100: hsl(0 0 10%);--b-neutral-99: hsl(0 0 10.9%);--b-neutral-98: hsl(0 0 11.8%);--b-neutral-97: hsl(0 0 12.7%);--b-neutral-96: hsl(0 0 13.6%);--b-neutral-95: hsl(0 0 14.5%);--b-neutral-94: hsl(0 0 15.4%);--b-neutral-93: hsl(0 0 16.3%);--b-neutral-92: hsl(0 0 17.2%);--b-neutral-91: hsl(0 0 18.1%);--b-neutral-90: hsl(0 0 19%);--b-neutral-85: hsl(0 0 23.5%);--b-neutral-80: hsl(0 0 28%);--b-neutral-75: hsl(0 0 32.5%);--b-neutral-70: hsl(0 0 37%);--b-neutral-65: hsl(0 0 41.5%);--b-neutral-60: hsl(0 0 46%);--b-neutral-55: hsl(0 0 50.5%);--b-neutral-50: hsl(0 0 55%);--b-neutral-45: hsl(0 0 59.5%);--b-neutral-40: hsl(0 0 64%);--b-neutral-35: hsl(0 0 68.5%);--b-neutral-30: hsl(0 0 73%);--b-neutral-25: hsl(0 0 77.5%);--b-neutral-20: hsl(0 0 82%);--b-neutral-15: hsl(0 0 86.5%);--b-neutral-10: hsl(0 0 91%);--b-neutral-5: hsl(0 0 95.5%);--b-neutral-2: hsl(0 0 97.3%);--b-neutral-1: hsl(0 0 98.2%);--b-neutral-0: hsl(0 0 100%);--b-mix: hsl(0 0 12%);--b-opposite: #fff;--b-widget-color-scheme: dark;--b-widget-border-radius: .6em;--b-widget-border-radius-large: 1.2em;--b-widget-border-color: var(--b-neutral-60);--b-field-set-border-color: var(--b-neutral-80);--b-panel-with-header-padding: 0 var(--b-widget-padding-large) var(--b-widget-padding-large) var(--b-widget-padding-large);--b-popup-background: var(--b-neutral-97);--b-popup-padding: var(--b-widget-padding);--b-tooltip-rich-background: var(--b-neutral-96);--b-tooltip-plain-background: var(--b-neutral-96);--b-slide-toggle-border-color: transparent;--b-slide-toggle-disabled-border-color: transparent;--b-slide-toggle-height: 1.5em;--b-slide-toggle-width: 2.25em;--b-splitter-color: var(--b-neutral-80);--b-splitter-size: 1px;--b-splitter-hover-size: 5px;--b-splitter-hover-color: var(--b-neutral-90);--b-text-field-outlined-input-padding: .9em;--b-text-field-outlined-border-color: var(--b-border-6);--b-field-trigger-edge-gap: .9em;--b-grid-header-font-weight: 600;--b-grid-header-color: var(--b-neutral-25);--b-column-lines-tick-color: var(--b-neutral-93);--b-scroll-button-border-width: 1px;--b-task-board-column-header-font-weight: 600}.b-bryntum:not(.b-nothing){--bi-primary-shade: var(--b-primary-50);--b-checkbox-checked-background: var(--bi-primary-shade);--b-checkbox-checked-border-color: var(--b-checkbox-checked-background);--b-checkbox-checked-hover-background: var(--bi-primary-shade);--b-list-checkbox-checked-background: var(--b-primary);--b-menu-background: var(--b-neutral-95);--b-radio-checked-color: var(--b-neutral-100);--b-radio-checked-background: var(--bi-primary-shade);--b-radio-checked-border-color: var(--b-radio-checked-background);--b-radio-check-gap: .25em;--b-slide-toggle-background: var(--b-neutral-80);--b-slide-toggle-hover-background: var(--b-neutral-80);--b-slide-toggle-checked-hovered-thumb-background: var(--b-primary-95);--b-slide-toggle-checked-border-color: transparent;--b-slide-toggle-checked-background: var(--bi-primary-shade);--b-slide-toggle-checked-hover-background: var(--bi-primary-shade);--b-slider-color: var(--bi-primary-shade);--b-tab-indicator-color: var(--bi-primary-shade);--b-text-field-focus-border-color: var(--bi-primary-shade);--b-text-field-filled-hover-border-color: var(--bi-primary-shade);--b-toast-background: var(--b-neutral-96)}.b-colorize:not(.b-nothing){--b-quick-find-background: var(--b-primary-90);--b-resource-time-range-background: var(--b-primary-70);--b-resource-time-range-color: var(--b-primary-70)}.b-sch-event-wrap{--b-sch-event-tonal-background: color-mix(in srgb, var(--b-primary), var(--b-mix) 80%);--b-sch-event-tonal-hover-background: color-mix(in srgb, var(--b-primary), var(--b-mix) 60%);--b-sch-event-indented-background: color-mix(in srgb, var(--b-primary), var(--b-mix) 80%);--b-sch-event-indented-hover-background: color-mix(in srgb, var(--b-primary), var(--b-mix) 70%);--b-sch-event-indented-selected-background: color-mix(in srgb, var(--b-primary), var(--b-mix) 60%)}.b-theme-info{--b-theme-name: "SvalbardDark";--b-theme-filename: "svalbard-dark";--b-theme-button-rendition: "text";--b-theme-label-position: "align-before";--b-theme-overlap-label: "false"} diff --git a/__tests__/samples/resources/examples/_shared/shared.css b/__tests__/samples/resources/examples/_shared/shared.css new file mode 100644 index 0000000..239bbe0 --- /dev/null +++ b/__tests__/samples/resources/examples/_shared/shared.css @@ -0,0 +1 @@ +@font-face{font-family:Poppins;font-style:normal;font-weight:100;src:local(""),url(../../resources/fonts/poppins-v20-latin-100.woff2) format("woff2")}@font-face{font-family:Poppins;font-style:normal;font-weight:200;src:local(""),url(../../resources/fonts/poppins-v20-latin-200.woff2) format("woff2")}@font-face{font-family:Poppins;font-style:normal;font-weight:300;src:local(""),url(../../resources/fonts/poppins-v20-latin-300.woff2) format("woff2")}@font-face{font-family:Poppins;font-style:normal;font-weight:400;src:local(""),url(../../resources/fonts/poppins-v20-latin-regular.woff2) format("woff2")}@font-face{font-family:Poppins;font-style:normal;font-weight:500;src:local(""),url(../../resources/fonts/poppins-v20-latin-500.woff2) format("woff2")}@font-face{font-family:Poppins;font-style:normal;font-weight:600;src:local(""),url(../../resources/fonts/poppins-v20-latin-600.woff2) format("woff2")}@font-face{font-family:Poppins;font-style:normal;font-weight:700;src:local(""),url(../../resources/fonts/poppins-v20-latin-700.woff2) format("woff2")}@font-face{font-family:Poppins;font-style:normal;font-weight:800;src:local(""),url(../../resources/fonts/poppins-v20-latin-800.woff2) format("woff2")}@font-face{font-family:Poppins;font-style:normal;font-weight:900;src:local(""),url(../../resources/fonts/poppins-v20-latin-900.woff2) format("woff2")}@font-face{font-family:Roboto Flex;font-style:normal;font-weight:100 1000;font-stretch:100%;font-display:swap;src:url(../../resources/fonts/RobotoFlex.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Montserrat;font-style:normal;font-weight:100 900;src:url(../../resources/fonts/Montserrat.woff2) format("woff2")}html,body{height:100%;overflow:hidden;box-sizing:border-box}@keyframes background-animation{0%{background-position:bottom,right,bottom right;background-size:50% 50%,75% 75%,100% 100%}50%{background-position:top,left,bottom right;background-size:70% 70%,40% 40%,100% 100%}to{background-position:bottom,right,bottom right;background-size:50% 50%,75% 75%,100% 100%}}body{font-family:Poppins,Helvetica Neue,Arial,Helvetica,sans-serif;margin:0;font-size:14px!important;display:flex;flex-flow:row nowrap;align-items:stretch;transition:background-color var(--b-default-transition-duration);background-color:var(--b-neutral-97);background-image:radial-gradient(circle,rgba(108,207,250,.3),transparent 70%,transparent 100%),radial-gradient(circle,rgba(78,34,191,.1),transparent 70%,transparent 100%),radial-gradient(circle at right bottom,color-mix(in srgb,var(--b-primary),transparent 90%),transparent 70%,transparent 100%);background-position:bottom,right,bottom right;background-size:50% 50%,75% 75%,100% 100%;&.b-initially-hidden{visibility:hidden}&.b-screenshot *{transition:none!important;animation-duration:0s!important}&.b-theme-fluent2-light,&.b-theme-fluent2-dark,&.b-theme-material3-light,&.b-theme-material3-dark{font-family:Roboto Flex,Poppins,Helvetica Neue,Arial,Helvetica,sans-serif}&.b-theme-svalbard-light,&.b-theme-svalbard-dark{font-family:Montserrat,Poppins,Helvetica Neue,Arial,Helvetica,sans-serif}&.b-theme-material3-light,&.b-theme-svalbard-light,&.b-theme-visby-light,&.b-theme-high-contrast-light,&.b-theme-stockholm-light{color-scheme:light}&.b-theme-material3-dark,&.b-theme-svalbard-dark,&.b-theme-visby-dark,&.b-theme-high-contrast-dark,&.b-theme-stockholm-dark{color-scheme:dark;background-image:radial-gradient(circle,rgba(55,104,122,.3),transparent 70%,transparent 100%),radial-gradient(circle,rgba(47,21,115,.1),transparent 70%,transparent 100%),radial-gradient(circle at right bottom,color-mix(in srgb,var(--b-primary),transparent 90%),transparent 70%,transparent 100%)}&:where(:not(.b-screenshot,.b-hide-header)){#container{#outer,.demo-app,>.b-split-container,>.b-container.b-outer:where(:not(.no-demo-app-style)){margin:0 1em 1em;box-shadow:.2rem .2rem 1.2rem #0000000d;overflow:clip;transition:background var(--b-default-transition-duration),border var(--b-default-transition-duration),max-width var(--b-default-transition-duration);background:var(--b-neutral-100);border-radius:var(--b-widget-border-radius-large);.b-theme-visby-dark &,.b-theme-visby-light &{border:1px solid var(--app-border-color, var(--b-grid-cell-border-color, var(--b-neutral-80)))}.b-theme-high-contrast-dark &,.b-theme-high-contrast-light &{border:1px solid var(--b-border-1)}}.demo-header{margin-inline:1em;border-bottom:none}}@media screen and (min-width : 1000px){#container{#outer,.demo-app,>.b-split-container,>.b-container.b-outer:where(:not(.no-demo-app-style)){margin:1em 4em 4em;&:where(:first-of-type:not(:last-child)):has(~.b-container){margin-top:1em;margin-bottom:2em}&:where(:not(:first-of-type)){margin-top:2em}}.demo-header{margin-top:1em;margin-inline:4em}}}}}#trial-button{margin-inline-end:1em}@media (max-width : 800px){#trial-button{display:none}}@media print{body{background-image:none}}.b-task-board-base.b-outer,.b-grid-base.b-outer:not(.b-panel-collapsible,.b-timeline){flex:1}#example-description{max-width:0;clip:rect(0,0,0,0);overflow:clip}#skip-to-content{position:fixed;padding:16px;font-size:120%;z-index:100;color:var(--b-neutral-100);background-color:var(--b-primary-40);border-radius:var(--b-widget-border-radius);&:not(:focus){clip:rect(0,0,0,0)}}#container{position:relative;flex:1;min-height:0;display:flex;flex-direction:column;align-items:stretch;transform:translate(0);overflow:hidden;&:after{content:"";position:absolute;width:0;height:0;max-height:0;left:0;border:none;box-shadow:none;pointer-events:none}}.demo-header{display:flex;padding-inline:.7em 0;padding-block:0;transition:background-color var(--b-default-transition-duration),padding var(--b-default-transition-duration),font-size .1s;border-bottom:1px solid var(--b-border-7);&,*{box-sizing:border-box}a{text-decoration:none}.b-icon{font-size:1.1em}.title{margin-inline-end:auto;display:flex;align-items:center;white-space:nowrap;color:var(--b-text-1);&:focus-visible{outline-offset:var(--b-button-focus-outline-offset);outline:var(--b-button-focus-outline-width) solid var(--b-widget-focus-outline-color);border-radius:var(--b-widget-border-radius)}h1{display:flex;align-items:center;margin:0;font-weight:600;font-size:1.1em}svg{margin-inline-end:.75em;height:2em;width:2em;background:#0076f8;padding-inline-end:.2em;border-radius:5px;g{fill:#fff}}}.b-toolbar{font-size:.9em;--b-toolbar-padding: .7em;--b-toolbar-background: transparent;@media (height <= 768px){--b-toolbar-padding: .4em .5em}}.b-button-text{--b-button-type-text-hover-background: var(--b-neutral-100)}}.b-no-description [data-ref=infoButton]{display:none}.b-hint,.b-tooltip,.b-widget.b-html{code{background:var(--b-neutral-93);padding:.15em .3em;border-radius:3px;margin-inline:.2em}.description{line-height:1.7em}}.b-tooltip.b-plain-tooltip code{margin-inline:0;background:var(--b-neutral-93);color:var(--b-neutral-30)}.b-hint .header{font-weight:700;i{margin-inline-end:.5em}}.b-no-initial-demo-transition *{transition:none!important}.demo-header .b-button.b-text{min-height:2.5em}@media (max-width : 450px){.rc-feedbackbutton-iframe,.b-hint,#fullscreen-button,[data-ref=codeButton],#trial-button,.learnButton,.b-code-editor .b-icon-download{display:none!important}.demo-header a#title{padding-inline-start:0;background:none}}#header-tools{display:none}#tools{display:flex}.tools-container{order:1}.b-icon-codepen{mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23ffffff' id='codepen-logo' viewBox='0 0 512 512'%3E%3Cpath d='M502.3 159.7l-234-156c-8-4.9-16.5-5-24.6 0l-234 156C3.7 163.7 0 170.8 0 178v156c0 7.1 3.7 14.3 9.7 18.3l234 156c8 4.9 16.5 5 24.6 0l234-156c6-4 9.7-11.1 9.7-18.3V178c0-7.1-3.7-14.3-9.7-18.3zM278 63.1l172.3 114.9-76.9 51.4L278 165.7V63.1zm-44 0v102.6l-95.4 63.7-76.9-51.4L234 63.1zM44 219.1l55.1 36.9L44 292.8v-73.7zm190 229.7L61.7 334l76.9-51.4L234 346.3v102.6zm22-140.9l-77.7-52 77.7-52 77.7 52-77.7 52zm22 140.9V346.3l95.4-63.7 76.9 51.4L278 448.8zm190-156l-55.1-36.9L468 219.1v73.7z'/%3E%3C/svg%3E");width:1em;height:1em;flex-shrink:0;transition:background-color .3s;background-color:var(--b-button-color)}.info-popup.b-popup{.b-popup-content{padding:1.5em;.b-html{flex-direction:column}.header{font-weight:700}.description{padding-top:.5em;line-height:1.4em}}[data-ref=playHintFlow]{display:none}.b-hint-flow &{[data-ref=hintButton],[data-ref=hintCheck]{display:none}[data-ref=playHintFlow]{display:flex}}}.feedback-savedmsg{h3{margin-top:.6em}i{margin-inline-end:.2em}}.version-update-toast{max-width:250px;line-height:1.4em;h4{position:relative;margin-top:0;margin-bottom:.5em;i.fa-times{position:absolute;right:0;top:0;.b-rtl &{right:auto;left:0}}}a{text-decoration:underline}}.b-hint .header{i.fa{margin-inline-end:.5em}}.b-screenshot .demo-header,.b-hide-header .demo-header{display:none}.b-hide-toolbar{.b-outer>.b-panel-body-wrap>.b-top-toolbar,.b-outer.b-panel>header.b-panel-ui-toolbar{display:none}}.keycap{font-weight:600;font-size:.8em;padding:.2em .4em;margin-inline:.5em;border:1px solid var(--b-neutral-85);border-radius:3px;background:var(--b-neutral-97);color:var(--b-widget-color)}.docsmenu{--b-panel-header-padding: 1em;--b-panel-header-font-size: 1.1em;--b-panel-header-text-align: center;--b-panel-header-font-weight: 600;--b-panel-with-header-top-toolbar-background: transparent;.b-menu-content{overflow:visible}a{text-decoration:none}.b-docs-category{background:var(--b-neutral-100);.b-theme-high-contrast-dark &,.b-theme-high-contrast-light &{--b-menu-item-color: var(--b-neutral-10);--b-menu-item-icon-color: var(--b-neutral-10)}--b-menu-item-font-weight: 500;position:sticky;top:calc(var(--b-panel-padding) * -1px);z-index:1}}.b-code-changes-pending{#container *,>.b-widget:not(.b-code-editor) *{pointer-events:none!important}}.b-example-tooltip{.b-panel-header{.b-header-title{white-space:break-spaces}}}.b-locale-picker .b-list-item-content{div:first-child{flex:1}div:last-child{color:var(--b-neutral-40)}}.b-demo-hint .header{font-weight:600;display:flex;align-items:center;gap:.5em}label{display:block;margin-bottom:0} diff --git a/__tests__/samples/resources/examples/export/resources/app.css b/__tests__/samples/resources/examples/export/resources/app.css new file mode 100644 index 0000000..b8d2249 --- /dev/null +++ b/__tests__/samples/resources/examples/export/resources/app.css @@ -0,0 +1,36 @@ +.b-export-header, +.b-export-footer { + display : flex; + color : #fff; + background : #0076f8; + align-items : center; + z-index : 10000; +} + +.b-export-header { + text-align : start; + height : 40px; + position : relative; + padding : .7em 1em .5em 1em; + + display : flex; + flex-flow : row nowrap; + justify-content : space-between; + + img { + height : 60%; + } + + dl { + margin : 0; + font-size : 10px; + } + + dd { + margin : 0; + } +} + +.b-export-footer { + justify-content : center; +} diff --git a/__tests__/samples/resources/examples/export/resources/bryntum.svg b/__tests__/samples/resources/examples/export/resources/bryntum.svg new file mode 100644 index 0000000..339345a --- /dev/null +++ b/__tests__/samples/resources/examples/export/resources/bryntum.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/__tests__/samples/resources/resources/fonts/Montserrat.woff2 b/__tests__/samples/resources/resources/fonts/Montserrat.woff2 new file mode 100644 index 0000000..e9bd2e8 Binary files /dev/null and b/__tests__/samples/resources/resources/fonts/Montserrat.woff2 differ diff --git a/__tests__/samples/resources/resources/fonts/RobotoFlex.woff2 b/__tests__/samples/resources/resources/fonts/RobotoFlex.woff2 new file mode 100644 index 0000000..f898812 Binary files /dev/null and b/__tests__/samples/resources/resources/fonts/RobotoFlex.woff2 differ diff --git a/__tests__/samples/resources/resources/fonts/poppins-v20-latin-100.woff2 b/__tests__/samples/resources/resources/fonts/poppins-v20-latin-100.woff2 new file mode 100644 index 0000000..e59b153 Binary files /dev/null and b/__tests__/samples/resources/resources/fonts/poppins-v20-latin-100.woff2 differ diff --git a/__tests__/samples/resources/resources/fonts/poppins-v20-latin-200.woff2 b/__tests__/samples/resources/resources/fonts/poppins-v20-latin-200.woff2 new file mode 100644 index 0000000..eeacdfe Binary files /dev/null and b/__tests__/samples/resources/resources/fonts/poppins-v20-latin-200.woff2 differ diff --git a/__tests__/samples/resources/resources/fonts/poppins-v20-latin-300.woff2 b/__tests__/samples/resources/resources/fonts/poppins-v20-latin-300.woff2 new file mode 100644 index 0000000..962b734 Binary files /dev/null and b/__tests__/samples/resources/resources/fonts/poppins-v20-latin-300.woff2 differ diff --git a/__tests__/samples/resources/resources/fonts/poppins-v20-latin-500.woff2 b/__tests__/samples/resources/resources/fonts/poppins-v20-latin-500.woff2 new file mode 100644 index 0000000..c660336 Binary files /dev/null and b/__tests__/samples/resources/resources/fonts/poppins-v20-latin-500.woff2 differ diff --git a/__tests__/samples/resources/resources/fonts/poppins-v20-latin-600.woff2 b/__tests__/samples/resources/resources/fonts/poppins-v20-latin-600.woff2 new file mode 100644 index 0000000..921e962 Binary files /dev/null and b/__tests__/samples/resources/resources/fonts/poppins-v20-latin-600.woff2 differ diff --git a/__tests__/samples/resources/resources/fonts/poppins-v20-latin-700.woff2 b/__tests__/samples/resources/resources/fonts/poppins-v20-latin-700.woff2 new file mode 100644 index 0000000..bf022fc Binary files /dev/null and b/__tests__/samples/resources/resources/fonts/poppins-v20-latin-700.woff2 differ diff --git a/__tests__/samples/resources/resources/fonts/poppins-v20-latin-800.woff2 b/__tests__/samples/resources/resources/fonts/poppins-v20-latin-800.woff2 new file mode 100644 index 0000000..f107b36 Binary files /dev/null and b/__tests__/samples/resources/resources/fonts/poppins-v20-latin-800.woff2 differ diff --git a/__tests__/samples/resources/resources/fonts/poppins-v20-latin-900.woff2 b/__tests__/samples/resources/resources/fonts/poppins-v20-latin-900.woff2 new file mode 100644 index 0000000..71f96de Binary files /dev/null and b/__tests__/samples/resources/resources/fonts/poppins-v20-latin-900.woff2 differ diff --git a/__tests__/samples/resources/resources/fonts/poppins-v20-latin-regular.woff2 b/__tests__/samples/resources/resources/fonts/poppins-v20-latin-regular.woff2 new file mode 100644 index 0000000..b69e009 Binary files /dev/null and b/__tests__/samples/resources/resources/fonts/poppins-v20-latin-regular.woff2 differ diff --git a/__tests__/samples/smoke/base.html b/__tests__/samples/smoke/base.html new file mode 100644 index 0000000..dc42aab --- /dev/null +++ b/__tests__/samples/smoke/base.html @@ -0,0 +1,2046 @@ + + + + + + + + + + + + + + + +
+
+
Company logo +
+
Date: Feb 26, 2026 5:02 PM
+
+
+
+
+
+
+ + + + + +
+
+
+ +
+
+ + \ No newline at end of file diff --git a/__tests__/samples/smoke/base_https.pdf b/__tests__/samples/smoke/base_https.pdf index 313a42c..588aa0a 100644 Binary files a/__tests__/samples/smoke/base_https.pdf and b/__tests__/samples/smoke/base_https.pdf differ diff --git a/__tests__/samples/smoke/base_https.pdf.json b/__tests__/samples/smoke/base_https.pdf.json deleted file mode 100644 index 12930fc..0000000 --- a/__tests__/samples/smoke/base_https.pdf.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "html": [ - { "html" : "
\"Company
Date: Jan 16, 2025 2:28 PM
Page: 1/2
#
First name
Surname
Score
Rank
Percent
1
Don
Taylor
880
99
2
John
Adams
850
55
3
Doug
Jones
330
100
4
James
Davis
790
33
5
Mike
Johnson
780
60
6
Don
Johnson
640
5
7
Jane
McGregor
290
3
8
Jane
Thomas
400
50
9
Lisa
Anderson
890
70
10
Don
Thomas
10
96
11
Doug
Jackson
270
3
12
James
Ewans
140
87
13
Jenny
Brown
560
69
14
Doug
Ewans
550
34
15
Mike
Ewans
70
43
16
Linda
McGregor
60
87
17
Jenny
Jones
290
53
18
Linda
Taylor
390
16
19
Daniel
Wilson
80
49
20
Melissa
Johnson
450
77
21
Karen
McGregor
690
80
22
Daniel
Thomas
620
1
23
Don
Jackson
570
11
24
Don
Taylor
0
90
25
Jane
Taylor
600
30
26
Daniel
Adams
470
24
27
Jane
Brown
740
77
28
Mike
More
430
50
29
Lisa
More
900
75
30
Mary
Brown
980
57
31
David
McGregor
460
8
32
Don
Ewans
740
4
33
Adam
More
210
100
34
Linda
Adams
170
34
35
Mike
Brown
420
55
36
Don
Jones
590
19
37
Barbara
Anderson
730
76
38
Doug
Thomas
350
94
39
Doug
Wilson
530
54
40
Karen
Brown
340
23
41
Adam
Johnson
450
36
42
Adam
Jackson
370
83
43
Jenny
Williams
290
10
44
John
Miller
760
1
45
Barbara
Jackson
370
89
46
James
Smith
950
8
47
Doug
McGregor
360
22
48
Jane
Anderson
280
20
49
Jenny
Anderson
540
55
50
Mary
Davis
530
71

© 2020 Bryntum AB

" } - ], - "orientation": "portrait", - "format": "A4", - "fileFormat": "pdf", - "fileName": "base_https", - "sendAsBinary": true -} diff --git a/__tests__/samples/smoke/base_https.png b/__tests__/samples/smoke/base_https.png new file mode 100644 index 0000000..76318cf Binary files /dev/null and b/__tests__/samples/smoke/base_https.png differ diff --git a/__tests__/samples/smoke/base_https.png.json b/__tests__/samples/smoke/base_https.png.json deleted file mode 100644 index 5f95fb4..0000000 --- a/__tests__/samples/smoke/base_https.png.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "html": [ - { "html" : "
\"Company
Date: Jan 16, 2025 2:28 PM
Page: 1/2
#
First name
Surname
Score
Rank
Percent
1
Don
Taylor
880
99
2
John
Adams
850
55
3
Doug
Jones
330
100
4
James
Davis
790
33
5
Mike
Johnson
780
60
6
Don
Johnson
640
5
7
Jane
McGregor
290
3
8
Jane
Thomas
400
50
9
Lisa
Anderson
890
70
10
Don
Thomas
10
96
11
Doug
Jackson
270
3
12
James
Ewans
140
87
13
Jenny
Brown
560
69
14
Doug
Ewans
550
34
15
Mike
Ewans
70
43
16
Linda
McGregor
60
87
17
Jenny
Jones
290
53
18
Linda
Taylor
390
16
19
Daniel
Wilson
80
49
20
Melissa
Johnson
450
77
21
Karen
McGregor
690
80
22
Daniel
Thomas
620
1
23
Don
Jackson
570
11
24
Don
Taylor
0
90
25
Jane
Taylor
600
30
26
Daniel
Adams
470
24
27
Jane
Brown
740
77
28
Mike
More
430
50
29
Lisa
More
900
75
30
Mary
Brown
980
57
31
David
McGregor
460
8
32
Don
Ewans
740
4
33
Adam
More
210
100
34
Linda
Adams
170
34
35
Mike
Brown
420
55
36
Don
Jones
590
19
37
Barbara
Anderson
730
76
38
Doug
Thomas
350
94
39
Doug
Wilson
530
54
40
Karen
Brown
340
23
41
Adam
Johnson
450
36
42
Adam
Jackson
370
83
43
Jenny
Williams
290
10
44
John
Miller
760
1
45
Barbara
Jackson
370
89
46
James
Smith
950
8
47
Doug
McGregor
360
22
48
Jane
Anderson
280
20
49
Jenny
Anderson
540
55
50
Mary
Davis
530
71

© 2020 Bryntum AB

" } - ], - "orientation": "portrait", - "format": "A4", - "fileFormat": "png", - "fileName": "base_https", - "sendAsBinary": true -} diff --git a/__tests__/smoke.test.js b/__tests__/smoke.test.js deleted file mode 100644 index a434ced..0000000 --- a/__tests__/smoke.test.js +++ /dev/null @@ -1,88 +0,0 @@ -const { startServer, stopServer, certExists, getLoggerConfig } = require('./utils.js'); -const { assertExportedFile } = require('./assertions.js'); - -jest.setTimeout(3 * 60 * 1000); - -let server; - -afterEach(() => { - if (server) { - return stopServer(server).then(() => server = null); - } -}); - -describe('Should export over HTTP', () => { - test('Should export to PDF', async () => { - const - protocol = 'http', - port = 8081, - workers = 1; - - server = await startServer({ protocol, port, workers, logger : getLoggerConfig('smoke_http_pdf') }) - - await assertExportedFile({ - fileFormat: 'pdf', - host: 'localhost', - protocol, - port: server.httpPort - }); - }); - - test('Should run consequent requests', async () => { - const - host = 'localhost', - protocol = 'http', - port = 8082, - workers = 1, - fileFormat = 'pdf'; - - server = await startServer({ protocol, port, workers, logger : getLoggerConfig('smoke_consequent') }); - - await assertExportedFile({ protocol, host, port: server.httpPort, fileFormat }); - - // Waiting for 10 seconds, export server should kill all idle workers - await new Promise(resolve => { - setTimeout(() => resolve(), 10000); - }); - - const promises = [ - assertExportedFile({ protocol, host, port: server.httpPort, fileFormat }), - new Promise(resolve => { - setTimeout(() => { - resolve('timeout'); - }, 1000 * 30); - }) - ]; - - const winner = await Promise.race(promises); - - await Promise.allSettled(promises); - - if (winner === 'timeout') { - fail('Server have not returned file in 30 seconds'); - } - }); -}); - -describe('Should export over HTTPS', () => { - if (certExists) { - test('Should export to PDF', async () => { - const - protocol = 'https', - port = 8083, - workers = 1; - - server = await startServer({ protocol, port, workers, logger : getLoggerConfig('smoke_https_pdf') }) - - await assertExportedFile({ - fileFormat: 'pdf', - host: 'localhost', - protocol, - port: server.httpsPort - }); - }); - } - else { - test('Cert is not found, skipping tests', () => {}); - } -}); diff --git a/__tests__/staticServer.js b/__tests__/staticServer.js new file mode 100644 index 0000000..ea09869 --- /dev/null +++ b/__tests__/staticServer.js @@ -0,0 +1,105 @@ +/** + * Static file server for serving test resources. + * Used by Jest globalSetup/globalTeardown to make resources available during tests. + */ +const http = require('http'); +const path = require('path'); +const fs = require('fs'); + +const RESOURCES_PORT = 9999; +const RESOURCES_DIR = path.join(__dirname, 'samples', 'resources'); + +// MIME types for common file types +const MIME_TYPES = { + '.html' : 'text/html', + '.css' : 'text/css', + '.js' : 'application/javascript', + '.json' : 'application/json', + '.png' : 'image/png', + '.jpg' : 'image/jpeg', + '.jpeg' : 'image/jpeg', + '.gif' : 'image/gif', + '.svg' : 'image/svg+xml', + '.woff' : 'font/woff', + '.woff2': 'font/woff2', + '.ttf' : 'font/ttf', + '.eot' : 'application/vnd.ms-fontobject' +}; + +let server = null; + +/** + * Start the static file server + * @returns {Promise} + */ +function startStaticServer() { + return new Promise((resolve, reject) => { + server = http.createServer((req, res) => { + // Remove /resources prefix from URL + let urlPath = req.url.split('?')[0]; + if (urlPath.startsWith('/resources')) { + urlPath = urlPath.slice('/resources'.length); + } + + const filePath = path.join(RESOURCES_DIR, urlPath); + + // Log request for debugging + if (process.env.DEBUG_STATIC_SERVER) { + console.log(`[StaticServer] ${req.method} ${req.url} -> ${filePath}`); + } + + // Security: ensure we're still within RESOURCES_DIR + if (!filePath.startsWith(RESOURCES_DIR)) { + res.writeHead(403); + res.end('Forbidden'); + return; + } + + fs.stat(filePath, (err, stats) => { + if (err || !stats.isFile()) { + res.writeHead(404); + res.end('Not found'); + return; + } + + const ext = path.extname(filePath).toLowerCase(); + const contentType = MIME_TYPES[ext] || 'application/octet-stream'; + + res.writeHead(200, { 'Content-Type': contentType }); + fs.createReadStream(filePath).pipe(res); + }); + }); + + server.on('error', reject); + + server.listen(RESOURCES_PORT, () => { + console.log(`Static resource server started on port ${RESOURCES_PORT}`); + resolve(server); + }); + }); +} + +/** + * Stop the static file server + * @returns {Promise} + */ +function stopStaticServer() { + return new Promise((resolve) => { + if (server) { + server.close(() => { + console.log('Static resource server stopped'); + server = null; + resolve(); + }); + } + else { + resolve(); + } + }); +} + +module.exports = { + startStaticServer, + stopStaticServer, + RESOURCES_PORT +}; diff --git a/__tests__/utils.js b/__tests__/utils.js index 55e7c55..af9e6c9 100644 --- a/__tests__/utils.js +++ b/__tests__/utils.js @@ -4,48 +4,60 @@ const fs = require('fs'); const os = require('os'); const mkdirp = require('mkdirp'); const WebServer = require('../src/server/WebServer.js'); +const ExportServer = require('../src/server/ExportServer.js'); const appConfig = require('../app.config.js').config; +const { RESOURCES_PORT } = require('./staticServer.js'); + +/** + * Port allocator that uses JEST_WORKER_ID to assign non-conflicting port ranges. + * Each Jest worker gets a range of 100 ports, ensuring parallel tests don't conflict. + * + * Worker 1: ports 8100-8199 + * Worker 2: ports 8200-8299 + * etc. + */ +class PortAllocator { + constructor() { + // JEST_WORKER_ID is 1-based, defaults to 1 if not running in Jest + const workerId = parseInt(process.env.JEST_WORKER_ID, 10) || 1; + this.basePort = 8000 + (workerId * 100); + this.currentOffset = 0; + } -const net = require("net"); -const Socket = net.Socket; - -// https://stackoverflow.com/a/66116887 -async function getNextPort(port = 8080, maxPort = 10000) { - return new Promise((resolve, reject) => { - let socket; - - const getSocket = () => { - socket?.destroy(); - - socket = new Socket(); - - socket.on('connect', () => { - checkPort(++port); - }); + /** + * Get the next available port for this worker + * @returns {number} + */ + getPort() { + const port = this.basePort + this.currentOffset; + this.currentOffset++; + return port; + } - socket.on('error', e => { - if (e.code !== "ECONNREFUSED") { - reject(e); - } else { - resolve(port); - } - }); + /** + * Reset the port counter (useful for test cleanup) + */ + reset() { + this.currentOffset = 0; + } +} - return socket; - } +// Singleton instance for the current Jest worker +const portAllocator = new PortAllocator(); - const checkPort = port => { - if (port < maxPort) { - socket = getSocket(); - socket.connect(port, '0.0.0.0'); - } - else { - reject('Could not find available port'); - } - } +/** + * Get a unique port for this test worker + * @returns {number} + */ +function getPort() { + return portAllocator.getPort(); +} - checkPort(port); - }); +/** + * Reset port allocator (call in beforeAll/afterAll if needed) + */ +function resetPorts() { + portAllocator.reset(); } @@ -76,7 +88,12 @@ async function startServer(config = {}) { [protocol] : port, 'max-workers' : workers, findNextHttpPort : true, - chromiumArgs : ['--no-sandbox'] + // Host resources locally to maintain stability + resources : path.join('__tests__', 'samples', 'resources'), + chromiumArgs : [ + '--no-sandbox', + '--disable-setuid-sandbox' + ] }, config); const server = new WebServer(config); @@ -89,6 +106,11 @@ async function startServer(config = {}) { } async function stopServer(server) { + // Stop the queue and close all browser instances first + if (server.taskQueue) { + server.taskQueue.stop(); + } + await new Promise(resolve => { if (server.httpServer) { server.httpServer.close(resolve); @@ -191,12 +213,76 @@ function getLoggerConfig(filename) { return { file : { level : 'verbose', filename : `log/tests/${filename}.txt` } }; } +/** + * Create an ExportServer instance without HTTP server for direct queue testing. + * This is faster than starting a full WebServer. + * + * @param {Object} config + * @param {number} [config.workers=1] - Number of workers + * @param {boolean} [config.testing=false] - Enable testing mode (random failures) + * @param {Object} [config.logger] - Logger config + * @returns {ExportServer} + */ +function createExportServer(config = {}) { + const { workers = 1, testing = false, logger } = config; + + return new ExportServer({ + 'max-workers' : workers, + testing, + logger : logger || appConfig.logger, + chromiumArgs : [ + '--no-sandbox', + '--disable-setuid-sandbox' + ] + }); +} + +/** + * Stop an ExportServer by stopping its queue + * @param {ExportServer} exportServer + */ +function stopExportServer(exportServer) { + if (exportServer?.taskQueue) { + exportServer.taskQueue.stop(); + } +} + +/** + * Helper to convert stream to buffer + * @param {Stream} stream + * @returns {Promise} + */ +async function streamToBuffer(stream) { + return new Promise((resolve, reject) => { + const chunks = []; + stream.on('data', chunk => chunks.push(chunk)); + stream.on('end', () => resolve(Buffer.concat(chunks))); + stream.on('error', reject); + }); +} + +/** + * Load HTML file and replace {port} placeholder with the static resources server port. + * @param {string} filePath - Path to the HTML file + * @returns {string} HTML content with port replaced + */ +function loadTestHTML(filePath) { + const html = fs.readFileSync(filePath, 'utf-8'); + return html.replace(/\{port\}/g, RESOURCES_PORT); +} + module.exports = { - getNextPort, + getPort, + resetPorts, startServer, stopServer, + createExportServer, + stopExportServer, + streamToBuffer, + loadTestHTML, getTmpFilePath, assertImage, getLoggerConfig, - certExists : checkServerKey() + certExists : checkServerKey(), + RESOURCES_PORT }; diff --git a/app.config.js b/app.config.js index 693ea05..9db8e0f 100644 --- a/app.config.js +++ b/app.config.js @@ -25,6 +25,9 @@ const config = { // True to pass `--no-sandbox` flag to the chromium "no-sandbox" : true, + // True to disable web security (CORS, CSP, etc) + "disable-web-security" : false, + // Maximum amount of parallel puppeteer instances to run "max-workers" : 5, diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 0000000..10ffd18 --- /dev/null +++ b/babel.config.js @@ -0,0 +1,5 @@ +module.exports = { + presets : [ + ['@babel/preset-env', { targets : { node : 'current' } }] + ] +}; diff --git a/package-lock.json b/package-lock.json index 6c3cd23..2274b44 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@bryntum/pdf-export-server", - "version": "2.3.4", + "version": "2.3.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@bryntum/pdf-export-server", - "version": "2.3.4", + "version": "2.3.3", "license": "MIT", "dependencies": { "@types/express": "~5.0.0", @@ -15,19 +15,13 @@ "command-line-usage": "~7.0.3", "express": "~4.22.1", "express-request-id": "~3.0.0", - "https-proxy-agent": "~2.2.1", - "jest": "~30.2.0", "join-images": "~1.1.5", "memory-streams": "~0.1.3", + "mkdirp": "~0.5.6", "muhammara": "~6.0.3", "nanoid": "~3.3.11", - "os": "~0.1.1", - "path": "~0.12.7", - "proxy-from-env": "~1.0.0", "puppeteer": "~24.36.1", "serve-static": "~1.16.2", - "url": "~0.11.0", - "websocket": "~1.0.35", "winston": "~3.2.1", "winston-daily-rotate-file": "~4.4.1", "ws": "~8.19.0" @@ -36,7 +30,9 @@ "pdf-export-server": "bin/pdf-export-server" }, "devDependencies": { + "@babel/preset-env": "^7.29.0", "@yao-pkg/pkg": "~6.6.0", + "jest": "~30.2.0", "move-file": "~1.0.0", "recursive-copy": "^2.0.14", "rimraf": "~2.6.2" @@ -63,6 +59,7 @@ "version": "7.29.0", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -72,6 +69,7 @@ "version": "7.29.0", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.29.0", @@ -102,6 +100,7 @@ "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -119,12 +118,14 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, "license": "MIT" }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -134,6 +135,7 @@ "version": "7.29.1", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/parser": "^7.29.0", @@ -146,10 +148,24 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-compilation-targets": { "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/compat-data": "^7.28.6", @@ -166,16 +182,134 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.6.tgz", + "integrity": "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.28.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz", + "integrity": "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "regexpu-core": "^6.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" } }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.6.tgz", + "integrity": "sha512-mOAsxeeKkUKayvZR3HeTYD/fICpCPLJrU5ZjelT/PA6WHtNDBOE436YiaEUvHN454bRM3CebhDsIpieCc4texA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "debug": "^4.4.3", + "lodash.debounce": "^4.0.8", + "resolve": "^1.22.11" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, "node_modules/@babel/helper-globals": { "version": "7.28.0", "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", + "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", + "dev": true, "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5" + }, "engines": { "node": ">=6.9.0" } @@ -184,6 +318,7 @@ "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/traverse": "^7.28.6", @@ -197,6 +332,7 @@ "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.28.6", @@ -210,11 +346,75 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-plugin-utils": { "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", + "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-wrap-function": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz", + "integrity": "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "dev": true, "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, "engines": { "node": ">=6.9.0" } @@ -223,6 +423,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -241,7 +442,23 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.6.tgz", + "integrity": "sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==", + "dev": true, "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, "engines": { "node": ">=6.9.0" } @@ -250,6 +467,7 @@ "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/template": "^7.28.6", @@ -263,6 +481,7 @@ "version": "7.29.0", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", + "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.29.0" @@ -274,10 +493,108 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz", + "integrity": "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", + "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", + "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", + "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.6.tgz", + "integrity": "sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -290,6 +607,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -302,6 +620,7 @@ "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" @@ -314,6 +633,7 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" @@ -325,10 +645,27 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.28.6.tgz", + "integrity": "sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-import-attributes": { "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz", "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" @@ -344,6 +681,7 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" @@ -356,6 +694,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -368,6 +707,7 @@ "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz", "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" @@ -383,6 +723,7 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" @@ -395,6 +736,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -407,6 +749,7 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" @@ -419,6 +762,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -431,6 +775,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -443,6 +788,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -451,28 +797,1004 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz", + "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", + "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.0.tgz", + "integrity": "sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-remap-async-to-generator": "^7.27.1", + "@babel/traverse": "^7.29.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.28.6.tgz", + "integrity": "sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-remap-async-to-generator": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", + "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.6.tgz", + "integrity": "sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.28.6.tgz", + "integrity": "sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.6.tgz", + "integrity": "sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.6.tgz", + "integrity": "sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-globals": "^7.28.0", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-replace-supers": "^7.28.6", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.28.6.tgz", + "integrity": "sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/template": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz", + "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.28.6.tgz", + "integrity": "sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", + "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.0.tgz", + "integrity": "sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", + "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-explicit-resource-management": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.6.tgz", + "integrity": "sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.6.tgz", + "integrity": "sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", + "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", + "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", + "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.28.6.tgz", + "integrity": "sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", + "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.6.tgz", + "integrity": "sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", + "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", + "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.28.6.tgz", + "integrity": "sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.0.tgz", + "integrity": "sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.29.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", + "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.0.tgz", + "integrity": "sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", + "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.28.6.tgz", + "integrity": "sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.28.6.tgz", + "integrity": "sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.6.tgz", + "integrity": "sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", + "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.28.6.tgz", + "integrity": "sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.6.tgz", + "integrity": "sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.27.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", + "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.28.6.tgz", + "integrity": "sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.28.6.tgz", + "integrity": "sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", + "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.0.tgz", + "integrity": "sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.28.6.tgz", + "integrity": "sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", + "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", + "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.28.6.tgz", + "integrity": "sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", + "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", + "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", + "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", + "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.28.6.tgz", + "integrity": "sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", + "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.28.6.tgz", + "integrity": "sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "node_modules/@babel/preset-env": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.0.tgz", + "integrity": "sha512-fNEdfc0yi16lt6IZo2Qxk3knHVdfMYX33czNb4v8yWhemoBhibCpQK/uYHtSKIiO+p/zd3+8fYVXhQdOVV608w==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/compat-data": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.6", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.28.6", + "@babel/plugin-syntax-import-attributes": "^7.28.6", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.29.0", + "@babel/plugin-transform-async-to-generator": "^7.28.6", + "@babel/plugin-transform-block-scoped-functions": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.28.6", + "@babel/plugin-transform-class-properties": "^7.28.6", + "@babel/plugin-transform-class-static-block": "^7.28.6", + "@babel/plugin-transform-classes": "^7.28.6", + "@babel/plugin-transform-computed-properties": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5", + "@babel/plugin-transform-dotall-regex": "^7.28.6", + "@babel/plugin-transform-duplicate-keys": "^7.27.1", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.0", + "@babel/plugin-transform-dynamic-import": "^7.27.1", + "@babel/plugin-transform-explicit-resource-management": "^7.28.6", + "@babel/plugin-transform-exponentiation-operator": "^7.28.6", + "@babel/plugin-transform-export-namespace-from": "^7.27.1", + "@babel/plugin-transform-for-of": "^7.27.1", + "@babel/plugin-transform-function-name": "^7.27.1", + "@babel/plugin-transform-json-strings": "^7.28.6", + "@babel/plugin-transform-literals": "^7.27.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.28.6", + "@babel/plugin-transform-member-expression-literals": "^7.27.1", + "@babel/plugin-transform-modules-amd": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.28.6", + "@babel/plugin-transform-modules-systemjs": "^7.29.0", + "@babel/plugin-transform-modules-umd": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.0", + "@babel/plugin-transform-new-target": "^7.27.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.28.6", + "@babel/plugin-transform-numeric-separator": "^7.28.6", + "@babel/plugin-transform-object-rest-spread": "^7.28.6", + "@babel/plugin-transform-object-super": "^7.27.1", + "@babel/plugin-transform-optional-catch-binding": "^7.28.6", + "@babel/plugin-transform-optional-chaining": "^7.28.6", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/plugin-transform-private-methods": "^7.28.6", + "@babel/plugin-transform-private-property-in-object": "^7.28.6", + "@babel/plugin-transform-property-literals": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.29.0", + "@babel/plugin-transform-regexp-modifiers": "^7.28.6", + "@babel/plugin-transform-reserved-words": "^7.27.1", + "@babel/plugin-transform-shorthand-properties": "^7.27.1", + "@babel/plugin-transform-spread": "^7.28.6", + "@babel/plugin-transform-sticky-regex": "^7.27.1", + "@babel/plugin-transform-template-literals": "^7.27.1", + "@babel/plugin-transform-typeof-symbol": "^7.27.1", + "@babel/plugin-transform-unicode-escapes": "^7.27.1", + "@babel/plugin-transform-unicode-property-regex": "^7.28.6", + "@babel/plugin-transform-unicode-regex": "^7.27.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.28.6", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.15", + "babel-plugin-polyfill-corejs3": "^0.14.0", + "babel-plugin-polyfill-regenerator": "^0.6.6", + "core-js-compat": "^3.48.0", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -481,25 +1803,36 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz", - "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==", + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, "node_modules/@babel/template": { "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.28.6", @@ -514,6 +1847,7 @@ "version": "7.29.0", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.29.0", @@ -532,6 +1866,7 @@ "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -549,12 +1884,14 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, "license": "MIT" }, "node_modules/@babel/types": { "version": "7.29.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", @@ -568,6 +1905,7 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true, "license": "MIT" }, "node_modules/@colors/colors": { @@ -583,6 +1921,7 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.8.1.tgz", "integrity": "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==", + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -594,6 +1933,7 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz", "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -604,6 +1944,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -627,6 +1968,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, "license": "ISC", "dependencies": { "camelcase": "^5.3.1", @@ -643,6 +1985,7 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -652,6 +1995,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.2.0.tgz", "integrity": "sha512-+O1ifRjkvYIkBqASKWgLxrpEhQAAE7hY77ALLUufSk5717KfOShg6IbqLmdsLMPdUiFvA2kTs0R7YZy+l0IzZQ==", + "dev": true, "license": "MIT", "dependencies": { "@jest/types": "30.2.0", @@ -669,6 +2013,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.2.0.tgz", "integrity": "sha512-03W6IhuhjqTlpzh/ojut/pDB2LPRygyWX8ExpgHtQA8H/3K7+1vKmcINx5UzeOX1se6YEsBsOHQ1CRzf3fOwTQ==", + "dev": true, "license": "MIT", "dependencies": { "@jest/console": "30.2.0", @@ -716,6 +2061,7 @@ "version": "30.0.1", "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.0.1.tgz", "integrity": "sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==", + "dev": true, "license": "MIT", "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -725,6 +2071,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.2.0.tgz", "integrity": "sha512-/QPTL7OBJQ5ac09UDRa3EQes4gt1FTEG/8jZ/4v5IVzx+Cv7dLxlVIvfvSVRiiX2drWyXeBjkMSR8hvOWSog5g==", + "dev": true, "license": "MIT", "dependencies": { "@jest/fake-timers": "30.2.0", @@ -740,6 +2087,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.2.0.tgz", "integrity": "sha512-V9yxQK5erfzx99Sf+7LbhBwNWEZ9eZay8qQ9+JSC0TrMR1pMDHLMY+BnVPacWU6Jamrh252/IKo4F1Xn/zfiqA==", + "dev": true, "license": "MIT", "dependencies": { "expect": "30.2.0", @@ -753,6 +2101,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.2.0.tgz", "integrity": "sha512-1JnRfhqpD8HGpOmQp180Fo9Zt69zNtC+9lR+kT7NVL05tNXIi+QC8Csz7lfidMoVLPD3FnOtcmp0CEFnxExGEA==", + "dev": true, "license": "MIT", "dependencies": { "@jest/get-type": "30.1.0" @@ -765,6 +2114,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.2.0.tgz", "integrity": "sha512-HI3tRLjRxAbBy0VO8dqqm7Hb2mIa8d5bg/NJkyQcOk7V118ObQML8RC5luTF/Zsg4474a+gDvhce7eTnP4GhYw==", + "dev": true, "license": "MIT", "dependencies": { "@jest/types": "30.2.0", @@ -782,6 +2132,7 @@ "version": "30.1.0", "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz", "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==", + "dev": true, "license": "MIT", "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -791,6 +2142,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.2.0.tgz", "integrity": "sha512-b63wmnKPaK+6ZZfpYhz9K61oybvbI1aMcIs80++JI1O1rR1vaxHUCNqo3ITu6NU0d4V34yZFoHMn/uoKr/Rwfw==", + "dev": true, "license": "MIT", "dependencies": { "@jest/environment": "30.2.0", @@ -806,6 +2158,7 @@ "version": "30.0.1", "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz", "integrity": "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==", + "dev": true, "license": "MIT", "dependencies": { "@types/node": "*", @@ -819,6 +2172,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.2.0.tgz", "integrity": "sha512-DRyW6baWPqKMa9CzeiBjHwjd8XeAyco2Vt8XbcLFjiwCOEKOvy82GJ8QQnJE9ofsxCMPjH4MfH8fCWIHHDKpAQ==", + "dev": true, "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", @@ -861,6 +2215,7 @@ "version": "30.0.5", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz", "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==", + "dev": true, "license": "MIT", "dependencies": { "@sinclair/typebox": "^0.34.0" @@ -873,6 +2228,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.2.0.tgz", "integrity": "sha512-0aVxM3RH6DaiLcjj/b0KrIBZhSX1373Xci4l3cW5xiUWPctZ59zQ7jj4rqcJQ/Z8JuN/4wX3FpJSa3RssVvCug==", + "dev": true, "license": "MIT", "dependencies": { "@jest/types": "30.2.0", @@ -888,6 +2244,7 @@ "version": "30.0.1", "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-30.0.1.tgz", "integrity": "sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", @@ -902,6 +2259,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.2.0.tgz", "integrity": "sha512-RF+Z+0CCHkARz5HT9mcQCBulb1wgCP3FBvl9VFokMX27acKphwyQsNuWH3c+ojd1LeWBLoTYoxF0zm6S/66mjg==", + "dev": true, "license": "MIT", "dependencies": { "@jest/console": "30.2.0", @@ -917,6 +2275,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.2.0.tgz", "integrity": "sha512-wXKgU/lk8fKXMu/l5Hog1R61bL4q5GCdT6OJvdAFz1P+QrpoFuLU68eoKuVc4RbrTtNnTL5FByhWdLgOPSph+Q==", + "dev": true, "license": "MIT", "dependencies": { "@jest/test-result": "30.2.0", @@ -932,6 +2291,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.2.0.tgz", "integrity": "sha512-XsauDV82o5qXbhalKxD7p4TZYYdwcaEXC77PPD2HixEFF+6YGppjrAAQurTl2ECWcEomHBMMNS9AH3kcCFx8jA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.27.4", @@ -958,6 +2318,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.2.0.tgz", "integrity": "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg==", + "dev": true, "license": "MIT", "dependencies": { "@jest/pattern": "30.0.1", @@ -976,6 +2337,7 @@ "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", @@ -986,6 +2348,7 @@ "version": "2.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", @@ -996,6 +2359,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -1005,12 +2369,14 @@ "version": "1.5.5", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.31", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -1021,6 +2387,7 @@ "version": "0.2.12", "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -1033,6 +2400,7 @@ "version": "0.2.9", "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", + "dev": true, "license": "MIT", "engines": { "node": "^12.20.0 || ^14.18.0 || >=16.0.0" @@ -1155,12 +2523,14 @@ "version": "0.34.48", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.48.tgz", "integrity": "sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA==", + "dev": true, "license": "MIT" }, "node_modules/@sinonjs/commons": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" @@ -1170,6 +2540,7 @@ "version": "13.0.5", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.1" @@ -1185,6 +2556,7 @@ "version": "0.10.1", "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -1195,6 +2567,7 @@ "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/parser": "^7.20.7", @@ -1208,6 +2581,7 @@ "version": "7.27.0", "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.0.0" @@ -1217,6 +2591,7 @@ "version": "7.4.4", "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, "license": "MIT", "dependencies": { "@babel/parser": "^7.1.0", @@ -1227,6 +2602,7 @@ "version": "7.28.0", "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.28.2" @@ -1284,12 +2660,14 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, "license": "MIT" }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" @@ -1299,6 +2677,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" @@ -1348,6 +2727,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true, "license": "MIT" }, "node_modules/@types/triple-beam": { @@ -1360,6 +2740,7 @@ "version": "17.0.35", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", + "dev": true, "license": "MIT", "dependencies": { "@types/yargs-parser": "*" @@ -1369,6 +2750,7 @@ "version": "21.0.3", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, "license": "MIT" }, "node_modules/@types/yauzl": { @@ -1385,6 +2767,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "dev": true, "license": "ISC" }, "node_modules/@unrs/resolver-binding-android-arm-eabi": { @@ -1394,6 +2777,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1407,6 +2791,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1420,6 +2805,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1433,6 +2819,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1446,6 +2833,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1459,6 +2847,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1472,6 +2861,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1485,6 +2875,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1498,6 +2889,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1511,6 +2903,7 @@ "cpu": [ "ppc64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1524,6 +2917,7 @@ "cpu": [ "riscv64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1537,6 +2931,7 @@ "cpu": [ "riscv64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1550,6 +2945,7 @@ "cpu": [ "s390x" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1563,6 +2959,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1576,6 +2973,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1589,6 +2987,7 @@ "cpu": [ "wasm32" ], + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -1605,6 +3004,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1618,6 +3018,7 @@ "cpu": [ "ia32" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1631,6 +3032,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1760,22 +3162,11 @@ "node": ">= 0.6" } }, - "node_modules/agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "license": "MIT", - "dependencies": { - "es6-promisify": "^5.0.0" - }, - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, "license": "MIT", "dependencies": { "type-fest": "^0.21.3" @@ -1815,6 +3206,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", @@ -1828,6 +3220,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, "license": "MIT", "engines": { "node": ">=8.6" @@ -1840,6 +3233,7 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" @@ -1949,6 +3343,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.2.0.tgz", "integrity": "sha512-0YiBEOxWqKkSQWL9nNGGEgndoeL0ZpWrbLMNL5u/Kaxrli3Eaxlt3ZtIDktEvXt4L/R9r3ODr2zKwGM/2BjxVw==", + "dev": true, "license": "MIT", "dependencies": { "@jest/transform": "30.2.0", @@ -1970,6 +3365,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.1.tgz", "integrity": "sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==", + "dev": true, "license": "BSD-3-Clause", "workspaces": [ "test/babel-8" @@ -1989,6 +3385,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.2.0.tgz", "integrity": "sha512-ftzhzSGMUnOzcCXd6WHdBGMyuwy15Wnn0iyyWGKgBDLxf9/s5ABuraCSpBX2uG0jUg4rqJnxsLc5+oYBqoxVaA==", + "dev": true, "license": "MIT", "dependencies": { "@types/babel__core": "^7.20.5" @@ -1997,10 +3394,63 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.15.tgz", + "integrity": "sha512-hR3GwrRwHUfYwGfrisXPIDP3JcYfBrW7wKE7+Au6wDYl7fm/ka1NEII6kORzxNU556JjfidZeBsO10kYvtV1aw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-define-polyfill-provider": "^0.6.6", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.0.tgz", + "integrity": "sha512-AvDcMxJ34W4Wgy4KBIIePQTAOP1Ie2WFwkQp3dB7FQ/f0lI5+nM96zUnYEOE1P9sEg0es5VCP0HxiWu5fUHZAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.6", + "core-js-compat": "^3.48.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.6.tgz", + "integrity": "sha512-hYm+XLYRMvupxiQzrvXUj7YyvFFVfv5gI0R71AJzudg1g2AI2vyCPPIFEBjk162/wFzti3inBHo7isWFuEVS/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.6" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, "node_modules/babel-preset-current-node-syntax": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", @@ -2027,6 +3477,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.2.0.tgz", "integrity": "sha512-US4Z3NOieAQumwFnYdUWKvUKh8+YSnS/gB3t6YBiz0bskpu7Pine8pPCheNxlPEW4wnUkma2a94YuW2q3guvCQ==", + "dev": true, "license": "MIT", "dependencies": { "babel-plugin-jest-hoist": "30.2.0", @@ -2043,6 +3494,7 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, "license": "MIT", "engines": { "node": "18 || 20 || >=22" @@ -2153,6 +3605,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz", "integrity": "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==", + "dev": true, "license": "Apache-2.0", "bin": { "baseline-browser-mapping": "dist/cli.cjs" @@ -2230,6 +3683,7 @@ "version": "5.0.3", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz", "integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==", + "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^4.0.2" @@ -2242,6 +3696,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, "license": "MIT", "dependencies": { "fill-range": "^7.1.1" @@ -2254,6 +3709,7 @@ "version": "4.28.1", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "dev": true, "funding": [ { "type": "opencollective", @@ -2287,6 +3743,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, "license": "Apache-2.0", "dependencies": { "node-int64": "^0.4.0" @@ -2329,6 +3786,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, "license": "MIT" }, "node_modules/buffer/node_modules/base64-js": { @@ -2351,19 +3809,6 @@ ], "license": "MIT" }, - "node_modules/bufferutil": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.1.0.tgz", - "integrity": "sha512-ZMANVnAixE6AWWnPzlW2KpUrxhm9woycYvPOo67jWHyFowASTEd9s+QN1EIMsSDtwhIxN4sWE1jotpuDUIgyIw==", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -2415,6 +3860,7 @@ "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -2424,6 +3870,7 @@ "version": "1.0.30001774", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001774.tgz", "integrity": "sha512-DDdwPGz99nmIEv216hKSgLD+D4ikHQHjBC/seF98N9CPqRX4M5mSxT9eTV6oyisnJcuzxtZy4n17yKKQYmYQOA==", + "dev": true, "funding": [ { "type": "opencollective", @@ -2475,6 +3922,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -2507,6 +3955,7 @@ "version": "4.4.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", + "dev": true, "funding": [ { "type": "github", @@ -2522,6 +3971,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.2.0.tgz", "integrity": "sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==", + "dev": true, "license": "MIT" }, "node_modules/cliui": { @@ -2540,6 +3990,7 @@ "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, "license": "MIT", "engines": { "iojs": ">= 1.0.0", @@ -2550,6 +4001,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==", + "dev": true, "license": "MIT" }, "node_modules/color": { @@ -2698,6 +4150,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, "license": "MIT" }, "node_modules/cookie": { @@ -2715,6 +4168,20 @@ "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", "license": "MIT" }, + "node_modules/core-js-compat": { + "version": "3.48.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.48.0.tgz", + "integrity": "sha512-OM4cAF3D6VtH/WkLtWvyNC56EZVXsZdU3iqaMG2B4WvYrlqU831pc4UtG5yp0sE9z8Y02wVN7PjW5Zf9Gt0f1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", @@ -2799,6 +4266,7 @@ "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -2809,19 +4277,6 @@ "node": ">= 8" } }, - "node_modules/d": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", - "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", - "license": "ISC", - "dependencies": { - "es5-ext": "^0.10.64", - "type": "^2.7.2" - }, - "engines": { - "node": ">=0.12" - } - }, "node_modules/data-uri-to-buffer": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", @@ -2859,6 +4314,7 @@ "version": "1.7.1", "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.1.tgz", "integrity": "sha512-9JmrhGZpOlEgOLdQgSm0zxFaYoQon408V1v49aqTWuXENVlnCuY9JBZcXZiCsZQWDjTm5Qf/nIvAy77mXDAjEg==", + "dev": true, "license": "MIT", "peerDependencies": { "babel-plugin-macros": "^3.1.0" @@ -2882,6 +4338,7 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -2933,6 +4390,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -2989,12 +4447,14 @@ "version": "1.5.302", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.302.tgz", "integrity": "sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==", + "dev": true, "license": "ISC" }, "node_modules/emittery": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -3103,61 +4563,6 @@ "node": ">= 0.4" } }, - "node_modules/es5-ext": { - "version": "0.10.64", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", - "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", - "hasInstallScript": true, - "license": "ISC", - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "esniff": "^2.0.1", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "license": "MIT", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", - "license": "MIT" - }, - "node_modules/es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", - "license": "MIT", - "dependencies": { - "es6-promise": "^4.0.3" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", - "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", - "license": "ISC", - "dependencies": { - "d": "^1.0.2", - "ext": "^1.7.0" - }, - "engines": { - "node": ">=0.12" - } - }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -3177,6 +4582,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -3203,21 +4609,6 @@ "source-map": "~0.6.1" } }, - "node_modules/esniff": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", - "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", - "license": "ISC", - "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.62", - "event-emitter": "^0.3.5", - "type": "^2.7.2" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -3258,16 +4649,6 @@ "node": ">= 0.6" } }, - "node_modules/event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", - "license": "MIT", - "dependencies": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, "node_modules/events-universal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", @@ -3281,6 +4662,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", @@ -3304,6 +4686,7 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/exit-x/-/exit-x-0.2.2.tgz", "integrity": "sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8.0" @@ -3322,6 +4705,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/expect/-/expect-30.2.0.tgz", "integrity": "sha512-u/feCi0GPsI+988gU2FLcsHyAHTU0MX1Wg68NhAnN7z/+C5wqG+CY8J53N9ioe8RXgaoz0nBR/TYMf3AycUuPw==", + "dev": true, "license": "MIT", "dependencies": { "@jest/expect-utils": "30.2.0", @@ -3393,15 +4777,6 @@ "node": "^14.20.1 || >=16.0.0" } }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "license": "ISC", - "dependencies": { - "type": "^2.7.2" - } - }, "node_modules/extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", @@ -3470,12 +4845,14 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, "license": "MIT" }, "node_modules/fb-watchman": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, "license": "Apache-2.0", "dependencies": { "bser": "2.1.1" @@ -3527,6 +4904,7 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" @@ -3574,6 +4952,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, "license": "MIT", "dependencies": { "locate-path": "^5.0.0", @@ -3637,6 +5016,7 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -3660,6 +5040,7 @@ "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -3702,6 +5083,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=8.0.0" @@ -3724,6 +5106,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -3779,6 +5162,7 @@ "version": "13.0.6", "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", + "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "minimatch": "^10.2.2", @@ -3808,6 +5192,7 @@ "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, "license": "ISC" }, "node_modules/has-flag": { @@ -3847,6 +5232,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, "license": "MIT" }, "node_modules/http-errors": { @@ -3914,38 +5300,11 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, - "node_modules/https-proxy-agent": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", - "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", - "license": "MIT", - "dependencies": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/https-proxy-agent/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/https-proxy-agent/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, "license": "Apache-2.0", "engines": { "node": ">=10.17.0" @@ -4012,6 +5371,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, "license": "MIT", "dependencies": { "pkg-dir": "^4.2.0", @@ -4031,6 +5391,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.8.19" @@ -4118,6 +5479,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -4127,6 +5489,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.12.0" @@ -4148,6 +5511,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -4156,12 +5520,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "license": "MIT" - }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -4173,12 +5531,14 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, "license": "ISC" }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=8" @@ -4188,6 +5548,7 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.23.9", @@ -4204,6 +5565,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", @@ -4218,6 +5580,7 @@ "version": "5.0.6", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@jridgewell/trace-mapping": "^0.3.23", @@ -4232,6 +5595,7 @@ "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -4249,12 +5613,14 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, "license": "MIT" }, "node_modules/istanbul-reports": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", @@ -4268,6 +5634,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest/-/jest-30.2.0.tgz", "integrity": "sha512-F26gjC0yWN8uAA5m5Ss8ZQf5nDHWGlN/xWZIh8S5SRbsEKBovwZhxGd6LJlbZYxBgCYOtreSUyb8hpXyGC5O4A==", + "dev": true, "license": "MIT", "dependencies": { "@jest/core": "30.2.0", @@ -4294,6 +5661,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.2.0.tgz", "integrity": "sha512-L8lR1ChrRnSdfeOvTrwZMlnWV8G/LLjQ0nG9MBclwWZidA2N5FviRki0Bvh20WRMOX31/JYvzdqTJrk5oBdydQ==", + "dev": true, "license": "MIT", "dependencies": { "execa": "^5.1.1", @@ -4308,6 +5676,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.2.0.tgz", "integrity": "sha512-Fh0096NC3ZkFx05EP2OXCxJAREVxj1BcW/i6EWqqymcgYKWjyyDpral3fMxVcHXg6oZM7iULer9wGRFvfpl+Tg==", + "dev": true, "license": "MIT", "dependencies": { "@jest/environment": "30.2.0", @@ -4339,6 +5708,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.2.0.tgz", "integrity": "sha512-Os9ukIvADX/A9sLt6Zse3+nmHtHaE6hqOsjQtNiugFTbKRHYIYtZXNGNK9NChseXy7djFPjndX1tL0sCTlfpAA==", + "dev": true, "license": "MIT", "dependencies": { "@jest/core": "30.2.0", @@ -4371,6 +5741,7 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, "license": "ISC", "dependencies": { "string-width": "^4.2.0", @@ -4385,6 +5756,7 @@ "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, "license": "MIT", "dependencies": { "cliui": "^8.0.1", @@ -4403,6 +5775,7 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, "license": "ISC", "engines": { "node": ">=12" @@ -4412,6 +5785,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.2.0.tgz", "integrity": "sha512-g4WkyzFQVWHtu6uqGmQR4CQxz/CH3yDSlhzXMWzNjDx843gYjReZnMRanjRCq5XZFuQrGDxgUaiYWE8BRfVckA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.27.4", @@ -4463,6 +5837,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.2.0.tgz", "integrity": "sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==", + "dev": true, "license": "MIT", "dependencies": { "@jest/diff-sequences": "30.0.1", @@ -4478,6 +5853,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.2.0.tgz", "integrity": "sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA==", + "dev": true, "license": "MIT", "dependencies": { "detect-newline": "^3.1.0" @@ -4490,6 +5866,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.2.0.tgz", "integrity": "sha512-lpWlJlM7bCUf1mfmuqTA8+j2lNURW9eNafOy99knBM01i5CQeY5UH1vZjgT9071nDJac1M4XsbyI44oNOdhlDQ==", + "dev": true, "license": "MIT", "dependencies": { "@jest/get-type": "30.1.0", @@ -4506,6 +5883,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.2.0.tgz", "integrity": "sha512-ElU8v92QJ9UrYsKrxDIKCxu6PfNj4Hdcktcn0JX12zqNdqWHB0N+hwOnnBBXvjLd2vApZtuLUGs1QSY+MsXoNA==", + "dev": true, "license": "MIT", "dependencies": { "@jest/environment": "30.2.0", @@ -4524,6 +5902,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.2.0.tgz", "integrity": "sha512-sQA/jCb9kNt+neM0anSj6eZhLZUIhQgwDt7cPGjumgLM4rXsfb9kpnlacmvZz3Q5tb80nS+oG/if+NBKrHC+Xw==", + "dev": true, "license": "MIT", "dependencies": { "@jest/types": "30.2.0", @@ -4548,6 +5927,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.2.0.tgz", "integrity": "sha512-M6jKAjyzjHG0SrQgwhgZGy9hFazcudwCNovY/9HPIicmNSBuockPSedAP9vlPK6ONFJ1zfyH/M2/YYJxOz5cdQ==", + "dev": true, "license": "MIT", "dependencies": { "@jest/get-type": "30.1.0", @@ -4561,6 +5941,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.2.0.tgz", "integrity": "sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg==", + "dev": true, "license": "MIT", "dependencies": { "@jest/get-type": "30.1.0", @@ -4576,6 +5957,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.2.0.tgz", "integrity": "sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", @@ -4596,6 +5978,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.2.0.tgz", "integrity": "sha512-JNNNl2rj4b5ICpmAcq+WbLH83XswjPbjH4T7yvGzfAGCPh1rw+xVNbtk+FnRslvt9lkCcdn9i1oAoKUuFsOxRw==", + "dev": true, "license": "MIT", "dependencies": { "@jest/types": "30.2.0", @@ -4610,6 +5993,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -4627,6 +6011,7 @@ "version": "30.0.1", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.1.tgz", "integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==", + "dev": true, "license": "MIT", "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -4636,6 +6021,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.2.0.tgz", "integrity": "sha512-TCrHSxPlx3tBY3hWNtRQKbtgLhsXa1WmbJEqBlTBrGafd5fiQFByy2GNCEoGR+Tns8d15GaL9cxEzKOO3GEb2A==", + "dev": true, "license": "MIT", "dependencies": { "chalk": "^4.1.2", @@ -4655,6 +6041,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.2.0.tgz", "integrity": "sha512-xTOIGug/0RmIe3mmCqCT95yO0vj6JURrn1TKWlNbhiAefJRWINNPgwVkrVgt/YaerPzY3iItufd80v3lOrFJ2w==", + "dev": true, "license": "MIT", "dependencies": { "jest-regex-util": "30.0.1", @@ -4668,6 +6055,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.2.0.tgz", "integrity": "sha512-PqvZ2B2XEyPEbclp+gV6KO/F1FIFSbIwewRgmROCMBo/aZ6J1w8Qypoj2pEOcg3G2HzLlaP6VUtvwCI8dM3oqQ==", + "dev": true, "license": "MIT", "dependencies": { "@jest/console": "30.2.0", @@ -4701,6 +6089,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.2.0.tgz", "integrity": "sha512-p1+GVX/PJqTucvsmERPMgCPvQJpFt4hFbM+VN3n8TMo47decMUcJbt+rgzwrEme0MQUA/R+1de2axftTHkKckg==", + "dev": true, "license": "MIT", "dependencies": { "@jest/environment": "30.2.0", @@ -4734,6 +6123,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.2.0.tgz", "integrity": "sha512-5WEtTy2jXPFypadKNpbNkZ72puZCa6UjSr/7djeecHWOu7iYhSXSnHScT8wBz3Rn8Ena5d5RYRcsyKIeqG1IyA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.27.4", @@ -4766,6 +6156,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.2.0.tgz", "integrity": "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA==", + "dev": true, "license": "MIT", "dependencies": { "@jest/types": "30.2.0", @@ -4783,6 +6174,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.2.0.tgz", "integrity": "sha512-FBGWi7dP2hpdi8nBoWxSsLvBFewKAg0+uSQwBaof4Y4DPgBabXgpSYC5/lR7VmnIlSpASmCi/ntRWPbv7089Pw==", + "dev": true, "license": "MIT", "dependencies": { "@jest/get-type": "30.1.0", @@ -4800,6 +6192,7 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -4812,6 +6205,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.2.0.tgz", "integrity": "sha512-PYxa28dxJ9g777pGm/7PrbnMeA0Jr7osHP9bS7eJy9DuAjMgdGtxgf0uKMyoIsTWAkIbUW5hSDdJ3urmgXBqxg==", + "dev": true, "license": "MIT", "dependencies": { "@jest/test-result": "30.2.0", @@ -4831,6 +6225,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.2.0.tgz", "integrity": "sha512-0Q4Uk8WF7BUwqXHuAjc23vmopWJw5WH7w2tqBoUOZpOjW/ZnR44GXXd1r82RvnmI2GZge3ivrYXk/BE2+VtW2g==", + "dev": true, "license": "MIT", "dependencies": { "@types/node": "*", @@ -4847,6 +6242,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -4884,6 +6280,7 @@ "version": "3.14.2", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "dev": true, "license": "MIT", "dependencies": { "argparse": "^1.0.7", @@ -4897,6 +6294,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, "license": "MIT", "bin": { "jsesc": "bin/jsesc" @@ -4915,6 +6313,7 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, "license": "MIT", "bin": { "json5": "lib/cli.js" @@ -4959,6 +6358,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -4984,6 +6384,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, "license": "MIT", "dependencies": { "p-locate": "^4.1.0" @@ -5004,6 +6405,13 @@ "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", "license": "MIT" }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true, + "license": "MIT" + }, "node_modules/logform": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", @@ -5031,6 +6439,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, "license": "ISC", "dependencies": { "yallist": "^3.0.2" @@ -5040,6 +6449,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, "license": "MIT", "dependencies": { "semver": "^7.5.3" @@ -5055,6 +6465,7 @@ "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "tmpl": "1.0.5" @@ -5140,6 +6551,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, "license": "MIT" }, "node_modules/methods": { @@ -5155,6 +6567,7 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, "license": "MIT", "dependencies": { "braces": "^3.0.3", @@ -5168,6 +6581,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, "license": "MIT", "engines": { "node": ">=8.6" @@ -5213,6 +6627,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -5234,6 +6649,7 @@ "version": "10.2.1", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.1.tgz", "integrity": "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A==", + "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "brace-expansion": "^5.0.2" @@ -5258,6 +6674,7 @@ "version": "7.1.3", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, "license": "BlueOak-1.0.0", "engines": { "node": ">=16 || 14 >=14.17" @@ -5286,7 +6703,6 @@ "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, "license": "MIT", "dependencies": { "minimist": "^1.2.6" @@ -5650,6 +7066,7 @@ "version": "0.3.4", "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==", + "dev": true, "license": "MIT", "bin": { "napi-postinstall": "lib/cli.js" @@ -5665,6 +7082,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, "license": "MIT" }, "node_modules/negotiator": { @@ -5692,12 +7110,6 @@ "node": ">= 0.4.0" } }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "license": "ISC" - }, "node_modules/node-abi": { "version": "3.87.0", "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.87.0.tgz", @@ -5738,33 +7150,25 @@ } } }, - "node_modules/node-gyp-build": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", - "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", - "license": "MIT", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true, "license": "MIT" }, "node_modules/node-releases": { "version": "2.0.27", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, "license": "MIT" }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -5774,6 +7178,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, "license": "MIT", "dependencies": { "path-key": "^3.0.0" @@ -5834,6 +7239,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" @@ -5845,12 +7251,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/os": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/os/-/os-0.1.2.tgz", - "integrity": "sha512-ZoXJkvAnljwvc56MbvhtKVWmSkzV712k42Is2mA0+0KTSRakq5XXuXpjZjgAt9ctzl51ojhQWakQQpmOvXWfjQ==", - "license": "MIT" - }, "node_modules/p-is-promise": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", @@ -5865,6 +7265,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" @@ -5880,6 +7281,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, "license": "MIT", "dependencies": { "p-limit": "^2.2.0" @@ -5892,6 +7294,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, "license": "MIT", "dependencies": { "p-try": "^2.0.0" @@ -5907,6 +7310,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -6034,20 +7438,11 @@ "node": ">= 0.8" } }, - "node_modules/path": { - "version": "0.12.7", - "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", - "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==", - "license": "MIT", - "dependencies": { - "process": "^0.11.1", - "util": "^0.10.3" - } - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -6057,6 +7452,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -6073,6 +7469,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^11.0.0", @@ -6089,6 +7486,7 @@ "version": "11.2.6", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", + "dev": true, "license": "BlueOak-1.0.0", "engines": { "node": "20 || >=22" @@ -6116,6 +7514,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -6138,6 +7537,7 @@ "version": "4.0.7", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, "license": "MIT", "engines": { "node": ">= 6" @@ -6147,6 +7547,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, "license": "MIT", "dependencies": { "find-up": "^4.0.0" @@ -6186,6 +7587,7 @@ "version": "30.2.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.2.0.tgz", "integrity": "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==", + "dev": true, "license": "MIT", "dependencies": { "@jest/schemas": "30.0.5", @@ -6200,6 +7602,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -6208,15 +7611,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - } - }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -6335,12 +7729,6 @@ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "license": "MIT" }, - "node_modules/proxy-from-env": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", - "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", - "license": "MIT" - }, "node_modules/prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", @@ -6358,12 +7746,6 @@ "once": "^1.3.1" } }, - "node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "license": "MIT" - }, "node_modules/puppeteer": { "version": "24.36.1", "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-24.36.1.tgz", @@ -6430,6 +7812,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-7.0.1.tgz", "integrity": "sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==", + "dev": true, "funding": [ { "type": "individual", @@ -6509,6 +7892,7 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, "license": "MIT" }, "node_modules/readable-stream": { @@ -6586,6 +7970,64 @@ "node": ">=0.10.0" } }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", + "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regexpu-core": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", + "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.2", + "regjsgen": "^0.8.0", + "regjsparser": "^0.13.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.2.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz", + "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~3.1.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -6620,6 +8062,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, "license": "MIT", "dependencies": { "resolve-from": "^5.0.0" @@ -6632,6 +8075,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -6804,6 +8248,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -6816,6 +8261,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -6897,6 +8343,7 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, "license": "ISC" }, "node_modules/simple-concat": { @@ -6963,6 +8410,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -7042,6 +8490,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "devOptional": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -7051,6 +8500,7 @@ "version": "0.5.13", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", @@ -7061,6 +8511,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, "license": "BSD-3-Clause" }, "node_modules/stack-trace": { @@ -7076,6 +8527,7 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, "license": "MIT", "dependencies": { "escape-string-regexp": "^2.0.0" @@ -7133,6 +8585,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, "license": "MIT", "dependencies": { "char-regex": "^1.0.2", @@ -7172,6 +8625,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -7181,6 +8635,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -7190,6 +8645,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -7227,6 +8683,7 @@ "version": "0.11.12", "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz", "integrity": "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==", + "dev": true, "license": "MIT", "dependencies": { "@pkgr/core": "^0.2.9" @@ -7340,6 +8797,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", @@ -7392,12 +8850,14 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true, "license": "BSD-3-Clause" }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "license": "MIT", "dependencies": { "is-number": "^7.0.0" @@ -7449,16 +8909,11 @@ "node": "*" } }, - "node_modules/type": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", - "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", - "license": "ISC" - }, "node_modules/type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -7468,6 +8923,7 @@ "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" @@ -7495,15 +8951,6 @@ "integrity": "sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==", "license": "MIT" }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "license": "MIT", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, "node_modules/typical": { "version": "7.3.0", "resolved": "https://registry.npmjs.org/typical/-/typical-7.3.0.tgz", @@ -7519,6 +8966,50 @@ "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", "license": "MIT" }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", + "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz", + "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/unicode-trie": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", @@ -7552,6 +9043,7 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==", + "dev": true, "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -7600,6 +9092,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, "funding": [ { "type": "opencollective", @@ -7626,53 +9119,12 @@ "browserslist": ">= 4.21.0" } }, - "node_modules/url": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz", - "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==", - "license": "MIT", - "dependencies": { - "punycode": "^1.4.1", - "qs": "^6.12.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", - "license": "MIT", - "dependencies": { - "inherits": "2.0.3" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "license": "MIT" }, - "node_modules/util/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "license": "ISC" - }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -7699,6 +9151,7 @@ "version": "9.3.0", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, "license": "ISC", "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", @@ -7722,6 +9175,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, "license": "Apache-2.0", "dependencies": { "makeerror": "1.0.12" @@ -7740,23 +9194,6 @@ "dev": true, "license": "BSD-2-Clause" }, - "node_modules/websocket": { - "version": "1.0.35", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.35.tgz", - "integrity": "sha512-/REy6amwPZl44DDzvRCkaI1q1bIiQB0mEFQLUrhz3z2EK91cp3n72rAjUlrTP0zV22HJIUOVHQGPxhFRjxjt+Q==", - "license": "Apache-2.0", - "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.63", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -7772,6 +9209,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -7908,6 +9346,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "dev": true, "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", @@ -7921,6 +9360,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, "license": "ISC", "engines": { "node": ">=14" @@ -7959,20 +9399,11 @@ "node": ">=10" } }, - "node_modules/yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "license": "MIT", - "engines": { - "node": ">=0.10.32" - } - }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, "license": "ISC" }, "node_modules/yargs": { @@ -8018,6 +9449,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" diff --git a/package.json b/package.json index 1c31eb7..7b5d172 100644 --- a/package.json +++ b/package.json @@ -42,25 +42,21 @@ "command-line-usage": "~7.0.3", "express": "~4.22.1", "express-request-id": "~3.0.0", - "https-proxy-agent": "~2.2.1", - "jest": "~30.2.0", "join-images": "~1.1.5", "memory-streams": "~0.1.3", + "mkdirp": "~0.5.6", "muhammara": "~6.0.3", "nanoid": "~3.3.11", - "os": "~0.1.1", - "path": "~0.12.7", - "proxy-from-env": "~1.0.0", "puppeteer": "~24.36.1", "serve-static": "~1.16.2", - "url": "~0.11.0", - "websocket": "~1.0.35", "winston": "~3.2.1", "winston-daily-rotate-file": "~4.4.1", "ws": "~8.19.0" }, "devDependencies": { + "@babel/preset-env": "^7.29.0", "@yao-pkg/pkg": "~6.6.0", + "jest": "~30.2.0", "move-file": "~1.0.0", "recursive-copy": "^2.0.14", "rimraf": "~2.6.2" @@ -80,6 +76,11 @@ ], "setupFiles": [ "/__tests__/jest.setup.js" + ], + "globalSetup": "/__tests__/globalSetup.js", + "globalTeardown": "/__tests__/globalTeardown.js", + "transformIgnorePatterns": [ + "node_modules/(?!(express-request-id|nanoid|command-line-args|command-line-usage)/)" ] }, "pkg": { diff --git a/scripts/print-html.js b/scripts/print-html.js new file mode 100755 index 0000000..dcf7807 --- /dev/null +++ b/scripts/print-html.js @@ -0,0 +1,129 @@ +#!/usr/bin/env node + +/** + * Utility script to wrap HTML file into PDF export POST request and send it to the server. + * + * Usage: + * node scripts/wrap-html.js [input.html] [output.pdf] [port] + * + * Defaults: + * input: tmp/test.html + * output: tmp/output.pdf + * port: 8080 + * + * Examples: + * node scripts/wrap-html.js + * node scripts/wrap-html.js tmp/test.html + * node scripts/wrap-html.js tmp/test.html tmp/result.pdf + * node scripts/wrap-html.js tmp/test.html tmp/result.pdf 8081 + */ + +const fs = require('fs'); +const path = require('path'); +const http = require('http'); + +const args = process.argv.slice(2); +const inputPath = args[0] || 'tmp/test.html'; +const outputPath = args[1] || 'tmp/output.pdf'; +const port = parseInt(args[2], 10) || 8080; + +// Resolve paths relative to project root +const projectRoot = path.join(__dirname, '..'); +const absoluteInputPath = path.isAbsolute(inputPath) + ? inputPath + : path.join(projectRoot, inputPath); +const absoluteOutputPath = path.isAbsolute(outputPath) + ? outputPath + : path.join(projectRoot, outputPath); + +// Check if input file exists +if (!fs.existsSync(absoluteInputPath)) { + console.error(`Error: Input file not found: ${absoluteInputPath}`); + process.exit(1); +} + +// Read HTML content +const htmlContent = fs.readFileSync(absoluteInputPath, 'utf-8'); + +// Extract dimensions from HTML if possible (look for body width/height styles) +let format = 'A4'; +const widthMatch = htmlContent.match(/width\s*:\s*(\d+)px/); +const heightMatch = htmlContent.match(/height\s*:\s*(\d+)px/); + +if (widthMatch && heightMatch) { + format = `${widthMatch[1]}*${heightMatch[1]}`; +} + +// Build the POST request structure (matching testDataPDF in assertions.js) +const requestData = { + orientation : 'portrait', + format : format, + fileName : path.basename(inputPath, path.extname(inputPath)), + sendAsBinary : true, + html : [{ html : htmlContent }], + fileFormat : 'pdf' +}; + +const jsonBody = JSON.stringify(requestData); + +console.log(`Sending POST request to http://localhost:${port}/`); +console.log(`Input: ${absoluteInputPath}`); +console.log(`Output: ${absoluteOutputPath}`); +console.log(`Format: ${format}`); + +const request = http.request({ + hostname : 'localhost', + port : port, + path : '/', + method : 'POST', + headers : { + 'Content-Type' : 'application/json', + 'Content-Length' : Buffer.byteLength(jsonBody) + } +}, response => { + const chunks = []; + + response.on('data', chunk => { + chunks.push(chunk); + }); + + response.on('end', () => { + const result = Buffer.concat(chunks); + + if (response.statusCode === 200) { + // Check if it's a PDF (starts with %PDF) + if (result.slice(0, 4).toString() === '%PDF') { + fs.writeFileSync(absoluteOutputPath, result); + console.log(`Success! PDF saved to: ${absoluteOutputPath}`); + console.log(`File size: ${result.length} bytes`); + } else { + // Might be JSON error response + try { + const json = JSON.parse(result.toString()); + console.error('Server returned JSON instead of PDF:', json); + } catch { + console.error('Unexpected response:', result.toString().slice(0, 500)); + } + process.exit(1); + } + } else { + console.error(`Server returned status ${response.statusCode}`); + try { + const json = JSON.parse(result.toString()); + console.error('Error:', json.msg || json); + } catch { + console.error('Response:', result.toString().slice(0, 500)); + } + process.exit(1); + } + }); +}); + +request.on('error', err => { + console.error(`Request failed: ${err.message}`); + console.error(`Is the server running on port ${port}?`); + process.exit(1); +}); + +request.write(jsonBody); +request.end(); diff --git a/src/queue.js b/src/queue.js index 03d69e3..c9d1208 100644 --- a/src/queue.js +++ b/src/queue.js @@ -1,4 +1,3 @@ -const fs = require('fs'); const { EventEmitter } = require('events'); const puppeteer = require('puppeteer'); const { RequestCancelError } = require('./exception.js'); @@ -121,13 +120,28 @@ class Queue extends Loggable { super(); const me = this; + /** + * Max number of workers to run concurrently + * @type {Number} + */ me.maxWorkers = Number(maxWorkers); + + /** + * Flag to use tabs instead of browser instances + * @type {Boolean} + */ me.useTabs = useTabs; - // Boolean flag to use quick loading (waitUntil load). Makes pages to export faster, fonts might be missing. + /** + * Flag to use quick loading (waitUntil load). Makes pages to export faster, fonts might be missing. + * @type {Boolean} + */ me.quick = quick; - // Used to switch queue to testing mode + /** + * Used to switch queue to testing mode + * @type {Boolean} + */ me.testing = testing; // List of html chunks to convert to pdf/png @@ -156,6 +170,8 @@ class Queue extends Loggable { else { me.info('All workers destroyed, queue is empty'); + me.emit('empty'); + if (me._browser) { me.info('Stopping browser'); me._browser.close(); @@ -174,7 +190,10 @@ class Queue extends Loggable { // This is a factory method, returning instance of the browser. It is passed to worker class constructor, so // it cannot refer to the instance. me.startPuppeteer = async function(scope) { - const browser = await puppeteer.launch({ ignoreHTTPSErrors : true, executablePath : chromiumExecutablePath, args : chromiumArgs }); + const browser = await puppeteer.launch({ + executablePath : chromiumExecutablePath, + args : chromiumArgs + }); scope.verbose('Browser started'); @@ -315,6 +334,34 @@ class Queue extends Loggable { this.emit('jobcancel', requestId); } + /** + * Stop the queue and destroy all workers, closing all browsers + */ + stop() { + const me = this; + + me.info('Stopping queue and destroying all workers'); + + // Clear pending jobs + me.jobs = []; + + // Destroy all workers + for (const worker of me.workers.values) { + worker.destroy(); + } + + me.workers.values.clear(); + me.availableWorkers.values.clear(); + + // Close shared browser if using tabs mode + if (me._browser) { + me._browser.close(); + delete me._browser; + } + + me._running = false; + } + start() { this._activeRun = this.run(); @@ -491,6 +538,31 @@ class Worker extends Loggable { }, me.defaultIdleTimeout); } + /** + * Force destroy the worker, closing browser immediately + */ + destroy() { + const me = this; + + if (me.idleTimeout != null) { + clearTimeout(me.idleTimeout); + me.idleTimeout = null; + } + + if (me.browserDetacher) { + me.verbose('Force closing browser'); + me.browserDetacher(); + me.browser = null; + me.browserDetacher = null; + } + // Also close browser directly if detacher wasn't set (race condition during browser start) + else if (me.browser) { + me.verbose('Force closing browser directly'); + me.browser.close().catch(() => {}); + me.browser = null; + } + } + // Hook to override after new browser page is opened async onPageCreated(page) { page.on('console', this.handleConsoleMessage.bind(this)); @@ -577,6 +649,14 @@ class Worker extends Loggable { catch (e) { me.emit('error', e); + // Close browser to prevent ghost processes when worker fails after browser started + if (me.browserDetacher) { + me.verbose('Closing browser due to error'); + me.browserDetacher(); + me.browser = null; + me.browserDetacher = null; + } + throw e; } finally { diff --git a/src/server/ExportServer.js b/src/server/ExportServer.js index 5ca4d99..d9b36a8 100644 --- a/src/server/ExportServer.js +++ b/src/server/ExportServer.js @@ -25,6 +25,12 @@ module.exports = class ExportServer { }); } + async waitForQueueEvent(eventName) { + return new Promise(resolve => { + this.taskQueue.once(eventName, resolve); + }); + } + /** * Concatenate an array of PDF buffers and return the combined result. This function uses the muhammara package, a * copy the muhammara binary is delivered next to the executable. diff --git a/src/server/WebServer.js b/src/server/WebServer.js index 9c0330d..f497721 100644 --- a/src/server/WebServer.js +++ b/src/server/WebServer.js @@ -4,7 +4,7 @@ const bodyParser = require('body-parser'); const { nanoid } = require('nanoid'); const http = require('http'); const https = require('https'); -const { server : WebSocketServer, connection : WebSocketConnection } = require('websocket'); +const { WebSocketServer, WebSocket } = require('ws'); const fs = require('fs'); const path = require('path'); const serveStatic = require('serve-static'); @@ -14,6 +14,10 @@ const { RequestCancelError } = require('../exception.js'); const { getId } = require('../utils/helpers.js'); const packageInfo = require('../../package.json'); +const CLOSE_REASON = { + NORMAL : 1000 +} + module.exports = class WebServer extends ExportServer { constructor(config) { super(config); @@ -85,13 +89,11 @@ module.exports = class WebServer extends ExportServer { if (options.websocket) { me.wsServer = new WebSocketServer({ - httpServer : me.httpServer, - maxReceivedFrameSize : 0x1000000, - maxReceivedMessageSize : 0x5000000 + server : me.httpServer, + maxPayload : 0x5000000 }); - me.wsServer.on('request', me.handleExportWebSocketRequest.bind(me)); - me.wsServer._connectionTimeout = options.timeout; + me.wsServer.on('connection', (ws, req) => me.handleExportWebSocketConnection(ws, req, options.timeout)); } } @@ -107,12 +109,11 @@ module.exports = class WebServer extends ExportServer { if (options.websocket) { me.wssServer = new WebSocketServer({ - httpServer : me.httpsServer, - maxReceivedFrameSize : 0x1000000, - maxReceivedMessageSize : 0x5000000 + server : me.httpsServer, + maxPayload : 0x5000000 }); - me.wssServer.on('request', me.handleExportWebSocketRequest.bind(me)); + me.wssServer.on('connection', (ws, req) => me.handleExportWebSocketConnection(ws, req, options.timeout)); } } } @@ -227,12 +228,13 @@ module.exports = class WebServer extends ExportServer { }); } - handleExportWebSocketRequest(request) { + handleExportWebSocketConnection(ws, req, timeout) { const me = this; - const connection = request.accept(); - const origin = `${request.socket.server === me.httpServer ? 'http' : 'https'}://${request.host}/`; - const { timeout } = (me.httpServer || me.httpsServer); + const protocol = req.socket.server === me.httpServer ? 'http' : 'https'; + const host = req.headers.host || req.headers[':authority'] || 'localhost'; + const origin = `${protocol}://${host}/`; const connectionId = getId(); + const { remoteAddress } = req.socket; const config = {}; const pages = []; @@ -240,17 +242,17 @@ module.exports = class WebServer extends ExportServer { let timer; me.logger.log('info', `[WebSocket@${connectionId}] Connection opened`); - me.logger.log('verbose', `[WebSocket@${connectionId}] Remote address: ${connection.remoteAddress}`); + me.logger.log('verbose', `[WebSocket@${connectionId}] Remote address: ${remoteAddress}`); - connection.on('message', async function (message) { + ws.on('message', async function (data, isBinary) { if (!timer) { timer = setTimeout(() => { - connection.drop(WebSocketConnection.CLOSE_REASON_NORMAL, `Export request did not finish in ${timeout}ms`) + ws.close(CLOSE_REASON.NORMAL, `Export request did not finish in ${timeout}ms`); }, timeout); } - if (message.type === 'utf8') { - const request = JSON.parse(message.utf8Data); + if (!isBinary) { + const request = JSON.parse(data.toString()); // If this is a final message, start generating PDF if (request.done) { @@ -258,21 +260,21 @@ module.exports = class WebServer extends ExportServer { me.logger.log('verbose', `[WebSocket@${connectionId}] Generating ${config.fileFormat.toUpperCase()}`); - const fileStream = await me.exportRequestHandler(config, connectionId, connection); + const fileStream = await me.exportRequestHandler(config, connectionId, ws); me.logger.log('verbose', `[WebSocket@${connectionId}] ${config.fileFormat.toUpperCase()} generated`); - if (connection.connected) { + if (ws.readyState === WebSocket.OPEN) { clearTimeout(timer); if (request.sendAsBinary) { const buf = await buffer(fileStream); - connection.sendBytes(buf); + ws.send(buf); me.logger.log('verbose', `[WebSocket@${connectionId}] sent ${buf.length} bytes`); } else { - connection.sendUTF(JSON.stringify({ + ws.send(JSON.stringify({ success : true, url : me.setFile(origin, config, fileStream) })); @@ -292,9 +294,9 @@ module.exports = class WebServer extends ExportServer { } }); - connection.on('close', function (reasonCode, description) { + ws.on('close', function (code, reason) { me.logger.log('info', `[WebSocket@${connectionId}] Connection closed`); - me.logger.log('verbose', `[WebSocket@${connectionId}] reason: ${reasonCode} - ${description}`); + me.logger.log('verbose', `[WebSocket@${connectionId}] reason: ${code} - ${reason}`); }); }