diff --git a/package-lock.json b/package-lock.json index 030934050c..129b0c8798 100644 --- a/package-lock.json +++ b/package-lock.json @@ -55,17 +55,43 @@ "react-dom": "18.3.1" } }, - "demos/gallery/node_modules/@vitejs/plugin-react-swc": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.7.2.tgz", - "integrity": "sha512-y0byko2b2tSVVf5Gpng1eEhX1OvPC7x8yns1Fx8jDzlJp4LS6CMkCPfLw47cjyoMrshQDoQw4qcgjsU9VvlCew==", - "dev": true, - "license": "MIT", + "demos/gallery/node_modules/@hpcc-js/dgrid2/node_modules/@hpcc-js/preact-shim": { + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/@hpcc-js/preact-shim/-/preact-shim-2.18.0.tgz", + "integrity": "sha512-2Vy7q3y76eniEqWtXtS/R3cUywO2VjYKdTeP+wchr7ih8vPRXiPenYciWioyxbAbV31rs5yzLtCJVllOeGknpw==", + "extraneous": true, + "license": "Apache-2.0", "dependencies": { - "@swc/core": "^1.7.26" + "preact": "10.24.0" }, - "peerDependencies": { - "vite": "^4 || ^5 || ^6" + "devDependencies": { + "@hpcc-js/bundle": "^2.12.0" + } + }, + "demos/gallery/node_modules/@hpcc-js/html/node_modules/@hpcc-js/preact-shim": { + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/@hpcc-js/preact-shim/-/preact-shim-2.18.0.tgz", + "integrity": "sha512-2Vy7q3y76eniEqWtXtS/R3cUywO2VjYKdTeP+wchr7ih8vPRXiPenYciWioyxbAbV31rs5yzLtCJVllOeGknpw==", + "extraneous": true, + "license": "Apache-2.0", + "dependencies": { + "preact": "10.24.0" + }, + "devDependencies": { + "@hpcc-js/bundle": "^2.12.0" + } + }, + "demos/gallery/node_modules/@hpcc-js/react/node_modules/@hpcc-js/preact-shim": { + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/@hpcc-js/preact-shim/-/preact-shim-2.18.0.tgz", + "integrity": "sha512-2Vy7q3y76eniEqWtXtS/R3cUywO2VjYKdTeP+wchr7ih8vPRXiPenYciWioyxbAbV31rs5yzLtCJVllOeGknpw==", + "extraneous": true, + "license": "Apache-2.0", + "dependencies": { + "preact": "10.24.0" + }, + "devDependencies": { + "@hpcc-js/bundle": "^2.12.0" } }, "demos/imdb": { @@ -1147,12 +1173,12 @@ } }, "node_modules/@floating-ui/core": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz", - "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==", + "version": "1.6.9", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.9.tgz", + "integrity": "sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==", "license": "MIT", "dependencies": { - "@floating-ui/utils": "^0.2.8" + "@floating-ui/utils": "^0.2.9" } }, "node_modules/@floating-ui/devtools": { @@ -1164,19 +1190,19 @@ } }, "node_modules/@floating-ui/dom": { - "version": "1.6.12", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.12.tgz", - "integrity": "sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==", + "version": "1.6.13", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.13.tgz", + "integrity": "sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==", "license": "MIT", "dependencies": { "@floating-ui/core": "^1.6.0", - "@floating-ui/utils": "^0.2.8" + "@floating-ui/utils": "^0.2.9" } }, "node_modules/@floating-ui/utils": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz", - "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==", + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz", + "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==", "license": "MIT" }, "node_modules/@fluentui/dom-utilities": { @@ -1218,21 +1244,21 @@ } }, "node_modules/@fluentui/react-accordion": { - "version": "9.5.8", - "resolved": "https://registry.npmjs.org/@fluentui/react-accordion/-/react-accordion-9.5.8.tgz", - "integrity": "sha512-tYkHFbNfJG1/qSzkdagSGZoL9LlRp1/ei0TwezDq9M41rGZWHz+qDRkPlw/f66YWT006tR1zR1voJYhshsJ21g==", + "version": "9.5.14", + "resolved": "https://registry.npmjs.org/@fluentui/react-accordion/-/react-accordion-9.5.14.tgz", + "integrity": "sha512-mS9NHxeZn3WwRR0T/D7JKfLY2QEksCewrZIcSvYdgyPmlJCyd71YlkICn3PIvZIpySpoSEA/dqwWTYcC8cU8Zg==", "license": "MIT", "dependencies": { - "@fluentui/react-aria": "^9.13.9", - "@fluentui/react-context-selector": "^9.1.69", + "@fluentui/react-aria": "^9.13.14", + "@fluentui/react-context-selector": "^9.1.72", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-motion": "^9.6.1", - "@fluentui/react-motion-components-preview": "^0.3.0", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-tabster": "^9.23.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-motion": "^9.6.7", + "@fluentui/react-motion-components-preview": "^0.4.3", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-tabster": "^9.23.3", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -1267,16 +1293,16 @@ } }, "node_modules/@fluentui/react-aria": { - "version": "9.13.9", - "resolved": "https://registry.npmjs.org/@fluentui/react-aria/-/react-aria-9.13.9.tgz", - "integrity": "sha512-YURuZ2Nh7hz5VlCQ9NHLvzyqdiJhElm4aW/F4JRmXAoMdeDCfgG0UGL82DDPZL6eNYIjhQN8WpRXH2tfxJ80HA==", + "version": "9.13.14", + "resolved": "https://registry.npmjs.org/@fluentui/react-aria/-/react-aria-9.13.14.tgz", + "integrity": "sha512-+RbBh5sTJ9CguPfj9Bw6AUgTC05ts2XqBepNFZ3H51rZMF3PB/YCPftebmySIW6jp1ZbJ10EtQZ/EqJqgJH7YQ==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-tabster": "^9.23.0", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-tabster": "^9.23.3", + "@fluentui/react-utilities": "^9.18.20", "@swc/helpers": "^0.5.1" }, "peerDependencies": { @@ -1287,21 +1313,21 @@ } }, "node_modules/@fluentui/react-avatar": { - "version": "9.6.43", - "resolved": "https://registry.npmjs.org/@fluentui/react-avatar/-/react-avatar-9.6.43.tgz", - "integrity": "sha512-N/bHM7ZriCrUupZ0jgK+cUHuOymIvs3JMxME6z/6711xwHH9PRM0vpu17O+oYsnwatELDaGsN5MWV4T6x1UDVA==", + "version": "9.6.50", + "resolved": "https://registry.npmjs.org/@fluentui/react-avatar/-/react-avatar-9.6.50.tgz", + "integrity": "sha512-xhgOIm9l/yPsSbMvwWOk1LbylcoYGsWotghgX8Nurgek4wST+xzegIogKr7PHIEid1InMgzHJmwqZxPtYvpFtw==", "license": "MIT", "dependencies": { - "@fluentui/react-badge": "^9.2.45", - "@fluentui/react-context-selector": "^9.1.69", + "@fluentui/react-badge": "^9.2.50", + "@fluentui/react-context-selector": "^9.1.72", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-popover": "^9.9.25", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-tabster": "^9.23.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-tooltip": "^9.4.43", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-popover": "^9.9.32", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-tabster": "^9.23.3", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-tooltip": "^9.5.5", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -1313,16 +1339,16 @@ } }, "node_modules/@fluentui/react-badge": { - "version": "9.2.45", - "resolved": "https://registry.npmjs.org/@fluentui/react-badge/-/react-badge-9.2.45.tgz", - "integrity": "sha512-X1dDCs0ZjQNx46VUAWYVvVfufARNtOQoXmcdldtd8kWnLDA4aAVI+/CX4bhZ/+qV9hiIowffuW/QPhNXWSozVQ==", + "version": "9.2.50", + "resolved": "https://registry.npmjs.org/@fluentui/react-badge/-/react-badge-9.2.50.tgz", + "integrity": "sha512-rMptIUeUWwbTvzSo917GOVDY5nKeNbcSfvtvop54zrFNrcMicAZIfrJK8fB1hFggT2cuaiI9qWdWuSTd+q1LZw==", "license": "MIT", "dependencies": { "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -1334,20 +1360,20 @@ } }, "node_modules/@fluentui/react-breadcrumb": { - "version": "9.0.43", - "resolved": "https://registry.npmjs.org/@fluentui/react-breadcrumb/-/react-breadcrumb-9.0.43.tgz", - "integrity": "sha512-kVve9azEzJn/6aZU1Hv2KVd3INkoSbX5kbIVUzDdsMZYeFpYp0V9Fz/akwa9jhSkONdqCpKpI/BbT8wRjWky9g==", + "version": "9.0.51", + "resolved": "https://registry.npmjs.org/@fluentui/react-breadcrumb/-/react-breadcrumb-9.0.51.tgz", + "integrity": "sha512-MbENUOemhk67clcnrZXXTNITyDqbbO0xWx7dxeaygM/Cu0DmRer9UYs1V5z5ExT+xrwgYXVvPyODqDyeWwGBgQ==", "license": "MIT", "dependencies": { - "@fluentui/react-aria": "^9.13.9", - "@fluentui/react-button": "^9.3.95", + "@fluentui/react-aria": "^9.13.14", + "@fluentui/react-button": "^9.3.101", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-link": "^9.3.2", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-tabster": "^9.23.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-link": "^9.3.7", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-tabster": "^9.23.3", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -1359,19 +1385,19 @@ } }, "node_modules/@fluentui/react-button": { - "version": "9.3.95", - "resolved": "https://registry.npmjs.org/@fluentui/react-button/-/react-button-9.3.95.tgz", - "integrity": "sha512-kvwxBrCLXeFkgVy1+n01BZmRnEE/uPtapkUSInIXf8qQgOZzpLirLfrDqjBsTMd1Wosv9zgh27gqbiw92cqQSg==", + "version": "9.3.101", + "resolved": "https://registry.npmjs.org/@fluentui/react-button/-/react-button-9.3.101.tgz", + "integrity": "sha512-FHGtiQW4vNb8M1JvOTEfmzEpwZgc4yMhPPIMprfDELMIkKI1iZWK43tBOaYTb4az3M8m1Vv5UqL+kQoc/1PAyw==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.13.9", + "@fluentui/react-aria": "^9.13.14", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-tabster": "^9.23.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-tabster": "^9.23.3", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -1383,17 +1409,17 @@ } }, "node_modules/@fluentui/react-card": { - "version": "9.0.97", - "resolved": "https://registry.npmjs.org/@fluentui/react-card/-/react-card-9.0.97.tgz", - "integrity": "sha512-E8Rjkn88muKdn3ACn+WzpTsQYX/ldgZvuRT42PTdrIXeFsQ9RAWJ6TkMf5/FURxKlR29ChT5kIyCH/EzZ+iB0g==", + "version": "9.0.103", + "resolved": "https://registry.npmjs.org/@fluentui/react-card/-/react-card-9.0.103.tgz", + "integrity": "sha512-jv8KQMXOYlEaKns8T6a1sQ3lzM/jCL4epR4/7Avt21ysBRrJU+mMZ69nOZA45Wz6eVFootGjks8O7wwjIb2J3g==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-tabster": "^9.23.0", - "@fluentui/react-text": "^9.4.27", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-tabster": "^9.23.3", + "@fluentui/react-text": "^9.4.32", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -1405,25 +1431,25 @@ } }, "node_modules/@fluentui/react-carousel": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/@fluentui/react-carousel/-/react-carousel-9.3.1.tgz", - "integrity": "sha512-nDUOVPAADNRlwg7/KtXgYEgALfll/Zcx7MAIqZkwxtroPzuOqm2CjeMVBwWoekEQzs75i+PgNgL1eXAQwgsAAQ==", + "version": "9.4.6", + "resolved": "https://registry.npmjs.org/@fluentui/react-carousel/-/react-carousel-9.4.6.tgz", + "integrity": "sha512-LpVcav9oF0iKiSqmjw9mXUKafvgxhO2snKJjNkoNs46DB15twpA+d+i3HZPYhm4qKMVdHnvbO7d+6iIirbvgvg==", "license": "MIT", "dependencies": { - "@fluentui/react-aria": "^9.13.9", - "@fluentui/react-button": "^9.3.95", - "@fluentui/react-context-selector": "^9.1.69", + "@fluentui/react-aria": "^9.13.14", + "@fluentui/react-button": "^9.3.101", + "@fluentui/react-context-selector": "^9.1.72", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-tabster": "^9.23.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-tabster": "^9.23.3", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1", - "embla-carousel": "^8.3.0", - "embla-carousel-autoplay": "^8.3.0", - "embla-carousel-fade": "^8.3.0" + "embla-carousel": "^8.5.1", + "embla-carousel-autoplay": "^8.5.1", + "embla-carousel-fade": "^8.5.1" }, "peerDependencies": { "@types/react": ">=16.14.0 <19.0.0", @@ -1433,19 +1459,19 @@ } }, "node_modules/@fluentui/react-checkbox": { - "version": "9.2.41", - "resolved": "https://registry.npmjs.org/@fluentui/react-checkbox/-/react-checkbox-9.2.41.tgz", - "integrity": "sha512-+vmoZIaAnN7Z9pxilXSleQJKyLoGksrU0d00huNLIOKFGIgkJHscJzrmAWDWHzFOg1MeGUtpfYYlE3L1N6ypBw==", + "version": "9.2.47", + "resolved": "https://registry.npmjs.org/@fluentui/react-checkbox/-/react-checkbox-9.2.47.tgz", + "integrity": "sha512-3XETLtPUpRpztQphWZ4Md/pqkDDcE2CqH0gVAEUb7rnLHfimrRvDC+tlccKmqvlK3QoPfX2oDy3nvz/YwxWoTg==", "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.1.80", + "@fluentui/react-field": "^9.1.86", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-label": "^9.1.78", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-tabster": "^9.23.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-label": "^9.1.83", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-tabster": "^9.23.3", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -1457,23 +1483,23 @@ } }, "node_modules/@fluentui/react-combobox": { - "version": "9.13.12", - "resolved": "https://registry.npmjs.org/@fluentui/react-combobox/-/react-combobox-9.13.12.tgz", - "integrity": "sha512-Y710laYoJHmMu09ynLx+13hwtCLhCGqUbVdLCCQmsMzd4hCVNCuhT+ED+sJBTMp/NnyVjMDECJ11Fk5iTkUd0g==", + "version": "9.13.18", + "resolved": "https://registry.npmjs.org/@fluentui/react-combobox/-/react-combobox-9.13.18.tgz", + "integrity": "sha512-t1sF+TpC0BGwSxY0FSM4GUUyo+ToLgWNyt80usoOe6j4vIP1N6O2JSaWg5/+24mn+whnsheyDTby5kpmyI1rwg==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.13.9", - "@fluentui/react-context-selector": "^9.1.69", - "@fluentui/react-field": "^9.1.80", + "@fluentui/react-aria": "^9.13.14", + "@fluentui/react-context-selector": "^9.1.72", + "@fluentui/react-field": "^9.1.86", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-portal": "^9.4.38", - "@fluentui/react-positioning": "^9.15.12", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-tabster": "^9.23.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-portal": "^9.4.42", + "@fluentui/react-positioning": "^9.16.3", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-tabster": "^9.23.3", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -1558,12 +1584,12 @@ } }, "node_modules/@fluentui/react-context-selector": { - "version": "9.1.69", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.69.tgz", - "integrity": "sha512-g29PE3cya7vY85o1ZwYMhPtkUyb7Q14UdrBCeEUr7+KjTPKMbkF27GKh0fAwwFuh9talvmI6fEVkJ9odYI6Dog==", + "version": "9.1.72", + "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.72.tgz", + "integrity": "sha512-n9M7o81fuIzKuvrzdOK9Rcc+SyYg9hkr0bXhdclTHWKBYw2RgIEzXuld1qL3+gOFcSYS6AoNKpqrd9mithWYpw==", "license": "MIT", "dependencies": { - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-utilities": "^9.18.20", "@swc/helpers": "^0.5.1" }, "peerDependencies": { @@ -1575,22 +1601,23 @@ } }, "node_modules/@fluentui/react-dialog": { - "version": "9.11.21", - "resolved": "https://registry.npmjs.org/@fluentui/react-dialog/-/react-dialog-9.11.21.tgz", - "integrity": "sha512-zTBZKGG2z5gV3O9o00coN3p2wemMfiXfgTaiAb866I+htjN8/62BmzKSg32yygfVFaQnvlU1DhKAXd4SpfFAeg==", + "version": "9.11.30", + "resolved": "https://registry.npmjs.org/@fluentui/react-dialog/-/react-dialog-9.11.30.tgz", + "integrity": "sha512-PbK/6GTjWYDLr0J1u5jBPrMYN2lhKJ0zxpHkl+TPULNcRMBSweoEAcRTF2+cdy3aLmyxZrP89viLzTqz5gn+hw==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.13.9", - "@fluentui/react-context-selector": "^9.1.69", + "@fluentui/react-aria": "^9.13.14", + "@fluentui/react-context-selector": "^9.1.72", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-motion": "^9.6.1", - "@fluentui/react-portal": "^9.4.38", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-tabster": "^9.23.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-motion": "^9.6.7", + "@fluentui/react-motion-components-preview": "^0.4.3", + "@fluentui/react-portal": "^9.4.42", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-tabster": "^9.23.3", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -1602,15 +1629,15 @@ } }, "node_modules/@fluentui/react-divider": { - "version": "9.2.77", - "resolved": "https://registry.npmjs.org/@fluentui/react-divider/-/react-divider-9.2.77.tgz", - "integrity": "sha512-mo1ZhkD05p1PC8m5NnQjttIxCZnIy33wtV7w3zEtdlrpqtKvaHmOrbfJPMVVerVEZqX8SL2t5mhXX8AE/kjWyw==", + "version": "9.2.82", + "resolved": "https://registry.npmjs.org/@fluentui/react-divider/-/react-divider-9.2.82.tgz", + "integrity": "sha512-U3krzGswRxpFgMkXafkl12+R7R1SeX+JdTZpw8SMnvQsBroEWgy6hq8bWhh8AFUcqCoHIbieBOrRFV68pvIvGg==", "license": "MIT", "dependencies": { - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -1622,19 +1649,19 @@ } }, "node_modules/@fluentui/react-drawer": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@fluentui/react-drawer/-/react-drawer-9.6.1.tgz", - "integrity": "sha512-KDVwTnY72rTq7st8bAIU8vfPM1e+q2wsYOdTaxnD6qVU7EcJc5QxT/FmM0jZ300zqrwhf8r4evGMCe7KZv+I6A==", - "license": "MIT", - "dependencies": { - "@fluentui/react-dialog": "^9.11.21", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-motion": "^9.6.1", - "@fluentui/react-portal": "^9.4.38", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-tabster": "^9.23.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "version": "9.6.10", + "resolved": "https://registry.npmjs.org/@fluentui/react-drawer/-/react-drawer-9.6.10.tgz", + "integrity": "sha512-ZxzQnT3IZuz/YSNseNkUmywmn0XEF8VtVd60a9c16F8JaSDH+FQaoSnE8bH+ccy1RggnKKCBQ2JyqmHBClIS3A==", + "license": "MIT", + "dependencies": { + "@fluentui/react-dialog": "^9.11.30", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-motion": "^9.6.7", + "@fluentui/react-portal": "^9.4.42", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-tabster": "^9.23.3", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -1646,17 +1673,17 @@ } }, "node_modules/@fluentui/react-field": { - "version": "9.1.80", - "resolved": "https://registry.npmjs.org/@fluentui/react-field/-/react-field-9.1.80.tgz", - "integrity": "sha512-e+rVWTq5NUV7bq+PkTx+nxEIQOgRdA1RGyr2GG70qxtfus/JQoEteYMFoOFPiK0oJ0I0BfJf4NQG1mwnov7X0w==", + "version": "9.1.86", + "resolved": "https://registry.npmjs.org/@fluentui/react-field/-/react-field-9.1.86.tgz", + "integrity": "sha512-InM4y61PzKp2Y17VdkXYTHKLJhEZLYW0roeBDxMwUbnII059RtC/O30zBIS6n4Cn1+/y1tMZK6NEjTcI1HIVmQ==", "license": "MIT", "dependencies": { - "@fluentui/react-context-selector": "^9.1.69", + "@fluentui/react-context-selector": "^9.1.72", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-label": "^9.1.78", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-label": "^9.1.83", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -1684,13 +1711,13 @@ } }, "node_modules/@fluentui/react-icon-provider": { - "version": "1.3.76", - "resolved": "https://registry.npmjs.org/@fluentui/react-icon-provider/-/react-icon-provider-1.3.76.tgz", - "integrity": "sha512-ziKjJwHJIAzlc39VymxMnwc9HNqFg+qDVgIYxw5qw3UGzaAkWCUqRYN4TPTF6c8kdaV8djRjV2huSCwZiTYcyg==", + "version": "1.3.78", + "resolved": "https://registry.npmjs.org/@fluentui/react-icon-provider/-/react-icon-provider-1.3.78.tgz", + "integrity": "sha512-TsIsnAn4f8MhPpw6yiWwEmf8wQWj/yBUHTINBitx8JNL9PitUV9Bq4h7trAG97z59z6bCKX/Uyn6LvoeGR9gLQ==", "license": "MIT", "dependencies": { "@fluentui/set-version": "^8.2.23", - "@fluentui/style-utilities": "^8.11.4", + "@fluentui/style-utilities": "^8.11.6", "tslib": "^2.1.0" }, "peerDependencies": { @@ -1701,9 +1728,9 @@ } }, "node_modules/@fluentui/react-icons": { - "version": "2.0.266", - "resolved": "https://registry.npmjs.org/@fluentui/react-icons/-/react-icons-2.0.266.tgz", - "integrity": "sha512-r979n3hfnK4IfT24BYURIlYRL84pnAT0sP2vIo2Sl36NiIBLXmNjqF+vJCzcNmi6eOHvDnupwLw20cF1Iwop5w==", + "version": "2.0.271", + "resolved": "https://registry.npmjs.org/@fluentui/react-icons/-/react-icons-2.0.271.tgz", + "integrity": "sha512-I5rFvmZTzf1OQduU5Lal8yNMFcjCsfLnFDEwYjpwTdcyAPoIY2MTZMb4hCbGoohAreQL4cbItkWugxZc7N1wdw==", "license": "MIT", "dependencies": { "@griffel/react": "^1.0.0", @@ -1730,15 +1757,15 @@ } }, "node_modules/@fluentui/react-image": { - "version": "9.1.75", - "resolved": "https://registry.npmjs.org/@fluentui/react-image/-/react-image-9.1.75.tgz", - "integrity": "sha512-pw4vL+j5/Qc9jSivfKRZ2qocx7W7BsfIFu/h8l89dg2OSvcLjUygWLYT/1KBz9oXIE8eQy6aZV/mvI3swhEWqw==", + "version": "9.1.80", + "resolved": "https://registry.npmjs.org/@fluentui/react-image/-/react-image-9.1.80.tgz", + "integrity": "sha512-Vw6cPJaGSGy9usjXxaK0If9Ow3wo0e2yUIsKRWpWtiX7CTwENGP7N6WYbJFw26gY4AVer/S9bfGlen/gqq3cHg==", "license": "MIT", "dependencies": { - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -1773,18 +1800,18 @@ } }, "node_modules/@fluentui/react-infolabel": { - "version": "9.0.50", - "resolved": "https://registry.npmjs.org/@fluentui/react-infolabel/-/react-infolabel-9.0.50.tgz", - "integrity": "sha512-NrEFOD5An+aD4SGx1q0sGdqnMT5eVURigEDW1tm1HPk+Hl0bgmwSlwQwLw9ejfaC5g5SoPwFaVVM2VKLfn9qzw==", + "version": "9.0.57", + "resolved": "https://registry.npmjs.org/@fluentui/react-infolabel/-/react-infolabel-9.0.57.tgz", + "integrity": "sha512-jIDJvV1Zzqc6gbD+JWGx2xMmoS9dO0pjMC17tlx1oNpmYe0rBdzu7BJqZrEt+uVt/wFUh39YinrPdhtQdQaXIg==", "license": "MIT", "dependencies": { "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-label": "^9.1.78", - "@fluentui/react-popover": "^9.9.25", - "@fluentui/react-tabster": "^9.23.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-label": "^9.1.83", + "@fluentui/react-popover": "^9.9.32", + "@fluentui/react-tabster": "^9.23.3", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -1796,16 +1823,16 @@ } }, "node_modules/@fluentui/react-input": { - "version": "9.4.93", - "resolved": "https://registry.npmjs.org/@fluentui/react-input/-/react-input-9.4.93.tgz", - "integrity": "sha512-lKxB2mWYzN5bAGlYS1BMUISdAoNqKtW4d+s6vUf8lJdMFyQK4iC7QtcbS4x9FTQnSDV6cfVogp5k8JvUWs1Hww==", + "version": "9.4.99", + "resolved": "https://registry.npmjs.org/@fluentui/react-input/-/react-input-9.4.99.tgz", + "integrity": "sha512-6TEjYtw+PSgkbudNjmAlGgxO5ZQUqrYk0AVlulB202MwKflJ+2A8XcHC5aMuLUI4xRrLWRoYwZTzgxiXa2obsQ==", "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.1.80", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-field": "^9.1.86", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -1817,12 +1844,12 @@ } }, "node_modules/@fluentui/react-jsx-runtime": { - "version": "9.0.46", - "resolved": "https://registry.npmjs.org/@fluentui/react-jsx-runtime/-/react-jsx-runtime-9.0.46.tgz", - "integrity": "sha512-hdzwiRPnFQ8dqmqj/Xtep7SP2I+mx+OFsP5glzdDhTFL6au5yBbnUTgI6XEiSAbisBAhl2V2qsp0mJ55gxU+sg==", + "version": "9.0.50", + "resolved": "https://registry.npmjs.org/@fluentui/react-jsx-runtime/-/react-jsx-runtime-9.0.50.tgz", + "integrity": "sha512-dnelPmz0x591tr58B/jbIHVzgjWskMkBmWEvZJc2rlbGH1oZl+MPJqvVdOAMvLTKJzqVmNkeSDtQmkjzjccogA==", "license": "MIT", "dependencies": { - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-utilities": "^9.18.20", "@swc/helpers": "^0.5.1", "react-is": "^17.0.2" }, @@ -1832,15 +1859,15 @@ } }, "node_modules/@fluentui/react-label": { - "version": "9.1.78", - "resolved": "https://registry.npmjs.org/@fluentui/react-label/-/react-label-9.1.78.tgz", - "integrity": "sha512-0Tv8Du78+lt17mjkAeoJRfsZgFVbfk2INiGVsQ2caN0n/r1IStbKQVqqWFSjyw//qpFdyw3FGOL9SalPmqIZMA==", + "version": "9.1.83", + "resolved": "https://registry.npmjs.org/@fluentui/react-label/-/react-label-9.1.83.tgz", + "integrity": "sha512-XJF78Vwn4sSRJUyWcTj/F6hJVcHlPozDBcGWipMpnFgKBljuVmE2sg581CUGKn4AOTa9/blc81DLv0AE3itNtQ==", "license": "MIT", "dependencies": { - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -1852,17 +1879,17 @@ } }, "node_modules/@fluentui/react-link": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@fluentui/react-link/-/react-link-9.3.2.tgz", - "integrity": "sha512-JIq2vhcqWug+GFw0EA5hVDXGzcRz4CBd/W/Mr9swlHIsA1BLMNxfHyIfZ6kZMT9IIQltWHK4CBFx2X/5co8DcA==", + "version": "9.3.7", + "resolved": "https://registry.npmjs.org/@fluentui/react-link/-/react-link-9.3.7.tgz", + "integrity": "sha512-kjl/TjFO66ROFFXL9FExmoTYWgIb/p6pKqXA+eGTaQZ+7S1qTAKma0cTQtjnqAfj7UcimnWLLmXnlWaXx4FixA==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-tabster": "^9.23.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-tabster": "^9.23.3", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -1874,22 +1901,22 @@ } }, "node_modules/@fluentui/react-menu": { - "version": "9.14.20", - "resolved": "https://registry.npmjs.org/@fluentui/react-menu/-/react-menu-9.14.20.tgz", - "integrity": "sha512-zinFHhQi2bwhv7GL8JXHwAfRYWw3hJhlUuWejLGQK1QbmwPlBHN6UCKhhIvF+RwEJbzeoyqvZcAusiHjmCp6rw==", + "version": "9.15.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-menu/-/react-menu-9.15.0.tgz", + "integrity": "sha512-G/WhGTrhQpoa0nbzEEQB8aK4pvtYym2m/sMeN9+fLFVZzAv9hyigzTwaSouQUoMfvIj2bmw5lcfXBKgJ4Rzreg==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.13.9", - "@fluentui/react-context-selector": "^9.1.69", + "@fluentui/react-aria": "^9.13.14", + "@fluentui/react-context-selector": "^9.1.72", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-portal": "^9.4.38", - "@fluentui/react-positioning": "^9.15.12", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-tabster": "^9.23.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-portal": "^9.4.42", + "@fluentui/react-positioning": "^9.16.3", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-tabster": "^9.23.3", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -1901,21 +1928,22 @@ } }, "node_modules/@fluentui/react-message-bar": { - "version": "9.2.15", - "resolved": "https://registry.npmjs.org/@fluentui/react-message-bar/-/react-message-bar-9.2.15.tgz", - "integrity": "sha512-+FPH3ciNjTWVk9hGIeo/G8QGHf/q+tFLle4g9hXuOuDuzuaHNK6g7SkXTLm0fiZVrkB3xhFZV5ZnfehiN93S1w==", + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@fluentui/react-message-bar/-/react-message-bar-9.3.2.tgz", + "integrity": "sha512-mo4/Pon3xJlWgavpeDBrfIijA3niP7D2OCAOZ5RrS5klrX5VkTSH/Zocp6GIUywGpkTDk5DcXHemQ3iiLIIWIg==", "license": "MIT", "dependencies": { - "@fluentui/react-button": "^9.3.95", + "@fluentui/react-button": "^9.3.101", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-link": "^9.3.2", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-link": "^9.3.7", + "@fluentui/react-motion": "^9.6.7", + "@fluentui/react-motion-components-preview": "^0.4.3", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", - "@swc/helpers": "^0.5.1", - "react-transition-group": "^4.4.1" + "@swc/helpers": "^0.5.1" }, "peerDependencies": { "@types/react": ">=16.8.0 <19.0.0", @@ -1925,13 +1953,13 @@ } }, "node_modules/@fluentui/react-motion": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@fluentui/react-motion/-/react-motion-9.6.1.tgz", - "integrity": "sha512-P/ZPEAXG24pGU/XY3vY6VOXxNMEztiN7lvJxqUHGDFbpMkgQwCOmfsBuNU4S6RLQy3PosbWfSsU/4N8Ga2XudQ==", + "version": "9.6.7", + "resolved": "https://registry.npmjs.org/@fluentui/react-motion/-/react-motion-9.6.7.tgz", + "integrity": "sha512-xvNsN8n7e7OOMnNK1ynIZcREpoYY+97WuI+qnEiqkwJWKA+WzWYN+ydvH7IFI1PV7wz7qhyXUga5L10CjFeCAA==", "license": "MIT", "dependencies": { - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-utilities": "^9.18.20", "@swc/helpers": "^0.5.1", "react-is": "^17.0.2" }, @@ -1943,9 +1971,9 @@ } }, "node_modules/@fluentui/react-motion-components-preview": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-motion-components-preview/-/react-motion-components-preview-0.3.0.tgz", - "integrity": "sha512-N888xO727bSogyH0WUSW2pkjQ2vXEpyDa0Ygj+4XQaTfHz8DecDiKfM83zUpQ7pZOhx8eQPUP76flijm+iVm8w==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-motion-components-preview/-/react-motion-components-preview-0.4.3.tgz", + "integrity": "sha512-g6ACukFXcZ8TFYP30WnVjkvRuQkkx2Q48jI7TowTsJBQg01FFT4w22ii5s2ABuO6L1TR02kAL3wvvo5O2KP5Ew==", "license": "MIT", "dependencies": { "@fluentui/react-motion": "*", @@ -1987,15 +2015,15 @@ } }, "node_modules/@fluentui/react-overflow": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@fluentui/react-overflow/-/react-overflow-9.2.1.tgz", - "integrity": "sha512-6u+bP9PV1RedOSDgL+cHs4o3GRRWlEpKTtjeDSgs+nI5fkfN6bF+J70Uk5QksWDUBydMbkSbsD4Ta5+U2G6yww==", + "version": "9.2.8", + "resolved": "https://registry.npmjs.org/@fluentui/react-overflow/-/react-overflow-9.2.8.tgz", + "integrity": "sha512-x9RsbQWFv8cgJ8scU6G61IVltliiY/07TT3t1nNtHBJP3tECttphn6EmJHIaKwmCpNzLq8pCYobj8/GxGZ0Kkw==", "license": "MIT", "dependencies": { "@fluentui/priority-overflow": "^9.1.14", - "@fluentui/react-context-selector": "^9.1.69", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-context-selector": "^9.1.72", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -2007,17 +2035,17 @@ } }, "node_modules/@fluentui/react-persona": { - "version": "9.2.102", - "resolved": "https://registry.npmjs.org/@fluentui/react-persona/-/react-persona-9.2.102.tgz", - "integrity": "sha512-sIoKr2A/zMkFudmeO1+asG6FIItn0+FbKOXezgApHuucbq6iU8oKV8+OEHhCr/mHPulDAV8JZQYkhNHFhzSjdA==", + "version": "9.2.109", + "resolved": "https://registry.npmjs.org/@fluentui/react-persona/-/react-persona-9.2.109.tgz", + "integrity": "sha512-APEuGmInsWTojToruDJ41cjx0qTvOFAozPe1NC3itS3QIBeaz1YHkj/72QKCfSQHpqa2b5bjK6WN9/bBjIAOjA==", "license": "MIT", "dependencies": { - "@fluentui/react-avatar": "^9.6.43", - "@fluentui/react-badge": "^9.2.45", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-avatar": "^9.6.50", + "@fluentui/react-badge": "^9.2.50", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -2029,21 +2057,21 @@ } }, "node_modules/@fluentui/react-popover": { - "version": "9.9.25", - "resolved": "https://registry.npmjs.org/@fluentui/react-popover/-/react-popover-9.9.25.tgz", - "integrity": "sha512-QPhbD6MTDU6JuYZl0221IwqKEF3TEoNaL6kdAGnrltLuXVGX2pLr4LerHdbBORolfZZFo/JkKX644ay5X7BnvQ==", + "version": "9.9.32", + "resolved": "https://registry.npmjs.org/@fluentui/react-popover/-/react-popover-9.9.32.tgz", + "integrity": "sha512-8bEjFqWokvk8oB408ZRerGx/+1r+rHB/+KBodBVt8BBlv20Zb4WZbPTN7zt4N1rlkIyFbf4v5otGJCO36PTOGw==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.13.9", - "@fluentui/react-context-selector": "^9.1.69", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-portal": "^9.4.38", - "@fluentui/react-positioning": "^9.15.12", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-tabster": "^9.23.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-aria": "^9.13.14", + "@fluentui/react-context-selector": "^9.1.72", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-portal": "^9.4.42", + "@fluentui/react-positioning": "^9.16.3", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-tabster": "^9.23.3", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -2055,14 +2083,14 @@ } }, "node_modules/@fluentui/react-portal": { - "version": "9.4.38", - "resolved": "https://registry.npmjs.org/@fluentui/react-portal/-/react-portal-9.4.38.tgz", - "integrity": "sha512-V4lvnjlmKqMloNK6tRXx7lDWR1g41ppFLAGMy+0KAMZRwvwiCNpWrr9oFVGTHqnh+3EuICgs1z0WiNUcbpviuA==", + "version": "9.4.42", + "resolved": "https://registry.npmjs.org/@fluentui/react-portal/-/react-portal-9.4.42.tgz", + "integrity": "sha512-x7mH9Y4/ziHKGAL+NnJGJdlH/eqBGpqNRbFLCyAithcpS1TCCROzyTzSxli0f8BcZGy9GMDoxIN9wiHP4wZf/A==", "license": "MIT", "dependencies": { - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-tabster": "^9.23.0", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-tabster": "^9.23.3", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1", "use-disposable": "^1.0.1" @@ -2075,16 +2103,16 @@ } }, "node_modules/@fluentui/react-positioning": { - "version": "9.15.12", - "resolved": "https://registry.npmjs.org/@fluentui/react-positioning/-/react-positioning-9.15.12.tgz", - "integrity": "sha512-FqopxQpf8KibdovNFLNqcDzckMgaMO2EAwXhpzH1us1l9vNofVE33k0sGHr1kU+M9TXCKeJ9x31TdS5XzBMPzQ==", + "version": "9.16.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-positioning/-/react-positioning-9.16.3.tgz", + "integrity": "sha512-z8phNPD0BhREOPsqt4iMsIvzzkBbfuA3TaXwQeLhM0imISWBnctTAaLjDZDQno/Bt/pbEd+qulPV7fagL20tWQ==", "license": "MIT", "dependencies": { "@floating-ui/devtools": "0.2.1", - "@floating-ui/dom": "^1.2.0", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@floating-ui/dom": "^1.6.12", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -2096,16 +2124,16 @@ } }, "node_modules/@fluentui/react-progress": { - "version": "9.1.91", - "resolved": "https://registry.npmjs.org/@fluentui/react-progress/-/react-progress-9.1.91.tgz", - "integrity": "sha512-7+po8q+kR30g6QutHIpro91l8NTkmSoOZRMuoiPesuIblqeoFPoywlBanJFvLRMAAQefILi0QaTri8+PtHFZwQ==", + "version": "9.1.97", + "resolved": "https://registry.npmjs.org/@fluentui/react-progress/-/react-progress-9.1.97.tgz", + "integrity": "sha512-tVqm64vnFNJJygLHPo+ul3CR2fWo0/mwGdUVkvzyQKi6PMNuSHzRAQjrj09c0S12+vbOxuxgpICBQNYw8xzXUw==", "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.1.80", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-field": "^9.1.86", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -2117,17 +2145,17 @@ } }, "node_modules/@fluentui/react-provider": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-provider/-/react-provider-9.18.0.tgz", - "integrity": "sha512-qJS2D/g3h2GwAiw2V1uWLePpAG2CKP0Pg8/iKy6vCdeNgToOGTt7ZinJSNzVzdN1y6kE2Na1glTkDLDwBj9IKg==", + "version": "9.19.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-provider/-/react-provider-9.19.0.tgz", + "integrity": "sha512-fha+QqD7JW3eo+rLOYvfROOkiSLotH7NnpfJ67EBHIh5JGAn3KyiSJj42RvFTo05LyQGYXME6oQ5yitbDT5YIg==", "license": "MIT", "dependencies": { "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-tabster": "^9.23.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-tabster": "^9.23.3", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/core": "^1.16.0", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" @@ -2140,18 +2168,18 @@ } }, "node_modules/@fluentui/react-radio": { - "version": "9.2.36", - "resolved": "https://registry.npmjs.org/@fluentui/react-radio/-/react-radio-9.2.36.tgz", - "integrity": "sha512-G6sYBcT6tEHmXELPvSqzOd/CJeNv6X/IAgnyg9dvXQUw4gBwG7qYuVDQQPDyG+vncA//845eSOf+o8mvBIRUfQ==", - "license": "MIT", - "dependencies": { - "@fluentui/react-field": "^9.1.80", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-label": "^9.1.78", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-tabster": "^9.23.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "version": "9.2.42", + "resolved": "https://registry.npmjs.org/@fluentui/react-radio/-/react-radio-9.2.42.tgz", + "integrity": "sha512-Tk84/6THneFTInCoXxLuCR/wGogPX40eScoKzrqD82oTlDmLfgaiWM6hh5VsLSLyhnarINVjkaP6ZFqD8lRfZA==", + "license": "MIT", + "dependencies": { + "@fluentui/react-field": "^9.1.86", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-label": "^9.1.83", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-tabster": "^9.23.3", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -2163,16 +2191,16 @@ } }, "node_modules/@fluentui/react-rating": { - "version": "9.0.22", - "resolved": "https://registry.npmjs.org/@fluentui/react-rating/-/react-rating-9.0.22.tgz", - "integrity": "sha512-0mlOL2LDt1IrGOq3yIiM5niOk8Nmrip/Xef1Rnc4Q/X6EM66qwBk2fS0ZYtk4BXFlCn2sdsHeGwCy+6Dj7wgsQ==", + "version": "9.0.28", + "resolved": "https://registry.npmjs.org/@fluentui/react-rating/-/react-rating-9.0.28.tgz", + "integrity": "sha512-eEU9NeYDg6qTw/6kev8uvfOs0wG3obwFQ14Aix64dZngaG+t00VuCiCSvAs7GpR6ofRwQljqTzWyylmD8Q4m3w==", "license": "MIT", "dependencies": { "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-tabster": "^9.23.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-tabster": "^9.23.3", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -2184,16 +2212,16 @@ } }, "node_modules/@fluentui/react-search": { - "version": "9.0.22", - "resolved": "https://registry.npmjs.org/@fluentui/react-search/-/react-search-9.0.22.tgz", - "integrity": "sha512-+ZerMQVdnX7PhodaUF92SQTxv/6YJfcLQ/o6uJ2ppsYpBj8DX2bgWnmX7Ia0T9MReHHvIodRQXVTAFpJSBA+Gg==", + "version": "9.0.29", + "resolved": "https://registry.npmjs.org/@fluentui/react-search/-/react-search-9.0.29.tgz", + "integrity": "sha512-RJKwdomLYpgj11tyS8aqtb1wfuOesl3ZA/E3q/Uj3eNNu6hqT676cxrOwlWSBUYNCYbZbKhFQcoKXQGqB+FBHg==", "license": "MIT", "dependencies": { "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-input": "^9.4.93", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-input": "^9.4.99", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -2205,17 +2233,17 @@ } }, "node_modules/@fluentui/react-select": { - "version": "9.1.91", - "resolved": "https://registry.npmjs.org/@fluentui/react-select/-/react-select-9.1.91.tgz", - "integrity": "sha512-mrQORisf6xWKrooCX6F7qqvcgDT7ei4YMtH5KHVa+sCRyy5CC0jOAVD513rj7ysAVxLKv9TSuF/rdx/Cmc7Kzw==", + "version": "9.1.97", + "resolved": "https://registry.npmjs.org/@fluentui/react-select/-/react-select-9.1.97.tgz", + "integrity": "sha512-tdhakc4UC+jtWHw7/wuYo71zzszukSGdpjl6AYUs0Edxm9LZzJ/zLWEr1y1/OpDZiXnjOcTABzfBc2simRN9VQ==", "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.1.80", + "@fluentui/react-field": "^9.1.86", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -2227,12 +2255,12 @@ } }, "node_modules/@fluentui/react-shared-contexts": { - "version": "9.21.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-shared-contexts/-/react-shared-contexts-9.21.0.tgz", - "integrity": "sha512-GtP9zM7wpZtKXnq6qMd8ww0IN+5ZctPClVz83zDA602rJTJjihGwkmJ1ga8f/YphOTKcE12dnRQDl4iRL5vJ4A==", + "version": "9.21.2", + "resolved": "https://registry.npmjs.org/@fluentui/react-shared-contexts/-/react-shared-contexts-9.21.2.tgz", + "integrity": "sha512-5hw9CfCmKaEbxmFi+ZF4EZzYWFKrfRLq9pXFIoJWprP1D3ZAds/ymtIOG/CsJzig8zQ1LQ3cNSUzNB75XWg6IQ==", "license": "MIT", "dependencies": { - "@fluentui/react-theme": "^9.1.22", + "@fluentui/react-theme": "^9.1.24", "@swc/helpers": "^0.5.1" }, "peerDependencies": { @@ -2241,16 +2269,16 @@ } }, "node_modules/@fluentui/react-skeleton": { - "version": "9.1.20", - "resolved": "https://registry.npmjs.org/@fluentui/react-skeleton/-/react-skeleton-9.1.20.tgz", - "integrity": "sha512-nK1rJGTriJdXR9y820NHmLNRJ6YAiJUVGAtVb7OIi7KoX7/IXt/qY/xx91jnECaWHOPGzlNO+S4hxYkLiU80iQ==", + "version": "9.1.26", + "resolved": "https://registry.npmjs.org/@fluentui/react-skeleton/-/react-skeleton-9.1.26.tgz", + "integrity": "sha512-vrFaHRF4DuJneAjRSklb27qICVY3yGETQNv0AFS3IRjb8iwS7gWg5aI9Viy9Su7Zg9lIKes4teAafdkjvLUoyg==", "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.1.80", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-field": "^9.1.86", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -2262,17 +2290,17 @@ } }, "node_modules/@fluentui/react-slider": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-slider/-/react-slider-9.2.0.tgz", - "integrity": "sha512-96oT573BxYns4+dgGLQOT5j/4QfNIebXelvrw13AfBRBV2+WZlAApnpPujaTzv+DA86c8l+M3tqzAz11kznHzQ==", + "version": "9.2.6", + "resolved": "https://registry.npmjs.org/@fluentui/react-slider/-/react-slider-9.2.6.tgz", + "integrity": "sha512-YHdoKLeyvImc9DH7waJ8cbmVJ7yJI9arqdw+ZuHXLIJoSa5zBrYf7hUfk/GA3M6BQ+kMcTDEkUyRgy7Db80UBQ==", "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.1.80", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-tabster": "^9.23.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-field": "^9.1.86", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-tabster": "^9.23.3", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -2284,18 +2312,18 @@ } }, "node_modules/@fluentui/react-spinbutton": { - "version": "9.2.92", - "resolved": "https://registry.npmjs.org/@fluentui/react-spinbutton/-/react-spinbutton-9.2.92.tgz", - "integrity": "sha512-lDfjsN1sj4ol4DEnlt1JJ0vKb8lmSMWSEWil1zgPL+wQyVCP389UsROWZuzWpUqa4PxBY78Z4LaAUQx8DM7Y8Q==", + "version": "9.2.98", + "resolved": "https://registry.npmjs.org/@fluentui/react-spinbutton/-/react-spinbutton-9.2.98.tgz", + "integrity": "sha512-fJx+a45jTLJs/O5CVum950c8qRLRDirXi+myJHlVF9CyyjXABmosd43WUxa/zQ8H4spSWxKOo4pgUBwST2hYbA==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-field": "^9.1.80", + "@fluentui/react-field": "^9.1.86", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -2307,16 +2335,16 @@ } }, "node_modules/@fluentui/react-spinner": { - "version": "9.5.2", - "resolved": "https://registry.npmjs.org/@fluentui/react-spinner/-/react-spinner-9.5.2.tgz", - "integrity": "sha512-eY6/WgrzTWFgebae5oE9/KS0TA7xrz9LRUccTEwcFBJQgrUFVUHo2jDNdIEaxzpWUGq0usCMQW10PFepnsKEqg==", + "version": "9.5.7", + "resolved": "https://registry.npmjs.org/@fluentui/react-spinner/-/react-spinner-9.5.7.tgz", + "integrity": "sha512-DdfQAbdiz50V2DqRSX1MfN6ehw+9etcLysueSeH2n1PnpZ8TVEZYrJzBW608S/bCWrR8OAEVoY/3W/nDjwf8qw==", "license": "MIT", "dependencies": { - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-label": "^9.1.78", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-label": "^9.1.83", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -2328,18 +2356,19 @@ } }, "node_modules/@fluentui/react-swatch-picker": { - "version": "9.1.13", - "resolved": "https://registry.npmjs.org/@fluentui/react-swatch-picker/-/react-swatch-picker-9.1.13.tgz", - "integrity": "sha512-gegZCrF+JpPPGPo0GHeJK5267LdIuBQ7sV4b0kLMmIbdzEPe9OFykb5M3PdtSpVCbwbwCX1dVcXG5cQZhAKfVA==", + "version": "9.1.20", + "resolved": "https://registry.npmjs.org/@fluentui/react-swatch-picker/-/react-swatch-picker-9.1.20.tgz", + "integrity": "sha512-XJ5OKBSjQyXxTJjkNm9Orfc3ypDUn56Ylbmx2njOa8xxy4TBov/B0x5/mk++qCgYVgh0MUdf8ugpeYuXPabjRA==", "license": "MIT", "dependencies": { - "@fluentui/react-context-selector": "^9.1.69", + "@fluentui/react-context-selector": "^9.1.72", + "@fluentui/react-field": "^9.1.86", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-tabster": "^9.23.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-tabster": "^9.23.3", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -2351,19 +2380,19 @@ } }, "node_modules/@fluentui/react-switch": { - "version": "9.1.98", - "resolved": "https://registry.npmjs.org/@fluentui/react-switch/-/react-switch-9.1.98.tgz", - "integrity": "sha512-vvU2XVU9BVlJb6GGiDOOIJ/7q3XsfxuuUx6sA4ROWhHxFd+oPq3a7S5g6BhPfBZapIRDn4XjlSSxAnKxZFi8SA==", + "version": "9.1.104", + "resolved": "https://registry.npmjs.org/@fluentui/react-switch/-/react-switch-9.1.104.tgz", + "integrity": "sha512-MKw9hUPLNVSOkQlYr4QHTymU2R7MVwaAFDFRhT6q45POL/YbbJnSBJCtkkPuc5qMQN62RkarMkOTdLhzxJPe6Q==", "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.1.80", + "@fluentui/react-field": "^9.1.86", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-label": "^9.1.78", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-tabster": "^9.23.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-label": "^9.1.83", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-tabster": "^9.23.3", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -2375,23 +2404,23 @@ } }, "node_modules/@fluentui/react-table": { - "version": "9.15.22", - "resolved": "https://registry.npmjs.org/@fluentui/react-table/-/react-table-9.15.22.tgz", - "integrity": "sha512-XQEmigbpWvDBHJQILcWMa9aJ4Nskt3D8t00GPuVeuSJP+1pW7aAz6MHYzDOeeVSDj1P8nk7sTSUss3TNd4VP5g==", + "version": "9.15.29", + "resolved": "https://registry.npmjs.org/@fluentui/react-table/-/react-table-9.15.29.tgz", + "integrity": "sha512-z38vjSJGKqRCCtI9oAzyIO2A15Kre5JAlLr73vE+v4n0bbrIvtpfBi5eQ2CbpyCIWBPO5LKTTNupd267rcu4yg==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.13.9", - "@fluentui/react-avatar": "^9.6.43", - "@fluentui/react-checkbox": "^9.2.41", - "@fluentui/react-context-selector": "^9.1.69", + "@fluentui/react-aria": "^9.13.14", + "@fluentui/react-avatar": "^9.6.50", + "@fluentui/react-checkbox": "^9.2.47", + "@fluentui/react-context-selector": "^9.1.72", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-radio": "^9.2.36", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-tabster": "^9.23.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-radio": "^9.2.42", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-tabster": "^9.23.3", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -2403,17 +2432,17 @@ } }, "node_modules/@fluentui/react-tabs": { - "version": "9.6.2", - "resolved": "https://registry.npmjs.org/@fluentui/react-tabs/-/react-tabs-9.6.2.tgz", - "integrity": "sha512-RjlKoF+QzfZ3FN7y+NIgcTcwPqecZYGxV7ij1HeWH05wkQcT+SFnu5GEeMfN05Snia/85zDdtiwSjHW4rllm4Q==", + "version": "9.6.7", + "resolved": "https://registry.npmjs.org/@fluentui/react-tabs/-/react-tabs-9.6.7.tgz", + "integrity": "sha512-7EFDetqfGBb8X0aVBSIB6Ab9V9NiBhju3NqlW9zN8nvXovzkhjTtSY6LOxEdWHEl8NFTW8jQsBpiJTcM+oe8zw==", "license": "MIT", "dependencies": { - "@fluentui/react-context-selector": "^9.1.69", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-tabster": "^9.23.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-context-selector": "^9.1.72", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-tabster": "^9.23.3", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -2425,14 +2454,14 @@ } }, "node_modules/@fluentui/react-tabster": { - "version": "9.23.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-tabster/-/react-tabster-9.23.0.tgz", - "integrity": "sha512-YW9CcDDc4S2wV/fMex5VMZ+Nudxz0X67smSPo29sUFtCowEomZ+PRNbUhGkAgizrm7gTUCs+ITdvxm0vpl+bcQ==", + "version": "9.23.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-tabster/-/react-tabster-9.23.3.tgz", + "integrity": "sha512-sGLePr6QmUbYq/rGkaE6MUTRCFucY5HphKEvWoB8ec32btQmAsMlv9YT5BzJ+YQ2Byc39mm1Uthz/Pw5H+tCpA==", "license": "MIT", "dependencies": { - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1", "keyborg": "^2.6.0", @@ -2446,25 +2475,25 @@ } }, "node_modules/@fluentui/react-tag-picker": { - "version": "9.3.9", - "resolved": "https://registry.npmjs.org/@fluentui/react-tag-picker/-/react-tag-picker-9.3.9.tgz", - "integrity": "sha512-CX8+dbd3UX2Z2vy1guduBUPzqc9vVvEcyB4LSKkTjin8s2QH4+uip7oWA6ba6EpueFIocbE3X3+BYRiwoo01LA==", + "version": "9.4.2", + "resolved": "https://registry.npmjs.org/@fluentui/react-tag-picker/-/react-tag-picker-9.4.2.tgz", + "integrity": "sha512-etdXfX+ANDY1s30I8X6xrI5XgVZrlvUahmCgagohlUW6YW6fh+7CJm4PGNrfxgUYCLGmqSPZfzTv2Cd3KE9ung==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.13.9", - "@fluentui/react-combobox": "^9.13.12", - "@fluentui/react-context-selector": "^9.1.69", - "@fluentui/react-field": "^9.1.80", + "@fluentui/react-aria": "^9.13.14", + "@fluentui/react-combobox": "^9.13.18", + "@fluentui/react-context-selector": "^9.1.72", + "@fluentui/react-field": "^9.1.86", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-portal": "^9.4.38", - "@fluentui/react-positioning": "^9.15.12", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-tabster": "^9.23.0", - "@fluentui/react-tags": "^9.3.23", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-portal": "^9.4.42", + "@fluentui/react-positioning": "^9.16.3", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-tabster": "^9.23.3", + "@fluentui/react-tags": "^9.3.30", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -2476,20 +2505,20 @@ } }, "node_modules/@fluentui/react-tags": { - "version": "9.3.23", - "resolved": "https://registry.npmjs.org/@fluentui/react-tags/-/react-tags-9.3.23.tgz", - "integrity": "sha512-XX9NcAqBqkhTrbP2iYFp9LGA0NG5ZDf5X8FxtD+uUyDo+P9v6m6Tqqd0EHYtGB26aZLHTZWZTJpuq6klx/KdAQ==", + "version": "9.3.30", + "resolved": "https://registry.npmjs.org/@fluentui/react-tags/-/react-tags-9.3.30.tgz", + "integrity": "sha512-EyGhog+wUuPhrMleDe0RpvzZMagsPz8y9xU572CbMbk0B8HKe9NV7I2YoHn9ITQInu2l2c0FPbS+eneqcbO+0w==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.13.9", - "@fluentui/react-avatar": "^9.6.43", + "@fluentui/react-aria": "^9.13.14", + "@fluentui/react-avatar": "^9.6.50", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-tabster": "^9.23.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-tabster": "^9.23.3", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -2501,21 +2530,21 @@ } }, "node_modules/@fluentui/react-teaching-popover": { - "version": "9.1.22", - "resolved": "https://registry.npmjs.org/@fluentui/react-teaching-popover/-/react-teaching-popover-9.1.22.tgz", - "integrity": "sha512-chzQ251KL19FPi1VRGiDMYLu/BnTUhMEyes2vaCyX8oZwcxvu37N/1PIQcbd9KCPN0kXX4TY3wVLZI8CFfporA==", + "version": "9.2.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-teaching-popover/-/react-teaching-popover-9.2.3.tgz", + "integrity": "sha512-bLpdhgbUxkHQMo2F09sSykdcwiKLIf3iorQVMFmkscJKgUpM50s+LwNXl8gz/Lrpl+I++voOqgTRwzzLnqcodA==", "license": "MIT", "dependencies": { - "@fluentui/react-aria": "^9.13.9", - "@fluentui/react-button": "^9.3.95", - "@fluentui/react-context-selector": "^9.1.69", + "@fluentui/react-aria": "^9.13.14", + "@fluentui/react-button": "^9.3.101", + "@fluentui/react-context-selector": "^9.1.72", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-popover": "^9.9.25", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-tabster": "^9.23.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-popover": "^9.9.32", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-tabster": "^9.23.3", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1", "use-sync-external-store": "^1.2.0" @@ -2528,15 +2557,15 @@ } }, "node_modules/@fluentui/react-text": { - "version": "9.4.27", - "resolved": "https://registry.npmjs.org/@fluentui/react-text/-/react-text-9.4.27.tgz", - "integrity": "sha512-/a1/eibyGYcWsc5M0i32vOAD/zf2gD5lDjaLXSiwoerF+e0j7GLgjbTi63ZK3K3Sh2repTrW/nsAHhqbeQhMyw==", + "version": "9.4.32", + "resolved": "https://registry.npmjs.org/@fluentui/react-text/-/react-text-9.4.32.tgz", + "integrity": "sha512-unEqjCSX8MjcW7+ZavEZ2D+JYM8DEpkIlgNb8lF1ye/ACqTQINKFEc9ShAeXIk/1yVNlA02P3pjbHOWL2Vgwhg==", "license": "MIT", "dependencies": { - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -2548,16 +2577,16 @@ } }, "node_modules/@fluentui/react-textarea": { - "version": "9.3.92", - "resolved": "https://registry.npmjs.org/@fluentui/react-textarea/-/react-textarea-9.3.92.tgz", - "integrity": "sha512-Vmv0l8rGs34pjNSUDPKazZVN2yiWbda0PWy9PhOTIZsl9DdcLwyLcge3tKHnxHBvqEz6c1VzKxgK3+liLaSxpg==", + "version": "9.3.98", + "resolved": "https://registry.npmjs.org/@fluentui/react-textarea/-/react-textarea-9.3.98.tgz", + "integrity": "sha512-dsdASrLG7XgELMB8ddQgHaOU5vN1G+YAgXqFvFXn1IkQZCz439lxnSKyzmMSRhrsg2IPOZNOPiwILj8GOJGgXQ==", "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.1.80", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-field": "^9.1.86", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -2569,31 +2598,32 @@ } }, "node_modules/@fluentui/react-theme": { - "version": "9.1.22", - "resolved": "https://registry.npmjs.org/@fluentui/react-theme/-/react-theme-9.1.22.tgz", - "integrity": "sha512-+orOyOsI0I7m6ovkU20soe8BUOS6eESfVAr3iZ+P9NsqtnCRNnrkOnfEmuOIh+UkNhljEkY9pVUSF1JPq+XHtg==", + "version": "9.1.24", + "resolved": "https://registry.npmjs.org/@fluentui/react-theme/-/react-theme-9.1.24.tgz", + "integrity": "sha512-OhVKYD7CMYHxzJEn4PtIszledj8hbQJNWBMfIZsp4Sytdp9vCi0txIQUx4BhS1WqtQPhNGCF16eW9Q3NRrnIrQ==", "license": "MIT", "dependencies": { - "@fluentui/tokens": "1.0.0-alpha.19", + "@fluentui/tokens": "1.0.0-alpha.21", "@swc/helpers": "^0.5.1" } }, "node_modules/@fluentui/react-toast": { - "version": "9.3.59", - "resolved": "https://registry.npmjs.org/@fluentui/react-toast/-/react-toast-9.3.59.tgz", - "integrity": "sha512-42+MBvjkwCmEj46pvwN0+8HABXJ0tbm1gSuAlaiQO5zIO+xWCZKLeqlGtbJ2DH6G6ZcOwBkiOXioOLyRS7t03A==", + "version": "9.3.65", + "resolved": "https://registry.npmjs.org/@fluentui/react-toast/-/react-toast-9.3.65.tgz", + "integrity": "sha512-rQ3jvvKWjankXpjyrazRtw56pPR7sWF9QF81z7mMdTsIdPpyZTclHJ7tYShk2Qzt0s+WglNO7k4qXw/txemA9w==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.13.9", + "@fluentui/react-aria": "^9.13.14", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-motion": "^9.6.1", - "@fluentui/react-portal": "^9.4.38", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-tabster": "^9.23.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-motion": "^9.6.7", + "@fluentui/react-motion-components-preview": "^0.4.3", + "@fluentui/react-portal": "^9.4.42", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-tabster": "^9.23.3", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -2605,20 +2635,20 @@ } }, "node_modules/@fluentui/react-toolbar": { - "version": "9.2.10", - "resolved": "https://registry.npmjs.org/@fluentui/react-toolbar/-/react-toolbar-9.2.10.tgz", - "integrity": "sha512-lTix5YU3u85JnI/ISSraNIQDdj3FX6n2Xuzd27lGC6cebpI799NsZVfaprwNr5ywOwLlJ/B+kQXflQMZAJ4NxA==", - "license": "MIT", - "dependencies": { - "@fluentui/react-button": "^9.3.95", - "@fluentui/react-context-selector": "^9.1.69", - "@fluentui/react-divider": "^9.2.77", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-radio": "^9.2.36", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-tabster": "^9.23.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "version": "9.2.17", + "resolved": "https://registry.npmjs.org/@fluentui/react-toolbar/-/react-toolbar-9.2.17.tgz", + "integrity": "sha512-33aNufE6yd2gt1Do7hBbkPSY0HhsmbRZ4SHAG26ddD4IcOlOtF3IY+lLnenEbSKumLD3Juwa6qfm27bgdTCLxg==", + "license": "MIT", + "dependencies": { + "@fluentui/react-button": "^9.3.101", + "@fluentui/react-context-selector": "^9.1.72", + "@fluentui/react-divider": "^9.2.82", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-radio": "^9.2.42", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-tabster": "^9.23.3", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -2630,19 +2660,19 @@ } }, "node_modules/@fluentui/react-tooltip": { - "version": "9.4.43", - "resolved": "https://registry.npmjs.org/@fluentui/react-tooltip/-/react-tooltip-9.4.43.tgz", - "integrity": "sha512-KUIrs7uxjC916HT6XJgCfcxoxlbABi6TlriOzi/aELh0Gu5zH/9UPgvKw5BzWQUUyFLpjVOBKjogqI5SdsQGRg==", + "version": "9.5.5", + "resolved": "https://registry.npmjs.org/@fluentui/react-tooltip/-/react-tooltip-9.5.5.tgz", + "integrity": "sha512-+cA6BRu04LIJEIifnQzL0N0mEkkPOty3LysFklsXSDGKa4kJ1NKgLqbAZivcRPh0pX0Xleq+pCYfB5TI6s7uTw==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-portal": "^9.4.38", - "@fluentui/react-positioning": "^9.15.12", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-tabster": "^9.23.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-portal": "^9.4.42", + "@fluentui/react-positioning": "^9.16.3", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-tabster": "^9.23.3", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -2654,26 +2684,26 @@ } }, "node_modules/@fluentui/react-tree": { - "version": "9.8.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-tree/-/react-tree-9.8.6.tgz", - "integrity": "sha512-iqT7wRz3uz/zgUkuxCc7LeDBhtVNmv2fA2e5AoEgcFGJRck3b97G9l8bqiyaitqt/1MXLCKOf0LlTqLpe7mVbQ==", + "version": "9.9.2", + "resolved": "https://registry.npmjs.org/@fluentui/react-tree/-/react-tree-9.9.2.tgz", + "integrity": "sha512-ToIR8rdOJtvHdlBiMWOJ/ERul+prK2dv63VEbvr4HSXZ0uP0bfRQHOtMNRYjYbJcze6UgADMMtVuYCxJga0gZQ==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.13.9", - "@fluentui/react-avatar": "^9.6.43", - "@fluentui/react-button": "^9.3.95", - "@fluentui/react-checkbox": "^9.2.41", - "@fluentui/react-context-selector": "^9.1.69", + "@fluentui/react-aria": "^9.13.14", + "@fluentui/react-avatar": "^9.6.50", + "@fluentui/react-button": "^9.3.101", + "@fluentui/react-checkbox": "^9.2.47", + "@fluentui/react-context-selector": "^9.1.72", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.46", - "@fluentui/react-motion": "^9.6.1", - "@fluentui/react-motion-components-preview": "^0.3.0", - "@fluentui/react-radio": "^9.2.36", - "@fluentui/react-shared-contexts": "^9.21.0", - "@fluentui/react-tabster": "^9.23.0", - "@fluentui/react-theme": "^9.1.22", - "@fluentui/react-utilities": "^9.18.17", + "@fluentui/react-jsx-runtime": "^9.0.50", + "@fluentui/react-motion": "^9.6.7", + "@fluentui/react-motion-components-preview": "^0.4.3", + "@fluentui/react-radio": "^9.2.42", + "@fluentui/react-shared-contexts": "^9.21.2", + "@fluentui/react-tabster": "^9.23.3", + "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-utilities": "^9.18.20", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1" }, @@ -2685,13 +2715,13 @@ } }, "node_modules/@fluentui/react-utilities": { - "version": "9.18.17", - "resolved": "https://registry.npmjs.org/@fluentui/react-utilities/-/react-utilities-9.18.17.tgz", - "integrity": "sha512-xW3e+sNd14njyXX1ovI2I8Sz/kjuieGzEbMbduNQONERp6Doc4JItPyxXUgv20qZ8eFYO6AykcI+xCTpHRkiBA==", + "version": "9.18.20", + "resolved": "https://registry.npmjs.org/@fluentui/react-utilities/-/react-utilities-9.18.20.tgz", + "integrity": "sha512-4uIgf4e4yP1HWAQapFQKNN88+L88NqbzXyQPf+NWE9lmP5xRyyMePKRX7i4PcJFdSt7lN4BYvwUxJ7DkQ/Npnw==", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-shared-contexts": "^9.21.0", + "@fluentui/react-shared-contexts": "^9.21.2", "@swc/helpers": "^0.5.1" }, "peerDependencies": { @@ -2742,23 +2772,23 @@ } }, "node_modules/@fluentui/style-utilities": { - "version": "8.11.4", - "resolved": "https://registry.npmjs.org/@fluentui/style-utilities/-/style-utilities-8.11.4.tgz", - "integrity": "sha512-qJGlwX1FiDemPwCuzqYkmjfDNi0JQMum47FNB5dEtGz65/C2MSqLsZChcSpYwQEGCgY+L0qI1EwgbquTFxJqSw==", + "version": "8.11.6", + "resolved": "https://registry.npmjs.org/@fluentui/style-utilities/-/style-utilities-8.11.6.tgz", + "integrity": "sha512-bVFu/ONP2+GZ/JzR6NhN7+1fuMHvi+LjOfgo21HQoDakY/KwFaitLiQBQFlRpbRUVcZXQDqe4Ur6EDFAlb2I7Q==", "license": "MIT", "dependencies": { "@fluentui/merge-styles": "^8.6.13", "@fluentui/set-version": "^8.2.23", - "@fluentui/theme": "^2.6.63", + "@fluentui/theme": "^2.6.64", "@fluentui/utilities": "^8.15.19", "@microsoft/load-themed-styles": "^1.10.26", "tslib": "^2.1.0" } }, "node_modules/@fluentui/theme": { - "version": "2.6.63", - "resolved": "https://registry.npmjs.org/@fluentui/theme/-/theme-2.6.63.tgz", - "integrity": "sha512-BZ+YG4Vqb+ulhmZzDv8yZFuYo2kHp1m2cttBZLkc+61FnrwCaDBmJxwg65gXoF7wwXKh2qJIcJueSLMmvVyAOQ==", + "version": "2.6.64", + "resolved": "https://registry.npmjs.org/@fluentui/theme/-/theme-2.6.64.tgz", + "integrity": "sha512-cjzwPgq3Zsw4F6Xy7A7yN8WCeEXKTwk9lfJzEr5b00euJRuPMxkxesBbAWW43+/1l1eWVYmSm4GcEMDVD4BfXQ==", "license": "MIT", "dependencies": { "@fluentui/merge-styles": "^8.6.13", @@ -2772,9 +2802,9 @@ } }, "node_modules/@fluentui/tokens": { - "version": "1.0.0-alpha.19", - "resolved": "https://registry.npmjs.org/@fluentui/tokens/-/tokens-1.0.0-alpha.19.tgz", - "integrity": "sha512-Y1MI/d/SVhheFglzG/hyyNynbUk9vby7yU4oMLbIlqNRyQw03hPE3LhHb1k9/EHAuLxRioezEcEhRfOD8ej8dQ==", + "version": "1.0.0-alpha.21", + "resolved": "https://registry.npmjs.org/@fluentui/tokens/-/tokens-1.0.0-alpha.21.tgz", + "integrity": "sha512-xQ1T56sNgDFGl+kJdIwhz67mHng8vcwO7Dvx5Uja4t+NRULQBgMcJ4reUo4FGF3TjufHj08pP0/OnKQgnOaSVg==", "license": "MIT", "dependencies": { "@swc/helpers": "^0.5.1" @@ -2798,9 +2828,9 @@ } }, "node_modules/@griffel/core": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/@griffel/core/-/core-1.18.2.tgz", - "integrity": "sha512-odJspTMohsYZLSlO/oKsf6El6px1vg1461CpPverOzS9f0xaUKh/ZGenW+MjyyZ3aQ6adkPzcr/my6JFH/zdXQ==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@griffel/core/-/core-1.19.1.tgz", + "integrity": "sha512-ZItAAOm8YH1FW0ebzOxS3jwENqd+Dz4CGiPEdgkL4kr7D6mBpjjBbQC6VRXxnA+VqHeEQGy69Ll4M1peY8MX/g==", "license": "MIT", "dependencies": { "@emotion/hash": "^0.9.0", @@ -2812,12 +2842,12 @@ } }, "node_modules/@griffel/react": { - "version": "1.5.27", - "resolved": "https://registry.npmjs.org/@griffel/react/-/react-1.5.27.tgz", - "integrity": "sha512-985A8iEBo++h9u96dbj3Kj5hdsBWbpkkwFpy0W8EGL0VRCzZmpb0AlWuq9pDJZACS6eZ2GAb/f9CqgVAgnTnOg==", + "version": "1.5.29", + "resolved": "https://registry.npmjs.org/@griffel/react/-/react-1.5.29.tgz", + "integrity": "sha512-xKenEIfV2PnLKVsM8yp2ZCUTknh2790937XlI88zDaO9TC8ylG10mZ3MrcgCdSecrVjKq9JKmm24tsODpkh4pw==", "license": "MIT", "dependencies": { - "@griffel/core": "^1.18.2", + "@griffel/core": "^1.19.1", "tslib": "^2.1.0" }, "peerDependencies": { @@ -6142,9 +6172,9 @@ "license": "MIT" }, "node_modules/@types/prop-types": { - "version": "15.7.13", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", - "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==", + "version": "15.7.14", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz", + "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==", "license": "MIT" }, "node_modules/@types/react": { @@ -6186,6 +6216,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/unist": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", @@ -6418,6 +6455,19 @@ "dev": true, "license": "ISC" }, + "node_modules/@vitejs/plugin-react-swc": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.7.2.tgz", + "integrity": "sha512-y0byko2b2tSVVf5Gpng1eEhX1OvPC7x8yns1Fx8jDzlJp4LS6CMkCPfLw47cjyoMrshQDoQw4qcgjsU9VvlCew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@swc/core": "^1.7.26" + }, + "peerDependencies": { + "vite": "^4 || ^5 || ^6" + } + }, "node_modules/@vitest/browser": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-2.1.6.tgz", @@ -9553,16 +9603,6 @@ "dev": true, "license": "MIT" }, - "node_modules/dom-helpers": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", - "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" - } - }, "node_modules/dom-serializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", @@ -9751,27 +9791,27 @@ "license": "ISC" }, "node_modules/embla-carousel": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.5.1.tgz", - "integrity": "sha512-JUb5+FOHobSiWQ2EJNaueCNT/cQU9L6XWBbWmorWPQT9bkbk+fhsuLr8wWrzXKagO3oWszBO7MSx+GfaRk4E6A==", + "version": "8.5.2", + "resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.5.2.tgz", + "integrity": "sha512-xQ9oVLrun/eCG/7ru3R+I5bJ7shsD8fFwLEY7yPe27/+fDHCNj0OT5EoG5ZbFyOxOcG6yTwW8oTz/dWyFnyGpg==", "license": "MIT" }, "node_modules/embla-carousel-autoplay": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/embla-carousel-autoplay/-/embla-carousel-autoplay-8.5.1.tgz", - "integrity": "sha512-FnZklFpePfp8wbj177UwVaGFehgs+ASVcJvYLWTtHuYKURynCc3IdDn2qrn0E5Qpa3g9yeGwCS4p8QkrZmO8xg==", + "version": "8.5.2", + "resolved": "https://registry.npmjs.org/embla-carousel-autoplay/-/embla-carousel-autoplay-8.5.2.tgz", + "integrity": "sha512-27emJ0px3q/c0kCHCjwRrEbYcyYUPfGO3g5IBWF1i7714TTzE6L9P81V6PHLoSMAKJ1aHoT2e7YFOsuFKCbyag==", "license": "MIT", "peerDependencies": { - "embla-carousel": "8.5.1" + "embla-carousel": "8.5.2" } }, "node_modules/embla-carousel-fade": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/embla-carousel-fade/-/embla-carousel-fade-8.5.1.tgz", - "integrity": "sha512-n7vRe2tsTW0vc0Xxtk3APoxhUSXIGh/lGRKYtBJS/SWDeXf9E3qVUst4MfHhwXaHlfu5PLqG3xIEDAr2gwbbNA==", + "version": "8.5.2", + "resolved": "https://registry.npmjs.org/embla-carousel-fade/-/embla-carousel-fade-8.5.2.tgz", + "integrity": "sha512-QJ46Xy+mpijjquQeIY0d0sPSy34XduREUnz7tn1K20hcKyZYTONNIXQZu3GGNwG59cvhMqYJMw9ki92Rjd14YA==", "license": "MIT", "peerDependencies": { - "embla-carousel": "8.5.1" + "embla-carousel": "8.5.2" } }, "node_modules/emoji-regex": { @@ -13669,6 +13709,16 @@ "uc.micro": "^2.0.0" } }, + "node_modules/lit-html": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.2.1.tgz", + "integrity": "sha512-qI/3lziaPMSKsrwlxH/xMgikhQ0EGOX2ICU73Bi/YHFvz2j/yMCIrw4+puF2IpQ4+upd3EWbvnHM9+PnJn48YA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@types/trusted-types": "^2.0.2" + } + }, "node_modules/load-json-file": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", @@ -15299,15 +15349,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object-inspect": { "version": "1.13.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", @@ -16199,23 +16240,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "license": "MIT" - }, "node_modules/property-information": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", @@ -16397,22 +16421,6 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "license": "MIT" }, - "node_modules/react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", - "license": "BSD-3-Clause", - "dependencies": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": ">=16.6.0", - "react-dom": ">=16.6.0" - } - }, "node_modules/read": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/read/-/read-3.0.1.tgz", @@ -17981,9 +17989,9 @@ } }, "node_modules/stylis": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.4.tgz", - "integrity": "sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.5.tgz", + "integrity": "sha512-K7npNOKGRYuhAFFzkzMGfxFDpN6gDwf8hcMiE+uveTVbBgm93HrNP3ZDUpKqzZ4pG7TP6fmb+EMAQPjq9FqqvA==", "license": "MIT" }, "node_modules/supports-color": { @@ -18042,9 +18050,9 @@ } }, "node_modules/tabster": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/tabster/-/tabster-8.2.0.tgz", - "integrity": "sha512-Gvplk/Yl/12aVFA6FPOqGcq31Qv8hbPfYO0N+6IxrRgRT6eSLsipT6gkZBYjyOwGsp6BD5XlZAuJgupfG/GHoA==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/tabster/-/tabster-8.3.0.tgz", + "integrity": "sha512-Y1IKWVe0Xk1P8WLSL+Wj+1jkov69OLST6crAG86ye35WM4mLhr/IeW7vIF+8oQKLNPf0FQ7F1lg5cmXUAQeSdA==", "license": "MIT", "dependencies": { "keyborg": "2.6.0", @@ -19468,12 +19476,12 @@ } }, "node_modules/use-sync-external-store": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz", - "integrity": "sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz", + "integrity": "sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==", "license": "MIT", "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "node_modules/util": { @@ -20828,7 +20836,6 @@ "license": "Apache-2.0", "dependencies": { "@hpcc-js/common": "^3.3.0", - "@hpcc-js/dgrid-shim": "^3.1.1", "@hpcc-js/util": "^3.3.0" }, "devDependencies": { @@ -20837,6 +20844,9 @@ "@testing-library/dom": "10.4.0", "d3-format": "^1", "d3-selection": "^1" + }, + "peerDependencies": { + "@hpcc-js/dgrid-shim": "^3.1.0" } }, "packages/dgrid-shim": { @@ -20865,11 +20875,12 @@ "license": "Apache-2.0", "dependencies": { "@hpcc-js/common": "^3.3.0", - "@hpcc-js/react": "^3.2.0", "@hpcc-js/util": "^3.3.0" }, "devDependencies": { "@hpcc-js/esbuild-plugins": "^1.4.0", + "@preact/preset-vite": "2.9.2", + "preact": "10.25.0", "react-data-grid": "7.0.0-beta.47" } }, @@ -20949,7 +20960,8 @@ "d3-shape": "^1", "d3-tile": "^1", "d3-transition": "^1", - "dagre": "0.8.5" + "dagre": "0.8.5", + "lit-html": "3.2.1" } }, "packages/html": { diff --git a/packages/comms/package.json b/packages/comms/package.json index 79f819a0e9..e6ca820511 100644 --- a/packages/comms/package.json +++ b/packages/comms/package.json @@ -7,7 +7,10 @@ "module": "./dist/index.browser.js", "exports": { ".": { - "types": "./types/index.browser.d.ts", + "types": { + "node": "./types/index.node.d.ts", + "default": "./types/index.browser.d.ts" + }, "node": "./dist/index.node.js", "import": "./dist/index.browser.js", "require": "./dist/index.browser.umd.cjs" diff --git a/packages/graph/index.html b/packages/graph/index.html index 6e2052755c..acafdaa2ce 100644 --- a/packages/graph/index.html +++ b/packages/graph/index.html @@ -17,7 +17,9 @@ } #placeholder, - #placeholder2 { + #placeholder1, + #placeholder2, + #placeholder3 { width: 100%; height: 500px; background-color: #fff; @@ -26,103 +28,44 @@ + +

ESM Quick Test

-
+
+

ESM Quick Test

+
+ -
+
diff --git a/packages/graph/package.json b/packages/graph/package.json index 638c1352ce..aebe51bb85 100644 --- a/packages/graph/package.json +++ b/packages/graph/package.json @@ -56,7 +56,8 @@ "d3-shape": "^1", "d3-tile": "^1", "d3-transition": "^1", - "dagre": "0.8.5" + "dagre": "0.8.5", + "lit-html": "3.2.1" }, "peerDependencies": {}, "repository": { diff --git a/packages/graph/src/__tests__/test5.ts b/packages/graph/src/__tests__/test5.ts index d9b2f42e2f..7d302689b4 100644 --- a/packages/graph/src/__tests__/test5.ts +++ b/packages/graph/src/__tests__/test5.ts @@ -1,5 +1,5 @@ import { Vertex4, CentroidVertex4 } from "@hpcc-js/react"; -import { Graph2 } from "../graph2/graph"; +import { GraphReact } from "../react/graphReact.ts"; const VERTEX_ARR = [{ id: 0, diff --git a/packages/graph/src/common/graphT.css b/packages/graph/src/common/graphT.css new file mode 100644 index 0000000000..d6c8ae8c81 --- /dev/null +++ b/packages/graph/src/common/graphT.css @@ -0,0 +1,33 @@ +.graph_GraphT .graphVertex { + cursor: pointer; +} + +.graph_GraphT .allowDragging .graphVertex { + cursor: pointer; +} + +.graph_GraphT .allowDragging .graphVertex.grabbed { + cursor: grabbing; +} + +.graph_GraphT .graphEdge { + stroke: darkgray; + fill: none; +} + +.graph_GraphT .graphEdge>text { + stroke: none; + fill: black; +} + +.graph_GraphT .graphEdge.hide-text>text { + display: none; +} + +.graph_GraphT g.selected rect { + stroke: navy !important; +} + +.graph_GraphT g.selected circle { + stroke: navy !important; +} \ No newline at end of file diff --git a/packages/graph/src/graph2/graphT.ts b/packages/graph/src/common/graphT.ts similarity index 94% rename from packages/graph/src/graph2/graphT.ts rename to packages/graph/src/common/graphT.ts index fdf200a9fc..09dce7ee01 100644 --- a/packages/graph/src/graph2/graphT.ts +++ b/packages/graph/src/common/graphT.ts @@ -1,5 +1,4 @@ -import { d3Event, drag as d3Drag, Palette, select as d3Select, Selection, Spacer, SVGGlowFilter, SVGZoomWidget, ToggleButton, Utility, Widget, BaseType as D3BaseType } from "@hpcc-js/common"; -import { IconEx, Icons, render } from "@hpcc-js/react"; +import { d3Event, drag as d3Drag, Palette, select as d3Select, Selection, Spacer, SVGGlowFilter, SVGZoomWidget, Button, ToggleButton, Utility, Widget } from "@hpcc-js/common"; import { Graph2 as GraphCollection, hashSum } from "@hpcc-js/util"; import { HTMLTooltip } from "@hpcc-js/html"; import { interpolateNumberArray as d3InterpolateNumberArray } from "d3-interpolate"; @@ -7,17 +6,18 @@ import "d3-transition"; import { interpolatePath as d3InterpolatePath } from "d3-interpolate-path"; import { Circle, Dagre, ForceDirected, ForceDirectedAnimated, Graphviz, ILayout, Null } from "./layouts/index.ts"; import { Options as FDOptions } from "./layouts/forceDirectedWorker.ts"; -import type { VertexBaseProps, EdgeBaseProps, GraphDataProps, HierarchyBase, SubgraphBaseProps } from "./layouts/placeholders.ts"; +import type { BaseProps, VertexBaseProps, EdgeBaseProps, GraphDataProps, HierarchyBase, SubgraphBaseProps } from "./layouts/placeholders.ts"; import { EdgePlaceholder, SubgraphPlaceholder, VertexPlaceholder, isEdgePlaceholder } from "./layouts/placeholders.ts"; import { Engine, graphviz as gvWorker } from "./layouts/graphvizWorker.ts"; import { Tree, RadialTree, Dendrogram, RadialDendrogram } from "./layouts/tree.ts"; -import "../../src/graph2/graph.css"; +import "./graphT.css"; let scriptDir = (globalThis?.document?.currentScript as HTMLScriptElement)?.src ?? "./dummy.js"; scriptDir = scriptDir.substring(0, scriptDir.replace(/[?#].*/, "").lastIndexOf("/") + 1); export { + BaseProps, GraphDataProps, SubgraphBaseProps, VertexBaseProps, @@ -43,7 +43,7 @@ function dragEnd(n: VertexPlaceholder) { n.fy = n.sy = undefined; } -export type RendererT = (props: T, element: SVGGElement) => void; +export type RendererT = (props: T, element: SVGGElement) => unknown; export class GraphT> extends SVGZoomWidget { @@ -121,6 +121,8 @@ export class GraphT = { subgraphs: [], vertices: [], @@ -485,7 +469,7 @@ export class GraphT, transition: boolean): this { const edgeLayout = { - ...this._layoutAlgo.edgePath(ep as any, this.edgeArcDepth()) + ...this._layoutAlgo.edgePath(ep as any, this.edgeArcDepth()), + markerStart: `url(#${this.id()}_circleFoot)`, + markerEnd: `url(#${this.id()}_arrowHead)`, + }; const context = this; if (this._edgeRenderer && ep.element) { @@ -596,7 +583,7 @@ export class GraphT this.maxScale() + (this._transformScale - this.maxScale()) / 2) { scale = this.maxScale() + (this._transformScale - this.maxScale()) / 2; } else if (this._transformScale < this.minScale() - (this._transformScale - this.minScale()) / 13) { - // scale = this.minScale() - (this._transformScale - this.minScale()) / 13; + scale = this.minScale() - (this._transformScale - this.minScale()) / 13; } } return Math.round(pos * scale * rf) / rf; @@ -654,7 +641,14 @@ export class GraphT) { return { x: this.project(vp.fx !== undefined ? vp.fx : vp.x), - y: this.project(vp.fy !== undefined ? vp.fy : vp.y) + y: this.project(vp.fy !== undefined ? vp.fy : vp.y), + }; + } + + rprojectPlacholder(vp: VertexPlaceholder) { + return { + x: this.rproject(vp.fx !== undefined ? vp.fx : vp.x), + y: this.rproject(vp.fy !== undefined ? vp.fy : vp.y), }; } @@ -663,26 +657,9 @@ export class GraphT ({ - ...c, - id: this.categoryID(c.id), - fill: c.fill || "transparent", - imageCharFill: c.imageCharFill || this._catPalette(c.id) - })) - }, this._svgDefsCat.node()); } updateAnnotations() { - render(Icons, { - icons: this._annotations.map((c): IconEx => ({ - ...c, - id: this.categoryID(c.id, "ann"), - shape: c.shape || "square", - height: c.height || 12, - fill: c.fill || this._catPalette(c.id) - })) - }, this._svgDefsAnn.node()); } private _edgeRenderer: RendererT; @@ -831,7 +808,7 @@ export class GraphT("defs"); this._centroidFilter = new SVGGlowFilter(this._svgDefs, this._id + "_glow"); - this._svgDefsCat = this._svgDefs.append("g"); this._svgDefsAnn = this._svgDefs.append("g"); + this.addMarkers(); this._subgraphG = this._renderElement.append("g"); this._edgeG = this._renderElement.append("g"); this._vertexG = this._renderElement.append("g"); @@ -1036,6 +1064,9 @@ export class GraphT { - const x = this._graph.project(p[0], false); - const y = this._graph.project(p[1], false); + const line = this.edgeLine(ep); + points = ep.points.map((p, idx) => { + let x = NaN; + let y = NaN; + if (idx === 0) { + x = this._graph.rproject(line.source.x); + y = this._graph.rproject(line.source.y); + } else if (idx === ep.points.length - 1) { + x = this._graph.rproject(line.target.x); + y = this._graph.rproject(line.target.y); + } else { + x = p[0]; + y = p[1]; + } + x = this._graph.project(x, false); + y = this._graph.project(y, false); if (isNaN(x) || isNaN(y)) { hasNaN = true; } diff --git a/packages/graph/src/graph2/layouts/dagreWorker.ts b/packages/graph/src/common/layouts/dagreWorker.ts similarity index 100% rename from packages/graph/src/graph2/layouts/dagreWorker.ts rename to packages/graph/src/common/layouts/dagreWorker.ts diff --git a/packages/graph/src/graph2/layouts/forceDirected.ts b/packages/graph/src/common/layouts/forceDirected.ts similarity index 100% rename from packages/graph/src/graph2/layouts/forceDirected.ts rename to packages/graph/src/common/layouts/forceDirected.ts diff --git a/packages/graph/src/graph2/layouts/forceDirectedWorker.ts b/packages/graph/src/common/layouts/forceDirectedWorker.ts similarity index 100% rename from packages/graph/src/graph2/layouts/forceDirectedWorker.ts rename to packages/graph/src/common/layouts/forceDirectedWorker.ts diff --git a/packages/graph/src/graph2/layouts/geoForceDirected.ts b/packages/graph/src/common/layouts/geoForceDirected.ts similarity index 100% rename from packages/graph/src/graph2/layouts/geoForceDirected.ts rename to packages/graph/src/common/layouts/geoForceDirected.ts diff --git a/packages/graph/src/graph2/layouts/graphviz.ts b/packages/graph/src/common/layouts/graphviz.ts similarity index 85% rename from packages/graph/src/graph2/layouts/graphviz.ts rename to packages/graph/src/common/layouts/graphviz.ts index dc10854ca1..006582f250 100644 --- a/packages/graph/src/graph2/layouts/graphviz.ts +++ b/packages/graph/src/common/layouts/graphviz.ts @@ -38,7 +38,7 @@ export class Graphviz extends Layout { case "vertex": delete item["fx"]; delete item["fy"]; - const bbox = item.element.node().getBBox(); + const bbox = this.vertexSize(item); const retVal = { id: item.id, text: item.props.text, @@ -102,9 +102,22 @@ export class Graphviz extends Layout { let points = []; let hasNaN = false; if (ep.points) { - points = ep.points.map(p => { - const x = this._graph.project(p[0], false); - const y = this._graph.project(p[1], false); + const line = this.edgeLine(ep); + points = ep.points.map((p, idx) => { + let x = NaN; + let y = NaN; + if (idx === 0) { + x = this._graph.rproject(line.source.x); + y = this._graph.rproject(line.source.y); + } else if (idx === ep.points.length - 1) { + x = this._graph.rproject(line.target.x); + y = this._graph.rproject(line.target.y); + } else { + x = p[0]; + y = p[1]; + } + x = this._graph.project(x, false); + y = this._graph.project(y, false); if (isNaN(x) || isNaN(y)) { hasNaN = true; } diff --git a/packages/graph/src/graph2/layouts/graphvizWorker.ts b/packages/graph/src/common/layouts/graphvizWorker.ts similarity index 100% rename from packages/graph/src/graph2/layouts/graphvizWorker.ts rename to packages/graph/src/common/layouts/graphvizWorker.ts diff --git a/packages/graph/src/graph2/layouts/index.ts b/packages/graph/src/common/layouts/index.ts similarity index 100% rename from packages/graph/src/graph2/layouts/index.ts rename to packages/graph/src/common/layouts/index.ts diff --git a/packages/graph/src/graph2/layouts/layout.ts b/packages/graph/src/common/layouts/layout.ts similarity index 62% rename from packages/graph/src/graph2/layouts/layout.ts rename to packages/graph/src/common/layouts/layout.ts index 5c97dc8f33..2f734976ad 100644 --- a/packages/graph/src/graph2/layouts/layout.ts +++ b/packages/graph/src/common/layouts/layout.ts @@ -2,9 +2,20 @@ import { Graph2 as GraphCollection } from "@hpcc-js/util"; import { curveBasis as d3CurveBasis, curveCardinal as d3CurveCardinal, line as d3Line } from "d3-shape"; import { EdgePlaceholder, SubgraphPlaceholder, VertexPlaceholder } from "./placeholders.ts"; import { EdgeLayout } from "./tree.ts"; +import { intersection } from "./pathIntersection.ts"; export type Point = [number, number]; +interface Position { + x: number; + y: number; +} + +interface Line { + source: Position; + target: Position; +} + const lineBasis = d3Line() .x(d => d[0]) .y(d => d[1]) @@ -27,11 +38,15 @@ export interface ILayout { export type Size = { width: number, height: number }; export interface IGraph { + id(): string; size(): Size; graphData(): GraphCollection; - project(pos: number, clip: boolean); + project(pos: number, clip?: boolean); + rproject(pos: number); + projectPlacholder(vp: VertexPlaceholder); + rprojectPlacholder(vp: VertexPlaceholder); moveSubgraphs(transition: boolean): this; @@ -78,10 +93,38 @@ export class Layout implements ILayout { return [(p1[0] + p2[0]) / 2, (p1[1] + p2[1]) / 2]; } + vertexSize(vp: VertexPlaceholder): { width: number, height: number } { + const size = vp.renderResult?.extent ? vp.renderResult.extent : vp.element.node().getBBox(); + const retVal = { + width: this._graph.rproject(size.width), + height: this._graph.rproject(size.height) + }; + return retVal; + } + + edgeLine(ep: EdgePlaceholder): Line { + const sPos = { ...this._graph.projectPlacholder(ep.source), w: ep.source?.renderResult?.extent?.width ?? 0, h: ep.source?.renderResult?.extent?.height ?? 0 }; + const tPos = { ...this._graph.projectPlacholder(ep.target), w: ep.target?.renderResult?.extent?.width ?? 0, h: ep.target?.renderResult?.extent?.height ?? 0 }; + const sIntersect = intersection(sPos, { start: sPos, end: tPos }); + const tIntersect = intersection(tPos, { start: sPos, end: tPos }); + return { + source: { + x: sIntersect ? sIntersect.x : sPos.x, + y: sIntersect ? sIntersect.y : sPos.y + }, + target: { + x: tIntersect ? tIntersect.x : tPos.x, + y: tIntersect ? tIntersect.y : tPos.y + } + }; + } + edgePath(ep: EdgePlaceholder, curveDepth: number): { path: string, labelPos: Point } { - const sPos = this._graph.projectPlacholder(ep.source); - const tPos = this._graph.projectPlacholder(ep.target); - const points: Point[] = [[sPos.x, sPos.y], [tPos.x, tPos.y]]; + const line = this.edgeLine(ep); + const points: Point[] = [ + [line.source.x, line.source.y], + [line.target.x, line.target.y] + ]; if (curveDepth) { const dx = points[0][0] - points[1][0]; @@ -92,7 +135,7 @@ export class Layout implements ILayout { const midY = (points[0][1] + points[1][1]) / 2 + dx * curveDepth / 100; return { path: lineCardinal([points[0], [midX, midY], points[1]]), - labelPos: [midX, midY] + labelPos: [midX, midY], }; } } diff --git a/packages/graph/src/graph2/layouts/null.ts b/packages/graph/src/common/layouts/null.ts similarity index 100% rename from packages/graph/src/graph2/layouts/null.ts rename to packages/graph/src/common/layouts/null.ts diff --git a/packages/graph/src/common/layouts/pathIntersection.ts b/packages/graph/src/common/layouts/pathIntersection.ts new file mode 100644 index 0000000000..0fc4da283c --- /dev/null +++ b/packages/graph/src/common/layouts/pathIntersection.ts @@ -0,0 +1,67 @@ +export interface Pos { + x: number; + y: number; +} + +export interface Segment { + start: Pos; + end: Pos; +} + +export interface Rectangle { + topLeft: Pos; + topRight: Pos; + bottomLeft: Pos; + bottomRight: Pos; +} + +export interface Rectangle2 { + x: number; + y: number; + w: number; + h: number; +} + +function rectEdges(rect: Rectangle) { + return [ + { start: rect.topLeft, end: rect.topRight }, + { start: rect.topRight, end: rect.bottomRight }, + { start: rect.bottomRight, end: rect.bottomLeft }, + { start: rect.bottomLeft, end: rect.topLeft } + ]; +} + +function lineIntersection(segment1: Segment, segment2: Segment) { + const { x: x1, y: y1 } = segment1.start; + const { x: x2, y: y2 } = segment1.end; + const { x: x3, y: y3 } = segment2.start; + const { x: x4, y: y4 } = segment2.end; + + const denom = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4); + if (denom === 0) return null; // Parallel lines + + const t = ((x1 - x3) * (y3 - y4) - (y1 - y3) * (x3 - x4)) / denom; + const u = -((x1 - x2) * (y1 - y3) - (y1 - y2) * (x1 - x3)) / denom; + + if (t > 0 && t < 1 && u > 0 && u < 1) { + return { + x: x1 + t * (x2 - x1), + y: y1 + t * (y2 - y1) + }; + } + + return null; // No intersection +} + +export function intersection(rect: Rectangle2, line: Segment) { + for (const edge of rectEdges({ + topLeft: { x: rect.x - rect.w / 2, y: rect.y - rect.h / 2 }, + topRight: { x: rect.x + rect.w / 2, y: rect.y - rect.h / 2 }, + bottomRight: { x: rect.x + rect.w / 2, y: rect.y + rect.h / 2 }, + bottomLeft: { x: rect.x - rect.w / 2, y: rect.y + rect.h / 2 } + })) { + const intersectionPoint = lineIntersection(edge, line); + if (intersectionPoint) return intersectionPoint; + } + return null; +} diff --git a/packages/graph/src/graph2/layouts/placeholders.ts b/packages/graph/src/common/layouts/placeholders.ts similarity index 92% rename from packages/graph/src/graph2/layouts/placeholders.ts rename to packages/graph/src/common/layouts/placeholders.ts index 3dd3155dff..2a891fa8b4 100644 --- a/packages/graph/src/graph2/layouts/placeholders.ts +++ b/packages/graph/src/common/layouts/placeholders.ts @@ -31,7 +31,10 @@ export interface EdgeBaseProps exte strokeDasharray?: string; strokeWidth?: number; stroke?: string; + path?: string; fontFamily?: string; + markerStart?: string; + markerEnd?: string; } export interface HierarchyBase { @@ -52,6 +55,9 @@ export interface SubgraphPlaceholder, SVGGElement, any>; props: SG; + // render result properties --- + renderResult?: unknown; + // Dagre / Graphviz Properties --- x?: number; // The node’s current x-position y?: number; // The node’s current y-position @@ -62,6 +68,9 @@ export interface VertexPlaceholder element?: Selection, SVGGElement, any>; props: V; + // render result properties --- + renderResult?: any; + // D3 Assigned Properties --- index?: number; // The node’s zero-based index into nodes x?: number; // The node’s current x-position @@ -91,6 +100,9 @@ export interface EdgePlaceholder; // The link’s source node target: VertexPlaceholder; // The link’s target node + // render result properties --- + renderResult?: any; + // D3 Assigned Properties --- index?: number; // The zero-based index into links, assigned by this method diff --git a/packages/graph/src/graph2/layouts/tree.ts b/packages/graph/src/common/layouts/tree.ts similarity index 97% rename from packages/graph/src/graph2/layouts/tree.ts rename to packages/graph/src/common/layouts/tree.ts index 50179bef26..9745a177d6 100644 --- a/packages/graph/src/graph2/layouts/tree.ts +++ b/packages/graph/src/common/layouts/tree.ts @@ -236,8 +236,7 @@ export class Tree extends TidyTreeBase { } edgePath(ep: EdgePlaceholder, curveDepth: number): EdgeLayout { - const source = this._graph.projectPlacholder(ep.source); - const target = this._graph.projectPlacholder(ep.target); + const { source, target } = this.edgeLine(ep); return { path: linkHorizontal({ source, target }), labelPos: this.center([[source.x, source.y], [target.x, target.y]]) @@ -294,8 +293,7 @@ export class Dendrogram extends TidyTreeBase { } edgePath(ep: EdgePlaceholder, curveDepth: number): EdgeLayout { - const source = this._graph.projectPlacholder(ep.source); - const target = this._graph.projectPlacholder(ep.target); + const { source, target } = this.edgeLine(ep); return { path: linkHorizontal({ source, target }), labelPos: this.center([[source.x, source.y], [target.x, target.y]]) diff --git a/packages/graph/src/graph2/layouts/workers/dagre.ts b/packages/graph/src/common/layouts/workers/dagre.ts similarity index 100% rename from packages/graph/src/graph2/layouts/workers/dagre.ts rename to packages/graph/src/common/layouts/workers/dagre.ts diff --git a/packages/graph/src/graph2/layouts/workers/dagreOptions.ts b/packages/graph/src/common/layouts/workers/dagreOptions.ts similarity index 100% rename from packages/graph/src/graph2/layouts/workers/dagreOptions.ts rename to packages/graph/src/common/layouts/workers/dagreOptions.ts diff --git a/packages/graph/src/graph2/layouts/workers/forceDirected.ts b/packages/graph/src/common/layouts/workers/forceDirected.ts similarity index 100% rename from packages/graph/src/graph2/layouts/workers/forceDirected.ts rename to packages/graph/src/common/layouts/workers/forceDirected.ts diff --git a/packages/graph/src/graph2/layouts/workers/forceDirectedOptions.ts b/packages/graph/src/common/layouts/workers/forceDirectedOptions.ts similarity index 100% rename from packages/graph/src/graph2/layouts/workers/forceDirectedOptions.ts rename to packages/graph/src/common/layouts/workers/forceDirectedOptions.ts diff --git a/packages/graph/src/graph2/layouts/workers/graphviz.ts b/packages/graph/src/common/layouts/workers/graphviz.ts similarity index 100% rename from packages/graph/src/graph2/layouts/workers/graphviz.ts rename to packages/graph/src/common/layouts/workers/graphviz.ts diff --git a/packages/graph/src/graph2/layouts/workers/graphvizOptions.ts b/packages/graph/src/common/layouts/workers/graphvizOptions.ts similarity index 100% rename from packages/graph/src/graph2/layouts/workers/graphvizOptions.ts rename to packages/graph/src/common/layouts/workers/graphvizOptions.ts diff --git a/packages/graph/src/graph2/liteMap.ts b/packages/graph/src/common/liteMap.ts similarity index 100% rename from packages/graph/src/graph2/liteMap.ts rename to packages/graph/src/common/liteMap.ts diff --git a/packages/graph/src/graph2/liteSVGZooom.ts b/packages/graph/src/common/liteSVGZooom.ts similarity index 100% rename from packages/graph/src/graph2/liteSVGZooom.ts rename to packages/graph/src/common/liteSVGZooom.ts diff --git a/packages/graph/src/graph2/sankeyGraph.css b/packages/graph/src/common/sankeyGraph.css similarity index 100% rename from packages/graph/src/graph2/sankeyGraph.css rename to packages/graph/src/common/sankeyGraph.css diff --git a/packages/graph/src/graph2/sankeyGraph.ts b/packages/graph/src/common/sankeyGraph.ts similarity index 99% rename from packages/graph/src/graph2/sankeyGraph.ts rename to packages/graph/src/common/sankeyGraph.ts index 585758ece9..15002c8b12 100644 --- a/packages/graph/src/graph2/sankeyGraph.ts +++ b/packages/graph/src/common/sankeyGraph.ts @@ -1,9 +1,9 @@ import { Palette, SVGWidget, Utility, select as d3Select } from "@hpcc-js/common"; import { compare2 } from "@hpcc-js/util"; import { sankey as d3Sankey, sankeyLinkHorizontal as d3SankeyLinkHorizontal } from "d3-sankey"; -import { AnnotationColumn, toJsonObj } from "./dataGraph.ts"; +import { AnnotationColumn, toJsonObj } from "../react/dataGraph.ts"; -import "../../src/graph2/sankeyGraph.css"; +import "./sankeyGraph.css"; import { EdgeBaseProps, VertexBaseProps } from "./graphT.ts"; export class SankeyGraph extends SVGWidget { diff --git a/packages/graph/src/graph2/graph.css b/packages/graph/src/graph2/graph.css deleted file mode 100644 index 54335ef770..0000000000 --- a/packages/graph/src/graph2/graph.css +++ /dev/null @@ -1,34 +0,0 @@ -.graph_Graph2 .graphVertex { - cursor: pointer; -} - - -.graph_Graph2 .allowDragging .graphVertex { - cursor: pointer; -} - -.graph_Graph2 .allowDragging .graphVertex.grabbed { - cursor: grabbing; -} - -.graph_Graph2 .graphEdge { - stroke: darkgray; - fill: none; -} - -.graph_Graph2 .graphEdge > text { - stroke: none; - fill: black; -} - -.graph_Graph2 .graphEdge.hide-text > text { - display: none; -} - -.graph_Graph2 g.selected rect { - stroke:red !important; -} - -.graph_Graph2 g.selected circle { - stroke:red !important; -} diff --git a/packages/graph/src/graph2/index.ts b/packages/graph/src/graph2/index.ts deleted file mode 100644 index 78fa73c881..0000000000 --- a/packages/graph/src/graph2/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -export * from "./graphT.ts"; -export * from "./graphReactT.ts"; -export * from "./graph.ts"; -export * from "./dataGraph.ts"; -export * from "./sankeyGraph.ts"; -export * from "./subgraph.tsx"; -export * from "./vertex.tsx"; diff --git a/packages/graph/src/html/annotation.ts b/packages/graph/src/html/annotation.ts new file mode 100644 index 0000000000..cd6ffce567 --- /dev/null +++ b/packages/graph/src/html/annotation.ts @@ -0,0 +1,71 @@ +import { svg } from "lit-html"; +import { Palette, Utility } from "@hpcc-js/common"; +import { extend } from "./component.ts"; +import { TextBox } from "./textBox.ts"; + +export interface AnnotationProps { + text: string; + fontFamily?: string; + fontSize?: number; + fill?: string; + stroke?: string; +} + +export const annotation = ({ + text, + fontFamily = "FontAwesome", + fontSize = 8, + fill = "gray", + stroke = "darkgray" +}: AnnotationProps) => { + const renderChar = fontFamily === "FontAwesome" ? Utility.faChar(text) : text; + const textBoxTpl = TextBox({ + text: { + text: renderChar, + fill: Palette.textColor(fill), + fontFamily, + fontSize, + dominantBaseline: fontFamily === "FontAwesome" ? "ideographic" : undefined + }, + padding: 3, + fill, + stroke, + cornerRadius: 0 + }); + return extend(svg`\ + + ${textBoxTpl} +`, textBoxTpl.extent.width, textBoxTpl.extent.height); +}; + +export interface AnnotationsProps { + annotations: AnnotationProps[]; + padding?: number; +} + +export const annotations = ({ + annotations, + padding = 3, +}: AnnotationsProps) => { + let xOffset = 0; + const items = annotations.map(annotationProp => { + const ann = annotation(annotationProp); + const itemSvg = extend(svg`\ + + ${ann} +`, ann.extent.width, ann.extent.height); + xOffset += ann.extent.width + padding; + return itemSvg; + }); + const { width, height } = items.reduce((acc, item) => { + return { + width: acc.width + item.extent.width, + height: Math.max(acc.height, item.extent.height) + }; + }, { width: (items.length - 1) * padding, height: 0 }); + return extend(svg`\ + + ${items} +`, width, height); +}; + diff --git a/packages/graph/src/html/component.ts b/packages/graph/src/html/component.ts new file mode 100644 index 0000000000..2f212ad7d9 --- /dev/null +++ b/packages/graph/src/html/component.ts @@ -0,0 +1,14 @@ +import type { HTMLTemplateResult, SVGTemplateResult } from "lit-html"; + +export type TemplateResult = HTMLTemplateResult | SVGTemplateResult; +export type TemplateResultEx = TemplateResult & { + extent?: { width: number, height: number }; +}; +export function extend(result: TemplateResult, width: number, height: number): TemplateResultEx { + return { + ...result, + extent: { width, height } + }; +} +export type Component = (props: T) => TemplateResult; + diff --git a/packages/graph/src/html/graphHtml.ts b/packages/graph/src/html/graphHtml.ts new file mode 100644 index 0000000000..da07255561 --- /dev/null +++ b/packages/graph/src/html/graphHtml.ts @@ -0,0 +1,10 @@ +import { GraphHtmlT, SubgraphBaseProps, EdgeBaseProps } from "./graphHtmlT.ts"; +import { vertex, VertexProps } from "./vertex.ts"; + +export class GraphHtml extends GraphHtmlT { + constructor() { + super(undefined, vertex); + } + +} +GraphHtml.prototype._class += " graph_GraphHtml"; diff --git a/packages/graph/src/html/graphHtmlT.ts b/packages/graph/src/html/graphHtmlT.ts new file mode 100644 index 0000000000..502f20f8e2 --- /dev/null +++ b/packages/graph/src/html/graphHtmlT.ts @@ -0,0 +1,49 @@ +import { html, svg, render } from "lit-html"; +import type { BaseProps, EdgeBaseProps, SubgraphBaseProps, VertexBaseProps } from "../common/graphT.ts"; +import { GraphT, RendererT } from "../common/graphT.ts"; +import type { Component } from "./component.ts"; +import { TextBox } from "./textBox.ts"; +import { icon } from "./icon.ts"; + +export { html, svg, EdgeBaseProps, SubgraphBaseProps, VertexBaseProps }; + +export function adapter(component: Component): RendererT { + return (props: T, element: SVGGElement) => { + const componentTpl = component(props); + render(componentTpl, element as any); + return componentTpl; + }; +} + +const defaultSubgraphRenderer = ({ + text = "", +}: SubgraphBaseProps) => { + return svg`${text}`; +}; + +const defaultVertexRenderer = ({ + text +}: VertexBaseProps) => { + + return svg`\ + ${icon({ imageChar: "" })} + ${TextBox({ text: { text } })} +`; +}; + +const defaultEdgeRenderer = ({ + strokeWidth, + path, + markerStart, + markerEnd, +}: EdgeBaseProps) => { + return svg``; +}; + +export class GraphHtmlT> extends GraphT { + + constructor(subgraphRenderer: Component = defaultSubgraphRenderer, vertexRenderer: Component = defaultVertexRenderer, edgeRenderer: Component = defaultEdgeRenderer) { + super(adapter(subgraphRenderer), adapter(vertexRenderer), adapter(edgeRenderer)); + } +} +GraphHtmlT.prototype._class += " graph_GraphHtmlT"; diff --git a/packages/graph/src/html/icon.ts b/packages/graph/src/html/icon.ts new file mode 100644 index 0000000000..4a62a80662 --- /dev/null +++ b/packages/graph/src/html/icon.ts @@ -0,0 +1,64 @@ +import { svg } from "lit-html"; +import { Palette } from "@hpcc-js/common"; +import { Image } from "./image.ts"; +import { ImageChar } from "./imageChar.ts"; +import { shape as litShape } from "./shape.ts"; +import { extend } from "./component.ts"; + +export interface IconProps { + shape?: "circle" | "square" | "rectangle"; + width?: number; + height?: number; + padding?: number; + fill?: string; + stroke?: string; + strokeWidth?: number; + imageUrl?: string; + imageFontFamily?: string; + imageChar?: string; + imageCharFill?: string; + cornerRadius?: number; +} + +export function icon({ + shape = "circle", + width, + height = 32, + fill = "transparent", + stroke = fill !== "transparent" ? "black" : undefined, + strokeWidth = stroke === undefined ? 0 : 1, + imageUrl = "", + imageFontFamily = "FontAwesome", + imageChar = "", + imageCharFill = Palette.textColor(fill), + padding = height / 5, + cornerRadius, +}: IconProps) { + const shapeTpl = litShape({ + shape, + width, + height, + fill, + stroke, + strokeWidth, + cornerRadius + }); + const imageTpl = imageUrl ? + Image({ + href: imageUrl, + height: height - padding * 2 + }) : + ImageChar({ + text: imageChar, + fill: imageCharFill, + fontFamily: imageFontFamily, + fontSize: height - padding * 2, + }); + + return extend(svg`\ + +${shapeTpl} +${imageTpl} +`, shapeTpl.extent.width, shapeTpl.extent.height); +}; + diff --git a/packages/graph/src/html/image.ts b/packages/graph/src/html/image.ts new file mode 100644 index 0000000000..0be8bed26c --- /dev/null +++ b/packages/graph/src/html/image.ts @@ -0,0 +1,26 @@ +import { svg } from "lit-html"; +import { extend } from "./component.ts"; + +export interface ImageProps { + href: string; + x?: number; + y?: number; + height?: number; + yOffset?: number; +} + +export const Image = ({ + href, + x = 0, + y = 0, + height = 12 +}: ImageProps) => { + return extend(svg`\ +`, height, height); +}; diff --git a/packages/graph/src/html/imageChar.ts b/packages/graph/src/html/imageChar.ts new file mode 100644 index 0000000000..1010214035 --- /dev/null +++ b/packages/graph/src/html/imageChar.ts @@ -0,0 +1,18 @@ +import { Utility } from "@hpcc-js/common"; +import { TextLine, TextLineProps } from "./text.ts"; + +export const ImageChar = ({ + text = "", + fill, + fontFamily = "FontAwesome", + fontSize = 12 +}: TextLineProps) => { + const renderChar = fontFamily === "FontAwesome" ? Utility.faChar(text) : text; + return TextLine({ + text: renderChar, + fill, + fontFamily, + fontSize, + dominantBaseline: fontFamily === "FontAwesome" ? "ideographic" : undefined + }); +}; diff --git a/packages/graph/src/html/index.ts b/packages/graph/src/html/index.ts new file mode 100644 index 0000000000..74d7bb3e88 --- /dev/null +++ b/packages/graph/src/html/index.ts @@ -0,0 +1,8 @@ +export * from "./annotation.ts"; +export * from "./graphHtml.ts"; +export * from "./icon.ts"; +export * from "./image.ts"; +export * from "./imageChar.ts"; +export * from "./shape.ts"; +export * from "./text.ts"; +export * from "./vertex.ts"; diff --git a/packages/graph/src/html/shape.ts b/packages/graph/src/html/shape.ts new file mode 100644 index 0000000000..6e1501953e --- /dev/null +++ b/packages/graph/src/html/shape.ts @@ -0,0 +1,136 @@ +import { svg } from "lit-html"; +import { extend } from "./component.ts"; + +export const DEFAULT_SHAPE_SIZE = 32; + +interface BaseProps { + fill?: string; + stroke?: string; + strokeWidth?: number; + shapeRendering?: "auto" | "optimizeSpeed" | "crispEdges" | "geometricPrecision"; +} + +export interface CircleProps extends BaseProps { + diameter?: number; +} +export const circle = ({ + diameter = DEFAULT_SHAPE_SIZE, + fill = "whiteSmoke", + stroke = fill, + strokeWidth = 1, + shapeRendering = "auto" +}: CircleProps) => { + return extend(svg`\ +`, diameter, diameter); +}; + +export interface RectangleProps extends BaseProps { + width: number; + height: number; + cornerRadius?: number; +} + +export const rectangle = ({ + width = DEFAULT_SHAPE_SIZE, + height = DEFAULT_SHAPE_SIZE, + cornerRadius = 4, + fill = "whiteSmoke", + stroke = fill, + strokeWidth = 1, + shapeRendering = "crispEdges" +}: RectangleProps) => { + return extend(svg`\ +`, width, height); +}; + +export interface SquareProps extends BaseProps { + width?: number; + cornerRadius?: number; +} + +export const square = ({ + width = DEFAULT_SHAPE_SIZE, + cornerRadius, + fill, + stroke, + strokeWidth, + shapeRendering +}: SquareProps) => { + return rectangle({ + width, + height: width, + cornerRadius, + fill, + stroke, + strokeWidth, + shapeRendering + }); +}; + +export interface ShapeProps extends BaseProps { + shape?: "circle" | "square" | "rectangle"; + diameter?: number; + width?: number; + height?: number; + cornerRadius?: number; +} + +export const shape = ({ + shape = "circle", + diameter, + width, + height, + fill, + stroke, + strokeWidth = 1, + shapeRendering = "auto", + cornerRadius +}: ShapeProps) => { + switch (shape) { + case "square": + return square({ + width: width ?? height ?? diameter ?? DEFAULT_SHAPE_SIZE, + fill, + stroke, + strokeWidth, + shapeRendering, + cornerRadius + }); + case "rectangle": + return rectangle({ + width: width ?? height ?? diameter ?? DEFAULT_SHAPE_SIZE, + height: height ?? width ?? diameter ?? DEFAULT_SHAPE_SIZE, + fill, + stroke, + strokeWidth, + shapeRendering, + cornerRadius + }); + case "circle": + default: + return circle({ + diameter: diameter ?? width ?? height ?? DEFAULT_SHAPE_SIZE, + fill, + stroke, + strokeWidth, + shapeRendering + }); + } +}; diff --git a/packages/graph/src/html/text.ts b/packages/graph/src/html/text.ts new file mode 100644 index 0000000000..abef7e1ecb --- /dev/null +++ b/packages/graph/src/html/text.ts @@ -0,0 +1,80 @@ +import { svg } from "lit-html"; +import { Utility } from "@hpcc-js/common"; +import { extend } from "./component.ts"; +import { rectangle } from "./shape.ts"; + +const textSize = ({ + text, + fontFamily = "Verdana", + fontSize = 12, +}: TextProps): Utility.TextSize => { + const parts = text.split("\n"); + return Utility.textSize(parts, fontFamily, fontSize); +}; + +export interface TextLineProps { + text: string; + anchor?: "left" | "middle" | "end"; + fill?: string; + fontFamily?: string; + fontSize?: number; + dominantBaseline?: string; +} + +export const TextLine = ({ + text, + anchor = "middle", + fill = "black", + fontFamily = "Verdana", + fontSize = 12, + dominantBaseline = "middle", +}: TextLineProps) => { + const { width, height } = textSize({ text, fontFamily, fontSize }); + return extend(svg`\ + + ${text} +`, width, height); +}; + +export interface TextProps extends TextLineProps { + placeholderSize?: Utility.TextSize; +} + +export const defaultTextProps: Partial = { + anchor: "middle", + fill: "black", + fontSize: 12, + fontFamily: "Verdana" +}; + +export const Text = ({ + text, + anchor = "middle", + fill = "black", + fontFamily = "Verdana", + fontSize = 12, +}: TextProps) => { + const parts = text.split("\n").map(line => TextLine({ text: line, anchor, fill, fontFamily, fontSize })); + const { width, height } = parts.reduce((acc, part) => { + return { + width: Math.max(acc.width, part.extent.width), + height: acc.height + part.extent.height + }; + }, { width: 0, height: 0 }); + + let xOffset = 0; + if (anchor === "left") { + xOffset = -width / 2; + } else if (anchor === "end") { + xOffset = width / 2; + } + const lineHeight = height / parts.length; + const TextLines = parts.map((p, i) => { + return svg`\ + + ${p} +`; + }); + + return extend(svg`${TextLines}`, width, height); +}; diff --git a/packages/graph/src/html/textBox.ts b/packages/graph/src/html/textBox.ts new file mode 100644 index 0000000000..f5ba546a54 --- /dev/null +++ b/packages/graph/src/html/textBox.ts @@ -0,0 +1,41 @@ +import { svg } from "lit-html"; +import { extend } from "./component.ts"; +import { rectangle } from "./shape.ts"; +import { Text, TextProps } from "./text.ts"; + +export interface TextBoxProps { + text: TextProps; + + padding?: number; + fill?: string; + stroke?: string; + strokeWidth?: number; + cornerRadius?: number; + yOffset?: number; +} + +export const TextBox = ({ + text, + + padding = 4, + fill = "whitesmoke", + stroke = "lightgray", + strokeWidth = 1, + cornerRadius, +}: TextBoxProps) => { + const textTpl = Text(text); + const { width, height } = textTpl.extent; + const rectTpl = rectangle({ + width: width + padding * 2, + height: height + padding * 2, + fill, + stroke, + strokeWidth, + cornerRadius + }); + + return extend(svg`\ +${rectTpl} +${textTpl}`, rectTpl.extent.width, rectTpl.extent.height); +}; + diff --git a/packages/graph/src/html/vertex.ts b/packages/graph/src/html/vertex.ts new file mode 100644 index 0000000000..383f322703 --- /dev/null +++ b/packages/graph/src/html/vertex.ts @@ -0,0 +1,65 @@ +import { svg } from "lit-html"; +import type { VertexBaseProps } from "../common/layouts/placeholders.ts"; +import { icon as litIcon, IconProps } from "./icon.ts"; +import { TextBox, TextBoxProps } from "./textBox.ts"; +import { annotations, AnnotationProps } from "./annotation.ts"; +import { Component, extend } from "./component.ts"; + +export interface VertexProps extends VertexBaseProps { + icon?: IconProps; + iconOffset?: number; + iconAnnotations?: AnnotationProps[]; + iconAnnotationsOffset?: number; + textBox?: TextBoxProps; + textBoxAnnotationsE?: AnnotationProps[]; + textBoxAnnotationsSE?: AnnotationProps[]; + textBoxAnnotationsS?: AnnotationProps[]; + textBoxAnnotationsOffset?: number +} + +export const vertex: Component = ({ + id, + text, + textBox, + textBoxAnnotationsE = [], + textBoxAnnotationsSE = [], + textBoxAnnotationsS = [], + textBoxAnnotationsOffset = 4, + icon = {}, + iconOffset = 6, + iconAnnotations = [], + iconAnnotationsOffset = 0, +}: VertexProps) => { + const iconTpl = litIcon(icon); + const iconAnnotationsTpl = annotations({ + annotations: iconAnnotations + }); + const textBoxTpl = TextBox({ text: { text: text, ...textBox?.text } }); + const textBoxAnnotationsETpl = annotations({ annotations: textBoxAnnotationsE }); + const textBoxAnnotationsSETpl = annotations({ annotations: textBoxAnnotationsSE }); + const textBoxAnnotationsSTpl = annotations({ annotations: textBoxAnnotationsS }); + + const yIconOffset = -iconOffset - (textBoxTpl.extent.height + iconTpl.extent.height) / 2; + + const radius = iconAnnotationsOffset + iconTpl.extent.width / 2; + const xIconAnnotationOffset = radius * Math.cos(45 * (Math.PI / 180)); + const yIconAnnotationOffset = radius * Math.sin(45 * (Math.PI / 180)); + return extend(svg`\ +${textBoxTpl} + + ${textBoxAnnotationsETpl} + + + ${textBoxAnnotationsSETpl} + + + ${textBoxAnnotationsSTpl} + + + ${iconTpl} + + + ${iconAnnotationsTpl} + +`, textBoxTpl.extent.width, textBoxTpl.extent.height); +}; diff --git a/packages/graph/src/index.ts b/packages/graph/src/index.ts index 8429fb853a..bf5abc455f 100644 --- a/packages/graph/src/index.ts +++ b/packages/graph/src/index.ts @@ -5,4 +5,6 @@ export * from "./Graph.ts"; export * from "./Sankey.ts"; export * from "./Subgraph.ts"; export * from "./Vertex.ts"; -export * from "./graph2/index.ts"; +export * from "./common/index.ts"; +export * from "./html/index.ts"; +export * from "./react/index.ts"; diff --git a/packages/graph/src/graph2/dataGraph.ts b/packages/graph/src/react/dataGraph.ts similarity index 97% rename from packages/graph/src/graph2/dataGraph.ts rename to packages/graph/src/react/dataGraph.ts index c8520f51d5..1aab58c41c 100644 --- a/packages/graph/src/graph2/dataGraph.ts +++ b/packages/graph/src/react/dataGraph.ts @@ -1,8 +1,8 @@ import { PropertyExt, Widget } from "@hpcc-js/common"; import { Vertex3, CentroidVertex3, Vertex3Props, EdgeProps, SubgraphProps } from "@hpcc-js/react"; import { compare2 } from "@hpcc-js/util"; -import { Graph2 } from "./graph.ts"; -import { HierarchyBase } from "./layouts/placeholders.ts"; +import { GraphReact } from "./graphReact.ts"; +import { HierarchyBase } from "../common/layouts/placeholders.ts"; // Backward compatibility layer --- export type IVertex3 = Vertex3Props; @@ -20,7 +20,7 @@ export class AnnotationColumn extends PropertyExt { owner(_: DataGraph): this; owner(_?: DataGraph): DataGraph | this { if (!arguments.length) return this._owner; - this._owner = _; + this._owner = _!; return this; } @@ -40,7 +40,7 @@ export interface AnnotationColumn { AnnotationColumn.prototype.publish("columnID", "", "set", "Annotation column (boolean)", function (this: AnnotationColumn) { return this._owner.vertexColumns(); }); AnnotationColumn.prototype.publish("annotationID", "", "string", "Annotation ID"); -export class DataGraph extends Graph2 { +export class DataGraph extends GraphReact { constructor() { super(); @@ -311,13 +311,13 @@ export interface DataGraph { hierarchyChildIDColumn(_: string): this; } -DataGraph.prototype.publish("subgraphColumns", [], "any", "Subgraph Columns", null, { internal: true }); -DataGraph.prototype.publish("subgraphs", [], "any", "Subgraphs", null, { internal: true }); +DataGraph.prototype.publish("subgraphColumns", [], "any", "Subgraph Columns", undefined, { internal: true }); +DataGraph.prototype.publish("subgraphs", [], "any", "Subgraphs", undefined, { internal: true }); DataGraph.prototype.publish("subgraphIDColumn", "", "string", "Subgraph ID column"); DataGraph.prototype.publish("subgraphLabelColumn", "", "string", "Subgraph Label column"); -DataGraph.prototype.publish("vertexColumns", [], "any", "Vertex Columns", null, { internal: true }); -DataGraph.prototype.publish("vertices", [], "any", "Vertices (Nodes)", null, { internal: true }); +DataGraph.prototype.publish("vertexColumns", [], "any", "Vertex Columns", undefined, { internal: true }); +DataGraph.prototype.publish("vertices", [], "any", "Vertices (Nodes)", undefined, { internal: true }); DataGraph.prototype.publish("vertexCategoryColumn", "", "set", "Vertex Category ID column", function (this: DataGraph) { return this.vertexColumns(); }, { optional: true }); DataGraph.prototype.publish("vertexIDColumn", "", "set", "Vertex ID column", function (this: DataGraph) { return this.vertexColumns(); }, { optional: true }); DataGraph.prototype.publish("vertexLabelColumn", "", "set", "Vertex label column", function (this: DataGraph) { return this.vertexColumns(); }, { optional: true }); @@ -327,11 +327,11 @@ DataGraph.prototype.publish("vertexImageUrlColumn", "", "set", "Vertex image url DataGraph.prototype.publish("vertexFAChar", "?", "string", "Vertex default FAChar"); DataGraph.prototype.publish("vertexFACharColumn", "", "set", "Vertex FAChar column", function (this: DataGraph) { return this.vertexColumns(); }, { optional: true }); DataGraph.prototype.publish("vertexTooltipColumn", "", "set", "Vertex tooltip column", function (this: DataGraph) { return this.vertexColumns(); }, { optional: true }); -DataGraph.prototype.publish("vertexAnnotationColumns", [], "propertyArray", "Annotations", null, { autoExpand: AnnotationColumn }); +DataGraph.prototype.publish("vertexAnnotationColumns", [], "propertyArray", "Annotations", undefined, { autoExpand: AnnotationColumn }); DataGraph.prototype.publish("vertexExpansionFACharColumn", "", "set", "Vertex expansion FAChar column", function (this: DataGraph) { return this.vertexColumns(); }, { optional: true }); -DataGraph.prototype.publish("edgeColumns", [], "any", "Edge columns", null, { internal: true }); -DataGraph.prototype.publish("edges", [], "any", "Edges (Edges)", null, { internal: true }); +DataGraph.prototype.publish("edgeColumns", [], "any", "Edge columns", undefined, { internal: true }); +DataGraph.prototype.publish("edges", [], "any", "Edges (Edges)", undefined, { internal: true }); DataGraph.prototype.publish("edgeIDColumn", "", "set", "Edge ID column", function (this: DataGraph) { return this.edgeColumns(); }, { optional: true }); DataGraph.prototype.publish("edgeLabelColumn", "", "set", "Edge label column", function (this: DataGraph) { return this.edgeColumns(); }, { optional: true }); DataGraph.prototype.publish("edgeSourceColumn", "", "set", "Edge source ID column", function (this: DataGraph) { return this.edgeColumns(); }, { optional: true }); diff --git a/packages/graph/src/graph2/graph.ts b/packages/graph/src/react/graphReact.ts similarity index 62% rename from packages/graph/src/graph2/graph.ts rename to packages/graph/src/react/graphReact.ts index ec813c4484..7c18618b77 100644 --- a/packages/graph/src/graph2/graph.ts +++ b/packages/graph/src/react/graphReact.ts @@ -1,6 +1,7 @@ -import { React, Subgraph, SubgraphProps, Vertex, VertexProps, Edge, EdgeProps } from "@hpcc-js/react"; +import { IconEx, Icons, render } from "@hpcc-js/react"; +import { React, Subgraph, SubgraphProps, Vertex, VertexProps, Edge, EdgeProps } from "@hpcc-js/react"; import { GraphReactT } from "./graphReactT.ts"; -import { GraphDataProps, HierarchyBase } from "./graphT.ts"; +import { GraphDataProps, HierarchyBase } from "../common/graphT.ts"; // Backward compatibility layer --- export type ISubgraph = SubgraphProps; @@ -9,7 +10,7 @@ export type IEdge = EdgeProps; export type IHierarchy = HierarchyBase; export type IGraphData2 = GraphDataProps; -export class Graph2 extends GraphReactT { +export class GraphReact extends GraphReactT { constructor() { super(Subgraph, Vertex, Edge); @@ -20,6 +21,24 @@ export class Graph2 extends GraphReactT { }); } + protected _categories: IconEx[] = []; + categories(): IconEx[]; + categories(_: IconEx[]): this; + categories(_?: IconEx[]): IconEx[] | this { + if (_ === void 0) return this._categories; + this._categories = _; + return this; + } + + protected _annotations: IconEx[] = []; + annotations(): IconEx[]; + annotations(_: IconEx[]): this; + annotations(_?: IconEx[]): IconEx[] | this { + if (_ === void 0) return this._annotations; + this._annotations = _; + return this; + } + calcProps(_props: VertexProps): VertexProps { const props = super.calcProps(_props); if (!props.icon) props.icon = {}; @@ -71,14 +90,37 @@ export class Graph2 extends GraphReactT { super.enter(domNode, element); } + updateCategories() { + render(Icons, { + icons: this._categories.map((c): IconEx => ({ + ...c, + id: this.categoryID(c.id), + fill: c.fill || "transparent", + imageCharFill: c.imageCharFill || this._catPalette(c.id) + })) + }, this._svgDefsCat.node()); + } + + updateAnnotations() { + render(Icons, { + icons: this._annotations.map((c): IconEx => ({ + ...c, + id: this.categoryID(c.id, "ann"), + shape: c.shape || "square", + height: c.height || 12, + fill: c.fill || this._catPalette(c.id) + })) + }, this._svgDefsAnn.node()); + } + update(domNode, element) { super.update(domNode, element); this._centroidFilter.update(this.centroidColor()); } } -Graph2.prototype._class += " graph_Graph2"; +GraphReact.prototype._class += " graph_GraphReact"; -export interface Graph2 { +export interface GraphReact { vertexTextHeight(): number; vertexTextHeight(_: number): this; vertexTextPadding(): number; @@ -114,21 +156,22 @@ export interface Graph2 { centroidLabelFontFamily(_: string): this; } -Graph2.prototype.publish("vertexTextHeight", 10, "number", "Vertex Text Height"); -Graph2.prototype.publish("vertexTextPadding", 4, "number", "Vertex Text Padding"); -Graph2.prototype.publish("vertexIconHeight", 50, "number", "Vertex Icon Height"); -Graph2.prototype.publish("vertexIconPadding", 10, "number", "Vertex Icon Padding"); -Graph2.prototype.publish("vertexIconStrokeWidth", 0, "number", "Vertex Icon Stroke Width"); -Graph2.prototype.publish("vertexIconFontFamily", "FontAwesome", "string", "Vertex Icon Font Family"); -Graph2.prototype.publish("vertexLabelFontFamily", "Verdana", "string", "Vertex Label Font Family"); - -Graph2.prototype.publish("centroidColor", "#00A000", "html-color", "Centroid Glow Color"); -Graph2.prototype.publish("centroidScale", 1, "number", "Centroid Scale"); -Graph2.prototype.publish("centroidTextHeight", 12, "number", "Centroid Text Height"); -Graph2.prototype.publish("centroidTextPadding", 4, "number", "Centroid Text Padding"); -Graph2.prototype.publish("centroidIconHeight", 50, "number", "Centroid Icon Height"); -Graph2.prototype.publish("centroidIconPadding", 10, "number", "Centroid Icon Padding"); -Graph2.prototype.publish("centroidIconStrokeWidth", 4, "number", "Centroid Icon Stroke Width"); -Graph2.prototype.publish("centroidIconFontFamily", "FontAwesome", "string", "Centroid Icon Font Family"); -Graph2.prototype.publish("centroidLabelFontFamily", "Verdana", "string", "Centroid Label Font Family"); +GraphReact.prototype.publish("vertexTextHeight", 10, "number", "Vertex Text Height"); +GraphReact.prototype.publish("vertexTextPadding", 4, "number", "Vertex Text Padding"); +GraphReact.prototype.publish("vertexIconHeight", 50, "number", "Vertex Icon Height"); +GraphReact.prototype.publish("vertexIconPadding", 10, "number", "Vertex Icon Padding"); +GraphReact.prototype.publish("vertexIconStrokeWidth", 0, "number", "Vertex Icon Stroke Width"); +GraphReact.prototype.publish("vertexIconFontFamily", "FontAwesome", "string", "Vertex Icon Font Family"); +GraphReact.prototype.publish("vertexLabelFontFamily", "Verdana", "string", "Vertex Label Font Family"); + +GraphReact.prototype.publish("centroidColor", "#00A000", "html-color", "Centroid Glow Color"); +GraphReact.prototype.publish("centroidScale", 1, "number", "Centroid Scale"); +GraphReact.prototype.publish("centroidTextHeight", 12, "number", "Centroid Text Height"); +GraphReact.prototype.publish("centroidTextPadding", 4, "number", "Centroid Text Padding"); +GraphReact.prototype.publish("centroidIconHeight", 50, "number", "Centroid Icon Height"); +GraphReact.prototype.publish("centroidIconPadding", 10, "number", "Centroid Icon Padding"); +GraphReact.prototype.publish("centroidIconStrokeWidth", 4, "number", "Centroid Icon Stroke Width"); +GraphReact.prototype.publish("centroidIconFontFamily", "FontAwesome", "string", "Centroid Icon Font Family"); +GraphReact.prototype.publish("centroidLabelFontFamily", "Verdana", "string", "Centroid Label Font Family"); +export const Graph2 = GraphReact; diff --git a/packages/graph/src/graph2/graphReactT.ts b/packages/graph/src/react/graphReactT.ts similarity index 97% rename from packages/graph/src/graph2/graphReactT.ts rename to packages/graph/src/react/graphReactT.ts index 615aaa81a3..36672c4e73 100644 --- a/packages/graph/src/graph2/graphReactT.ts +++ b/packages/graph/src/react/graphReactT.ts @@ -1,5 +1,5 @@ import { render, React, SubgraphProps, VertexProps, EdgeProps } from "@hpcc-js/react"; -import { GraphT, RendererT } from "./graphT.ts"; +import { GraphT, RendererT } from "../common/graphT.ts"; function adapter(reactRenderer: React.FunctionComponent): RendererT { return (props: T, element: SVGGElement) => render(reactRenderer, props, element); diff --git a/packages/graph/src/react/index.ts b/packages/graph/src/react/index.ts new file mode 100644 index 0000000000..d5a91610f3 --- /dev/null +++ b/packages/graph/src/react/index.ts @@ -0,0 +1,4 @@ +export * from "./graphReactT.ts"; +export * from "./graphReact.ts"; +export * from "./subgraph.tsx"; +export * from "./vertex.tsx"; diff --git a/packages/graph/src/graph2/subgraph.tsx b/packages/graph/src/react/subgraph.tsx similarity index 92% rename from packages/graph/src/graph2/subgraph.tsx rename to packages/graph/src/react/subgraph.tsx index 8aeaca08d6..27f11d78ba 100644 --- a/packages/graph/src/graph2/subgraph.tsx +++ b/packages/graph/src/react/subgraph.tsx @@ -1,5 +1,5 @@ import { React, Text } from "@hpcc-js/react"; -import { SubgraphBaseProps } from "./layouts/placeholders.ts"; +import { SubgraphBaseProps } from "../common/layouts/placeholders.ts"; export interface BasicSubgraphProps extends SubgraphBaseProps { label?: string; diff --git a/packages/graph/src/graph2/vertex.tsx b/packages/graph/src/react/vertex.tsx similarity index 92% rename from packages/graph/src/graph2/vertex.tsx rename to packages/graph/src/react/vertex.tsx index 4b36d83aec..4b488a4769 100644 --- a/packages/graph/src/graph2/vertex.tsx +++ b/packages/graph/src/react/vertex.tsx @@ -1,5 +1,5 @@ import { React, Text } from "@hpcc-js/react"; -import { VertexBaseProps } from "./layouts/placeholders.ts"; +import { VertexBaseProps } from "../common/layouts/placeholders.ts"; export interface BasicVertexProps extends VertexBaseProps { textFill?: string; diff --git a/packages/graph/src/test.ts b/packages/graph/tests/data.ts similarity index 77% rename from packages/graph/src/test.ts rename to packages/graph/tests/data.ts index 270d956618..c2497279ae 100644 --- a/packages/graph/src/test.ts +++ b/packages/graph/tests/data.ts @@ -1,217 +1,11 @@ import { Palette } from "@hpcc-js/common"; -import { Vertex4, CentroidVertex4 } from "@hpcc-js/react"; -import { Graph } from "./Graph"; -import { Vertex } from "./Vertex"; -import { Edge } from "./Edge"; -import { DataGraph } from "./graph2/dataGraph"; -import { SankeyGraph } from "./graph2/sankeyGraph"; +import { Vertex, Edge } from "../src/index.ts"; -export { Test4 as Test }; - -export class Test1 extends Graph { - - constructor() { - super(); - this - .data(createData()) - .layout("ForceDirected") - .applyScaleOnLayout(true) - .centroidColor("darkgreen") - .dragSingleNeighbors(true) - .highlightSelectedPathToCentroid(true) - ; - } -} - -export class Test2 extends DataGraph { - - constructor() { - super(); - const g = genData2(); - this - .layout("ForceDirected") - .forceDirectedRepulsionStrength(-3500) - .forceDirectedLinkDistance(150) - .forceDirectedLinkStrength(1.5) - .forceDirectedPinCentroid(true) - .hierarchyDigraph(false) - - .centroidColor("#777777") - - .selectionGlowColor("#555555") - .highlightOnMouseOverEdge(true) - .highlightOnMouseOverVertex(true) - .showVertexLabels(true) - - .applyScaleOnLayout(true) - .zoomToFitLimit(1) - - .edgeArcDepth(8) - .edgeStrokeWidth(2) - .edgeColor("#287EC4") - - .allowDragging(true) - - .annotations([{ - id: "0", - imageChar: "fa-plus", - fill: "white", - stroke: "whitesmoke", - imageCharFill: "red" - }, { - id: "1", - imageChar: "fa-star", - fill: "navy", - imageCharFill: "white" - }]) - - .vertexColumns(["id", "label", "fachar", "centroid", "ann1", "ann2", "expandedFAChar"]) - .vertexCentroidColumn("centroid") - .vertexFACharColumn("fachar") - .vertexIDColumn("id") - .vertexLabelColumn("label") - .vertexAnnotationColumns([ - { columnID: "ann1", annotationID: "0" } as any, - { columnID: "ann2", annotationID: "1" } as any - ]) - .vertexExpansionFACharColumn("expandedFAChar") - .vertices(g.vertices) - - .edgeColumns(["source", "target", "label", "weightXXX"]) - // .edgeIDColumn("id") - .edgeSourceColumn("source") - .edgeTargetColumn("target") - .edgeLabelColumn("label") - // .edgeWeightColumn("weight") - .edges(g.edges) - - // Events --- - .on("vertex_mousein", (vertex, col, sel, anno) => console.info("vertex_mousein", vertex, anno)) - .on("vertex_mouseout", (vertex, col, sel, anno) => console.info("vertex_mouseout", vertex, anno)) - .on("vertex_mouseover", (vertex, col, sel, anno) => console.info("vertex_mouseover", vertex, anno)) - .on("vertex_click", (vertex, col, sel, anno) => console.info("vertex_click", vertex, anno)) - .on("vertex_dblclick", (vertex, col, sel, anno) => console.info("vertex_dblclick", vertex, anno)) - ; - - setTimeout(() => { - // this.downloadPNG(); - }, 3000); - } -} - -export class Test3 extends SankeyGraph { - - constructor() { - super(); - this - .vertexColumns(["category", "id", "label"]) - .vertices([ - [0, 0, "A"], - [0, 1, "B"], - [0, 2, "C"], - [0, 3, "D"], - [0, 4, "F"], - [1, 5, "Math"], - [2, 6, "English"], - [3, 7, "Geometry"], - [4, 8, "Science"], - ]) - .edgeColumns(["source", "target", "weight"]) - .edges([ - [0, 5, 48], - [0, 6, 28], - [0, 7, 26], - [0, 8, 38], - [1, 5, 63], - [1, 6, 39], - [1, 7, 36], - [1, 8, 58], - [2, 5, 42], - [2, 6, 36], - [2, 7, 27], - [2, 8, 68], - [3, 5, 90], - [3, 6, 59], - [3, 7, 15], - [3, 8, 35], - [4, 5, 10], - [4, 6, 3], - [4, 7, 6], - [4, 8, 4], - ]) - ; - } -} - -export class Test4 extends Test2 { - constructor() { - super(); - this - .vertexRenderer(Vertex4) - .centroidRenderer(CentroidVertex4) - ; - } -} - -// 8 -let seed = 8; -function random() { - const x = Math.sin(seed++) * 10000; - return x - Math.floor(x); -} -function rand() { - return Math.round(random() * 32767); -} - -function make_pair(a: T, b: T): [T, T] { - return [a, b]; -} - -// @ts-ignore -function genData(MAX_VERTICES = 200, MAX_EDGES = 200) { - const edges: [number, number][] = []; - function edges_has(p: [number, number]): boolean { - return edges.some(row => row[0] === p[0] && row[1] === p[1]); - } - - const NUM = 1 + rand() % MAX_VERTICES; - let NUMEDGE = 1 + rand() % MAX_EDGES; - - while (NUMEDGE > NUM * (NUM - 1) / 2) { - NUMEDGE = 1 + rand() % MAX_EDGES; - } - - for (let j = 1; j <= NUMEDGE; j++) { - let a = 1 + rand() % NUM; - let b = 1 + rand() % NUM; - let p = make_pair(a, b); - - while (edges_has(p) || a == b) { - a = 1 + rand() % NUM; - b = 1 + rand() % NUM; - p = make_pair(a, b); - } - edges.push(p); - } - - const vertices: { [id: number]: boolean } = {}; - for (const it of edges) { - vertices[it[0]] = true; - vertices[it[1]] = true; - } - - const icons = ["fa-at", "fa-user-o", "fa-address-card-o", "fa-globe", "fa-phone"]; - return { - vertices: Object.keys(vertices).map(v => [v, `Node-${v}`, icons[Math.floor(Math.random() * icons.length)]]), - edges: edges.map(e => [e[0], e[1], "", 1]) - }; -} - -function genData2() { +export function genData2() { return { vertices: [ - ["a", "myriel@gmail.com", "fa-at", false, false, false, "fa-plus"], - [1, "Napoleon", "fa-user-o", true, true, true, "fa-plus"], + ["a", "myriel@gmail.com", "fa-at", false, false, false, "fa-plus", "https://th.bing.com/th/id/OIP.3FhSHq5xMXMDZ7gYBZ1nzQHaHa?w=210&h=210&c=7&r=0&o=5&pid=1.7"], + [1, "Napoleon", "fa-user-o", true, true, true, "fa-plus", "https://th.bing.com/th/id/OIP.3FhSHq5xMXMDZ7gYBZ1nzQHaHa?w=210&h=210&c=7&r=0&o=5&pid=1.7"], [2, "Mlle.Baptistine", "fa-user-o"], [3, "Mme.Magloire", "fa-user-o"], [4, "CountessdeLo", "fa-user-o"], @@ -276,7 +70,7 @@ function genData2() { }; } -function createData() { +export function createData() { const vertices = []; const edges = []; const palette = Palette.ordinal("dark2"); diff --git a/packages/graph/tests/graph.browser.spec.ts b/packages/graph/tests/graph.browser.spec.ts index 78a14ca354..9e0ccaab0d 100644 --- a/packages/graph/tests/graph.browser.spec.ts +++ b/packages/graph/tests/graph.browser.spec.ts @@ -1,6 +1,6 @@ -import * as graph from "@hpcc-js/graph"; +import * as graph from "../src/index.ts"; import { Class, HTMLWidget, Palette, SVGWidget } from "@hpcc-js/common"; -import { AdjacencyGraph, AnnotationColumn, BasicSubgraph, BasicVertex, DataGraph, Edge, Graph, GraphT, GraphReactT, Graph2, Sankey, SankeyColumn, SankeyGraph, Subgraph, Vertex } from "@hpcc-js/graph"; +import { AdjacencyGraph, AnnotationColumn, BasicSubgraph, BasicVertex, DataGraph, Edge, Graph, GraphT, GraphReactT, GraphHtml, Graph2, Sankey, SankeyColumn, SankeyGraph, Subgraph, Vertex } from "../src/index.ts"; import { Subgraph as ReactSubgraph, Vertex as ReactVertex, Edge as ReactEdge } from "@hpcc-js/react"; import { describe, it, expect } from "vitest"; import { classDef, dataBreach, render } from "../../common/tests/index.ts"; @@ -553,6 +553,35 @@ describe("@hpcc-js/graph", () => { render(graphB); } break; + case GraphHtml: + { + const subgraphsB = [ + { id: "10", text: "Adults" } + ]; + + const verticesB = [ + { id: "0", text: "Daddy", annotations: [] }, + { id: "1", text: "Mummy", annotations: [] }, + { id: "2", text: "Baby", annotations: [] } + ]; + + const edgesB = [ + { id: "0", source: verticesB[0], target: verticesB[2] }, + { id: "1", source: verticesB[1], target: verticesB[2] } + ]; + + const hierarchyB = [ + { id: "0", parent: subgraphsB[0], child: verticesB[0] }, + { id: "1", parent: subgraphsB[0], child: verticesB[1] } + ]; + + const graphB = new GraphHtml() + .data({ subgraphs: subgraphsB, vertices: verticesB, edges: edgesB, hierarchy: hierarchyB }) + ; + + render(graphB); + } + break; case DataGraph: { const graphD = new DataGraph() diff --git a/packages/graph/tests/index.ts b/packages/graph/tests/index.ts new file mode 100644 index 0000000000..5853be3acd --- /dev/null +++ b/packages/graph/tests/index.ts @@ -0,0 +1,6 @@ +export * from "./test1.ts"; +export * from "./test2.ts"; +export * from "./test3.ts"; +export * from "./test4.ts"; +export * from "./test5.ts"; +export * from "./test6.ts"; \ No newline at end of file diff --git a/packages/graph/tests/test1.ts b/packages/graph/tests/test1.ts new file mode 100644 index 0000000000..6d21439f03 --- /dev/null +++ b/packages/graph/tests/test1.ts @@ -0,0 +1,18 @@ +import { Graph } from "../src/index.ts"; +import { createData } from "./data"; + +export class Test1 extends Graph { + + constructor() { + super(); + this + .data(createData()) + .layout("ForceDirected") + .applyScaleOnLayout(true) + .centroidColor("darkgreen") + .dragSingleNeighbors(true) + .highlightSelectedPathToCentroid(true) + ; + } +} + diff --git a/packages/graph/tests/test2.ts b/packages/graph/tests/test2.ts new file mode 100644 index 0000000000..f9af4725f1 --- /dev/null +++ b/packages/graph/tests/test2.ts @@ -0,0 +1,80 @@ +import { DataGraph } from "../src/index.ts"; +import { genData2 } from "./data"; + +export class Test2 extends DataGraph { + + constructor() { + super(); + const g = genData2(); + this + .layout("ForceDirected") + .forceDirectedRepulsionStrength(-3500) + .forceDirectedLinkDistance(150) + .forceDirectedLinkStrength(1.5) + .forceDirectedPinCentroid(true) + .hierarchyDigraph(false) + + .centroidColor("#777777") + + .selectionGlowColor("#555555") + .highlightOnMouseOverEdge(true) + .highlightOnMouseOverVertex(true) + .showVertexLabels(true) + + .applyScaleOnLayout(true) + .zoomToFitLimit(1) + + .edgeArcDepth(8) + .edgeStrokeWidth(2) + .edgeColor("#287EC4") + + .allowDragging(true) + + .annotations([{ + id: "0", + imageChar: "fa-plus", + fill: "white", + stroke: "whitesmoke", + imageCharFill: "red" + }, { + id: "1", + imageChar: "fa-star", + fill: "navy", + imageCharFill: "white" + }]) + + .vertexColumns(["id", "label", "fachar", "centroid", "ann1", "ann2", "expandedFAChar", "imageUrl"]) + .vertexCentroidColumn("centroid") + .vertexImageUrlColumn("imageUrl") + .vertexFACharColumn("fachar") + .vertexIDColumn("id") + .vertexLabelColumn("label") + .vertexAnnotationColumns([ + { columnID: "ann1", annotationID: "0" } as any, + { columnID: "ann2", annotationID: "1" } as any + ]) + .vertexExpansionFACharColumn("expandedFAChar") + .vertices(g.vertices) + + .edgeColumns(["source", "target", "label", "weightXXX"]) + // .edgeIDColumn("id") + .edgeSourceColumn("source") + .edgeTargetColumn("target") + .edgeLabelColumn("label") + // .edgeWeightColumn("weight") + .edges(g.edges) + + // Events --- + .on("vertex_mousein", (vertex, col, sel, anno) => console.info("vertex_mousein", vertex, anno)) + .on("vertex_mouseout", (vertex, col, sel, anno) => console.info("vertex_mouseout", vertex, anno)) + .on("vertex_mouseover", (vertex, col, sel, anno) => console.info("vertex_mouseover", vertex, anno)) + .on("vertex_click", (vertex, col, sel, anno) => console.info("vertex_click", vertex, anno)) + .on("vertex_dblclick", (vertex, col, sel, anno) => console.info("vertex_dblclick", vertex, anno)) + ; + + setTimeout(() => { + // this.downloadPNG(); + }, 3000); + } +} + diff --git a/packages/graph/tests/test3.ts b/packages/graph/tests/test3.ts new file mode 100644 index 0000000000..c3133bd153 --- /dev/null +++ b/packages/graph/tests/test3.ts @@ -0,0 +1,46 @@ +import { SankeyGraph } from "../src/index.ts"; + +export class Test3 extends SankeyGraph { + + constructor() { + super(); + this + .vertexColumns(["category", "id", "label"]) + .vertices([ + [0, 0, "A"], + [0, 1, "B"], + [0, 2, "C"], + [0, 3, "D"], + [0, 4, "F"], + [1, 5, "Math"], + [2, 6, "English"], + [3, 7, "Geometry"], + [4, 8, "Science"], + ]) + .edgeColumns(["source", "target", "weight"]) + .edges([ + [0, 5, 48], + [0, 6, 28], + [0, 7, 26], + [0, 8, 38], + [1, 5, 63], + [1, 6, 39], + [1, 7, 36], + [1, 8, 58], + [2, 5, 42], + [2, 6, 36], + [2, 7, 27], + [2, 8, 68], + [3, 5, 90], + [3, 6, 59], + [3, 7, 15], + [3, 8, 35], + [4, 5, 10], + [4, 6, 3], + [4, 7, 6], + [4, 8, 4], + ]) + ; + } +} + diff --git a/packages/graph/tests/test4.ts b/packages/graph/tests/test4.ts new file mode 100644 index 0000000000..c59e2451a8 --- /dev/null +++ b/packages/graph/tests/test4.ts @@ -0,0 +1,66 @@ +import { Vertex4, CentroidVertex4 } from "@hpcc-js/react"; +import { Test2 } from "./test2"; + +export class Test4 extends Test2 { + constructor() { + super(); + this + .vertexRenderer(Vertex4) + .centroidRenderer(CentroidVertex4) + ; + } +} + +// 8 +let seed = 8; +function random() { + const x = Math.sin(seed++) * 10000; + return x - Math.floor(x); +} +function rand() { + return Math.round(random() * 32767); +} + +function make_pair(a: T, b: T): [T, T] { + return [a, b]; +} + +// @ts-ignore +function genData(MAX_VERTICES = 200, MAX_EDGES = 200) { + const edges: [number, number][] = []; + function edges_has(p: [number, number]): boolean { + return edges.some(row => row[0] === p[0] && row[1] === p[1]); + } + + const NUM = 1 + rand() % MAX_VERTICES; + let NUMEDGE = 1 + rand() % MAX_EDGES; + + while (NUMEDGE > NUM * (NUM - 1) / 2) { + NUMEDGE = 1 + rand() % MAX_EDGES; + } + + for (let j = 1; j <= NUMEDGE; j++) { + let a = 1 + rand() % NUM; + let b = 1 + rand() % NUM; + let p = make_pair(a, b); + + while (edges_has(p) || a == b) { + a = 1 + rand() % NUM; + b = 1 + rand() % NUM; + p = make_pair(a, b); + } + edges.push(p); + } + + const vertices: { [id: number]: boolean } = {}; + for (const it of edges) { + vertices[it[0]] = true; + vertices[it[1]] = true; + } + + const icons = ["fa-at", "fa-user-o", "fa-address-card-o", "fa-globe", "fa-phone"]; + return { + vertices: Object.keys(vertices).map(v => [v, `Node-${v}`, icons[Math.floor(Math.random() * icons.length)]]), + edges: edges.map(e => [e[0], e[1], "", 1]) + }; +} diff --git a/packages/graph/tests/test5.ts b/packages/graph/tests/test5.ts new file mode 100644 index 0000000000..48940cebaa --- /dev/null +++ b/packages/graph/tests/test5.ts @@ -0,0 +1,86 @@ +import { Vertex4, CentroidVertex4 } from "@hpcc-js/react"; +import { GraphReact } from "../src/index.ts"; + +const VERTEX_ARR = [{ + id: 0, + centroid: true, + text: "Vertex One", + iconFontFamily: "'Font Awesome 5 Free'", +}, { + id: 1, + centroid: false, + text: "Vertex Two", + +}, { + id: 2, + centroid: false, + text: "Vertex Three", +}]; + +const EDGE_ARR = [{ + id: 0, + source: VERTEX_ARR[0], + target: VERTEX_ARR[1] +}, { + id: 1, + source: VERTEX_ARR[0], + target: VERTEX_ARR[2] +}]; + +const VERTEX_ARR_UPDATED = [{ + id: 0, + text: "Vertex One", + iconFontFamily: "'Font Awesome 5 Free'", +}, { + centroid: true, + id: 1, + text: "Vertex Two", + +}, { + id: 2, + centroid: false, + text: "Vertex Three", +}]; + +export const EDGE_ARR_UPDATE = [{ + id: 0, + source: VERTEX_ARR_UPDATED[1], + target: VERTEX_ARR_UPDATED[2] +}]; + +export class Test5 extends GraphReact { + + constructor() { + super(); + this + .minScale(0.1) + .layout("ForceDirected") + .centroidRenderer(CentroidVertex4) + .vertexRenderer(Vertex4) + .data({ + vertices: VERTEX_ARR, + edges: EDGE_ARR + }) + .transitionDuration(200) + .forceDirectedIterations(800) + .forceDirectedLinkDistance(100) + .forceDirectedAlphaDecay(0.014) + .applyScaleOnLayout(true) + .centroidColor("#ffffff") + .edgeStrokeWidth(2) + .edgeColor("#227AC2") + .minScale(0.1) + .edgeArcDepth(0) + .layout("ForceDirected") + .on("vertex_click", (vertex, col, sel, anno) => { + console.info("vertex_click", vertex); + }) + .on("vertex_dblclick", (vertex, col, sel, anno) => { + console.info("vertex_dblclick", vertex); + }) + .on("vertex_contextmenu", (vertex, col, sel, anno) => { + console.info("vertex_contextmenu", vertex); + }) + ; + } +} \ No newline at end of file diff --git a/packages/graph/tests/test6.ts b/packages/graph/tests/test6.ts new file mode 100644 index 0000000000..0a98d767c4 --- /dev/null +++ b/packages/graph/tests/test6.ts @@ -0,0 +1,87 @@ +import { GraphHtml, VertexProps } from "../src/index.ts"; + +const VERTEX_ARR: VertexProps[] = [{ + id: 0, + centroid: true, + text: "Vertex One", + icon: { + imageChar: "fa-home", + height: 48, + fill: "#ED1C24", + }, + textBoxAnnotationsE: [{ + text: "fa-star", + fill: "red", + stroke: "darkred" + }] +}, +{ + id: 1, + centroid: false, + text: "Vertex\nTwo\nthree\nfourteen Yeah", + icon: { + imageChar: "fa-car", + height: 48, + fill: "#00802b", + }, + textBoxAnnotationsS: [{ + text: "fa-star", + fill: "red", + stroke: "darkred" + }, { + text: "fa-user", + fill: "blue", + stroke: "darkblue" + }, { + text: "fa-car", + fill: "green", + stroke: "darkgreen" + }] +}, +{ + id: 2, + centroid: false, + text: "Vertex yyggyy Three", + icon: { + imageChar: "fa-user", + height: 48, + fill: "#ffcc33", + }, + iconAnnotations: [{ + text: "fa-plus", + fill: "whitesmoke", + stroke: "darkgray" + }] +}]; + +const EDGE_ARR = [{ + id: 0, + source: VERTEX_ARR[0], + target: VERTEX_ARR[1], +}, +{ + id: 1, + source: VERTEX_ARR[0], + target: VERTEX_ARR[2] +} +]; + +export class Test6 extends GraphHtml { + + constructor() { + super(); + this + .data({ + vertices: VERTEX_ARR, + edges: EDGE_ARR + }) + .layout("ForceDirected") + .applyScaleOnLayout(true) + .allowDragging(true) + .on("vertex_click", (row, col, sel, data) => { + console.log("vertex_click", row, col, sel); + }) + .on("vertex_contextmenu", (row, col, sel, data) => console.log("vertex_contextmenu", row, col, sel)) + ; + } +} \ No newline at end of file diff --git a/packages/graph/tsconfig.json b/packages/graph/tsconfig.json index 6c139a166e..5e1de076f4 100644 --- a/packages/graph/tsconfig.json +++ b/packages/graph/tsconfig.json @@ -15,6 +15,7 @@ "isolatedModules": true, "skipLibCheck": true, "allowImportingTsExtensions": true, + "forceConsistentCasingInFileNames": true, "lib": [ "DOM", "ESNext", diff --git a/packages/graph/util/wrapWorker.js b/packages/graph/util/wrapWorker.js index 5bd3d7af72..c557582b26 100644 --- a/packages/graph/util/wrapWorker.js +++ b/packages/graph/util/wrapWorker.js @@ -9,7 +9,7 @@ var myArgs = process.argv.slice(2); var inFile = myArgs[0]; var inFilePath = `workers/dist/${inFile}${min ? ".min" : ""}.js`; var inFileOptionsPath = `workers/src/${inFile}Options.ts`; -var outFilePath = `src/graph2/layouts/${inFile}Worker.ts`; +var outFilePath = `src/common/layouts/${inFile}Worker.ts`; var fileName = path.basename(inFilePath).split(".")[0]; function escapeQuote(str) { diff --git a/vitest.workspace.ts b/vitest.workspace.ts index d43fc45e25..73f65b64c5 100644 --- a/vitest.workspace.ts +++ b/vitest.workspace.ts @@ -1,12 +1,12 @@ -import { configDefaults, defineWorkspace } from 'vitest/config' +import { configDefaults, defineWorkspace } from "vitest/config"; export default defineWorkspace([ { test: { - name: 'node', + name: "node", exclude: [ ...configDefaults.exclude, - '**/*.browser.spec.{ts,js}', + "**/*.browser.spec.{ts,js}", "**/node_modules/**", "**/.nx/**", "**/apps/**", @@ -14,16 +14,16 @@ export default defineWorkspace([ "**/demos/**", "**/src/**", ], - environment: 'node', + environment: "node", setupFiles: [] } }, { test: { - name: 'browser', + name: "browser", exclude: [ ...configDefaults.exclude, "@hpcc-js/dgrid-shim", - '**/*.node.spec.{ts,js}', + "**/*.node.spec.{ts,js}", "**/node_modules/**", "**/.nx/**", "**/apps/**", @@ -43,62 +43,7 @@ export default defineWorkspace([ }, screenshotFailures: false }, - setupFiles: [] + setupFiles: [], } } -]) - -// export default defineConfig(({ mode }) => { -// switch (mode) { -// case "browser": -// return { -// test: { -// include: [ -// "tests/*.spec.ts", -// "tests/browser/*.spec.ts" -// ], -// browser: { -// enabled: true, -// provider: "playwright", -// headless: true, -// name: "chromium", -// providerOptions: { -// launch: { -// args: ["--disable-web-security"], -// } -// }, -// screenshotFailures: false -// }, -// testTimeout: 30000, -// coverage: { -// provider: "v8", -// allowExternal: false, -// // include: ["src/**/*.ts"], -// reporter: ["json", "text"], - -// } -// } -// }; -// case "node": -// default: -// return { -// test: { -// include: [ -// "tests/*.spec.ts", -// "tests/node/*.spec.ts" -// ], -// node: { -// enabled: true, -// provider: "node", -// }, -// testTimeout: 20000, -// coverage: { -// provider: "v8", -// allowExternal: false, -// // include: ["src/**/*.ts"], -// reporter: ["json", "text"] -// }, -// } -// }; -// } -// }); +]);