korbit-ai[bot] commented on code in PR #33782:
URL: https://github.com/apache/superset/pull/33782#discussion_r2150678684


##########
superset-frontend/packages/superset-ui-core/src/components/Loading/index.tsx:
##########
@@ -38,28 +60,31 @@ const LoaderImg = styled.img`
     display: block;
   }
   &.floating {
-    padding: 0;
+    /* padding: 0; */
     margin: 0;
     position: absolute;
     left: 50%;
     top: 50%;
     transform: translate(-50%, -50%);
   }
 `;
-export function Loading({
-  position = 'floating',
-  image,
-  className,
-}: LoadingProps) {
+export function Loading({ position = 'floating', className }: LoadingProps) {
+  const [svgContent, setSvgContent] = useState('');
+
+  useEffect(() => {
+    console.log('Loading SVG');

Review Comment:
   ### Debug Statement in Production <sub>![category 
Design](https://img.shields.io/badge/Design-0d9488)</sub>
   
   <details>
     <summary>Tell me more</summary>
   
   ###### What is the issue?
   Debug console.log statement left in production code.
   
   
   ###### Why this matters
   Leaving debug statements in production code violates clean code principles 
and can clutter the console in production environments.
   
   ###### Suggested change ∙ *Feature Preview*
   Remove the console.log statement or replace it with proper logging:
   ```typescript
   useEffect(() => {
     fetch('/static/assets/images/spinner.svg')
       .then(response => response.text())
       .then(setSvgContent);
   }, []);
   ```
   
   
   ###### Provide feedback to improve future suggestions
   [![Nice 
Catch](https://img.shields.io/badge/👍%20Nice%20Catch-71BC78)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/52cc0229-94c4-4c11-9939-16cfa25280e4/upvote)
 
[![Incorrect](https://img.shields.io/badge/👎%20Incorrect-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/52cc0229-94c4-4c11-9939-16cfa25280e4?what_not_true=true)
  [![Not in 
Scope](https://img.shields.io/badge/👎%20Out%20of%20PR%20scope-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/52cc0229-94c4-4c11-9939-16cfa25280e4?what_out_of_scope=true)
 [![Not in coding 
standard](https://img.shields.io/badge/👎%20Not%20in%20our%20standards-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/52cc0229-94c4-4c11-9939-16cfa25280e4?what_not_in_standard=true)
 
[![Other](https://img.shields.io/badge/👎%20Other-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/52cc0229-94c4-4c11-9939-16cfa25280e4)
   </details>
   
   <sub>
   
   💬 Looking for more details? Reply to this comment to chat with Korbit.
   </sub>
   
   <!--- korbi internal id:f7544d7f-5cc1-4dd2-87f3-674f50646cf3 -->
   
   
   [](f7544d7f-5cc1-4dd2-87f3-674f50646cf3)



##########
superset/templates/superset/basic.html:
##########
@@ -63,16 +76,66 @@
 
     {% block body %}
       <div id="app" data-bootstrap="{{ bootstrap_data }}">
-        <img
-          src="{{ assets_prefix }}/static/assets/images/loading.gif"
-          style="
-            width: 50px;
-            position: absolute;
-            top: 50%;
-            left: 50%;
-            transform: translate(-50%, -50%);
-          "
-        />
+      <div class="spinner">
+        <svg
+        viewBox="-36 -25 72 50"
+        xmlns="http://www.w3.org/2000/svg";
+        overflow="visible"
+      >
+        <defs>
+          <filter id="shadow1" x="-50%" y="-50%" width="200%" height="200%">
+            <feDropShadow
+              dx="1"
+              dy="1"
+              stdDeviation="2"
+              flood-color="rgba(0,0,0,0.3)"
+            />
+          </filter>
+          <path
+            id="morphPath"
+            d="M 0,0 C 7,16 22,8.7 22,0 22,-8.7 7,-16 0,0 -7,16 -22,8.7 -22,-0 
-22,-8.7 -7,-16 0,0 Z"
+            stroke-width="7"
+            fill="transparent"
+            filter="url(#shadow1)"
+          >
+            <animate
+              attributeName="d"
+              dur="8s"
+              repeatCount="indefinite"
+              values="M 0,0 C 7,16 22,8.7 22,0 22,-8.7 7,-16 0,0 -7,16 -22,8.7 
-22,-0 -22,-8.7 -7,-16 0,0 Z;

Review Comment:
   ### Inefficient Animation Duration <sub>![category 
Performance](https://img.shields.io/badge/Performance-4f46e5)</sub>
   
   <details>
     <summary>Tell me more</summary>
   
   ###### What is the issue?
   The SVG animation duration is set to 8 seconds which is unnecessarily long 
for a loading spinner animation cycle.
   
   
   ###### Why this matters
   Long animation cycles can make the loading indicator appear sluggish and 
unresponsive, potentially giving users the impression that the application is 
slower than it actually is.
   
   ###### Suggested change ∙ *Feature Preview*
   Reduce the animation duration to 2-3 seconds for a more responsive feel:
   ```html
   <animate
     attributeName="d"
     dur="2s"
     repeatCount="indefinite"
     values="..."
   ```
   
   
   ###### Provide feedback to improve future suggestions
   [![Nice 
Catch](https://img.shields.io/badge/👍%20Nice%20Catch-71BC78)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/c3f249c1-6562-4c02-8bed-bb878c2bbf60/upvote)
 
[![Incorrect](https://img.shields.io/badge/👎%20Incorrect-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/c3f249c1-6562-4c02-8bed-bb878c2bbf60?what_not_true=true)
  [![Not in 
Scope](https://img.shields.io/badge/👎%20Out%20of%20PR%20scope-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/c3f249c1-6562-4c02-8bed-bb878c2bbf60?what_out_of_scope=true)
 [![Not in coding 
standard](https://img.shields.io/badge/👎%20Not%20in%20our%20standards-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/c3f249c1-6562-4c02-8bed-bb878c2bbf60?what_not_in_standard=true)
 
[![Other](https://img.shields.io/badge/👎%20Other-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/c3f249c1-6562-4c02-8bed-bb878c2bbf60)
   </details>
   
   <sub>
   
   💬 Looking for more details? Reply to this comment to chat with Korbit.
   </sub>
   
   <!--- korbi internal id:7637337d-2aa5-4dbe-946d-1d52fef519fd -->
   
   
   [](7637337d-2aa5-4dbe-946d-1d52fef519fd)



##########
superset/templates/superset/basic.html:
##########
@@ -63,16 +76,66 @@
 
     {% block body %}
       <div id="app" data-bootstrap="{{ bootstrap_data }}">
-        <img
-          src="{{ assets_prefix }}/static/assets/images/loading.gif"
-          style="
-            width: 50px;
-            position: absolute;
-            top: 50%;
-            left: 50%;
-            transform: translate(-50%, -50%);
-          "
-        />
+      <div class="spinner">
+        <svg
+        viewBox="-36 -25 72 50"
+        xmlns="http://www.w3.org/2000/svg";
+        overflow="visible"
+      >
+        <defs>
+          <filter id="shadow1" x="-50%" y="-50%" width="200%" height="200%">
+            <feDropShadow
+              dx="1"
+              dy="1"
+              stdDeviation="2"
+              flood-color="rgba(0,0,0,0.3)"
+            />
+          </filter>
+          <path
+            id="morphPath"
+            d="M 0,0 C 7,16 22,8.7 22,0 22,-8.7 7,-16 0,0 -7,16 -22,8.7 -22,-0 
-22,-8.7 -7,-16 0,0 Z"
+            stroke-width="7"
+            fill="transparent"
+            filter="url(#shadow1)"
+          >
+            <animate
+              attributeName="d"
+              dur="8s"
+              repeatCount="indefinite"
+              values="M 0,0 C 7,16 22,8.7 22,0 22,-8.7 7,-16 0,0 -7,16 -22,8.7 
-22,-0 -22,-8.7 -7,-16 0,0 Z;

Review Comment:
   ### Redundant Animation Keyframes <sub>![category 
Performance](https://img.shields.io/badge/Performance-4f46e5)</sub>
   
   <details>
     <summary>Tell me more</summary>
   
   ###### What is the issue?
   The SVG path animation contains redundant keyframes with identical values, 
increasing the animation data size unnecessarily.
   
   
   ###### Why this matters
   Duplicate path data increases the HTML file size and requires more CPU 
processing during animation rendering.
   
   ###### Suggested change ∙ *Feature Preview*
   Remove duplicate keyframes and optimize the animation sequence to use fewer, 
more meaningful keyframes:
   ```html
   <animate
     attributeName="d"
     values="M 0,0 C 7,16 22,8.7 22,0...;
             M 0,-16 C 8.7,-16 16,-8.7...;
             M 0,0 C 7,-16 22,-8.7...;
             M 0,16 C 8.7,16 16,8.7...;"
     keyTimes="0;0.33;0.66;1"
   ```
   
   
   ###### Provide feedback to improve future suggestions
   [![Nice 
Catch](https://img.shields.io/badge/👍%20Nice%20Catch-71BC78)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/9e05bd79-e7f3-45f6-9e71-2b9b34333664/upvote)
 
[![Incorrect](https://img.shields.io/badge/👎%20Incorrect-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/9e05bd79-e7f3-45f6-9e71-2b9b34333664?what_not_true=true)
  [![Not in 
Scope](https://img.shields.io/badge/👎%20Out%20of%20PR%20scope-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/9e05bd79-e7f3-45f6-9e71-2b9b34333664?what_out_of_scope=true)
 [![Not in coding 
standard](https://img.shields.io/badge/👎%20Not%20in%20our%20standards-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/9e05bd79-e7f3-45f6-9e71-2b9b34333664?what_not_in_standard=true)
 
[![Other](https://img.shields.io/badge/👎%20Other-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/9e05bd79-e7f3-45f6-9e71-2b9b34333664)
   </details>
   
   <sub>
   
   💬 Looking for more details? Reply to this comment to chat with Korbit.
   </sub>
   
   <!--- korbi internal id:48b38078-d535-4e43-910f-a3633152be91 -->
   
   
   [](48b38078-d535-4e43-910f-a3633152be91)



##########
superset-frontend/packages/superset-ui-core/src/components/Loading/index.tsx:
##########
@@ -38,28 +60,31 @@
     display: block;
   }
   &.floating {
-    padding: 0;
+    /* padding: 0; */
     margin: 0;
     position: absolute;
     left: 50%;
     top: 50%;
     transform: translate(-50%, -50%);
   }
 `;
-export function Loading({
-  position = 'floating',
-  image,
-  className,
-}: LoadingProps) {
+export function Loading({ position = 'floating', className }: LoadingProps) {
+  const [svgContent, setSvgContent] = useState('');
+
+  useEffect(() => {
+    console.log('Loading SVG');
+    fetch('/static/assets/images/spinner.svg')
+      .then(response => response.text())
+      .then(htmlString => {
+        setSvgContent(htmlString);
+      });
+  }, []);
+
   return (
-    <LoaderImg
+    <LoaderWrapper
       className={cls('loading', position, className)}
-      alt="Loading..."
-      src={image || Loader}
-      role="status"
-      aria-live="polite"
-      aria-label="Loading"
-      data-test="loading-indicator"
+      // eslint-disable-next-line react/no-danger
+      dangerouslySetInnerHTML={{ __html: svgContent }}

Review Comment:
   ### Unsanitized SVG Content Injection <sub>![category 
Security](https://img.shields.io/badge/Security-e11d48)</sub>
   
   <details>
     <summary>Tell me more</summary>
   
   ###### What is the issue?
   Direct insertion of fetched content into the DOM using 
dangerouslySetInnerHTML without sanitization
   
   
   ###### Why this matters
   This creates a potential XSS vulnerability if the SVG endpoint is 
compromised or returns malicious content. An attacker could inject malicious 
JavaScript through a compromised SVG file.
   
   ###### Suggested change ∙ *Feature Preview*
   Use a SVG sanitization library like DOMPurify before inserting the content:
   ```typescript
   import DOMPurify from 'dompurify';
   // ...
   dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(svgContent) }}
   ```
   
   
   ###### Provide feedback to improve future suggestions
   [![Nice 
Catch](https://img.shields.io/badge/👍%20Nice%20Catch-71BC78)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/d91ffce6-a7bf-4012-9dc9-797a1688a469/upvote)
 
[![Incorrect](https://img.shields.io/badge/👎%20Incorrect-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/d91ffce6-a7bf-4012-9dc9-797a1688a469?what_not_true=true)
  [![Not in 
Scope](https://img.shields.io/badge/👎%20Out%20of%20PR%20scope-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/d91ffce6-a7bf-4012-9dc9-797a1688a469?what_out_of_scope=true)
 [![Not in coding 
standard](https://img.shields.io/badge/👎%20Not%20in%20our%20standards-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/d91ffce6-a7bf-4012-9dc9-797a1688a469?what_not_in_standard=true)
 
[![Other](https://img.shields.io/badge/👎%20Other-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/d91ffce6-a7bf-4012-9dc9-797a1688a469)
   </details>
   
   <sub>
   
   💬 Looking for more details? Reply to this comment to chat with Korbit.
   </sub>
   
   <!--- korbi internal id:36f02ee9-814f-4671-8787-997cad8e472f -->
   
   
   [](36f02ee9-814f-4671-8787-997cad8e472f)



##########
superset-frontend/packages/superset-ui-core/src/components/Loading/index.tsx:
##########
@@ -38,28 +60,31 @@
     display: block;
   }
   &.floating {
-    padding: 0;
+    /* padding: 0; */

Review Comment:
   ### Remove commented-out code <sub>![category 
Readability](https://img.shields.io/badge/Readability-0284c7)</sub>
   
   <details>
     <summary>Tell me more</summary>
   
   ###### What is the issue?
   Commented-out CSS code left in the styled component.
   
   
   ###### Why this matters
   Dead code creates confusion about whether it might be needed later or why it 
was commented out.
   
   ###### Suggested change ∙ *Feature Preview*
   Remove the commented-out line entirely:
   ```typescript
   &.floating {
     margin: 0;
     position: absolute;
     left: 50%;
     top: 50%;
     transform: translate(-50%, -50%);
   }
   ```
   
   
   ###### Provide feedback to improve future suggestions
   [![Nice 
Catch](https://img.shields.io/badge/👍%20Nice%20Catch-71BC78)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/138083fc-2255-4741-b372-50b16f23f33f/upvote)
 
[![Incorrect](https://img.shields.io/badge/👎%20Incorrect-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/138083fc-2255-4741-b372-50b16f23f33f?what_not_true=true)
  [![Not in 
Scope](https://img.shields.io/badge/👎%20Out%20of%20PR%20scope-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/138083fc-2255-4741-b372-50b16f23f33f?what_out_of_scope=true)
 [![Not in coding 
standard](https://img.shields.io/badge/👎%20Not%20in%20our%20standards-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/138083fc-2255-4741-b372-50b16f23f33f?what_not_in_standard=true)
 
[![Other](https://img.shields.io/badge/👎%20Other-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/138083fc-2255-4741-b372-50b16f23f33f)
   </details>
   
   <sub>
   
   💬 Looking for more details? Reply to this comment to chat with Korbit.
   </sub>
   
   <!--- korbi internal id:27d774de-096b-41b9-9d9f-4b63474e26b3 -->
   
   
   [](27d774de-096b-41b9-9d9f-4b63474e26b3)



##########
superset/templates/superset/basic.html:
##########
@@ -50,7 +50,20 @@
     {% endblock %}
 
     {{ js_bundle(assets_prefix, 'theme') }}
+    <style>
+      .spinner svg {
+        --primary-color: rgb(72, 72, 72);
+        --accent-color: rgb(80, 165, 197);

Review Comment:
   ### Undocumented Color Variables <sub>![category 
Readability](https://img.shields.io/badge/Readability-0284c7)</sub>
   
   <details>
     <summary>Tell me more</summary>
   
   ###### What is the issue?
   Hardcoded RGB color values in CSS variables without explanation of their 
purpose
   
   
   ###### Why this matters
   Makes it difficult to understand the theming system and color choices when 
modifying the spinner appearance
   
   ###### Suggested change ∙ *Feature Preview*
   Add comments explaining the color usage:
   ```html
   <style>
     .spinner svg {
       /* Default gray color for the dashed outline */
       --primary-color: rgb(72, 72, 72);
       /* Highlight blue color for the animated shape */
       --accent-color: rgb(80, 165, 197);
   ```
   
   
   ###### Provide feedback to improve future suggestions
   [![Nice 
Catch](https://img.shields.io/badge/👍%20Nice%20Catch-71BC78)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/ab356c2a-40f7-4c0e-a582-2c64d88492d3/upvote)
 
[![Incorrect](https://img.shields.io/badge/👎%20Incorrect-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/ab356c2a-40f7-4c0e-a582-2c64d88492d3?what_not_true=true)
  [![Not in 
Scope](https://img.shields.io/badge/👎%20Out%20of%20PR%20scope-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/ab356c2a-40f7-4c0e-a582-2c64d88492d3?what_out_of_scope=true)
 [![Not in coding 
standard](https://img.shields.io/badge/👎%20Not%20in%20our%20standards-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/ab356c2a-40f7-4c0e-a582-2c64d88492d3?what_not_in_standard=true)
 
[![Other](https://img.shields.io/badge/👎%20Other-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/ab356c2a-40f7-4c0e-a582-2c64d88492d3)
   </details>
   
   <sub>
   
   💬 Looking for more details? Reply to this comment to chat with Korbit.
   </sub>
   
   <!--- korbi internal id:9c952f89-cacd-4bec-bfd6-1ab518d1b2ee -->
   
   
   [](9c952f89-cacd-4bec-bfd6-1ab518d1b2ee)



##########
superset/templates/superset/basic.html:
##########
@@ -50,7 +50,20 @@
     {% endblock %}
 
     {{ js_bundle(assets_prefix, 'theme') }}
+    <style>
+      .spinner svg {
+        --primary-color: rgb(72, 72, 72);
+        --accent-color: rgb(80, 165, 197);
+        overflow: visible;
+      }
 
+      .spinner {
+        padding: 10px;
+        width: 50px;
+        height: 50px;
+        overflow: visible;
+      }
+    </style>

Review Comment:
   ### Inline styles violate separation of concerns <sub>![category 
Design](https://img.shields.io/badge/Design-0d9488)</sub>
   
   <details>
     <summary>Tell me more</summary>
   
   ###### What is the issue?
   Inline styles are embedded directly in the HTML template instead of being 
maintained in a separate CSS file
   
   
   ###### Why this matters
   This makes the styles harder to maintain, reuse, and override. It also 
violates separation of concerns principles by mixing presentation logic with 
the HTML template.
   
   ###### Suggested change ∙ *Feature Preview*
   Move the styles to a dedicated CSS file and include it using the existing 
css_bundle mechanism:
   ```css
   /* in a separate .css file */
   .spinner svg {
     --primary-color: rgb(72, 72, 72);
     --accent-color: rgb(80, 165, 197);
     overflow: visible;
   }
   
   .spinner {
     padding: 10px;
     width: 50px;
     height: 50px;
     overflow: visible;
   }
   ```
   
   
   ###### Provide feedback to improve future suggestions
   [![Nice 
Catch](https://img.shields.io/badge/👍%20Nice%20Catch-71BC78)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/c7325a0a-333e-4ddb-8d98-511c60cd071f/upvote)
 
[![Incorrect](https://img.shields.io/badge/👎%20Incorrect-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/c7325a0a-333e-4ddb-8d98-511c60cd071f?what_not_true=true)
  [![Not in 
Scope](https://img.shields.io/badge/👎%20Out%20of%20PR%20scope-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/c7325a0a-333e-4ddb-8d98-511c60cd071f?what_out_of_scope=true)
 [![Not in coding 
standard](https://img.shields.io/badge/👎%20Not%20in%20our%20standards-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/c7325a0a-333e-4ddb-8d98-511c60cd071f?what_not_in_standard=true)
 
[![Other](https://img.shields.io/badge/👎%20Other-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/c7325a0a-333e-4ddb-8d98-511c60cd071f)
   </details>
   
   <sub>
   
   💬 Looking for more details? Reply to this comment to chat with Korbit.
   </sub>
   
   <!--- korbi internal id:dced6775-f1d3-4174-b84d-b7ea37141dd8 -->
   
   
   [](dced6775-f1d3-4174-b84d-b7ea37141dd8)



##########
superset/templates/superset/basic.html:
##########
@@ -63,16 +76,66 @@
 
     {% block body %}
       <div id="app" data-bootstrap="{{ bootstrap_data }}">
-        <img
-          src="{{ assets_prefix }}/static/assets/images/loading.gif"
-          style="
-            width: 50px;
-            position: absolute;
-            top: 50%;
-            left: 50%;
-            transform: translate(-50%, -50%);
-          "
-        />
+      <div class="spinner">
+        <svg
+        viewBox="-36 -25 72 50"
+        xmlns="http://www.w3.org/2000/svg";
+        overflow="visible"
+      >

Review Comment:
   ### Missing Accessibility Attributes <sub>![category 
Functionality](https://img.shields.io/badge/Functionality-0284c7)</sub>
   
   <details>
     <summary>Tell me more</summary>
   
   ###### What is the issue?
   The SVG element is missing a role="img" attribute and aria-label, making it 
inaccessible to screen readers.
   
   
   ###### Why this matters
   Users relying on screen readers won't be notified that content is loading, 
degrading the user experience for visually impaired users.
   
   ###### Suggested change ∙ *Feature Preview*
   Add accessibility attributes to the SVG:
   ```html
   <svg
     viewBox="-36 -25 72 50"
     xmlns="http://www.w3.org/2000/svg";
     overflow="visible"
     role="img"
     aria-label="Loading content..."
   >
   ```
   
   
   ###### Provide feedback to improve future suggestions
   [![Nice 
Catch](https://img.shields.io/badge/👍%20Nice%20Catch-71BC78)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/e965076e-e37f-414d-a6a9-ebc53840aaf8/upvote)
 
[![Incorrect](https://img.shields.io/badge/👎%20Incorrect-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/e965076e-e37f-414d-a6a9-ebc53840aaf8?what_not_true=true)
  [![Not in 
Scope](https://img.shields.io/badge/👎%20Out%20of%20PR%20scope-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/e965076e-e37f-414d-a6a9-ebc53840aaf8?what_out_of_scope=true)
 [![Not in coding 
standard](https://img.shields.io/badge/👎%20Not%20in%20our%20standards-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/e965076e-e37f-414d-a6a9-ebc53840aaf8?what_not_in_standard=true)
 
[![Other](https://img.shields.io/badge/👎%20Other-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/e965076e-e37f-414d-a6a9-ebc53840aaf8)
   </details>
   
   <sub>
   
   💬 Looking for more details? Reply to this comment to chat with Korbit.
   </sub>
   
   <!--- korbi internal id:2d7c01e7-9b21-4a04-b6b9-2868909dd7d9 -->
   
   
   [](2d7c01e7-9b21-4a04-b6b9-2868909dd7d9)



##########
superset-frontend/packages/superset-ui-core/src/components/Loading/index.tsx:
##########
@@ -38,28 +60,31 @@
     display: block;
   }
   &.floating {
-    padding: 0;
+    /* padding: 0; */
     margin: 0;
     position: absolute;
     left: 50%;
     top: 50%;
     transform: translate(-50%, -50%);
   }
 `;
-export function Loading({
-  position = 'floating',
-  image,
-  className,
-}: LoadingProps) {
+export function Loading({ position = 'floating', className }: LoadingProps) {
+  const [svgContent, setSvgContent] = useState('');
+
+  useEffect(() => {
+    console.log('Loading SVG');
+    fetch('/static/assets/images/spinner.svg')
+      .then(response => response.text())
+      .then(htmlString => {
+        setSvgContent(htmlString);
+      });

Review Comment:
   ### Asset Loading Coupled to Component <sub>![category 
Design](https://img.shields.io/badge/Design-0d9488)</sub>
   
   <details>
     <summary>Tell me more</summary>
   
   ###### What is the issue?
   The Loading component fetches SVG content directly in the component, 
violating separation of concerns and making the component tightly coupled to a 
specific asset path.
   
   
   ###### Why this matters
   This creates maintenance issues, reduces reusability, and makes testing more 
difficult. The asset loading logic should be handled at a higher level or 
through a dedicated service.
   
   ###### Suggested change ∙ *Feature Preview*
   Create an asset service or move the SVG content to a separate module:
   ```typescript
   // assets.ts
   export const SpinnerSvg = `<svg>...</svg>`;
   
   // Loading.tsx
   import { SpinnerSvg } from './assets';
   
   export function Loading({ position = 'floating', className }: LoadingProps) {
     return (
       <LoaderWrapper
         className={cls('loading', position, className)}
         dangerouslySetInnerHTML={{ __html: SpinnerSvg }}
       />
     );
   }
   ```
   
   
   ###### Provide feedback to improve future suggestions
   [![Nice 
Catch](https://img.shields.io/badge/👍%20Nice%20Catch-71BC78)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/91fd4cf4-64a4-4038-9740-c8d8aca84af0/upvote)
 
[![Incorrect](https://img.shields.io/badge/👎%20Incorrect-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/91fd4cf4-64a4-4038-9740-c8d8aca84af0?what_not_true=true)
  [![Not in 
Scope](https://img.shields.io/badge/👎%20Out%20of%20PR%20scope-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/91fd4cf4-64a4-4038-9740-c8d8aca84af0?what_out_of_scope=true)
 [![Not in coding 
standard](https://img.shields.io/badge/👎%20Not%20in%20our%20standards-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/91fd4cf4-64a4-4038-9740-c8d8aca84af0?what_not_in_standard=true)
 
[![Other](https://img.shields.io/badge/👎%20Other-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/91fd4cf4-64a4-4038-9740-c8d8aca84af0)
   </details>
   
   <sub>
   
   💬 Looking for more details? Reply to this comment to chat with Korbit.
   </sub>
   
   <!--- korbi internal id:9cb42202-3595-4bd0-a0a1-37f5618f7e34 -->
   
   
   [](9cb42202-3595-4bd0-a0a1-37f5618f7e34)



##########
superset/templates/superset/basic.html:
##########
@@ -63,16 +76,66 @@
 
     {% block body %}
       <div id="app" data-bootstrap="{{ bootstrap_data }}">
-        <img
-          src="{{ assets_prefix }}/static/assets/images/loading.gif"
-          style="
-            width: 50px;
-            position: absolute;
-            top: 50%;
-            left: 50%;
-            transform: translate(-50%, -50%);
-          "
-        />
+      <div class="spinner">
+        <svg
+        viewBox="-36 -25 72 50"
+        xmlns="http://www.w3.org/2000/svg";
+        overflow="visible"
+      >
+        <defs>
+          <filter id="shadow1" x="-50%" y="-50%" width="200%" height="200%">
+            <feDropShadow
+              dx="1"
+              dy="1"
+              stdDeviation="2"
+              flood-color="rgba(0,0,0,0.3)"
+            />
+          </filter>
+          <path
+            id="morphPath"
+            d="M 0,0 C 7,16 22,8.7 22,0 22,-8.7 7,-16 0,0 -7,16 -22,8.7 -22,-0 
-22,-8.7 -7,-16 0,0 Z"
+            stroke-width="7"
+            fill="transparent"
+            filter="url(#shadow1)"
+          >
+            <animate
+              attributeName="d"
+              dur="8s"
+              repeatCount="indefinite"
+              values="M 0,0 C 7,16 22,8.7 22,0 22,-8.7 7,-16 0,0 -7,16 -22,8.7 
-22,-0 -22,-8.7 -7,-16 0,0 Z;
+              M 0,0 C 7,16 22,8.7 22,0 22,-8.7 7,-16 0,0 -7,16 -22,8.7 -22,-0 
-22,-8.7 -7,-16 0,0 Z;
+              M 0,-16 C 8.7,-16 16,-8.7 16,0 16,8.7 8.7,16 0,16 -8.7,16 
-16,8.7 -16,-0 -16,-8.7 -8.7,-16 0,-16 Z;
+              M 0,-16 C 8.7,-16 16,-8.7 16,0 16,8.7 8.7,16 0,16 -8.7,16 
-16,8.7 -16,-0 -16,-8.7 -8.7,-16 0,-16 Z;
+              M 0,0 C 7,-16 22,-8.7 22,0 22,8.7 7,16 0,0 -7,-16 -22,-8.7 -22,0 
-22,8.7 -7,16 0,0 Z;
+              M 0,0 C 7,-16 22,-8.7 22,0 22,8.7 7,16 0,0 -7,-16 -22,-8.7 -22,0 
-22,8.7 -7,16 0,0 Z;
+              M 0,16 C 8.7,16 16,8.7 16,0 16,-8.7 8.7,-16 0,-16 -8.7,-16 
-16,-8.7 -16,0 -16,8.7 -8.7,16 0,16 Z;
+              M 0,16 C 8.7,16 16,8.7 16,0 16,-8.7 8.7,-16 0,-16 -8.7,-16 
-16,-8.7 -16,0 -16,8.7 -8.7,16 0,16 Z;
+              M 0,0 C 7,16 22,8.7 22,0 22,-8.7 7,-16 0,0 -7,16 -22,8.7 -22,-0 
-22,-8.7 -7,-16 0,0 Z"
+              keyTimes="0;0.1;0.2;0.4;0.5;0.6;0.7;0.9;1"
+            />
+          </path>
+        </defs>
+        <!-- First path with morphing animation -->
+        <use href="#morphPath" stroke="var(--accent-color, currentColor)" />
+
+        <!-- Second (repeated) path with dash animation -->
+        <use
+          href="#morphPath"
+          stroke="var(--primary-color, inherit)"
+          stroke-dasharray="108 10"

Review Comment:
   ### Unexplained SVG Dash Values <sub>![category 
Readability](https://img.shields.io/badge/Readability-0284c7)</sub>
   
   <details>
     <summary>Tell me more</summary>
   
   ###### What is the issue?
   Magic numbers used in SVG stroke-dasharray without explanation of their 
visual effect
   
   
   ###### Why this matters
   Makes it difficult to maintain or adjust the dashed line pattern without 
understanding the meaning of these specific values
   
   ###### Suggested change ∙ *Feature Preview*
   Add a comment explaining the dash pattern:
   ```html
   <!-- Create dashed effect with 108px dash and 10px gap -->
   <use
     href="#morphPath"
     stroke="var(--primary-color, inherit)"
     stroke-dasharray="108 10"
   >
   ```
   
   
   ###### Provide feedback to improve future suggestions
   [![Nice 
Catch](https://img.shields.io/badge/👍%20Nice%20Catch-71BC78)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/071cff02-f236-4609-b869-044a4b69bb0f/upvote)
 
[![Incorrect](https://img.shields.io/badge/👎%20Incorrect-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/071cff02-f236-4609-b869-044a4b69bb0f?what_not_true=true)
  [![Not in 
Scope](https://img.shields.io/badge/👎%20Out%20of%20PR%20scope-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/071cff02-f236-4609-b869-044a4b69bb0f?what_out_of_scope=true)
 [![Not in coding 
standard](https://img.shields.io/badge/👎%20Not%20in%20our%20standards-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/071cff02-f236-4609-b869-044a4b69bb0f?what_not_in_standard=true)
 
[![Other](https://img.shields.io/badge/👎%20Other-white)](https://app.korbit.ai/feedback/aa91ff46-6083-4491-9416-b83dd1994b51/071cff02-f236-4609-b869-044a4b69bb0f)
   </details>
   
   <sub>
   
   💬 Looking for more details? Reply to this comment to chat with Korbit.
   </sub>
   
   <!--- korbi internal id:0abc235b-46fd-4356-aa93-e648a6d32c37 -->
   
   
   [](0abc235b-46fd-4356-aa93-e648a6d32c37)



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscr...@superset.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscr...@superset.apache.org
For additional commands, e-mail: notifications-h...@superset.apache.org

Reply via email to