diff --git a/package.json b/package.json index 1f685d6a..1e4304ab 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "@tanstack/react-query": "^5.65.1", "@tanstack/react-table": "^8.20.6", "@tisoap/react-flow-smart-edge": "^3.0.0", - "@zenml-io/react-component-library": "^0.19.2", + "@zenml-io/react-component-library": "^0.22.0", "awesome-debounce-promise": "^2.1.0", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a738f8c3..ad11b537 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -37,8 +37,8 @@ importers: specifier: ^3.0.0 version: 3.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(reactflow@11.11.4(@types/react@18.3.11)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.7.3) '@zenml-io/react-component-library': - specifier: ^0.19.2 - version: 0.19.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^0.22.0 + version: 0.22.0(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) awesome-debounce-promise: specifier: ^2.1.0 version: 2.1.0 @@ -558,49 +558,14 @@ packages: engines: {node: '>=18'} hasBin: true - '@radix-ui/number@1.0.1': - resolution: {integrity: sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==} - '@radix-ui/number@1.1.0': resolution: {integrity: sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ==} - '@radix-ui/primitive@1.0.1': - resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} - - '@radix-ui/primitive@1.1.0': - resolution: {integrity: sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==} - '@radix-ui/primitive@1.1.1': resolution: {integrity: sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==} - '@radix-ui/react-alert-dialog@1.0.5': - resolution: {integrity: sha512-OrVIOcZL0tl6xibeuGt5/+UxoT2N27KCFOPjFyfXMnchxSHZ/OW7cCX2nGlIYJrbHK/fczPcFzAwvNBB6XBNMA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-arrow@1.0.3': - resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-arrow@1.1.0': - resolution: {integrity: sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==} + '@radix-ui/react-alert-dialog@1.1.6': + resolution: {integrity: sha512-p4XnPqgej8sZAAReCAKgz1REYZEBLR8hU9Pg27wFnCWIMc8g1ccCs0FjBcy05V15VTu8pAePw/VDYeOm/uZ6yQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -612,52 +577,52 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-avatar@1.0.4': - resolution: {integrity: sha512-kVK2K7ZD3wwj3qhle0ElXhOjbezIgyl2hVvgwfIdexL3rN6zJmy5AqqIf+D31lxVppdzV8CjAfZ6PklkmInZLw==} + '@radix-ui/react-arrow@1.1.2': + resolution: {integrity: sha512-G+KcpzXHq24iH0uGG/pF8LyzpFJYGD4RfLjCIBfGdSLXvjLHST31RUiRVrupIBMvIppMgSzQ6l66iAxl03tdlg==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true - '@radix-ui/react-checkbox@1.0.4': - resolution: {integrity: sha512-CBuGQa52aAYnADZVt/KBQzXrwx6TqnlwtcIPGtVt5JkkzQwMOLJjPukimhfKEr4GQNd43C+djUh5Ikopj8pSLg==} + '@radix-ui/react-avatar@1.1.3': + resolution: {integrity: sha512-Paen00T4P8L8gd9bNsRMw7Cbaz85oxiv+hzomsRZgFm2byltPFDtfcoqlWJ8GyZlIBWgLssJlzLCnKU0G0302g==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true - '@radix-ui/react-collapsible@1.0.3': - resolution: {integrity: sha512-UBmVDkmR6IvDsloHVN+3rtx4Mi5TFvylYXpluuv0f37dtaz3H99bp8No0LGXRigVpl3UAT4l9j6bIchh42S/Gg==} + '@radix-ui/react-checkbox@1.1.4': + resolution: {integrity: sha512-wP0CPAHq+P5I4INKe3hJrIa1WoNqqrejzW+zoU0rOvo1b9gDEJJFl2rYfO1PYJUQCc2H1WZxIJmyv9BS8i5fLw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true - '@radix-ui/react-collection@1.0.3': - resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} + '@radix-ui/react-collapsible@1.1.3': + resolution: {integrity: sha512-jFSerheto1X03MUC0g6R7LedNW9EEGWdg9W1+MlpkMLwGkgkbUXLPBH/KIuWKXUoeYRVY11llqbTBDzuLg7qrw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true @@ -677,23 +642,18 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-compose-refs@1.0.1': - resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-compose-refs@1.1.0': - resolution: {integrity: sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==} + '@radix-ui/react-collection@1.1.2': + resolution: {integrity: sha512-9z54IEKRxIa9VityapoEYMuByaG42iSy1ZXlY2KcuLSEtq8x4987/N6m15ppoMffgZX72gER2uHe1D9Y6Unlcw==} peerDependencies: '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true + '@types/react-dom': + optional: true '@radix-ui/react-compose-refs@1.1.1': resolution: {integrity: sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==} @@ -704,24 +664,6 @@ packages: '@types/react': optional: true - '@radix-ui/react-context@1.0.1': - resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-context@1.1.0': - resolution: {integrity: sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@radix-ui/react-context@1.1.1': resolution: {integrity: sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==} peerDependencies: @@ -731,28 +673,19 @@ packages: '@types/react': optional: true - '@radix-ui/react-dialog@1.0.5': - resolution: {integrity: sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==} + '@radix-ui/react-dialog@1.1.6': + resolution: {integrity: sha512-/IVhJV5AceX620DUJ4uYVMymzsipdKBzo3edo+omeskCKGm9FRHM0ebIdbPnlQVJqyuHbuBltQUOG2mOTq2IYw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true - '@radix-ui/react-direction@1.0.1': - resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@radix-ui/react-direction@1.1.0': resolution: {integrity: sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==} peerDependencies: @@ -762,21 +695,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-dismissable-layer@1.0.5': - resolution: {integrity: sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-dismissable-layer@1.1.0': - resolution: {integrity: sha512-/UovfmmXGptwGcBQawLzvn2jOfM0t4z3/uKffoBlj724+n3FvBbZ7M0aaBOmkp6pqFYpO4yx8tSVJjx3Fl2jig==} + '@radix-ui/react-dismissable-layer@1.1.5': + resolution: {integrity: sha512-E4TywXY6UsXNRhFrECa5HAvE5/4BFcGyfTyK36gP+pAW1ed7UTK4vKwdr53gAJYwqbfCWC6ATvJa3J3R/9+Qrg==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -788,43 +708,43 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-dropdown-menu@2.0.6': - resolution: {integrity: sha512-i6TuFOoWmLWq+M/eCLGd/bQ2HfAX1RJgvrBQ6AQLmzfvsLdefxbWu8G9zczcPFfcSPehz9GcpF6K9QYreFV8hA==} + '@radix-ui/react-dropdown-menu@2.1.6': + resolution: {integrity: sha512-no3X7V5fD487wab/ZYSHXq3H37u4NVeLDKI/Ks724X/eEFSSEFYZxWgsIlr1UBeEyDaM29HM5x9p1Nv8DuTYPA==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true - '@radix-ui/react-focus-guards@1.0.1': - resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==} + '@radix-ui/react-focus-guards@1.1.1': + resolution: {integrity: sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==} peerDependencies: '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true - '@radix-ui/react-focus-scope@1.0.4': - resolution: {integrity: sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==} + '@radix-ui/react-focus-scope@1.1.2': + resolution: {integrity: sha512-zxwE80FCU7lcXUGWkdt6XpTTCKPitG1XKOwViTxHVKIJhZl9MvIl2dVHeZENCWD9+EdWv05wlaEkRXUykU27RA==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true - '@radix-ui/react-hover-card@1.1.1': - resolution: {integrity: sha512-IwzAOP97hQpDADYVKrEEHUH/b2LA+9MgB0LgdmnbFO2u/3M5hmEofjjr2M6CyzUblaAqJdFm6B7oFtU72DPXrA==} + '@radix-ui/react-hover-card@1.1.6': + resolution: {integrity: sha512-E4ozl35jq0VRlrdc4dhHrNSV0JqBb4Jy73WAhBEK7JoYnQ83ED5r0Rb/XdVKw89ReAJN38N492BAPBZQ57VmqQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -836,15 +756,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-id@1.0.1': - resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@radix-ui/react-id@1.1.0': resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==} peerDependencies: @@ -854,34 +765,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-menu@2.0.6': - resolution: {integrity: sha512-BVkFLS+bUC8HcImkRKPSiVumA1VPOOEC5WBMiT+QAVsPzW1FJzI9KnqgGxVDPBcql5xXrHkD3JOVoXWEXD8SYA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-popper@1.1.3': - resolution: {integrity: sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-popper@1.2.0': - resolution: {integrity: sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==} + '@radix-ui/react-menu@2.1.6': + resolution: {integrity: sha512-tBBb5CXDJW3t2mo9WlO7r6GTmWV0F0uzHZVFmlRmYpiSK1CDU5IKojP1pm7oknpBOrFZx/YgBRW9oorPO2S/Lg==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -893,21 +778,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-portal@1.0.4': - resolution: {integrity: sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-portal@1.1.1': - resolution: {integrity: sha512-A3UtLk85UtqhzFqtoC8Q0KvR2GbXF3mtPgACSazajqq6A41mEQgo53iPzY4i6BwDxlIFqWIhiQ2G729n+2aw/g==} + '@radix-ui/react-popover@1.1.6': + resolution: {integrity: sha512-NQouW0x4/GnkFJ/pRqsIS3rM/k97VzKnVb2jB7Gq7VEGPy5g7uNV1ykySFt7eWSp3i2uSGFwaJcvIRJBAHmmFg==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -919,21 +791,21 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-presence@1.0.1': - resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} + '@radix-ui/react-popper@1.2.2': + resolution: {integrity: sha512-Rvqc3nOpwseCyj/rgjlJDYAgyfw7OC1tTkKn2ivhaMGcYt8FSBlahHOZak2i3QwkRXUXgGgzeEe2RuqeEHuHgA==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true - '@radix-ui/react-presence@1.1.0': - resolution: {integrity: sha512-Gq6wuRN/asf9H/E/VzdKoUtT8GC9PQc9z40/vEr0VCJ4u5XvvhWIrSsCB6vD2/cH7ugTdSfYq9fLJCcM00acrQ==} + '@radix-ui/react-portal@1.1.4': + resolution: {integrity: sha512-sn2O9k1rPFYVyKd5LAJfo96JlSGVFpa1fS6UuBJfrZadudiw5tAmru+n1x7aMRQ84qDM71Zh1+SzK5QwU0tJfA==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -958,21 +830,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-primitive@1.0.3': - resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-primitive@2.0.0': - resolution: {integrity: sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==} + '@radix-ui/react-primitive@2.0.1': + resolution: {integrity: sha512-sHCWTtxwNn3L3fH8qAfnF3WbUZycW93SM1j3NFDzXBiz8D6F5UTTy8G1+WFEaiCdvCVRJWj6N2R4Xq6HdiHmDg==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -984,8 +843,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-primitive@2.0.1': - resolution: {integrity: sha512-sHCWTtxwNn3L3fH8qAfnF3WbUZycW93SM1j3NFDzXBiz8D6F5UTTy8G1+WFEaiCdvCVRJWj6N2R4Xq6HdiHmDg==} + '@radix-ui/react-primitive@2.0.2': + resolution: {integrity: sha512-Ec/0d38EIuvDF+GZjcMU/Ze6MxntVJYO/fRlCPhCaVUyPY9WTalHJw54tp9sXeJo3tlShWpy41vQRgLRGOuz+w==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -997,21 +856,21 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-progress@1.0.3': - resolution: {integrity: sha512-5G6Om/tYSxjSeEdrb1VfKkfZfn/1IlPWd731h2RfPuSbIfNUgfqAwbKfJCg/PP6nuUCTrYzalwHSpSinoWoCag==} + '@radix-ui/react-progress@1.1.2': + resolution: {integrity: sha512-u1IgJFQ4zNAUTjGdDL5dcl/U8ntOR6jsnhxKb5RKp5Ozwl88xKR9EqRZOe/Mk8tnx0x5tNUe2F+MzsyjqMg0MA==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true - '@radix-ui/react-radio-group@1.2.2': - resolution: {integrity: sha512-E0MLLGfOP0l8P/NxgVzfXJ8w3Ch8cdO6UDzJfDChu4EJDy+/WdO5LqpdY8PYnCErkmZH3gZhDL1K7kQ41fAHuQ==} + '@radix-ui/react-radio-group@1.2.3': + resolution: {integrity: sha512-xtCsqt8Rp09FK50ItqEqTJ7Sxanz8EM8dnkVIhJrc/wkMMomSmXHvYbhv3E7Zx4oXh98aaLt9W679SUYXg4IDA==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1023,21 +882,21 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-roving-focus@1.0.4': - resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==} + '@radix-ui/react-roving-focus@1.1.1': + resolution: {integrity: sha512-QE1RoxPGJ/Nm8Qmk0PxP8ojmoaS67i0s7hVssS7KuI2FQoc/uzVlZsqKfQvxPE6D8hICCPHJ4D88zNhT3OOmkw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true - '@radix-ui/react-roving-focus@1.1.1': - resolution: {integrity: sha512-QE1RoxPGJ/Nm8Qmk0PxP8ojmoaS67i0s7hVssS7KuI2FQoc/uzVlZsqKfQvxPE6D8hICCPHJ4D88zNhT3OOmkw==} + '@radix-ui/react-roving-focus@1.1.2': + resolution: {integrity: sha512-zgMQWkNO169GtGqRvYrzb0Zf8NhMHS2DuEB/TiEmVnpr5OqPU3i8lfbxaAmC2J/KYuIQxyoQQ6DxepyXp61/xw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1049,8 +908,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-scroll-area@1.1.0': - resolution: {integrity: sha512-9ArIZ9HWhsrfqS765h+GZuLoxaRHD/j0ZWOWilsCvYTpYJp8XwCqNG7Dt9Nu/TItKOdgLGkOPCodQvDc+UMwYg==} + '@radix-ui/react-scroll-area@1.2.3': + resolution: {integrity: sha512-l7+NNBfBYYJa9tNqVcP2AGvxdE3lmE6kFTBXdvHgUaZuy+4wGCL1Cl2AfaR7RKyimj7lZURGLwFO59k4eBnDJQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1062,30 +921,21 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-select@2.0.0': - resolution: {integrity: sha512-RH5b7af4oHtkcHS7pG6Sgv5rk5Wxa7XI8W5gvB1N/yiuDGZxko1ynvOiVhFM7Cis2A8zxF9bTOUVbRDzPepe6w==} + '@radix-ui/react-select@2.1.6': + resolution: {integrity: sha512-T6ajELxRvTuAMWH0YmRJ1qez+x4/7Nq7QIx7zJ0VK3qaEWdnWpNbEDnmWldG1zBDwqrLy5aLMUWcoGirVj5kMg==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true - '@radix-ui/react-slot@1.0.2': - resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-slot@1.1.0': - resolution: {integrity: sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==} + '@radix-ui/react-slot@1.1.1': + resolution: {integrity: sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g==} peerDependencies: '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc @@ -1093,8 +943,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-slot@1.1.1': - resolution: {integrity: sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g==} + '@radix-ui/react-slot@1.1.2': + resolution: {integrity: sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==} peerDependencies: '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc @@ -1102,13 +952,13 @@ packages: '@types/react': optional: true - '@radix-ui/react-switch@1.0.3': - resolution: {integrity: sha512-mxm87F88HyHztsI7N+ZUmEoARGkC22YVW5CaC+Byc+HRpuvCrOBPTAnXgf+tZ/7i0Sg/eOePGdMhUKhPaQEqow==} + '@radix-ui/react-switch@1.1.3': + resolution: {integrity: sha512-1nc+vjEOQkJVsJtWPSiISGT6OKm4SiOdjMo+/icLxo2G4vxz1GntC5MzfL4v8ey9OEfw787QCD1y3mUv0NiFEQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true @@ -1128,40 +978,44 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-toast@1.1.5': - resolution: {integrity: sha512-fRLn227WHIBRSzuRzGJ8W+5YALxofH23y0MlPLddaIpLpCDqdE0NZlS2NRQDRiptfxDeeCjgFIpexB1/zkxDlw==} + '@radix-ui/react-tabs@1.1.3': + resolution: {integrity: sha512-9mFyI30cuRDImbmFF6O2KUJdgEOsGh9Vmx9x/Dh9tOhL7BngmQPQfwW4aejKm5OHpfWIdmeV6ySyuxoOGjtNng==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true - '@radix-ui/react-tooltip@1.0.7': - resolution: {integrity: sha512-lPh5iKNFVQ/jav/j6ZrWq3blfDJ0OH9R6FlNUHPMqdLuQ9vwDgFsRxvl8b7Asuy5c8xmoojHUxKHQSOAvMHxyw==} + '@radix-ui/react-toast@1.2.6': + resolution: {integrity: sha512-gN4dpuIVKEgpLn1z5FhzT9mYRUitbfZq9XqN/7kkBMUgFTzTG8x/KszWJugJXHcwxckY8xcKDZPz7kG3o6DsUA==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true - '@radix-ui/react-use-callback-ref@1.0.1': - resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} + '@radix-ui/react-tooltip@1.1.8': + resolution: {integrity: sha512-YAA2cu48EkJZdAMHC0dqo9kialOcRStbtiY4nJPaht7Ptrhcvpo+eDChaM6BIs8kL6a8Z5l5poiqLnXcNduOkA==} peerDependencies: '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true + '@types/react-dom': + optional: true '@radix-ui/react-use-callback-ref@1.1.0': resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==} @@ -1172,15 +1026,6 @@ packages: '@types/react': optional: true - '@radix-ui/react-use-controllable-state@1.0.1': - resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@radix-ui/react-use-controllable-state@1.1.0': resolution: {integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==} peerDependencies: @@ -1190,15 +1035,6 @@ packages: '@types/react': optional: true - '@radix-ui/react-use-escape-keydown@1.0.3': - resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@radix-ui/react-use-escape-keydown@1.1.0': resolution: {integrity: sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==} peerDependencies: @@ -1208,15 +1044,6 @@ packages: '@types/react': optional: true - '@radix-ui/react-use-layout-effect@1.0.1': - resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@radix-ui/react-use-layout-effect@1.1.0': resolution: {integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==} peerDependencies: @@ -1226,15 +1053,6 @@ packages: '@types/react': optional: true - '@radix-ui/react-use-previous@1.0.1': - resolution: {integrity: sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@radix-ui/react-use-previous@1.1.0': resolution: {integrity: sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==} peerDependencies: @@ -1244,15 +1062,6 @@ packages: '@types/react': optional: true - '@radix-ui/react-use-rect@1.0.1': - resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@radix-ui/react-use-rect@1.1.0': resolution: {integrity: sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==} peerDependencies: @@ -1262,15 +1071,6 @@ packages: '@types/react': optional: true - '@radix-ui/react-use-size@1.0.1': - resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@radix-ui/react-use-size@1.1.0': resolution: {integrity: sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==} peerDependencies: @@ -1280,22 +1080,19 @@ packages: '@types/react': optional: true - '@radix-ui/react-visually-hidden@1.0.3': - resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==} + '@radix-ui/react-visually-hidden@1.1.2': + resolution: {integrity: sha512-1SzA4ns2M1aRlvxErqhLHsBHoS5eI5UUcI2awAMgGUp4LoaoWOKYmvqDY2s/tltuPkh3Yk77YF/r3IRj+Amx4Q==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true - '@radix-ui/rect@1.0.1': - resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==} - '@radix-ui/rect@1.1.0': resolution: {integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==} @@ -1601,10 +1398,21 @@ packages: react: '>=16.8' react-dom: '>=16.8' + '@tanstack/react-table@8.21.2': + resolution: {integrity: sha512-11tNlEDTdIhMJba2RBH+ecJ9l1zgS2kjmexDPAraulc8jeNA4xocSNeyzextT0XJyASil4XsCYlJmf5jEWAtYg==} + engines: {node: '>=12'} + peerDependencies: + react: '>=16.8' + react-dom: '>=16.8' + '@tanstack/table-core@8.20.5': resolution: {integrity: sha512-P9dF7XbibHph2PFRz8gfBKEXEY/HJPOhym8CHmjF8y3q5mWpKx9xtZapXQUWCgkqvsK0R46Azuz+VaxD4Xl+Tg==} engines: {node: '>=12'} + '@tanstack/table-core@8.21.2': + resolution: {integrity: sha512-uvXk/U4cBiFMxt+p9/G7yUWI/UbHYbyghLCjlpWZ3mLeIZiUBSKcUnw9UnKkdRz7Z/N4UBuFLWQdJCjUe7HjvA==} + engines: {node: '>=12'} + '@tisoap/react-flow-smart-edge@3.0.0': resolution: {integrity: sha512-XtEQT0IrOqPwJvCzgEoj3Y16/EK4SOcjZO7FmOPU+qJWmgYjeTyv7J35CGm6dFeJYdZ2gHDrvQ1zwaXuo23/8g==} engines: {node: '>=16', npm: ^8.0.0} @@ -1856,8 +1664,8 @@ packages: '@vitest/utils@3.0.5': resolution: {integrity: sha512-N9AX0NUoUtVwKwy21JtwzaqR5L5R5A99GAbrHfCCXK1lp593i/3AZAXhSP43wRQuxYsflrdzEfXZFo1reR1Nkg==} - '@zenml-io/react-component-library@0.19.2': - resolution: {integrity: sha512-WCrYT1VFXu5OcHuxhDWWdYUXtVjpJTUXLwvh9Hf52ZU6AVT/FamiHOMI3AARiD7QEhRjkjWA62rQsEn+zh4ETQ==} + '@zenml-io/react-component-library@0.22.0': + resolution: {integrity: sha512-9bz6rjSYvN50ddi/LPslN9HfPHrEJmmNi9w3KheLqZB2WWqGNXFbmeXuLvLrfqII9lBgctUqUgyLXMutVtDFfw==} peerDependencies: '@types/react': ^18.0.0 '@types/react-dom': ^18.0.0 @@ -2053,6 +1861,12 @@ packages: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} + cmdk@1.0.4: + resolution: {integrity: sha512-AnsjfHyHpQ/EFeAnG216WY7A5LiYCoZzCSygiLvfXC3H3LFGCprErteUcszaVluGOhuOTbJS3jWHrSDYPBBygg==} + peerDependencies: + react: ^18 || ^19 || ^19.0.0-rc + react-dom: ^18 || ^19 || ^19.0.0-rc + color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} @@ -2494,9 +2308,6 @@ packages: inline-style-parser@0.2.3: resolution: {integrity: sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g==} - invariant@2.2.4: - resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} - is-alphabetical@2.0.1: resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} @@ -3130,22 +2941,22 @@ packages: '@types/react': '>=18' react: '>=18' - react-remove-scroll-bar@2.3.6: - resolution: {integrity: sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==} + react-remove-scroll-bar@2.3.8: + resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} engines: {node: '>=10'} peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: '@types/react': optional: true - react-remove-scroll@2.5.5: - resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} + react-remove-scroll@2.6.3: + resolution: {integrity: sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==} engines: {node: '>=10'} peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true @@ -3163,12 +2974,12 @@ packages: peerDependencies: react: '>=16.8' - react-style-singleton@2.2.1: - resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} + react-style-singleton@2.2.3: + resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} engines: {node: '>=10'} peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true @@ -3353,8 +3164,8 @@ packages: svg-parser@2.0.4: resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} - tailwind-merge@2.2.2: - resolution: {integrity: sha512-tWANXsnmJzgw6mQ07nE3aCDkCK4QdT3ThPMCzawoYA2Pws7vSTCvz3Vrjg61jVUGfFZPJzxEP+NimbcW+EdaDw==} + tailwind-merge@2.6.0: + resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==} tailwindcss-animate@1.0.7: resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} @@ -3484,22 +3295,22 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - use-callback-ref@1.3.2: - resolution: {integrity: sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==} + use-callback-ref@1.3.3: + resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} engines: {node: '>=10'} peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true - use-sidecar@1.1.2: - resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} + use-sidecar@1.1.3: + resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} engines: {node: '>=10'} peerDependencies: - '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true @@ -3509,6 +3320,11 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 + use-sync-external-store@1.4.0: + resolution: {integrity: sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -4002,153 +3818,102 @@ snapshots: dependencies: playwright: 1.50.0 - '@radix-ui/number@1.0.1': - dependencies: - '@babel/runtime': 7.24.1 - '@radix-ui/number@1.1.0': {} - '@radix-ui/primitive@1.0.1': - dependencies: - '@babel/runtime': 7.24.1 - - '@radix-ui/primitive@1.1.0': {} - '@radix-ui/primitive@1.1.1': {} - '@radix-ui/react-alert-dialog@1.0.5(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-alert-dialog@1.1.6(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.1 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-dialog': 1.1.6(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.2(@types/react@18.3.11)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.11 '@types/react-dom': 18.3.1 - '@radix-ui/react-arrow@1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-arrow@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.1 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.11 '@types/react-dom': 18.3.1 - '@radix-ui/react-arrow@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-avatar@1.1.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.11)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.11 '@types/react-dom': 18.3.1 - '@radix-ui/react-avatar@1.0.4(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-checkbox@1.1.4(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.1 - '@radix-ui/react-context': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.11)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.11 '@types/react-dom': 18.3.1 - '@radix-ui/react-checkbox@1.0.4(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-collapsible@1.1.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.1 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-use-previous': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-use-size': 1.0.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.11)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.11 '@types/react-dom': 18.3.1 - '@radix-ui/react-collapsible@1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-collection@1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.1 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.1(@types/react@18.3.11)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.11 '@types/react-dom': 18.3.1 - '@radix-ui/react-collection@1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-collection@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.2(@types/react@18.3.11)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.11 '@types/react-dom': 18.3.1 - '@radix-ui/react-collection@1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.1(@types/react@18.3.11)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.11 - '@types/react-dom': 18.3.1 - - '@radix-ui/react-compose-refs@1.0.1(@types/react@18.3.11)(react@18.3.1)': - dependencies: - '@babel/runtime': 7.24.1 - react: 18.3.1 - optionalDependencies: - '@types/react': 18.3.11 - - '@radix-ui/react-compose-refs@1.1.0(@types/react@18.3.11)(react@18.3.1)': - dependencies: - react: 18.3.1 - optionalDependencies: - '@types/react': 18.3.11 - - '@radix-ui/react-compose-refs@1.1.1(@types/react@18.3.11)(react@18.3.1)': - dependencies: - react: 18.3.1 - optionalDependencies: - '@types/react': 18.3.11 - - '@radix-ui/react-context@1.0.1(@types/react@18.3.11)(react@18.3.1)': - dependencies: - '@babel/runtime': 7.24.1 - react: 18.3.1 - optionalDependencies: - '@types/react': 18.3.11 - - '@radix-ui/react-context@1.1.0(@types/react@18.3.11)(react@18.3.1)': + '@radix-ui/react-compose-refs@1.1.1(@types/react@18.3.11)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: @@ -4160,61 +3925,39 @@ snapshots: optionalDependencies: '@types/react': 18.3.11 - '@radix-ui/react-dialog@1.0.5(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-dialog@1.1.6(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.1 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.2(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.11)(react@18.3.1) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.5.5(@types/react@18.3.11)(react@18.3.1) + react-remove-scroll: 2.6.3(@types/react@18.3.11)(react@18.3.1) optionalDependencies: '@types/react': 18.3.11 '@types/react-dom': 18.3.1 - '@radix-ui/react-direction@1.0.1(@types/react@18.3.11)(react@18.3.1)': - dependencies: - '@babel/runtime': 7.24.1 - react: 18.3.1 - optionalDependencies: - '@types/react': 18.3.11 - '@radix-ui/react-direction@1.1.0(@types/react@18.3.11)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.11 - '@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-dismissable-layer@1.1.5(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.1 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.3.11)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.11 - '@types/react-dom': 18.3.1 - - '@radix-ui/react-dismissable-layer@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.11)(react@18.3.1) '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.3.11)(react@18.3.1) react: 18.3.1 @@ -4223,51 +3966,48 @@ snapshots: '@types/react': 18.3.11 '@types/react-dom': 18.3.1 - '@radix-ui/react-dropdown-menu@2.0.6(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-dropdown-menu@2.1.6(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.1 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-menu': 2.0.6(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-menu': 2.1.6(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.11)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.11 '@types/react-dom': 18.3.1 - '@radix-ui/react-focus-guards@1.0.1(@types/react@18.3.11)(react@18.3.1)': + '@radix-ui/react-focus-guards@1.1.1(@types/react@18.3.11)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.1 react: 18.3.1 optionalDependencies: '@types/react': 18.3.11 - '@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-focus-scope@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.11)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.11 '@types/react-dom': 18.3.1 - '@radix-ui/react-hover-card@1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-hover-card@1.1.6(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-popper': 1.2.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.11)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -4275,14 +4015,6 @@ snapshots: '@types/react': 18.3.11 '@types/react-dom': 18.3.1 - '@radix-ui/react-id@1.0.1(@types/react@18.3.11)(react@18.3.1)': - dependencies: - '@babel/runtime': 7.24.1 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.11)(react@18.3.1) - react: 18.3.1 - optionalDependencies: - '@types/react': 18.3.11 - '@radix-ui/react-id@1.1.0(@types/react@18.3.11)(react@18.3.1)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.11)(react@18.3.1) @@ -4290,59 +4022,62 @@ snapshots: optionalDependencies: '@types/react': 18.3.11 - '@radix-ui/react-menu@2.0.6(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-menu@2.1.6(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.1 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-direction': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-popper': 1.2.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.2(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.11)(react@18.3.1) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.5.5(@types/react@18.3.11)(react@18.3.1) + react-remove-scroll: 2.6.3(@types/react@18.3.11)(react@18.3.1) optionalDependencies: '@types/react': 18.3.11 '@types/react-dom': 18.3.1 - '@radix-ui/react-popper@1.1.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-popover@1.1.6(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.1 - '@floating-ui/react-dom': 2.0.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-use-rect': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-use-size': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/rect': 1.0.1 + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-popper': 1.2.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.2(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.11)(react@18.3.1) + aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + react-remove-scroll: 2.6.3(@types/react@18.3.11)(react@18.3.1) optionalDependencies: '@types/react': 18.3.11 '@types/react-dom': 18.3.1 - '@radix-ui/react-popper@1.2.0(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-popper@1.2.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@floating-ui/react-dom': 2.0.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-arrow': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-arrow': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.11)(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.11)(react@18.3.1) '@radix-ui/react-use-rect': 1.1.0(@types/react@18.3.11)(react@18.3.1) @@ -4354,40 +4089,9 @@ snapshots: '@types/react': 18.3.11 '@types/react-dom': 18.3.1 - '@radix-ui/react-portal@1.0.4(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@babel/runtime': 7.24.1 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.11 - '@types/react-dom': 18.3.1 - - '@radix-ui/react-portal@1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-portal@1.1.4(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.11)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.11 - '@types/react-dom': 18.3.1 - - '@radix-ui/react-presence@1.0.1(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@babel/runtime': 7.24.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.11)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.11 - '@types/react-dom': 18.3.1 - - '@radix-ui/react-presence@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.11)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -4405,54 +4109,43 @@ snapshots: '@types/react': 18.3.11 '@types/react-dom': 18.3.1 - '@radix-ui/react-primitive@1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@babel/runtime': 7.24.1 - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.11)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.11 - '@types/react-dom': 18.3.1 - - '@radix-ui/react-primitive@2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-primitive@2.0.1(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-slot': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-slot': 1.1.1(@types/react@18.3.11)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.11 '@types/react-dom': 18.3.1 - '@radix-ui/react-primitive@2.0.1(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-primitive@2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-slot': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-slot': 1.1.2(@types/react@18.3.11)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.11 '@types/react-dom': 18.3.1 - '@radix-ui/react-progress@1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-progress@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.1 - '@radix-ui/react-context': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.11 '@types/react-dom': 18.3.1 - '@radix-ui/react-radio-group@1.2.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-radio-group@1.2.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.11)(react@18.3.1) '@radix-ui/react-context': 1.1.1(@types/react@18.3.11)(react@18.3.1) '@radix-ui/react-direction': 1.1.0(@types/react@18.3.11)(react@18.3.1) '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-roving-focus': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.11)(react@18.3.1) '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.11)(react@18.3.1) '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.11)(react@18.3.1) @@ -4462,33 +4155,32 @@ snapshots: '@types/react': 18.3.11 '@types/react-dom': 18.3.1 - '@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-roving-focus@1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.1 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-direction': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-collection': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.11)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.11 '@types/react-dom': 18.3.1 - '@radix-ui/react-roving-focus@1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-roving-focus@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-collection': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.11)(react@18.3.1) '@radix-ui/react-context': 1.1.1(@types/react@18.3.11)(react@18.3.1) '@radix-ui/react-direction': 1.1.0(@types/react@18.3.11)(react@18.3.1) '@radix-ui/react-id': 1.1.0(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.11)(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.11)(react@18.3.1) react: 18.3.1 @@ -4497,15 +4189,15 @@ snapshots: '@types/react': 18.3.11 '@types/react-dom': 18.3.1 - '@radix-ui/react-scroll-area@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-scroll-area@1.2.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/number': 1.1.0 - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.11)(react@18.3.1) '@radix-ui/react-direction': 1.1.0(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.11)(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.11)(react@18.3.1) react: 18.3.1 @@ -4514,68 +4206,58 @@ snapshots: '@types/react': 18.3.11 '@types/react-dom': 18.3.1 - '@radix-ui/react-select@2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-select@2.1.6(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.1 - '@radix-ui/number': 1.0.1 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-direction': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-use-previous': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/number': 1.1.0 + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-popper': 1.2.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.2(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.5.5(@types/react@18.3.11)(react@18.3.1) + react-remove-scroll: 2.6.3(@types/react@18.3.11)(react@18.3.1) optionalDependencies: '@types/react': 18.3.11 '@types/react-dom': 18.3.1 - '@radix-ui/react-slot@1.0.2(@types/react@18.3.11)(react@18.3.1)': - dependencies: - '@babel/runtime': 7.24.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.11)(react@18.3.1) - react: 18.3.1 - optionalDependencies: - '@types/react': 18.3.11 - - '@radix-ui/react-slot@1.1.0(@types/react@18.3.11)(react@18.3.1)': + '@radix-ui/react-slot@1.1.1(@types/react@18.3.11)(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.11)(react@18.3.1) react: 18.3.1 optionalDependencies: '@types/react': 18.3.11 - '@radix-ui/react-slot@1.1.1(@types/react@18.3.11)(react@18.3.1)': + '@radix-ui/react-slot@1.1.2(@types/react@18.3.11)(react@18.3.1)': dependencies: '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.11)(react@18.3.1) react: 18.3.1 optionalDependencies: '@types/react': 18.3.11 - '@radix-ui/react-switch@1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-switch@1.1.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.1 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-use-previous': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-use-size': 1.0.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.11)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: @@ -4598,54 +4280,61 @@ snapshots: '@types/react': 18.3.11 '@types/react-dom': 18.3.1 - '@radix-ui/react-toast@1.1.5(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-tabs@1.1.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.1 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-context': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.11)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.11 '@types/react-dom': 18.3.1 - '@radix-ui/react-tooltip@1.0.7(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-toast@1.2.6(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.1 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.11 '@types/react-dom': 18.3.1 - '@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.3.11)(react@18.3.1)': + '@radix-ui/react-tooltip@1.1.8(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.1 + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-popper': 1.2.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.2(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.11 + '@types/react-dom': 18.3.1 '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.11)(react@18.3.1)': dependencies: @@ -4653,14 +4342,6 @@ snapshots: optionalDependencies: '@types/react': 18.3.11 - '@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.3.11)(react@18.3.1)': - dependencies: - '@babel/runtime': 7.24.1 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.11)(react@18.3.1) - react: 18.3.1 - optionalDependencies: - '@types/react': 18.3.11 - '@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.3.11)(react@18.3.1)': dependencies: '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.11)(react@18.3.1) @@ -4668,14 +4349,6 @@ snapshots: optionalDependencies: '@types/react': 18.3.11 - '@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.3.11)(react@18.3.1)': - dependencies: - '@babel/runtime': 7.24.1 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.11)(react@18.3.1) - react: 18.3.1 - optionalDependencies: - '@types/react': 18.3.11 - '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.3.11)(react@18.3.1)': dependencies: '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.11)(react@18.3.1) @@ -4683,40 +4356,18 @@ snapshots: optionalDependencies: '@types/react': 18.3.11 - '@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.3.11)(react@18.3.1)': - dependencies: - '@babel/runtime': 7.24.1 - react: 18.3.1 - optionalDependencies: - '@types/react': 18.3.11 - '@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.3.11)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.11 - '@radix-ui/react-use-previous@1.0.1(@types/react@18.3.11)(react@18.3.1)': - dependencies: - '@babel/runtime': 7.24.1 - react: 18.3.1 - optionalDependencies: - '@types/react': 18.3.11 - '@radix-ui/react-use-previous@1.1.0(@types/react@18.3.11)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.11 - '@radix-ui/react-use-rect@1.0.1(@types/react@18.3.11)(react@18.3.1)': - dependencies: - '@babel/runtime': 7.24.1 - '@radix-ui/rect': 1.0.1 - react: 18.3.1 - optionalDependencies: - '@types/react': 18.3.11 - '@radix-ui/react-use-rect@1.1.0(@types/react@18.3.11)(react@18.3.1)': dependencies: '@radix-ui/rect': 1.1.0 @@ -4724,14 +4375,6 @@ snapshots: optionalDependencies: '@types/react': 18.3.11 - '@radix-ui/react-use-size@1.0.1(@types/react@18.3.11)(react@18.3.1)': - dependencies: - '@babel/runtime': 7.24.1 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.11)(react@18.3.1) - react: 18.3.1 - optionalDependencies: - '@types/react': 18.3.11 - '@radix-ui/react-use-size@1.1.0(@types/react@18.3.11)(react@18.3.1)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.11)(react@18.3.1) @@ -4739,20 +4382,15 @@ snapshots: optionalDependencies: '@types/react': 18.3.11 - '@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-visually-hidden@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.1 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: '@types/react': 18.3.11 '@types/react-dom': 18.3.1 - '@radix-ui/rect@1.0.1': - dependencies: - '@babel/runtime': 7.24.1 - '@radix-ui/rect@1.1.0': {} '@reactflow/background@11.3.14(@types/react@18.3.11)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': @@ -5043,8 +4681,16 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + '@tanstack/react-table@8.21.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@tanstack/table-core': 8.21.2 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + '@tanstack/table-core@8.20.5': {} + '@tanstack/table-core@8.21.2': {} + '@tisoap/react-flow-smart-edge@3.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(reactflow@11.11.4(@types/react@18.3.11)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.7.3)': dependencies: pathfinding: 0.4.18 @@ -5355,32 +5001,34 @@ snapshots: loupe: 3.1.2 tinyrainbow: 2.0.0 - '@zenml-io/react-component-library@0.19.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/react-alert-dialog': 1.0.5(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-avatar': 1.0.4(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-checkbox': 1.0.4(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-collapsible': 1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-dropdown-menu': 2.0.6(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-hover-card': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-progress': 1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-radio-group': 1.2.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-scroll-area': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-select': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-switch': 1.0.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-tabs': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-toast': 1.1.5(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-tooltip': 1.0.7(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@tanstack/react-table': 8.20.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@zenml-io/react-component-library@0.22.0(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-alert-dialog': 1.1.6(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-avatar': 1.1.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-checkbox': 1.1.4(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-collapsible': 1.1.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-dialog': 1.1.6(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-dropdown-menu': 2.1.6(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-hover-card': 1.1.6(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-popover': 1.1.6(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-progress': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-radio-group': 1.2.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-scroll-area': 1.2.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-select': 2.1.6(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.2(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-switch': 1.1.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-tabs': 1.1.3(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-toast': 1.2.6(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-tooltip': 1.1.8(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@tanstack/react-table': 8.21.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/react': 18.3.11 '@types/react-dom': 18.3.1 class-variance-authority: 0.7.1 clsx: 2.1.1 + cmdk: 1.0.4(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - tailwind-merge: 2.2.2 + tailwind-merge: 2.6.0 acorn-jsx@5.3.2(acorn@8.11.3): dependencies: @@ -5557,6 +5205,18 @@ snapshots: clsx@2.1.1: {} + cmdk@1.0.4(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@radix-ui/react-dialog': 1.1.6(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + use-sync-external-store: 1.4.0(react@18.3.1) + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + color-convert@1.9.3: dependencies: color-name: 1.1.3 @@ -6009,10 +5669,6 @@ snapshots: inline-style-parser@0.2.3: {} - invariant@2.2.4: - dependencies: - loose-envify: 1.4.0 - is-alphabetical@2.0.1: {} is-alphanumerical@2.0.1: @@ -6699,22 +6355,22 @@ snapshots: transitivePeerDependencies: - supports-color - react-remove-scroll-bar@2.3.6(@types/react@18.3.11)(react@18.3.1): + react-remove-scroll-bar@2.3.8(@types/react@18.3.11)(react@18.3.1): dependencies: react: 18.3.1 - react-style-singleton: 2.2.1(@types/react@18.3.11)(react@18.3.1) + react-style-singleton: 2.2.3(@types/react@18.3.11)(react@18.3.1) tslib: 2.6.2 optionalDependencies: '@types/react': 18.3.11 - react-remove-scroll@2.5.5(@types/react@18.3.11)(react@18.3.1): + react-remove-scroll@2.6.3(@types/react@18.3.11)(react@18.3.1): dependencies: react: 18.3.1 - react-remove-scroll-bar: 2.3.6(@types/react@18.3.11)(react@18.3.1) - react-style-singleton: 2.2.1(@types/react@18.3.11)(react@18.3.1) + react-remove-scroll-bar: 2.3.8(@types/react@18.3.11)(react@18.3.1) + react-style-singleton: 2.2.3(@types/react@18.3.11)(react@18.3.1) tslib: 2.6.2 - use-callback-ref: 1.3.2(@types/react@18.3.11)(react@18.3.1) - use-sidecar: 1.1.2(@types/react@18.3.11)(react@18.3.1) + use-callback-ref: 1.3.3(@types/react@18.3.11)(react@18.3.1) + use-sidecar: 1.1.3(@types/react@18.3.11)(react@18.3.1) optionalDependencies: '@types/react': 18.3.11 @@ -6730,10 +6386,9 @@ snapshots: '@remix-run/router': 1.20.0 react: 18.3.1 - react-style-singleton@2.2.1(@types/react@18.3.11)(react@18.3.1): + react-style-singleton@2.2.3(@types/react@18.3.11)(react@18.3.1): dependencies: get-nonce: 1.0.1 - invariant: 2.2.4 react: 18.3.1 tslib: 2.6.2 optionalDependencies: @@ -6945,9 +6600,7 @@ snapshots: svg-parser@2.0.4: {} - tailwind-merge@2.2.2: - dependencies: - '@babel/runtime': 7.24.1 + tailwind-merge@2.6.0: {} tailwindcss-animate@1.0.7(tailwindcss@3.4.17): dependencies: @@ -7094,14 +6747,14 @@ snapshots: dependencies: punycode: 2.3.1 - use-callback-ref@1.3.2(@types/react@18.3.11)(react@18.3.1): + use-callback-ref@1.3.3(@types/react@18.3.11)(react@18.3.1): dependencies: react: 18.3.1 tslib: 2.6.2 optionalDependencies: '@types/react': 18.3.11 - use-sidecar@1.1.2(@types/react@18.3.11)(react@18.3.1): + use-sidecar@1.1.3(@types/react@18.3.11)(react@18.3.1): dependencies: detect-node-es: 1.1.0 react: 18.3.1 @@ -7113,6 +6766,10 @@ snapshots: dependencies: react: 18.3.1 + use-sync-external-store@1.4.0(react@18.3.1): + dependencies: + react: 18.3.1 + util-deprecate@1.0.2: {} vfile-message@4.0.2: diff --git a/src/app/components/StackComponentList.tsx b/src/app/components/StackComponentList.tsx index 389454fb..d3a60868 100644 --- a/src/app/components/StackComponentList.tsx +++ b/src/app/components/StackComponentList.tsx @@ -1,13 +1,15 @@ +import Plus from "@/assets/icons/plus.svg?react"; import Refresh from "@/assets/icons/refresh.svg?react"; - +import Pagination from "@/components/Pagination"; +import { SearchField } from "@/components/SearchField"; import { componentQueries } from "@/data/components"; +import { routes } from "@/router/routes"; import { useQuery } from "@tanstack/react-query"; +import { DataTable } from "@zenml-io/react-component-library"; import { Button, Skeleton } from "@zenml-io/react-component-library/components/server"; +import { Link } from "react-router-dom"; import { getComponentList } from "./columns"; import { useComponentlistQueryParams } from "./service"; -import { SearchField } from "../../components/SearchField"; -import { DataTable } from "@zenml-io/react-component-library"; -import Pagination from "../../components/Pagination"; export function StackComponentList() { const queryParams = useComponentlistQueryParams(); @@ -36,6 +38,12 @@ export function StackComponentList() { Refresh + diff --git a/src/app/components/[componentId]/edit/form-step.tsx b/src/app/components/[componentId]/edit/form-step.tsx new file mode 100644 index 00000000..17e070b7 --- /dev/null +++ b/src/app/components/[componentId]/edit/form-step.tsx @@ -0,0 +1,75 @@ +"use client"; + +import { Button, Skeleton } from "@zenml-io/react-component-library"; +import { useId } from "react"; +import * as Wizard from "@/components/wizard/Wizard"; +import { Link, useNavigate, useParams } from "react-router-dom"; +import { componentQueries } from "@/data/components"; +import { useQuery } from "@tanstack/react-query"; +import { routes } from "@/router/routes"; +import { ComponentConfigurationForm } from "@/components/stack-components/create-component/configuration-form"; + +export function EditComponentConfig() { + const navigate = useNavigate(); + const { componentId } = useParams() as { componentId: string }; + const component = useQuery({ + ...componentQueries.componentDetail(componentId), + throwOnError: true + }); + + function handleSuccess(id: string) { + navigate(routes.components.detail(id)); + } + + const formId = useId(); + if (component.isPending) { + return ; + } + + if (component.isError) { + return
Error
; + } + + const flavorId = component.data.resources?.flavor?.id; + + if (!flavorId) { + return
No flavor found
; + } + + return ( + <> + + + + + ); +} + +function FooterComponent({ formId, isPending }: { formId: string; isPending: boolean }) { + const params = useParams() as { componentId: string }; + + return ( + + + + + ); +} diff --git a/src/app/components/[componentId]/edit/page.tsx b/src/app/components/[componentId]/edit/page.tsx new file mode 100644 index 00000000..92b9fcf0 --- /dev/null +++ b/src/app/components/[componentId]/edit/page.tsx @@ -0,0 +1,12 @@ +import { Wrapper } from "@/components/wizard/Wizard"; +import { EditComponentConfig } from "./form-step"; + +export default function ComponentEditPage() { + return ( +
+ + + +
+ ); +} diff --git a/src/app/components/[componentId]/layout.tsx b/src/app/components/[componentId]/layout.tsx new file mode 100644 index 00000000..160fda09 --- /dev/null +++ b/src/app/components/[componentId]/layout.tsx @@ -0,0 +1,12 @@ +import { StackComponentsDetailHeader } from "@/components/stack-components/component-detail/Header"; +import { Outlet, useParams } from "react-router-dom"; + +export default function ComponentLayout() { + const { componentId } = useParams() as { componentId: string }; + return ( +
+ + +
+ ); +} diff --git a/src/app/components/[componentId]/page.tsx b/src/app/components/[componentId]/page.tsx index cee3dec9..7bbb9051 100644 --- a/src/app/components/[componentId]/page.tsx +++ b/src/app/components/[componentId]/page.tsx @@ -1,16 +1,14 @@ -import { useParams } from "react-router-dom"; -import { StackComponentsDetailHeader } from "../../../components/stack-components/component-detail/Header"; import { StackComponentTabs } from "@/components/stack-components/component-detail/Tabs"; -import { StackList } from "../../stacks/StackList"; +import { useParams } from "react-router-dom"; import { RunsBody } from "../../pipelines/RunsTab/RunsBody"; import { RunsSelectorProvider } from "../../pipelines/RunsTab/RunsSelectorContext"; +import { StackList } from "../../stacks/StackList"; export default function ComponentDetailPage() { const { componentId } = useParams() as { componentId: string }; return (
- } diff --git a/src/app/components/columns.tsx b/src/app/components/columns.tsx index 9cc1f168..1185255d 100644 --- a/src/app/components/columns.tsx +++ b/src/app/components/columns.tsx @@ -9,6 +9,7 @@ import { getUsername } from "@/lib/user"; import { StackComponent } from "@/types/components"; import { ColumnDef } from "@tanstack/react-table"; import { Tag } from "@zenml-io/react-component-library/components/server"; +import { ComponentDropdown } from "./component-dropdown"; export function getComponentList(): ColumnDef[] { return [ @@ -101,6 +102,13 @@ export function getComponentList(): ColumnDef[] {

) + }, + { + id: "admin_actions", + header: "", + cell: ({ row }) => { + return ; + } } ]; } diff --git a/src/app/components/component-dropdown.tsx b/src/app/components/component-dropdown.tsx new file mode 100644 index 00000000..315b48d4 --- /dev/null +++ b/src/app/components/component-dropdown.tsx @@ -0,0 +1,41 @@ +import DotsIcon from "@/assets/icons/dots-horizontal.svg?react"; +import Edit from "@/assets/icons/edit.svg?react"; +import { routes } from "@/router/routes"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger +} from "@zenml-io/react-component-library/components/client"; +import { Button } from "@zenml-io/react-component-library/components/server"; +import { useNavigate } from "react-router-dom"; + +type Props = { + id: string; +}; + +export function ComponentDropdown({ id }: Props) { + const navigate = useNavigate(); + return ( + + + + + + navigate(routes.components.edit(id))} + className="cursor-pointer space-x-2" + > + +

Edit

+
+
+
+ ); +} diff --git a/src/app/components/create/config-step.tsx b/src/app/components/create/config-step.tsx new file mode 100644 index 00000000..6823dfa3 --- /dev/null +++ b/src/app/components/create/config-step.tsx @@ -0,0 +1,72 @@ +import ArrowLeft from "@/assets/icons/arrow-left.svg?react"; +import { ComponentConfigurationForm } from "@/components/stack-components/create-component/configuration-form"; +import * as Wizard from "@/components/wizard/Wizard"; +import { snakeCaseToTitleCase } from "@/lib/strings"; +import { routes } from "@/router/routes"; +import { StackComponentType } from "@/types/components"; +import { Flavor } from "@/types/flavors"; +import { Button } from "@zenml-io/react-component-library/components/server"; +import { useId } from "react"; +import { Link, useNavigate } from "react-router-dom"; + +type Props = { + flavor: Flavor; + type: StackComponentType; + handleBack: () => void; +}; + +export function ConfiguratinStep({ flavor, type, handleBack }: Props) { + const formId = useId(); + const navigate = useNavigate(); + + function handleSuccess(id: string) { + navigate(routes.components.detail(id)); + } + + return ( + <> + + + + Configure your {snakeCaseToTitleCase(flavor.name)} {snakeCaseToTitleCase(type)} + + + + + + + ); +} + +function FooterComponent({ formId, isPending }: { formId: string; isPending: boolean }) { + return ( + + + + + ); +} diff --git a/src/app/components/create/flavor-step.tsx b/src/app/components/create/flavor-step.tsx new file mode 100644 index 00000000..52035e25 --- /dev/null +++ b/src/app/components/create/flavor-step.tsx @@ -0,0 +1,34 @@ +import ArrowLeft from "@/assets/icons/arrow-left.svg?react"; +import { SelectFlavorList } from "@/components/stack-components/create-component/flavor-select"; +import * as Wizard from "@/components/wizard/Wizard"; +import { StackComponentType } from "@/types/components"; +import { Flavor } from "@/types/flavors"; +import { Button } from "@zenml-io/react-component-library/components/server"; + +type Props = { + type: StackComponentType; + handleFlavorSelect: (flavor: Flavor) => void; + handleBack: () => void; +}; + +export function FlavorStep({ type, handleFlavorSelect, handleBack }: Props) { + return ( + <> + + + Select your Component Flavor + + + + + + ); +} diff --git a/src/app/components/create/header.tsx b/src/app/components/create/header.tsx new file mode 100644 index 00000000..5e71955a --- /dev/null +++ b/src/app/components/create/header.tsx @@ -0,0 +1,20 @@ +import Container from "@/assets/icons/container.svg?react"; +import { useEffect } from "react"; +import { PageHeader } from "../../../components/PageHeader"; +import { useBreadcrumbsContext } from "../../../layouts/AuthenticatedLayout/BreadcrumbsContext"; + +export function CreateComponentHeader() { + const { setCurrentBreadcrumbData } = useBreadcrumbsContext(); + + useEffect(() => { + setCurrentBreadcrumbData({ segment: "createComponent", data: null }); + }, []); + return ( + +
+ +

Register new Component

+
+
+ ); +} diff --git a/src/app/components/create/page.tsx b/src/app/components/create/page.tsx new file mode 100644 index 00000000..e8da8476 --- /dev/null +++ b/src/app/components/create/page.tsx @@ -0,0 +1,13 @@ +import { CreateComponentHeader } from "./header"; +import { RegisterComponentWizard } from "./wizard"; + +export default function ComponentCreatePage() { + return ( +
+ +
+ +
+
+ ); +} diff --git a/src/app/components/create/type-step.tsx b/src/app/components/create/type-step.tsx new file mode 100644 index 00000000..60034be6 --- /dev/null +++ b/src/app/components/create/type-step.tsx @@ -0,0 +1,42 @@ +import { ComponentIcon } from "@/components/ComponentIcon"; +import { snakeCaseToTitleCase } from "@/lib/strings"; +import { StackComponentType } from "@/types/components"; +import * as Wizard from "@/components/wizard/Wizard"; +import { stackComponentTypes } from "@/lib/constants"; + +type Props = { + selectTypeHandler: (type: StackComponentType) => void; +}; + +export function TypeSelect({ selectTypeHandler }: Props) { + return ( + <> + Select your Component Type + +
    + {stackComponentTypes.map((type) => ( + + ))} +
+
+ + ); +} + +type TypeItemProps = { + type: StackComponentType; +} & Props; +function TypeItem({ type, selectTypeHandler }: TypeItemProps) { + return ( + + ); +} diff --git a/src/app/components/create/wizard.tsx b/src/app/components/create/wizard.tsx new file mode 100644 index 00000000..e6fe094a --- /dev/null +++ b/src/app/components/create/wizard.tsx @@ -0,0 +1,39 @@ +import { Wrapper } from "@/components/wizard/Wizard"; +import { StackComponentType } from "@/types/components"; +import { Flavor } from "@/types/flavors"; +import { useState } from "react"; +import { ConfiguratinStep } from "./config-step"; +import { FlavorStep } from "./flavor-step"; +import { TypeSelect } from "./type-step"; + +export function RegisterComponentWizard() { + const [step, setStep] = useState(0); + const [type, setType] = useState(null); + const [flavor, setFlavor] = useState(); + + function selectTypeHandler(type: StackComponentType) { + setType(type); + setStep(1); + } + + function selectFlavorHandler(flavor: Flavor) { + setFlavor(flavor); + setStep(2); + } + + function goBack() { + setStep((step) => step - 1); + } + + return ( + + {step === 0 && } + {step === 1 && type && ( + + )} + {step === 2 && flavor && type && ( + + )} + + ); +} diff --git a/src/app/stacks/create/existing-infrastructure/steps/connect/AuthMethodSelect.tsx b/src/app/stacks/create/existing-infrastructure/steps/connect/AuthMethodSelect.tsx index 9b4cf460..c3d12145 100644 --- a/src/app/stacks/create/existing-infrastructure/steps/connect/AuthMethodSelect.tsx +++ b/src/app/stacks/create/existing-infrastructure/steps/connect/AuthMethodSelect.tsx @@ -1,5 +1,4 @@ import { useWizardContext } from "@/context/WizardContext"; -import { getZodSchemaFromConfig } from "@/lib/service-connectors"; import { useQuery } from "@tanstack/react-query"; import { Skeleton } from "@zenml-io/react-component-library"; import { @@ -15,16 +14,18 @@ import { Controller, useFormContext } from "react-hook-form"; import { CloudProviderIcon } from "@/components/ProviderIcon"; import { useSchemaContext } from "@/context/SchemaContext"; import { serviceConnectorQueries } from "@/data/service-connectors"; -import { ServiceConnectorConfigSchema } from "@/types/service-connectors"; +import { getZodSchemaFromConfig } from "@/lib/forms"; +import { JSONSchema } from "@/types/forms"; import { StackDeploymentProvider } from "@/types/stack"; import { useExistingInfraContext } from "../../ExistingInfraContext"; import { newConnectorBaseSchema } from "./schema"; +import { generateDefaultValues } from "@/components/form/helper"; export function AuthMethodSelect() { const { data } = useExistingInfraContext(); const { setCurrentStep } = useWizardContext(); const { control, watch, resetField } = useFormContext(); - const { setSchema } = useSchemaContext(); + const { setSchema, setDefaultValues } = useSchemaContext(); const connectorTypes = useQuery({ ...serviceConnectorQueries.serviceConnectorTypeDetail(data.connectorConfig?.type || "") }); @@ -46,11 +47,13 @@ export function AuthMethodSelect() { (method) => method.auth_method === selectedAuthMethod ); if (!authMethod) return; - const schema = getZodSchemaFromConfig( - (authMethod.config_schema as ServiceConnectorConfigSchema).properties, - (authMethod.config_schema as ServiceConnectorConfigSchema).required - ); + + const configSchema = authMethod.config_schema as JSONSchema; + + const schema = getZodSchemaFromConfig(configSchema); + const defaultValues = generateDefaultValues(configSchema); setSchema(newConnectorBaseSchema.merge(schema)); + setDefaultValues(defaultValues); const fields = Object.keys(schema.shape); fields.forEach((field) => resetField(field)); } diff --git a/src/app/stacks/create/existing-infrastructure/steps/connect/Configuration.tsx b/src/app/stacks/create/existing-infrastructure/steps/connect/Configuration.tsx index 2533b503..c050b843 100644 --- a/src/app/stacks/create/existing-infrastructure/steps/connect/Configuration.tsx +++ b/src/app/stacks/create/existing-infrastructure/steps/connect/Configuration.tsx @@ -2,11 +2,11 @@ import Lock from "@/assets/icons/Lock.svg?react"; import { useQuery } from "@tanstack/react-query"; import { Skeleton } from "@zenml-io/react-component-library/components/server"; import { useFormContext } from "react-hook-form"; -import { getisOptional } from "@/lib/service-connectors"; import { useExistingInfraContext } from "../../ExistingInfraContext"; import { serviceConnectorQueries } from "@/data/service-connectors"; -import { ServiceConnectorConfigSchema } from "@/types/service-connectors"; -import { DynamicField } from "@/components/form/DynamicField"; +import { JSONSchema } from "@/types/forms"; +import { DynamicField } from "@/components/form/form"; +import { getisOptional } from "@/lib/forms"; export function ConnectorConfig() { return ( @@ -44,8 +44,11 @@ function ConfigForm() { if (!authMethod) return null; - const properties = (authMethod.config_schema as ServiceConnectorConfigSchema).properties; - const required = (authMethod.config_schema as ServiceConnectorConfigSchema).required; + const schema = authMethod.config_schema as JSONSchema; + + const properties = schema.properties || {}; + const required = schema.required || []; + const defs = schema.$defs; // sort required properties first const sortedProperties = Object.entries(properties).sort(([key1], [key2]) => { @@ -58,6 +61,7 @@ function ConfigForm() {
{sortedProperties.map(([key, value]) => ( diff --git a/src/app/stacks/create/existing-infrastructure/steps/orchestrator/Form.tsx b/src/app/stacks/create/existing-infrastructure/steps/orchestrator/Form.tsx index dfa78323..396824c6 100644 --- a/src/app/stacks/create/existing-infrastructure/steps/orchestrator/Form.tsx +++ b/src/app/stacks/create/existing-infrastructure/steps/orchestrator/Form.tsx @@ -114,6 +114,7 @@ export function OrchestratorForm() { {Object.entries(orchestrator.required_configuration).map(([key, value]) => (
( diff --git a/src/app/stacks/create/manual/ComponentSelection.tsx b/src/app/stacks/create/manual/ComponentSelection.tsx index 64bfcabe..985455a6 100644 --- a/src/app/stacks/create/manual/ComponentSelection.tsx +++ b/src/app/stacks/create/manual/ComponentSelection.tsx @@ -1,6 +1,10 @@ +import { ComponentIcon } from "@/components/ComponentIcon"; +import { DisplayDate } from "@/components/DisplayDate"; +import { InlineAvatar } from "@/components/InlineAvatar"; import { componentQueries } from "@/data/components"; import { snakeCaseToLowerCase, snakeCaseToTitleCase } from "@/lib/strings"; import { sanitizeUrl } from "@/lib/url"; +import { StackComponentType } from "@/types/components"; import { TabsContent } from "@radix-ui/react-tabs"; import { useInfiniteQuery } from "@tanstack/react-query"; import { Button, Input, Spinner } from "@zenml-io/react-component-library/components/server"; @@ -8,18 +12,15 @@ import debounce from "lodash.debounce"; import { useCallback, useEffect, useState } from "react"; import { Controller, useFormContext } from "react-hook-form"; import { RadioItem, RadioItemLabel } from "../components/RadioItem"; -import { CreateComponentFallback } from "./CreateComponentModal"; -import { FormType, types } from "./schema"; -import { StackComponentType } from "@/types/components"; -import { ComponentIcon } from "@/components/ComponentIcon"; -import { DisplayDate } from "@/components/DisplayDate"; -import { InlineAvatar } from "@/components/InlineAvatar"; import { ComponentTooltip } from "./ComponentsTooltip"; +import { CreateComponentDialog } from "./create-component-modal"; +import { FormType } from "./schema"; +import { stackComponentTypes } from "@/lib/constants"; export function ComponentsSelection() { return ( <> - {types.map((type) => ( + {stackComponentTypes.map((type) => ( @@ -115,7 +116,7 @@ function ComponentList({ type, search }: Props & { search: string }) { )) )} - + {componentsList.hasNextPage && ( - - ); -} diff --git a/src/app/stacks/create/manual/CreateComponentModal.tsx b/src/app/stacks/create/manual/CreateComponentModal.tsx deleted file mode 100644 index ab5d70bf..00000000 --- a/src/app/stacks/create/manual/CreateComponentModal.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import { Codesnippet } from "@/components/CodeSnippet"; -import { snakeCaseToDashCase, snakeCaseToTitleCase } from "@/lib/strings"; -import { StackComponentType } from "@/types/components"; -import { - Dialog, - DialogContent, - DialogHeader, - DialogTitle, - DialogTrigger -} from "@zenml-io/react-component-library"; -import { ComponentPropsWithoutRef, ElementRef, forwardRef } from "react"; - -type Props = { - closeModal?: () => void; - type: StackComponentType; -}; - -export const CreateComponentFallback = forwardRef< - ElementRef, - ComponentPropsWithoutRef & Props ->(({ closeModal, type, children, ...rest }, ref) => { - return ( - - {children} - - - Create New - -
-
-

- Create a new {snakeCaseToTitleCase(type)} -

- -
-
-
-
- ); -}); - -CreateComponentFallback.displayName = "UpdateStackDialog"; diff --git a/src/app/stacks/create/manual/TypeOverview.tsx b/src/app/stacks/create/manual/TypeOverview.tsx index f33fd54a..d6b92fc5 100644 --- a/src/app/stacks/create/manual/TypeOverview.tsx +++ b/src/app/stacks/create/manual/TypeOverview.tsx @@ -6,7 +6,8 @@ import { Button, Input } from "@zenml-io/react-component-library/components/serv import { useFormContext } from "react-hook-form"; import { Link } from "react-router-dom"; import { TypeOverviewItem } from "./TypeOverviewItem"; -import { FormType, types } from "./schema"; +import { FormType } from "./schema"; +import { stackComponentTypes } from "@/lib/constants"; export function TypeOverview() { return ( @@ -40,7 +41,7 @@ function AddComponents() {
- {types.map((type) => ( + {stackComponentTypes.map((type) => (
diff --git a/src/app/stacks/create/manual/create-component-modal/configuration-step.tsx b/src/app/stacks/create/manual/create-component-modal/configuration-step.tsx new file mode 100644 index 00000000..319ddf1f --- /dev/null +++ b/src/app/stacks/create/manual/create-component-modal/configuration-step.tsx @@ -0,0 +1,74 @@ +import ArrowLeft from "@/assets/icons/arrow-left.svg?react"; +import { ComponentConfigurationForm } from "@/components/stack-components/create-component/configuration-form"; +import { snakeCaseToTitleCase } from "@/lib/strings"; +import { StackComponentType } from "@/types/components"; +import { + DialogClose, + DialogFooter, + DialogHeader, + DialogTitle +} from "@zenml-io/react-component-library/components/client"; +import { Button } from "@zenml-io/react-component-library/components/server"; +import { useId } from "react"; +import { SelectedFlavorState } from "."; + +type Props = SelectedFlavorState & { + type: StackComponentType; + backHandler: () => void; + successHandler: (id: string) => void; +}; + +export function ConfigurationStep({ name, id, backHandler, type, successHandler }: Props) { + const formId = useId(); + return ( + <> + +
+ + + Configure your {snakeCaseToTitleCase(name)} {snakeCaseToTitleCase(type)} + +
+
+ + + ); +} + +function FooterComponent({ formId, isPending }: { formId: string; isPending: boolean }) { + return ( + +
+ + + + +
+
+ ); +} diff --git a/src/app/stacks/create/manual/create-component-modal/flavor-select.tsx b/src/app/stacks/create/manual/create-component-modal/flavor-select.tsx new file mode 100644 index 00000000..2a573000 --- /dev/null +++ b/src/app/stacks/create/manual/create-component-modal/flavor-select.tsx @@ -0,0 +1,28 @@ +import { SelectFlavorList } from "@/components/stack-components/create-component/flavor-select"; +import { snakeCaseToTitleCase } from "@/lib/strings"; +import { StackComponentType } from "@/types/components"; +import { Flavor } from "@/types/flavors"; +import { + DialogHeader, + DialogTitle, + ScrollArea +} from "@zenml-io/react-component-library/components/client"; + +type Props = { + type: StackComponentType; + setSelectedFlavor: (flavor: Flavor) => void; +}; +export function SelectFlavorStep({ type, setSelectedFlavor }: Props) { + return ( + <> + + Select {snakeCaseToTitleCase(type)} Flavor + + +
+ +
+
+ + ); +} diff --git a/src/app/stacks/create/manual/create-component-modal/index.tsx b/src/app/stacks/create/manual/create-component-modal/index.tsx new file mode 100644 index 00000000..073ca2cc --- /dev/null +++ b/src/app/stacks/create/manual/create-component-modal/index.tsx @@ -0,0 +1,69 @@ +import { Dialog, DialogContent, DialogTrigger } from "@zenml-io/react-component-library"; +import { snakeCaseToTitleCase } from "@/lib/strings"; +import { StackComponentType } from "@/types/components"; +import { SelectFlavorStep } from "./flavor-select"; +import { useState } from "react"; +import { Flavor } from "@/types/flavors"; +import { ConfigurationStep } from "./configuration-step"; +import { sleep } from "@/lib/common"; + +type Props = { + type: StackComponentType; +}; + +export type SelectedFlavorState = { + name: string; + id: string; + logoUrl?: string; +}; + +export function CreateComponentDialog({ type }: Props) { + const [dialogOpen, setDialogOpen] = useState(false); + const [step, setStep] = useState(0); + const [selectedFlavor, setSelectedFlavor] = useState(null); + + async function handleOpenChange(open: boolean) { + setDialogOpen(open); + // Not a clean solution, but prevents the flickering on close + await sleep(100); + if (!open) { + setStep(0); + setSelectedFlavor(null); + } + } + + function setFlavorIdAndNext(flavor: Flavor) { + setSelectedFlavor({ + id: flavor.id, + name: flavor.name, + logoUrl: flavor.body?.logo_url ?? undefined + }); + setStep((prev) => prev + 1); + } + + function goBack() { + setStep(0); + setSelectedFlavor(null); + } + + return ( + handleOpenChange(bool)}> + + + + + {step === 0 && } + {step === 1 && !!selectedFlavor && ( + handleOpenChange(false)} + backHandler={goBack} + {...selectedFlavor} + type={type} + /> + )} + + + ); +} diff --git a/src/app/stacks/create/manual/schema.ts b/src/app/stacks/create/manual/schema.ts index eb196fd4..bfa06535 100644 --- a/src/app/stacks/create/manual/schema.ts +++ b/src/app/stacks/create/manual/schema.ts @@ -1,21 +1,6 @@ -import { StackComponentType } from "@/types/components"; import { z } from "zod"; import { stackNameSchema } from "../components/sharedSchema"; - -export const types: StackComponentType[] = [ - "orchestrator", - "artifact_store", - "container_registry", - "step_operator", - "model_deployer", - "feature_store", - "experiment_tracker", - "alerter", - "annotator", - "data_validator", - "image_builder", - "model_registry" -] as const; +import { stackComponentTypes } from "@/lib/constants"; const componentSchema = z.object({ id: z.string().trim().min(1), @@ -23,13 +8,13 @@ const componentSchema = z.object({ logoUrl: z.string().trim().min(1) }); -const typeSchema = types.reduce( +const typeSchema = stackComponentTypes.reduce( (schema, type) => { schema[type] = componentSchema.nullable(); return schema; }, {} as Record< - (typeof types)[number], + (typeof stackComponentTypes)[number], z.ZodNullable> > ); diff --git a/src/components/breadcrumbs/SegmentsBreadcrumbs.tsx b/src/components/breadcrumbs/SegmentsBreadcrumbs.tsx index 4459d623..6e6bb3d4 100644 --- a/src/components/breadcrumbs/SegmentsBreadcrumbs.tsx +++ b/src/components/breadcrumbs/SegmentsBreadcrumbs.tsx @@ -28,6 +28,10 @@ export const matchSegmentWithRequest = ({ segment, data }: { segment: string; da stacks: { name: "Stacks" }, create: { name: "New Stack" } }, + createComponent: { + components: { name: "Components" }, + createComponent: { name: "New Component" } + }, components: { components: { name: "Components" } }, @@ -38,6 +42,14 @@ export const matchSegmentWithRequest = ({ segment, data }: { segment: string; da name: data?.name } }, + componentEdit: { + components: { name: "Components" }, + component_detail: { + id: data?.id, + name: data?.name + }, + component_edit: { name: "Edit", id: data?.id } + }, secrets: { secrets: { name: "Secrets" } }, @@ -115,6 +127,8 @@ export const matchSegmentWithURL = (segment: string, id: string) => { secrets: routes.settings.secrets.overview, //components components: routes.components.overview, + component_detail: routes.components.detail(id), + component_edit: routes.components.edit(id), upgrade: routes.upgrade, // Service Accounts service_accounts: routes.settings.service_accounts.overview diff --git a/src/components/form/DynamicField.tsx b/src/components/form/DynamicField.tsx deleted file mode 100644 index d4dc3751..00000000 --- a/src/components/form/DynamicField.tsx +++ /dev/null @@ -1,112 +0,0 @@ -import Plus from "@/assets/icons/plus.svg?react"; -import Trash from "@/assets/icons/trash.svg?react"; -import { ConnectorConfigPropertiesBody } from "@/types/service-connectors"; -import { Switch, Button, Input } from "@zenml-io/react-component-library"; -import { Controller, useFieldArray, useFormContext } from "react-hook-form"; - -type DynamicFieldProps = { - schema: ConnectorConfigPropertiesBody; - name: string; - isOptional: boolean; -}; - -export function DynamicField({ schema, name, isOptional }: DynamicFieldProps) { - const type = schema.type || schema.anyOf?.find((item) => item.type !== null)?.type; - - if (!type) return null; - - switch (type) { - case "string": - return ; - case "array": - return ; - case "boolean": - return ; - default: - return null; - } -} - -function DynamicInput({ name, schema, isOptional }: DynamicFieldProps) { - const form = useFormContext(); - const isPassword = schema.format === "password"; - return ( -
- - ( - - )} - /> -
- ); -} - -function DynamicArray({ name, schema, isOptional }: DynamicFieldProps) { - const { control } = useFormContext(); - const { fields, append, remove } = useFieldArray({ name, control }); - - return ( -
- -
    - {fields.map((field, index) => ( -
  • - } - /> - -
  • - ))} -
- -
- ); -} - -function DynamicBoolean({ name, schema, isOptional }: DynamicFieldProps) { - const form = useFormContext(); - const defaultValue = schema.default || false; - return ( -
- - ( - onChange(e)} {...rest} /> - )} - /> -
- ); -} diff --git a/src/components/form/array-field-renderer.tsx b/src/components/form/array-field-renderer.tsx new file mode 100644 index 00000000..79d257ea --- /dev/null +++ b/src/components/form/array-field-renderer.tsx @@ -0,0 +1,56 @@ +import Plus from "@/assets/icons/plus.svg?react"; +import Trash from "@/assets/icons/trash.svg?react"; +import { Button } from "@zenml-io/react-component-library/components/server"; +import { useFieldArray, useFormContext } from "react-hook-form"; +import { JSONSchema } from "../../types/forms"; +import { RendererHeadline } from "./common"; +import { DynamicField } from "./form"; +import { DynamicFieldProps } from "./helper"; + +export function ArrayFieldRenderer({ + name, + label, + isOptional, + schema, + definitions +}: DynamicFieldProps & { definitions: JSONSchema["$defs"] }) { + const form = useFormContext(); + const { fields, append, remove } = useFieldArray({ name: name, control: form.control }); + + return ( +
+ {!!label && ( + + )} +
    + {fields.map((field, index) => ( +
  • + + +
  • + ))} +
+ +
+ ); +} diff --git a/src/components/form/boolean-field-renderer.tsx b/src/components/form/boolean-field-renderer.tsx new file mode 100644 index 00000000..1efebc9d --- /dev/null +++ b/src/components/form/boolean-field-renderer.tsx @@ -0,0 +1,26 @@ +import { Controller, useFormContext } from "react-hook-form"; +import { DynamicFieldProps } from "./helper"; +import { Switch } from "@zenml-io/react-component-library/components/client"; +import { RendererHeadline } from "./common"; + +export function BooleanFieldRenderer({ name, isOptional, label }: DynamicFieldProps) { + const form = useFormContext(); + const errors = form.formState.errors[name]; + return ( +
+ {!!label && ( + + )} + ( + onChange(e)} {...rest} /> + )} + /> + {errors &&

{errors.message?.toString()}

} +
+ ); +} diff --git a/src/components/form/common.tsx b/src/components/form/common.tsx new file mode 100644 index 00000000..08e13edc --- /dev/null +++ b/src/components/form/common.tsx @@ -0,0 +1,17 @@ +type Props = { + label: string; + isOptional: boolean; +}; + +export function RendererHeadline({ label, isOptional }: Props) { + return ( + <> + {label} + {!isOptional && ( + + * + + )} + + ); +} diff --git a/src/components/form/enum-field-renderer.tsx b/src/components/form/enum-field-renderer.tsx new file mode 100644 index 00000000..4d299ee1 --- /dev/null +++ b/src/components/form/enum-field-renderer.tsx @@ -0,0 +1,56 @@ +import { Controller, useFormContext } from "react-hook-form"; +import { DynamicFieldProps } from "./helper"; +import { + ScrollArea, + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue +} from "@zenml-io/react-component-library/components/client"; +import { RendererHeadline } from "./common"; + +export function EnumFieldRenderer({ + name, + label, + isOptional, + enumValues +}: DynamicFieldProps & { enumValues: string[] }) { + const form = useFormContext(); + + const errors = form.formState.errors[name]; + + return ( +
+ {!!label && ( + + )} + ( + + )} + /> + {errors &&

{errors.message?.toString()}

} +
+ ); +} diff --git a/src/components/form/form.tsx b/src/components/form/form.tsx new file mode 100644 index 00000000..3481fb17 --- /dev/null +++ b/src/components/form/form.tsx @@ -0,0 +1,130 @@ +import { JSONSchemaDefinition } from "@/types/forms"; +import { ArrayFieldRenderer } from "./array-field-renderer"; +import { BooleanFieldRenderer } from "./boolean-field-renderer"; +import { EnumFieldRenderer } from "./enum-field-renderer"; +import { + getEnumValues, + getNameFromSchema, + isArrayField, + isBooleanField, + isEnumField, + isIntegerField, + isObjectField, + isSensitiveField, + isTextField, + resolveRef +} from "./helper"; +import { IntegerFieldRenderer } from "./integer-field-renderer"; +import { ObjectFieldRenderer } from "./object-field-renderer"; +import { TextFieldRenderer } from "./text-field-renderer"; +import { SensitiveTextRenderer } from "./sensitive-text-renderer"; + +type Props = { + definitions: JSONSchemaDefinition["$defs"]; + name: string; + isOptional: boolean; + schema: JSONSchemaDefinition; + isNested?: boolean; +}; + +export function DynamicField({ schema, name, isOptional, definitions, isNested }: Props) { + let resolvedSchema = resolveRef(schema, definitions); + + // If this is an array item, use the items schema + if (isNested && resolvedSchema.items) { + resolvedSchema = resolveRef(resolvedSchema.items, definitions); + } + + if (isNested && resolvedSchema.prefixItems) { + resolvedSchema = resolveRef(resolvedSchema.prefixItems[0], definitions); + } + + const label = isNested ? "" : getNameFromSchema(resolvedSchema, name); + + if (resolvedSchema.anyOf) { + const nonNullOption = resolvedSchema.anyOf.find((option) => option.type !== null); + if (nonNullOption) { + const resolvedNullOption = resolveRef(nonNullOption, definitions); + resolvedSchema = { ...resolvedSchema, ...resolvedNullOption }; + } + } + if (resolvedSchema.allOf) { + const resolvedAllOf = resolveRef(resolvedSchema.allOf[0], definitions); + resolvedSchema = { ...resolvedSchema, ...resolvedAllOf }; + } + + if (isEnumField(resolvedSchema)) { + return ( + + ); + } + + if (isSensitiveField(resolvedSchema)) { + return ( + + ); + } + + if (isIntegerField(resolvedSchema)) { + return ( + + ); + } + if (isTextField(resolvedSchema)) { + return ( + + ); + } + if (isBooleanField(resolvedSchema)) { + return ( + + ); + } + if (isObjectField(resolvedSchema) || (isArrayField(resolvedSchema) && isNested)) { + return ( + + ); + } + if (isArrayField(resolvedSchema)) { + return ( + + ); + } +} diff --git a/src/components/form/helper.spec.ts b/src/components/form/helper.spec.ts new file mode 100644 index 00000000..5998bc14 --- /dev/null +++ b/src/components/form/helper.spec.ts @@ -0,0 +1,163 @@ +import { describe, expect, test } from "vitest"; +import { + isEnumField, + isArrayField, + isSensitiveField, + isBooleanField, + isObjectField, + isIntegerField, + isTextField, + resolveRef, + generateDefaultValues, + getEnumValues, + getNameFromSchema +} from "./helper"; +import { JSONSchemaDefinition, JSONSchema } from "@/types/forms"; + +// Start Generation Here +describe("isEnumField", () => { + test("should return true for a schema with an enum property", () => { + const schema: JSONSchemaDefinition = { enum: ["option1", "option2"], type: "string" }; + expect(isEnumField(schema)).toBe(true); + }); + + test("should return false for a schema without an enum property", () => { + const schema: JSONSchemaDefinition = { type: "string" }; + expect(isEnumField(schema)).toBe(false); + }); + test("should return false for a schema that is not a string", () => { + const schema: JSONSchemaDefinition = { type: "integer" }; + expect(isEnumField(schema)).toBe(false); + }); +}); + +describe("isArrayField", () => { + test("should return true for a schema with an array type", () => { + const schema: JSONSchemaDefinition = { type: "array" }; + expect(isArrayField(schema)).toBe(true); + }); + + test("should return false for a schema that is not an array", () => { + const schema: JSONSchemaDefinition = { type: "string" }; + expect(isArrayField(schema)).toBe(false); + }); +}); + +describe("isSensitiveField", () => { + test("should return true for a schema with a sensitive property", () => { + const schema: JSONSchemaDefinition = { sensitive: true, type: "string" }; + expect(isSensitiveField(schema)).toBe(true); + }); + + test("should return false for a schema that is not a string", () => { + const schema: JSONSchemaDefinition = { type: "integer" }; + expect(isSensitiveField(schema)).toBe(false); + }); +}); + +describe("isBooleanField", () => { + test("should return true for a schema with type boolean", () => { + const schema: JSONSchemaDefinition = { type: "boolean" }; + expect(isBooleanField(schema)).toBe(true); + }); + + test("should return false for a schema with a non-boolean type", () => { + const schema: JSONSchemaDefinition = { type: "string" }; + expect(isBooleanField(schema)).toBe(false); + }); +}); + +describe("isObjectField", () => { + test("should return true for a schema with type object", () => { + const schema: JSONSchemaDefinition = { type: "object" }; + expect(isObjectField(schema)).toBe(true); + }); + + test("should return false for a schema with a non-object type", () => { + const schema: JSONSchemaDefinition = { type: "array" }; + expect(isObjectField(schema)).toBe(false); + }); +}); + +describe("isIntegerField", () => { + test("should return true for a schema with type integer", () => { + const schema: JSONSchemaDefinition = { type: "integer" }; + expect(isIntegerField(schema)).toBe(true); + }); + + test("should return false for a schema with a non-integer type", () => { + const schema: JSONSchemaDefinition = { type: "string" }; + expect(isIntegerField(schema)).toBe(false); + }); +}); + +describe("isTextField", () => { + test("should return true for a schema with type string", () => { + const schema: JSONSchemaDefinition = { type: "string" }; + expect(isTextField(schema)).toBe(true); + }); + + test("should return false for a schema with a non-string type", () => { + const schema: JSONSchemaDefinition = { type: "object" }; + expect(isTextField(schema)).toBe(false); + }); +}); + +describe("resolveRef", () => { + test("should return the resolved schema", () => { + const schema: JSONSchemaDefinition = { $ref: "#/$defs/test" }; + const definitions: JSONSchema["$defs"] = { test: { type: "string" } }; + expect(resolveRef(schema, definitions)).toEqual({ type: "string" }); + }); + + test("should return the original schema if the $ref is not found in the definitions", () => { + const schema: JSONSchemaDefinition = { $ref: "#/$defs/test" }; + const definitions: JSONSchema["$defs"] = undefined; + expect(resolveRef(schema, definitions)).toEqual(schema); + }); +}); + +describe("getEnumValues", () => { + test("should return the enum values", () => { + const schema: JSONSchemaDefinition = { enum: ["option1", "option2"], type: "string" }; + expect(getEnumValues(schema)).toEqual(["option1", "option2"]); + }); +}); + +describe("generateDefaultValues", () => { + test("should return the default values for a string", () => { + const schema: JSONSchemaDefinition = { properties: { test: { default: "defaultValue" } } }; + expect(generateDefaultValues(schema)).toEqual({ test: "defaultValue" }); + }); + test("should return the default values for a boolean", () => { + const schema: JSONSchemaDefinition = { + properties: { test: { default: true, type: "boolean" } } + }; + expect(generateDefaultValues(schema)).toEqual({ test: true }); + }); + test("should return the default values for an object", () => { + const schema: JSONSchemaDefinition = { + properties: { test: { default: { test: "defaultValue" }, type: "object" } } + }; + expect(generateDefaultValues(schema)).toEqual({ + test: JSON.stringify({ test: "defaultValue" }) + }); + }); + test("should return the default values for an array", () => { + const schema: JSONSchemaDefinition = { + properties: { test: { default: ["defaultValue"], type: "array" } } + }; + expect(generateDefaultValues(schema)).toEqual({ test: ["defaultValue"] }); + }); +}); + +describe("getNameFromSchema", () => { + test("should return the name from the schema", () => { + const schema: JSONSchemaDefinition = { type: "string", title: "Test" }; + expect(getNameFromSchema(schema, "test")).toEqual("Test"); + }); + test("should return the name from the key name", () => { + const schema: JSONSchemaDefinition = { type: "string" }; + expect(getNameFromSchema(schema, "keyName")).toEqual("KeyName"); + }); +}); diff --git a/src/components/form/helper.ts b/src/components/form/helper.ts new file mode 100644 index 00000000..f5cc9b29 --- /dev/null +++ b/src/components/form/helper.ts @@ -0,0 +1,100 @@ +import { snakeCaseToTitleCase } from "@/lib/strings"; +import { JSONSchemaDefinition } from "@/types/forms"; +import { isArray, isObject } from "@/lib/type-guards"; + +export function isTextField(schema: JSONSchemaDefinition) { + return schema.type === "string"; +} + +export function isEnumField(schema: JSONSchemaDefinition) { + return schema.type === "string" && schema.enum !== undefined; +} + +export function isSensitiveField(schema: JSONSchemaDefinition) { + return schema.type === "string" && !!schema.sensitive; +} + +export function isBooleanField(schema: JSONSchemaDefinition) { + return schema.type === "boolean"; +} + +export function isObjectField(schema: JSONSchemaDefinition) { + return schema.type === "object"; +} + +export function isArrayField(schema: JSONSchemaDefinition) { + return schema.type === "array"; +} + +export function isIntegerField(schema: JSONSchemaDefinition) { + return schema.type === "integer"; +} + +export function getEnumValues(schema: JSONSchemaDefinition): string[] { + return schema.enum?.map((item) => item.toString()) || []; +} + +export function resolveRef( + schema: JSONSchemaDefinition, + definitions?: JSONSchemaDefinition["$defs"] +): JSONSchemaDefinition { + if (!schema.$ref || !definitions) return schema; + + const refPath = schema.$ref.replace("#/$defs/", ""); + const resolvedSchema = definitions[refPath]; + + if (!resolvedSchema) { + console.error(`Could not resolve $ref: ${schema.$ref}`); + } + + return resolvedSchema; +} + +export type DynamicFieldProps = { + schema: JSONSchemaDefinition; + name: string; + label: string; + isOptional: boolean; +}; + +export function getNameFromSchema(schema: JSONSchemaDefinition, keyName: string) { + if (schema.title) return schema.title; + return snakeCaseToTitleCase(keyName); +} + +export function generateDefaultValues( + schema: JSONSchemaDefinition, + initialValues?: Record +) { + const defaultValues = Object.entries(schema.properties || {}).reduce((acc, [key, prop]) => { + let value: string | boolean | object | unknown[] = ""; + + if (prop.default) { + if (isBooleanField(prop)) { + value = prop.default; + } else if (isObjectField(prop)) { + value = JSON.stringify(prop.default); + } else if (isArrayField(prop)) { + value = prop.default; + } else { + value = prop.default.toString(); + } + } else if (isArrayField(prop)) { + value = []; + } + + return { ...acc, [key]: value }; + }, {}); + + if (initialValues) { + Object.entries(initialValues).forEach(([key, value]) => { + (defaultValues as Record)[key] = isArray(value) + ? value.map((i) => JSON.stringify(i)) + : isObject(value) + ? JSON.stringify(value) + : value; + }); + } + + return defaultValues; +} diff --git a/src/components/form/integer-field-renderer.tsx b/src/components/form/integer-field-renderer.tsx new file mode 100644 index 00000000..bfb995be --- /dev/null +++ b/src/components/form/integer-field-renderer.tsx @@ -0,0 +1,35 @@ +import { Controller, useFormContext } from "react-hook-form"; +import { DynamicFieldProps } from "./helper"; +import { Input } from "@zenml-io/react-component-library/components/server"; +import { RendererHeadline } from "./common"; + +export function IntegerFieldRenderer({ name, isOptional, label }: DynamicFieldProps) { + const form = useFormContext(); + + const errors = form.formState.errors[name]; + + return ( +
+ {!!label && ( + + )} + ( + + )} + /> + {errors &&

{errors.message?.toString()}

} +
+ ); +} diff --git a/src/components/form/object-field-renderer.tsx b/src/components/form/object-field-renderer.tsx new file mode 100644 index 00000000..220b0022 --- /dev/null +++ b/src/components/form/object-field-renderer.tsx @@ -0,0 +1,37 @@ +import { Controller, useFormContext } from "react-hook-form"; +import { inputVariants } from "@zenml-io/react-component-library/components/server"; +import { DynamicFieldProps } from "./helper"; +import { RendererHeadline } from "./common"; + +export function ObjectFieldRenderer({ name, label, isOptional }: DynamicFieldProps) { + const form = useFormContext(); + const errors = form.formState.errors[name]; + + return ( +
+ {!!label && ( + + )} + ( +