GitHub user bengbengbalabalabeng added a comment to the discussion: [DESIGN] 
Hero UI playground

👍

I created a responsive, interactive playground demo with AI (based on the idea 
above).

- code highlighting
- mobile-friendly layout
- updated slogan wording


<table>
  <tr>
    <td><img width="797" height="410" alt="image" 
src="https://github.com/user-attachments/assets/95762361-aa92-4b6e-99b6-ae08d7dc3912";
 /></td>
    <td><img width="486" height="676" alt="image" 
src="https://github.com/user-attachments/assets/cca1acbe-2e70-4853-bd3d-680705d6f68d";
 /></td>
  </tr>
</table>

---

<details>
<summary>Click to view HTML</summary>

```html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Fesod Playground UI</title>
  <style>
    :root {
      --bg-green: #083b23;
      --card-bg: #030d08;
      --border-dark: #12281c;
      --highlight-code: rgba(46, 160, 67, 0.22);
      --highlight-col: #d3ebd6;
      --highlight-header: #0f6937;
      --excel-border: #e1e4e8;
      --excel-header-bg: #f6f8fa;
      --excel-text: #24292f;
      --code-comment: #7d8590;
    }

    * {
      box-sizing: border-box;
      margin: 0;
      padding: 0;
    }

    body {
      background-color: var(--bg-green);
      background-image: 
        linear-gradient(rgba(255, 255, 255, 0.05) 1px, transparent 1px),
        linear-gradient(90deg, rgba(255, 255, 255, 0.05) 1px, transparent 1px);
      background-size: 48px 24px;
      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, 
sans-serif;
      min-height: 100vh;
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      padding: 20px;
    }

    .playground-wrapper {
      background-color: var(--card-bg);
      width: 100%;
      max-width: 860px;
      border-radius: 15px;
      display: grid;
      grid-template-columns: 1fr 1fr;
      border: 1px solid rgba(255, 255, 255, 0.08);
      box-shadow: 0 24px 48px rgba(0, 0, 0, 0.45);
      overflow: hidden;
      min-height: 310px;
    }

    .code-container {
      width: 100%;
      min-width: 0;
      color: #fff;
      display: flex;
      flex-direction: column;
      font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, 
"Liberation Mono", monospace;
    }

    .code-content {
      padding: 14px 0;
      font-size: 11.8px;
      line-height: 1.48;
      color: #e6edf3;
      white-space: pre;
      flex: 1;
      overflow-x: auto;
    }

    .code-line {
      padding: 0 16px;
    }

    .field-group {
      padding: 1px 16px 1px 13px;
      margin: 1px 0;
      cursor: pointer;
      border-left: 3px solid transparent;
      transition: background 0.15s ease, border-color 0.15s ease;
    }
    .field-group:hover {
      background: rgba(255, 255, 255, 0.04);
    }
    .field-group.active {
      background: var(--highlight-code);
      border-left-color: #2ea043;
    }

    .kwd { color: #ff7b72; }
    .cls { color: #ffa657; }
    .ann { color: #7ee787; }
    .str { color: #a5d6ff; }
    .typ { color: #79c0ff; }
    .cmm { color: var(--code-comment); }
    .mtd { color: #d2a8ff; }

    .code-action-block {
      margin-top: 6px;
      padding-top: 6px;
      border-top: 1px dashed rgba(255, 255, 255, 0.08);
    }

    .sheet-preview-card {
      background-color: #ffffff;
      margin: 10px;
      border-radius: 9px;
      display: flex;
      flex-direction: column;
      overflow: hidden;
      box-shadow: 0 4px 16px rgba(0, 0, 0, 0.25);
      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, 
sans-serif;
      min-width: 0;
    }

    .sheet-tab-header {
      font-size: 11px;
      padding: 7px 12px;
      color: #57606a;
      background: #ffffff;
      border-bottom: 1px solid var(--excel-border);
      user-select: none;
      flex-shrink: 0;
    }

    .excel-table-wrapper {
      flex: 1;
      display: flex;
      background: #ffffff;
      overflow-x: auto;
    }

    .excel-table {
      width: 100%;
      height: 100%;
      border-collapse: collapse;
      font-size: 11.5px;
      color: var(--excel-text);
      table-layout: fixed;
    }

    .excel-table th, .excel-table td {
      border: 1px solid var(--excel-border);
      padding: 4px 8px;
      text-align: left;
    }

    .excel-table .idx-col {
      width: 28px;
      text-align: center;
      background-color: var(--excel-header-bg);
      color: #656d76;
      font-size: 10.5px;
    }

    .excel-table thead th {
      background-color: var(--excel-header-bg);
      text-align: center;
      font-weight: 500;
      color: #57606a;
      height: 24px;
    }

    .excel-table .header-cell {
      background-color: #B8B8B8;
      font-weight: 700;
      color: #24292f;
      text-align: center;
    }

    .excel-table td.num {
      text-align: right;
    }

    .excel-table th.col-active {
      background-color: var(--highlight-header) !important;
      color: #ffffff !important;
    }
    .excel-table td.col-active {
      background-color: var(--highlight-col) !important;
      border-bottom-color: #fff;
    }

    .excel-footer {
      display: flex;
      align-items: center;
      padding: 6px 12px;
      background: #f6f8fa;
      border-top: 1px solid var(--excel-border);
      font-size: 11px;
      color: #1a7f37;
      font-weight: 600;
      gap: 5px;
      flex-shrink: 0;
    }
    .sheet-marker {
      width: 7px;
      height: 7px;
      background: #1a7f37;
      border-radius: 1px;
    }

    .brand-slogan {
      margin-top: 22px;
      color: #e6edf3;
      font-size: 15px;
      font-weight: 500;
      letter-spacing: 0.6px;
      text-align: center;
      user-select: none;
      display: flex;
      align-items: center;
      justify-content: center;
      text-transform: capitalize;
      gap: 8px;
    }
    .brand-slogan .slogan-word {
      color: #ffffff;
    }
    .brand-slogan .slogan-dot {
      color: #3fb950;
      font-weight: 700;
    }

    @media (max-width: 768px) {
      body {
        padding: 14px;
      }

      .playground-wrapper {
        grid-template-columns: 1fr;
        min-height: auto;
      }

      .code-container {
        border-bottom: 1px solid rgba(255, 255, 255, 0.08);
      }

      .sheet-preview-card {
        margin: 12px;
        min-height: 250px;
      }
    }
  </style>
</head>
<body>

  <div class="playground-wrapper">
      <div class="code-container">
        <div class="code-content"><div class="code-line"><span class="cmm">/** 
Define a Java model for spreadsheet. */</span></div><div 
class="code-line"><span class="kwd">class</span> <span 
class="cls">DemoData</span> {</div><div class="field-group" 
data-target-col="0">  <span class="ann">@ExcelProperty</span>(<span 
class="str">"Name"</span>)
  <span class="kwd">private</span> <span class="typ">String</span> 
name;</div><div class="field-group active" data-target-col="1">  <span 
class="ann">@ExcelProperty</span>(<span class="str">"Date"</span>)
  <span class="kwd">private</span> <span class="typ">Date</span> 
date;</div><div class="field-group" data-target-col="2">  <span 
class="ann">@ExcelProperty</span>(<span class="str">"Amount"</span>)
  <span class="kwd">private</span> <span class="typ">Double</span> 
amount;</div><div class="field-group" data-target-col="ignore">  <span 
class="ann">@ExcelIgnore</span>
  <span class="kwd">private</span> <span class="typ">String</span> 
note;</div><div class="code-line">}</div><div class="code-action-block"><div 
class="code-line"><span class="cmm">// Writing</span></div><div 
class="code-line"><span class="cls">FesodSheet</span>.<span 
class="mtd">write</span>(<span class="str">"demo.xlsx"</span>, <span 
class="cls">DemoData</span>.<span class="kwd">class</span>)</div><div 
class="code-line">    .<span class="mtd">sheet</span>(<span 
class="str">"Template"</span>)</div><div class="code-line">    .<span 
class="mtd">doWrite</span>(data);</div></div></div>
      </div>
      
      <div class="sheet-preview-card">
        <div class="sheet-tab-header">demo.xlsx</div>
        <div class="excel-table-wrapper">
          <table class="excel-table" id="excelTable">
            <thead>
              <tr>
                <th class="idx-col"></th>
                <th data-col="0">A</th>
                <th data-col="1" class="col-active">B</th>
                <th data-col="2">C</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td class="idx-col">1</td>
                <td class="header-cell" data-col="0">Name</td>
                <td class="header-cell col-active" data-col="1">Date</td>
                <td class="header-cell" data-col="2">Amount</td>
              </tr>
              <tr>
                <td class="idx-col">2</td>
                <td data-col="0">Ada</td>
                <td class="col-active" data-col="1">2026-07-28</td>
                <td class="num" data-col="2">0.56</td>
              </tr>
              <tr>
                <td class="idx-col">3</td>
                <td data-col="0">Lin</td>
                <td class="col-active" data-col="1">2026-07-28</td>
                <td class="num" data-col="2">1.20</td>
              </tr>
              <tr>
                <td class="idx-col">4</td>
                <td data-col="0">Sun</td>
                <td class="col-active" data-col="1">2026-07-29</td>
                <td class="num" data-col="2">4.80</td>
              </tr>
              <tr>
                <td class="idx-col">5</td>
                <td data-col="0">Rui</td>
                <td class="col-active" data-col="1">2026-07-30</td>
                <td class="num" data-col="2">2.35</td>
              </tr>
              <tr>
                <td class="idx-col">6</td>
                <td data-col="0"></td>
                <td class="col-active" data-col="1"></td>
                <td data-col="2"></td>
              </tr>
              <tr>
                <td class="idx-col">7</td>
                <td data-col="0"></td>
                <td class="col-active" data-col="1"></td>
                <td data-col="2"></td>
              </tr>
              <tr>
                <td class="idx-col">8</td>
                <td data-col="0"></td>
                <td class="col-active" data-col="1"></td>
                <td data-col="2"></td>
              </tr>
            </tbody>
          </table>
        </div>
        <div class="excel-footer">
          <span class="sheet-marker"></span>
          <span>Template</span>
        </div>
      </div>

  </div>

  <p class="brand-slogan">
    <span class="slogan-word">structured</span><span class="slogan-dot">.</span>
    <span class="slogan-word">swift</span><span class="slogan-dot">.</span>
    <span class="slogan-word">simple</span><span class="slogan-dot">.</span>
  </p>

  <script>
    const fieldGroups = document.querySelectorAll('.field-group');
    const tableCells = document.querySelectorAll('#excelTable [data-col]');

    fieldGroups.forEach(group => {
      group.addEventListener('click', () => {
        const targetCol = group.getAttribute('data-target-col');

        fieldGroups.forEach(f => f.classList.remove('active'));
        group.classList.add('active');

        if (targetCol === 'ignore') {
          tableCells.forEach(cell => cell.classList.remove('col-active'));
        } else {
          tableCells.forEach(cell => {
            if (cell.getAttribute('data-col') === targetCol) {
              cell.classList.add('col-active');
            } else {
              cell.classList.remove('col-active');
            }
          });
        }
      });
    });
  </script>
</body>
</html>
```

</details>

GitHub link: 
https://github.com/apache/fesod/discussions/1058#discussioncomment-18368879

----
This is an automatically sent email for [email protected].
To unsubscribe, please send an email to: [email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to