kanban-lite 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/.editorconfig +9 -0
  2. package/.github/workflows/ci.yml +59 -0
  3. package/.github/workflows/release.yml +75 -0
  4. package/.prettierignore +6 -0
  5. package/.prettierrc.yaml +4 -0
  6. package/.vscode/extensions.json +3 -0
  7. package/.vscode/launch.json +17 -0
  8. package/.vscode/settings.json +21 -0
  9. package/.vscode/tasks.json +22 -0
  10. package/.vscodeignore +11 -0
  11. package/CHANGELOG.md +184 -0
  12. package/CLAUDE.md +58 -0
  13. package/CONTRIBUTING.md +114 -0
  14. package/LICENSE +22 -0
  15. package/README.md +482 -0
  16. package/SKILL.md +237 -0
  17. package/dist/cli.js +8716 -0
  18. package/dist/extension.js +8463 -0
  19. package/dist/mcp-server.js +1327 -0
  20. package/dist/standalone-webview/icons-Dx9MGYqN.js +180 -0
  21. package/dist/standalone-webview/icons-Dx9MGYqN.js.map +1 -0
  22. package/dist/standalone-webview/index.js +85 -0
  23. package/dist/standalone-webview/index.js.map +1 -0
  24. package/dist/standalone-webview/react-vendor-DkYdDBET.js +25 -0
  25. package/dist/standalone-webview/react-vendor-DkYdDBET.js.map +1 -0
  26. package/dist/standalone-webview/style.css +1 -0
  27. package/dist/standalone.js +7513 -0
  28. package/dist/webview/icons-Dx9MGYqN.js +180 -0
  29. package/dist/webview/icons-Dx9MGYqN.js.map +1 -0
  30. package/dist/webview/index.js +85 -0
  31. package/dist/webview/index.js.map +1 -0
  32. package/dist/webview/react-vendor-DkYdDBET.js +25 -0
  33. package/dist/webview/react-vendor-DkYdDBET.js.map +1 -0
  34. package/dist/webview/style.css +1 -0
  35. package/docs/images/board-overview.png +0 -0
  36. package/docs/images/editor-view.png +0 -0
  37. package/docs/plans/2026-02-20-kanban-json-config-design.md +74 -0
  38. package/docs/plans/2026-02-20-kanban-json-config.md +690 -0
  39. package/eslint.config.mjs +31 -0
  40. package/package.json +161 -0
  41. package/postcss.config.js +6 -0
  42. package/resources/icon-light.png +0 -0
  43. package/resources/icon-light.svg +105 -0
  44. package/resources/icon.png +0 -0
  45. package/resources/icon.svg +105 -0
  46. package/resources/kanban-dark.svg +21 -0
  47. package/resources/kanban-light.svg +21 -0
  48. package/resources/kanban.svg +21 -0
  49. package/src/cli/index.ts +846 -0
  50. package/src/extension/FeatureHeaderProvider.ts +370 -0
  51. package/src/extension/KanbanPanel.ts +973 -0
  52. package/src/extension/SidebarViewProvider.ts +507 -0
  53. package/src/extension/featureFileUtils.ts +82 -0
  54. package/src/extension/index.ts +234 -0
  55. package/src/mcp-server/index.ts +632 -0
  56. package/src/sdk/KanbanSDK.ts +349 -0
  57. package/src/sdk/__tests__/KanbanSDK.test.ts +468 -0
  58. package/src/sdk/__tests__/parser.test.ts +170 -0
  59. package/src/sdk/fileUtils.ts +76 -0
  60. package/src/sdk/index.ts +6 -0
  61. package/src/sdk/parser.ts +70 -0
  62. package/src/sdk/types.ts +15 -0
  63. package/src/shared/config.ts +113 -0
  64. package/src/shared/editorTypes.ts +14 -0
  65. package/src/shared/types.ts +120 -0
  66. package/src/standalone/__tests__/server.integration.test.ts +1916 -0
  67. package/src/standalone/__tests__/webhooks.test.ts +357 -0
  68. package/src/standalone/fileUtils.ts +70 -0
  69. package/src/standalone/index.ts +71 -0
  70. package/src/standalone/server.ts +1046 -0
  71. package/src/standalone/webhooks.ts +135 -0
  72. package/src/webview/App.tsx +469 -0
  73. package/src/webview/assets/main.css +329 -0
  74. package/src/webview/assets/standalone-theme.css +130 -0
  75. package/src/webview/components/ColumnDialog.tsx +119 -0
  76. package/src/webview/components/CreateFeatureDialog.tsx +524 -0
  77. package/src/webview/components/DatePicker.tsx +185 -0
  78. package/src/webview/components/FeatureCard.tsx +186 -0
  79. package/src/webview/components/FeatureEditor.tsx +623 -0
  80. package/src/webview/components/KanbanBoard.tsx +144 -0
  81. package/src/webview/components/KanbanColumn.tsx +159 -0
  82. package/src/webview/components/MarkdownEditor.tsx +291 -0
  83. package/src/webview/components/PrioritySelect.tsx +39 -0
  84. package/src/webview/components/QuickAddInput.tsx +72 -0
  85. package/src/webview/components/SettingsPanel.tsx +284 -0
  86. package/src/webview/components/Toolbar.tsx +175 -0
  87. package/src/webview/components/UndoToast.tsx +70 -0
  88. package/src/webview/index.html +12 -0
  89. package/src/webview/lib/utils.ts +6 -0
  90. package/src/webview/main.tsx +11 -0
  91. package/src/webview/standalone-main.tsx +13 -0
  92. package/src/webview/standalone-shim.ts +132 -0
  93. package/src/webview/standalone.html +12 -0
  94. package/src/webview/store/index.ts +241 -0
  95. package/tailwind.config.js +53 -0
  96. package/tsconfig.json +22 -0
  97. package/vite.config.ts +36 -0
  98. package/vite.standalone.config.ts +62 -0
  99. package/vitest.config.ts +15 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../node_modules/react/cjs/react-jsx-runtime.production.min.js","../../node_modules/react/jsx-runtime.js","../../src/webview/standalone-shim.ts","../../node_modules/react-dom/client.js","../../node_modules/fractional-indexing/src/index.js","../../node_modules/zustand/esm/vanilla.mjs","../../node_modules/zustand/esm/react.mjs","../../src/webview/store/index.ts","../../node_modules/marked/lib/marked.esm.js","../../src/shared/types.ts","../../src/webview/components/FeatureCard.tsx","../../src/webview/components/KanbanColumn.tsx","../../src/webview/components/KanbanBoard.tsx","../../node_modules/clsx/dist/clsx.mjs","../../node_modules/tailwind-merge/dist/bundle-mjs.mjs","../../src/webview/lib/utils.ts","../../src/webview/components/DatePicker.tsx","../../src/webview/components/MarkdownEditor.tsx","../../src/webview/components/CreateFeatureDialog.tsx","../../src/webview/components/FeatureEditor.tsx","../../src/webview/components/Toolbar.tsx","../../src/webview/components/UndoToast.tsx","../../src/webview/components/SettingsPanel.tsx","../../src/webview/components/ColumnDialog.tsx","../../src/webview/App.tsx","../../src/webview/standalone-main.tsx"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","// WebSocket bridge that provides acquireVsCodeApi() for standalone mode.\n// Must be imported BEFORE App.tsx so the global is available at module load time.\n\nconst ws = new WebSocket(`ws://${window.location.host}/ws`)\nconst pendingMessages: string[] = []\nlet connected = false\n\nws.addEventListener('open', () => {\n connected = true\n for (const msg of pendingMessages) {\n ws.send(msg)\n }\n pendingMessages.length = 0\n})\n\nws.addEventListener('message', (event) => {\n try {\n const data = JSON.parse(event.data)\n window.postMessage(data, '*')\n } catch {\n // ignore malformed messages\n }\n})\n\nws.addEventListener('close', () => {\n connected = false\n})\n\n// State persistence via sessionStorage\nlet savedState: unknown = null\ntry {\n const stored = sessionStorage.getItem('kanban-standalone-state')\n if (stored) savedState = JSON.parse(stored)\n} catch {\n // ignore\n}\n\n// --- Standalone attachment handling ---\nfunction handleAddAttachment(featureId: string) {\n const input = document.createElement('input')\n input.type = 'file'\n input.multiple = true\n input.style.display = 'none'\n document.body.appendChild(input)\n\n const cleanup = () => {\n input.remove()\n }\n\n input.onchange = async () => {\n if (!input.files || input.files.length === 0) {\n cleanup()\n return\n }\n const files: { name: string; data: string }[] = []\n for (const file of Array.from(input.files)) {\n const buf = await file.arrayBuffer()\n const bytes = new Uint8Array(buf)\n // Encode in chunks to avoid stack overflow on large files\n let binary = ''\n for (let i = 0; i < bytes.length; i++) {\n binary += String.fromCharCode(bytes[i])\n }\n files.push({ name: file.name, data: btoa(binary) })\n }\n try {\n await fetch('/api/upload-attachment', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ featureId, files })\n })\n } catch (err) {\n console.error('Failed to upload attachment:', err)\n }\n cleanup()\n }\n\n input.click()\n}\n\nfunction handleOpenAttachment(featureId: string, attachment: string) {\n const url = `/api/attachment?featureId=${encodeURIComponent(featureId)}&filename=${encodeURIComponent(attachment)}`\n window.open(url, '_blank')\n}\n\n// Provide the same API shape as acquireVsCodeApi()\n;(window as unknown as Record<string, unknown>).acquireVsCodeApi = () => ({\n postMessage(message: unknown) {\n const msg = message as Record<string, unknown>\n // Intercept attachment messages — handle browser-side in standalone\n if (msg.type === 'addAttachment') {\n handleAddAttachment(msg.featureId as string)\n return\n }\n if (msg.type === 'openAttachment') {\n handleOpenAttachment(msg.featureId as string, msg.attachment as string)\n return\n }\n\n const json = JSON.stringify(message)\n if (connected) {\n ws.send(json)\n } else {\n pendingMessages.push(json)\n }\n },\n getState() {\n return savedState\n },\n setState(state: unknown) {\n savedState = state\n try {\n sessionStorage.setItem('kanban-standalone-state', JSON.stringify(state))\n } catch {\n // ignore\n }\n }\n})\n\n// Set dark mode class based on system preference (replaces VSCode's vscode-dark class)\nconst darkMq = window.matchMedia('(prefers-color-scheme: dark)')\nfunction applyTheme(dark: boolean) {\n document.body.classList.toggle('vscode-dark', dark)\n document.body.classList.toggle('vscode-light', !dark)\n}\ndarkMq.addEventListener('change', (e) => applyTheme(e.matches))\n// Apply immediately (body may not exist yet, so also apply on DOMContentLoaded)\nif (document.body) {\n applyTheme(darkMq.matches)\n} else {\n document.addEventListener('DOMContentLoaded', () => applyTheme(darkMq.matches))\n}\n","'use strict';\n\nvar m = require('react-dom');\nif (process.env.NODE_ENV === 'production') {\n exports.createRoot = m.createRoot;\n exports.hydrateRoot = m.hydrateRoot;\n} else {\n var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n exports.createRoot = function(c, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.createRoot(c, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n exports.hydrateRoot = function(c, h, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.hydrateRoot(c, h, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n}\n","// License: CC0 (no rights reserved).\n\n// This is based on https://observablehq.com/@dgreensp/implementing-fractional-indexing\n\nexport const BASE_62_DIGITS =\n \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\";\n\n// `a` may be empty string, `b` is null or non-empty string.\n// `a < b` lexicographically if `b` is non-null.\n// no trailing zeros allowed.\n// digits is a string such as '0123456789' for base 10. Digits must be in\n// ascending character code order!\n/**\n * @param {string} a\n * @param {string | null | undefined} b\n * @param {string} digits\n * @returns {string}\n */\nfunction midpoint(a, b, digits) {\n const zero = digits[0];\n if (b != null && a >= b) {\n throw new Error(a + \" >= \" + b);\n }\n if (a.slice(-1) === zero || (b && b.slice(-1) === zero)) {\n throw new Error(\"trailing zero\");\n }\n if (b) {\n // remove longest common prefix. pad `a` with 0s as we\n // go. note that we don't need to pad `b`, because it can't\n // end before `a` while traversing the common prefix.\n let n = 0;\n while ((a[n] || zero) === b[n]) {\n n++;\n }\n if (n > 0) {\n return b.slice(0, n) + midpoint(a.slice(n), b.slice(n), digits);\n }\n }\n // first digits (or lack of digit) are different\n const digitA = a ? digits.indexOf(a[0]) : 0;\n const digitB = b != null ? digits.indexOf(b[0]) : digits.length;\n if (digitB - digitA > 1) {\n const midDigit = Math.round(0.5 * (digitA + digitB));\n return digits[midDigit];\n } else {\n // first digits are consecutive\n if (b && b.length > 1) {\n return b.slice(0, 1);\n } else {\n // `b` is null or has length 1 (a single digit).\n // the first digit of `a` is the previous digit to `b`,\n // or 9 if `b` is null.\n // given, for example, midpoint('49', '5'), return\n // '4' + midpoint('9', null), which will become\n // '4' + '9' + midpoint('', null), which is '495'\n return digits[digitA] + midpoint(a.slice(1), null, digits);\n }\n }\n}\n\n/**\n * @param {string} int\n * @return {void}\n */\n\nfunction validateInteger(int) {\n if (int.length !== getIntegerLength(int[0])) {\n throw new Error(\"invalid integer part of order key: \" + int);\n }\n}\n\n/**\n * @param {string} head\n * @return {number}\n */\n\nfunction getIntegerLength(head) {\n if (head >= \"a\" && head <= \"z\") {\n return head.charCodeAt(0) - \"a\".charCodeAt(0) + 2;\n } else if (head >= \"A\" && head <= \"Z\") {\n return \"Z\".charCodeAt(0) - head.charCodeAt(0) + 2;\n } else {\n throw new Error(\"invalid order key head: \" + head);\n }\n}\n\n/**\n * @param {string} key\n * @return {string}\n */\n\nfunction getIntegerPart(key) {\n const integerPartLength = getIntegerLength(key[0]);\n if (integerPartLength > key.length) {\n throw new Error(\"invalid order key: \" + key);\n }\n return key.slice(0, integerPartLength);\n}\n\n/**\n * @param {string} key\n * @param {string} digits\n * @return {void}\n */\n\nfunction validateOrderKey(key, digits) {\n if (key === \"A\" + digits[0].repeat(26)) {\n throw new Error(\"invalid order key: \" + key);\n }\n // getIntegerPart will throw if the first character is bad,\n // or the key is too short. we'd call it to check these things\n // even if we didn't need the result\n const i = getIntegerPart(key);\n const f = key.slice(i.length);\n if (f.slice(-1) === digits[0]) {\n throw new Error(\"invalid order key: \" + key);\n }\n}\n\n// note that this may return null, as there is a largest integer\n/**\n * @param {string} x\n * @param {string} digits\n * @return {string | null}\n */\nfunction incrementInteger(x, digits) {\n validateInteger(x);\n const [head, ...digs] = x.split(\"\");\n let carry = true;\n for (let i = digs.length - 1; carry && i >= 0; i--) {\n const d = digits.indexOf(digs[i]) + 1;\n if (d === digits.length) {\n digs[i] = digits[0];\n } else {\n digs[i] = digits[d];\n carry = false;\n }\n }\n if (carry) {\n if (head === \"Z\") {\n return \"a\" + digits[0];\n }\n if (head === \"z\") {\n return null;\n }\n const h = String.fromCharCode(head.charCodeAt(0) + 1);\n if (h > \"a\") {\n digs.push(digits[0]);\n } else {\n digs.pop();\n }\n return h + digs.join(\"\");\n } else {\n return head + digs.join(\"\");\n }\n}\n\n// note that this may return null, as there is a smallest integer\n/**\n * @param {string} x\n * @param {string} digits\n * @return {string | null}\n */\n\nfunction decrementInteger(x, digits) {\n validateInteger(x);\n const [head, ...digs] = x.split(\"\");\n let borrow = true;\n for (let i = digs.length - 1; borrow && i >= 0; i--) {\n const d = digits.indexOf(digs[i]) - 1;\n if (d === -1) {\n digs[i] = digits.slice(-1);\n } else {\n digs[i] = digits[d];\n borrow = false;\n }\n }\n if (borrow) {\n if (head === \"a\") {\n return \"Z\" + digits.slice(-1);\n }\n if (head === \"A\") {\n return null;\n }\n const h = String.fromCharCode(head.charCodeAt(0) - 1);\n if (h < \"Z\") {\n digs.push(digits.slice(-1));\n } else {\n digs.pop();\n }\n return h + digs.join(\"\");\n } else {\n return head + digs.join(\"\");\n }\n}\n\n// `a` is an order key or null (START).\n// `b` is an order key or null (END).\n// `a < b` lexicographically if both are non-null.\n// digits is a string such as '0123456789' for base 10. Digits must be in\n// ascending character code order!\n/**\n * @param {string | null | undefined} a\n * @param {string | null | undefined} b\n * @param {string=} digits\n * @return {string}\n */\nexport function generateKeyBetween(a, b, digits = BASE_62_DIGITS) {\n if (a != null) {\n validateOrderKey(a, digits);\n }\n if (b != null) {\n validateOrderKey(b, digits);\n }\n if (a != null && b != null && a >= b) {\n throw new Error(a + \" >= \" + b);\n }\n if (a == null) {\n if (b == null) {\n return \"a\" + digits[0];\n }\n\n const ib = getIntegerPart(b);\n const fb = b.slice(ib.length);\n if (ib === \"A\" + digits[0].repeat(26)) {\n return ib + midpoint(\"\", fb, digits);\n }\n if (ib < b) {\n return ib;\n }\n const res = decrementInteger(ib, digits);\n if (res == null) {\n throw new Error(\"cannot decrement any more\");\n }\n return res;\n }\n\n if (b == null) {\n const ia = getIntegerPart(a);\n const fa = a.slice(ia.length);\n const i = incrementInteger(ia, digits);\n return i == null ? ia + midpoint(fa, null, digits) : i;\n }\n\n const ia = getIntegerPart(a);\n const fa = a.slice(ia.length);\n const ib = getIntegerPart(b);\n const fb = b.slice(ib.length);\n if (ia === ib) {\n return ia + midpoint(fa, fb, digits);\n }\n const i = incrementInteger(ia, digits);\n if (i == null) {\n throw new Error(\"cannot increment any more\");\n }\n if (i < b) {\n return i;\n }\n return ia + midpoint(fa, null, digits);\n}\n\n/**\n * same preconditions as generateKeysBetween.\n * n >= 0.\n * Returns an array of n distinct keys in sorted order.\n * If a and b are both null, returns [a0, a1, ...]\n * If one or the other is null, returns consecutive \"integer\"\n * keys. Otherwise, returns relatively short keys between\n * a and b.\n * @param {string | null | undefined} a\n * @param {string | null | undefined} b\n * @param {number} n\n * @param {string} digits\n * @return {string[]}\n */\nexport function generateNKeysBetween(a, b, n, digits = BASE_62_DIGITS) {\n if (n === 0) {\n return [];\n }\n if (n === 1) {\n return [generateKeyBetween(a, b, digits)];\n }\n if (b == null) {\n let c = generateKeyBetween(a, b, digits);\n const result = [c];\n for (let i = 0; i < n - 1; i++) {\n c = generateKeyBetween(c, b, digits);\n result.push(c);\n }\n return result;\n }\n if (a == null) {\n let c = generateKeyBetween(a, b, digits);\n const result = [c];\n for (let i = 0; i < n - 1; i++) {\n c = generateKeyBetween(a, c, digits);\n result.push(c);\n }\n result.reverse();\n return result;\n }\n const mid = Math.floor(n / 2);\n const c = generateKeyBetween(a, b, digits);\n return [\n ...generateNKeysBetween(a, c, mid, digits),\n c,\n ...generateNKeysBetween(c, b, n - mid - 1, digits),\n ];\n}\n","const createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const getInitialState = () => initialState;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const api = { setState, getState, getInitialState, subscribe };\n const initialState = state = createState(setState, getState, api);\n return api;\n};\nconst createStore = ((createState) => createState ? createStoreImpl(createState) : createStoreImpl);\n\nexport { createStore };\n","import React from 'react';\nimport { createStore } from 'zustand/vanilla';\n\nconst identity = (arg) => arg;\nfunction useStore(api, selector = identity) {\n const slice = React.useSyncExternalStore(\n api.subscribe,\n React.useCallback(() => selector(api.getState()), [api, selector]),\n React.useCallback(() => selector(api.getInitialState()), [api, selector])\n );\n React.useDebugValue(slice);\n return slice;\n}\nconst createImpl = (createState) => {\n const api = createStore(createState);\n const useBoundStore = (selector) => useStore(api, selector);\n Object.assign(useBoundStore, api);\n return useBoundStore;\n};\nconst create = ((createState) => createState ? createImpl(createState) : createImpl);\n\nexport { create, useStore };\n","import { create } from 'zustand'\nimport type { Feature, FeatureStatus, KanbanColumn, Priority, CardDisplaySettings } from '../../shared/types'\n\nexport type DueDateFilter = 'all' | 'overdue' | 'today' | 'this-week' | 'no-date'\nexport type LayoutMode = 'horizontal' | 'vertical'\n\ninterface KanbanState {\n features: Feature[]\n columns: KanbanColumn[]\n isDarkMode: boolean\n searchQuery: string\n priorityFilter: Priority | 'all'\n assigneeFilter: string | 'all'\n labelFilter: string | 'all'\n dueDateFilter: DueDateFilter\n layout: LayoutMode\n cardSettings: CardDisplaySettings\n settingsOpen: boolean\n\n setFeatures: (features: Feature[]) => void\n setColumns: (columns: KanbanColumn[]) => void\n setIsDarkMode: (dark: boolean) => void\n setCardSettings: (settings: CardDisplaySettings) => void\n setSettingsOpen: (open: boolean) => void\n setSearchQuery: (query: string) => void\n setPriorityFilter: (priority: Priority | 'all') => void\n setAssigneeFilter: (assignee: string | 'all') => void\n setLabelFilter: (label: string | 'all') => void\n setDueDateFilter: (filter: DueDateFilter) => void\n setLayout: (layout: LayoutMode) => void\n toggleLayout: () => void\n clearAllFilters: () => void\n\n addFeature: (feature: Feature) => void\n updateFeature: (id: string, updates: Partial<Feature>) => void\n removeFeature: (id: string) => void\n getFeaturesByStatus: (status: FeatureStatus) => Feature[]\n getFilteredFeaturesByStatus: (status: FeatureStatus) => Feature[]\n getUniqueAssignees: () => string[]\n getUniqueLabels: () => string[]\n hasActiveFilters: () => boolean\n}\n\nconst getInitialDarkMode = (): boolean => {\n // Check for VSCode theme\n if (typeof document !== 'undefined') {\n return document.body.classList.contains('vscode-dark') ||\n document.body.classList.contains('vscode-high-contrast')\n }\n return false\n}\n\nconst isToday = (date: Date): boolean => {\n const today = new Date()\n return (\n date.getFullYear() === today.getFullYear() &&\n date.getMonth() === today.getMonth() &&\n date.getDate() === today.getDate()\n )\n}\n\nconst isThisWeek = (date: Date): boolean => {\n const today = new Date()\n const startOfWeek = new Date(today)\n startOfWeek.setDate(today.getDate() - today.getDay())\n startOfWeek.setHours(0, 0, 0, 0)\n\n const endOfWeek = new Date(startOfWeek)\n endOfWeek.setDate(startOfWeek.getDate() + 7)\n\n return date >= startOfWeek && date < endOfWeek\n}\n\nconst isOverdue = (date: Date): boolean => {\n const today = new Date()\n today.setHours(0, 0, 0, 0)\n return date < today\n}\n\nexport const useStore = create<KanbanState>((set, get) => ({\n features: [],\n columns: [],\n isDarkMode: getInitialDarkMode(),\n searchQuery: '',\n priorityFilter: 'all',\n assigneeFilter: 'all',\n labelFilter: 'all',\n dueDateFilter: 'all',\n layout: 'horizontal',\n cardSettings: {\n showPriorityBadges: true,\n showAssignee: true,\n showDueDate: true,\n showLabels: true,\n showBuildWithAI: true,\n showFileName: false,\n compactMode: false,\n markdownEditorMode: false,\n defaultPriority: 'medium',\n defaultStatus: 'backlog'\n },\n settingsOpen: false,\n\n setFeatures: (features) => set({ features }),\n setColumns: (columns) => set({ columns }),\n setIsDarkMode: (dark) => set({ isDarkMode: dark }),\n setCardSettings: (settings) => set({ cardSettings: settings }),\n setSettingsOpen: (open) => set({ settingsOpen: open }),\n setSearchQuery: (query) => set({ searchQuery: query }),\n setPriorityFilter: (priority) => set({ priorityFilter: priority }),\n setAssigneeFilter: (assignee) => set({ assigneeFilter: assignee }),\n setLabelFilter: (label) => set({ labelFilter: label }),\n setDueDateFilter: (filter) => set({ dueDateFilter: filter }),\n setLayout: (layout) => set({ layout }),\n toggleLayout: () => set((state) => ({ layout: state.layout === 'horizontal' ? 'vertical' : 'horizontal' })),\n\n clearAllFilters: () =>\n set({\n searchQuery: '',\n priorityFilter: 'all',\n assigneeFilter: 'all',\n labelFilter: 'all',\n dueDateFilter: 'all'\n }),\n\n addFeature: (feature) =>\n set((state) => ({\n features: [...state.features, feature]\n })),\n\n updateFeature: (id, updates) =>\n set((state) => ({\n features: state.features.map((f) => (f.id === id ? { ...f, ...updates } : f))\n })),\n\n removeFeature: (id) =>\n set((state) => ({\n features: state.features.filter((f) => f.id !== id)\n })),\n\n getFeaturesByStatus: (status) => {\n const { features } = get()\n return features\n .filter((f) => f.status === status)\n .sort((a, b) => (a.order < b.order ? -1 : a.order > b.order ? 1 : 0))\n },\n\n getFilteredFeaturesByStatus: (status) => {\n const {\n features,\n searchQuery,\n priorityFilter,\n assigneeFilter,\n labelFilter,\n dueDateFilter\n } = get()\n\n return features\n .filter((f) => {\n if (f.status !== status) return false\n\n // Priority filter\n if (priorityFilter !== 'all' && f.priority !== priorityFilter) return false\n\n // Assignee filter\n if (assigneeFilter !== 'all') {\n if (assigneeFilter === 'unassigned') {\n if (f.assignee) return false\n } else if (f.assignee !== assigneeFilter) {\n return false\n }\n }\n\n // Label filter\n if (labelFilter !== 'all' && !f.labels.includes(labelFilter)) return false\n\n // Due date filter\n if (dueDateFilter !== 'all') {\n if (dueDateFilter === 'no-date') {\n if (f.dueDate) return false\n } else if (!f.dueDate) {\n return false\n } else {\n const dueDate = new Date(f.dueDate)\n if (dueDateFilter === 'overdue' && !isOverdue(dueDate)) return false\n if (dueDateFilter === 'today' && !isToday(dueDate)) return false\n if (dueDateFilter === 'this-week' && !isThisWeek(dueDate)) return false\n }\n }\n\n // Search query\n if (searchQuery) {\n const query = searchQuery.toLowerCase()\n return (\n f.content.toLowerCase().includes(query) ||\n f.id.toLowerCase().includes(query) ||\n (f.assignee && f.assignee.toLowerCase().includes(query)) ||\n f.labels.some((l) => l.toLowerCase().includes(query))\n )\n }\n\n return true\n })\n .sort((a, b) => (a.order < b.order ? -1 : a.order > b.order ? 1 : 0))\n },\n\n getUniqueAssignees: () => {\n const { features } = get()\n const assignees = new Set<string>()\n features.forEach((f) => {\n if (f.assignee) assignees.add(f.assignee)\n })\n return Array.from(assignees).sort()\n },\n\n getUniqueLabels: () => {\n const { features } = get()\n const labels = new Set<string>()\n features.forEach((f) => {\n f.labels.forEach((l) => labels.add(l))\n })\n return Array.from(labels).sort()\n },\n\n hasActiveFilters: () => {\n const {\n searchQuery,\n priorityFilter,\n assigneeFilter,\n labelFilter,\n dueDateFilter\n } = get()\n return (\n searchQuery !== '' ||\n priorityFilter !== 'all' ||\n assigneeFilter !== 'all' ||\n labelFilter !== 'all' ||\n dueDateFilter !== 'all'\n )\n }\n}))\n","/**\n * marked v17.0.3 - a markdown parser\n * Copyright (c) 2018-2026, MarkedJS. (MIT License)\n * Copyright (c) 2011-2018, Christopher Jeffrey. (MIT License)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\nfunction M(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var T=M();function H(u){T=u}var _={exec:()=>null};function k(u,e=\"\"){let t=typeof u==\"string\"?u:u.source,n={replace:(r,i)=>{let s=typeof i==\"string\"?i:i.source;return s=s.replace(m.caret,\"$1\"),t=t.replace(r,s),n},getRegex:()=>new RegExp(t,e)};return n}var Re=(()=>{try{return!!new RegExp(\"(?<=1)(?<!1)\")}catch{return!1}})(),m={codeRemoveIndent:/^(?: {1,4}| {0,3}\\t)/gm,outputLinkReplace:/\\\\([\\[\\]])/g,indentCodeCompensation:/^(\\s+)(?:```)/,beginningSpace:/^\\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\\n/g,tabCharGlobal:/\\t/g,multipleSpaceGlobal:/\\s+/g,blankLine:/^[ \\t]*$/,doubleBlankLine:/\\n[ \\t]*\\n[ \\t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \\t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\\[[ xX]\\] +\\S/,listReplaceTask:/^\\[[ xX]\\] +/,listTaskCheckbox:/\\[[ xX]\\]/,anyLine:/\\n.*\\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\\||\\| *$/g,tableRowBlankLine:/\\n[ \\t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\\s|>)/i,endPreScriptTag:/^<\\/(pre|code|kbd|script)(\\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/,unicodeAlphaNumeric:/[\\p{L}\\p{N}]/u,escapeTest:/[&<>\"']/,escapeReplace:/[&<>\"']/g,escapeTestNoEncode:/[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,escapeReplaceNoEncode:/[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,unescapeTest:/&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig,caret:/(^|[^\\[])\\^/g,percentDecode:/%25/g,findPipe:/\\|/g,splitPipe:/ \\|/,slashPipe:/\\\\\\|/g,carriageReturn:/\\r\\n|\\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\\S*/,endingNewline:/\\n$/,listItemRegex:u=>new RegExp(`^( {0,3}${u})((?:[\t ][^\\\\n]*)?(?:\\\\n|$))`),nextBulletRegex:u=>new RegExp(`^ {0,${Math.min(3,u-1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \t][^\\\\n]*)?(?:\\\\n|$))`),hrRegex:u=>new RegExp(`^ {0,${Math.min(3,u-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`),fencesBeginRegex:u=>new RegExp(`^ {0,${Math.min(3,u-1)}}(?:\\`\\`\\`|~~~)`),headingBeginRegex:u=>new RegExp(`^ {0,${Math.min(3,u-1)}}#`),htmlBeginRegex:u=>new RegExp(`^ {0,${Math.min(3,u-1)}}<(?:[a-z].*>|!--)`,\"i\"),blockquoteBeginRegex:u=>new RegExp(`^ {0,${Math.min(3,u-1)}}>`)},Te=/^(?:[ \\t]*(?:\\n|$))+/,Oe=/^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/,we=/^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/,I=/^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/,ye=/^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,N=/ {0,3}(?:[*+-]|\\d{1,9}[.)])/,re=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,se=k(re).replace(/bull/g,N).replace(/blockCode/g,/(?: {4}| {0,3}\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).replace(/\\|table/g,\"\").getRegex(),Pe=k(re).replace(/bull/g,N).replace(/blockCode/g,/(?: {4}| {0,3}\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).replace(/table/g,/ {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/).getRegex(),Q=/^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/,Se=/^[^\\n]+/,F=/(?!\\s*\\])(?:\\\\[\\s\\S]|[^\\[\\]\\\\])+/,$e=k(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/).replace(\"label\",F).replace(\"title\",/(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/).getRegex(),_e=k(/^(bull)([ \\t][^\\n]+?)?(?:\\n|$)/).replace(/bull/g,N).getRegex(),q=\"address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul\",j=/<!--(?:-?>|[\\s\\S]*?(?:-->|$))/,Le=k(\"^ {0,3}(?:<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)|comment[^\\\\n]*(\\\\n+|$)|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$))\",\"i\").replace(\"comment\",j).replace(\"tag\",q).replace(\"attribute\",/ +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/).getRegex(),ie=k(Q).replace(\"hr\",I).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\",\"\").replace(\"|table\",\"\").replace(\"blockquote\",\" {0,3}>\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)])[ \\\\t]\").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",q).getRegex(),Me=k(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/).replace(\"paragraph\",ie).getRegex(),U={blockquote:Me,code:Oe,def:$e,fences:we,heading:ye,hr:I,html:Le,lheading:se,list:_e,newline:Te,paragraph:ie,table:_,text:Se},te=k(\"^ *([^\\\\n ].*)\\\\n {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)\").replace(\"hr\",I).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"blockquote\",\" {0,3}>\").replace(\"code\",\"(?: {4}| {0,3}\t)[^\\\\n]\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)])[ \\\\t]\").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",q).getRegex(),ze={...U,lheading:Pe,table:te,paragraph:k(Q).replace(\"hr\",I).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\",\"\").replace(\"table\",te).replace(\"blockquote\",\" {0,3}>\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)])[ \\\\t]\").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",q).getRegex()},Ce={...U,html:k(`^ *(?:comment *(?:\\\\n|\\\\s*$)|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\\\s[^'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))`).replace(\"comment\",j).replace(/tag/g,\"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b\").getRegex(),def:/^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,heading:/^(#{1,6})(.*)(?:\\n+|$)/,fences:_,lheading:/^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,paragraph:k(Q).replace(\"hr\",I).replace(\"heading\",` *#{1,6} *[^\n]`).replace(\"lheading\",se).replace(\"|table\",\"\").replace(\"blockquote\",\" {0,3}>\").replace(\"|fences\",\"\").replace(\"|list\",\"\").replace(\"|html\",\"\").replace(\"|tag\",\"\").getRegex()},Ae=/^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,Ie=/^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,oe=/^( {2,}|\\\\)\\n(?!\\s*$)/,Ee=/^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,v=/[\\p{P}\\p{S}]/u,K=/[\\s\\p{P}\\p{S}]/u,ae=/[^\\s\\p{P}\\p{S}]/u,Be=k(/^((?![*_])punctSpace)/,\"u\").replace(/punctSpace/g,K).getRegex(),le=/(?!~)[\\p{P}\\p{S}]/u,De=/(?!~)[\\s\\p{P}\\p{S}]/u,qe=/(?:[^\\s\\p{P}\\p{S}]|~)/u,ue=/(?![*_])[\\p{P}\\p{S}]/u,ve=/(?![*_])[\\s\\p{P}\\p{S}]/u,Ge=/(?:[^\\s\\p{P}\\p{S}]|[*_])/u,He=k(/link|precode-code|html/,\"g\").replace(\"link\",/\\[(?:[^\\[\\]`]|(?<a>`+)[^`]+\\k<a>(?!`))*?\\]\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)]|\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)])*\\))*\\)/).replace(\"precode-\",Re?\"(?<!`)()\":\"(^^|[^`])\").replace(\"code\",/(?<b>`+)[^`]+\\k<b>(?!`)/).replace(\"html\",/<(?! )[^<>]*?>/).getRegex(),pe=/^(?:\\*+(?:((?!\\*)punct)|[^\\s*]))|^_+(?:((?!_)punct)|([^\\s_]))/,Ze=k(pe,\"u\").replace(/punct/g,v).getRegex(),Ne=k(pe,\"u\").replace(/punct/g,le).getRegex(),ce=\"^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)|notPunctSpace(\\\\*+)(?=notPunctSpace)\",Qe=k(ce,\"gu\").replace(/notPunctSpace/g,ae).replace(/punctSpace/g,K).replace(/punct/g,v).getRegex(),Fe=k(ce,\"gu\").replace(/notPunctSpace/g,qe).replace(/punctSpace/g,De).replace(/punct/g,le).getRegex(),je=k(\"^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)\",\"gu\").replace(/notPunctSpace/g,ae).replace(/punctSpace/g,K).replace(/punct/g,v).getRegex(),Ue=k(/^~~?(?:((?!~)punct)|[^\\s~])/,\"u\").replace(/punct/g,ue).getRegex(),Ke=\"^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)\",We=k(Ke,\"gu\").replace(/notPunctSpace/g,Ge).replace(/punctSpace/g,ve).replace(/punct/g,ue).getRegex(),Xe=k(/\\\\(punct)/,\"gu\").replace(/punct/g,v).getRegex(),Je=k(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/).replace(\"scheme\",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace(\"email\",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),Ve=k(j).replace(\"(?:-->|$)\",\"-->\").getRegex(),Ye=k(\"^comment|^</[a-zA-Z][\\\\w:-]*\\\\s*>|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>|^<\\\\?[\\\\s\\\\S]*?\\\\?>|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>\").replace(\"comment\",Ve).replace(\"attribute\",/\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/).getRegex(),D=/(?:\\[(?:\\\\[\\s\\S]|[^\\[\\]\\\\])*\\]|\\\\[\\s\\S]|`+[^`]*?`+(?!`)|[^\\[\\]\\\\`])*?/,et=k(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]*(?:\\n[ \\t]*)?)(title))?\\s*\\)/).replace(\"label\",D).replace(\"href\",/<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/).replace(\"title\",/\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/).getRegex(),he=k(/^!?\\[(label)\\]\\[(ref)\\]/).replace(\"label\",D).replace(\"ref\",F).getRegex(),ke=k(/^!?\\[(ref)\\](?:\\[\\])?/).replace(\"ref\",F).getRegex(),tt=k(\"reflink|nolink(?!\\\\()\",\"g\").replace(\"reflink\",he).replace(\"nolink\",ke).getRegex(),ne=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,W={_backpedal:_,anyPunctuation:Xe,autolink:Je,blockSkip:He,br:oe,code:Ie,del:_,delLDelim:_,delRDelim:_,emStrongLDelim:Ze,emStrongRDelimAst:Qe,emStrongRDelimUnd:je,escape:Ae,link:et,nolink:ke,punctuation:Be,reflink:he,reflinkSearch:tt,tag:Ye,text:Ee,url:_},nt={...W,link:k(/^!?\\[(label)\\]\\((.*?)\\)/).replace(\"label\",D).getRegex(),reflink:k(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace(\"label\",D).getRegex()},Z={...W,emStrongRDelimAst:Fe,emStrongLDelim:Ne,delLDelim:Ue,delRDelim:We,url:k(/^((?:protocol):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/).replace(\"protocol\",ne).replace(\"email\",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,del:/^(~~?)(?=[^\\s~])((?:\\\\[\\s\\S]|[^\\\\])*?(?:\\\\[\\s\\S]|[^\\s~\\\\]))\\1(?=[^~]|$)/,text:k(/^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|protocol:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/).replace(\"protocol\",ne).getRegex()},rt={...Z,br:k(oe).replace(\"{2,}\",\"*\").getRegex(),text:k(Z.text).replace(\"\\\\b_\",\"\\\\b_| {2,}\\\\n\").replace(/\\{2,\\}/g,\"*\").getRegex()},E={normal:U,gfm:ze,pedantic:Ce},z={normal:W,gfm:Z,breaks:rt,pedantic:nt};var st={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"},de=u=>st[u];function O(u,e){if(e){if(m.escapeTest.test(u))return u.replace(m.escapeReplace,de)}else if(m.escapeTestNoEncode.test(u))return u.replace(m.escapeReplaceNoEncode,de);return u}function X(u){try{u=encodeURI(u).replace(m.percentDecode,\"%\")}catch{return null}return u}function J(u,e){let t=u.replace(m.findPipe,(i,s,a)=>{let o=!1,l=s;for(;--l>=0&&a[l]===\"\\\\\";)o=!o;return o?\"|\":\" |\"}),n=t.split(m.splitPipe),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),e)if(n.length>e)n.splice(e);else for(;n.length<e;)n.push(\"\");for(;r<n.length;r++)n[r]=n[r].trim().replace(m.slashPipe,\"|\");return n}function C(u,e,t){let n=u.length;if(n===0)return\"\";let r=0;for(;r<n;){let i=u.charAt(n-r-1);if(i===e&&!t)r++;else if(i!==e&&t)r++;else break}return u.slice(0,n-r)}function ge(u,e){if(u.indexOf(e[1])===-1)return-1;let t=0;for(let n=0;n<u.length;n++)if(u[n]===\"\\\\\")n++;else if(u[n]===e[0])t++;else if(u[n]===e[1]&&(t--,t<0))return n;return t>0?-2:-1}function fe(u,e=0){let t=e,n=\"\";for(let r of u)if(r===\"\t\"){let i=4-t%4;n+=\" \".repeat(i),t+=i}else n+=r,t++;return n}function me(u,e,t,n,r){let i=e.href,s=e.title||null,a=u[1].replace(r.other.outputLinkReplace,\"$1\");n.state.inLink=!0;let o={type:u[0].charAt(0)===\"!\"?\"image\":\"link\",raw:t,href:i,title:s,text:a,tokens:n.inlineTokens(a)};return n.state.inLink=!1,o}function it(u,e,t){let n=u.match(t.other.indentCodeCompensation);if(n===null)return e;let r=n[1];return e.split(`\n`).map(i=>{let s=i.match(t.other.beginningSpace);if(s===null)return i;let[a]=s;return a.length>=r.length?i.slice(r.length):i}).join(`\n`)}var w=class{options;rules;lexer;constructor(e){this.options=e||T}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:\"space\",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let n=t[0].replace(this.rules.other.codeRemoveIndent,\"\");return{type:\"code\",raw:t[0],codeBlockStyle:\"indented\",text:this.options.pedantic?n:C(n,`\n`)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let n=t[0],r=it(n,t[3]||\"\",this.rules);return{type:\"code\",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,\"$1\"):t[2],text:r}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(this.rules.other.endingHash.test(n)){let r=C(n,\"#\");(this.options.pedantic||!r||this.rules.other.endingSpaceChar.test(r))&&(n=r.trim())}return{type:\"heading\",raw:t[0],depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:\"hr\",raw:C(t[0],`\n`)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let n=C(t[0],`\n`).split(`\n`),r=\"\",i=\"\",s=[];for(;n.length>0;){let a=!1,o=[],l;for(l=0;l<n.length;l++)if(this.rules.other.blockquoteStart.test(n[l]))o.push(n[l]),a=!0;else if(!a)o.push(n[l]);else break;n=n.slice(l);let p=o.join(`\n`),c=p.replace(this.rules.other.blockquoteSetextReplace,`\n $1`).replace(this.rules.other.blockquoteSetextReplace2,\"\");r=r?`${r}\n${p}`:p,i=i?`${i}\n${c}`:c;let d=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(c,s,!0),this.lexer.state.top=d,n.length===0)break;let h=s.at(-1);if(h?.type===\"code\")break;if(h?.type===\"blockquote\"){let R=h,f=R.raw+`\n`+n.join(`\n`),S=this.blockquote(f);s[s.length-1]=S,r=r.substring(0,r.length-R.raw.length)+S.raw,i=i.substring(0,i.length-R.text.length)+S.text;break}else if(h?.type===\"list\"){let R=h,f=R.raw+`\n`+n.join(`\n`),S=this.list(f);s[s.length-1]=S,r=r.substring(0,r.length-h.raw.length)+S.raw,i=i.substring(0,i.length-R.raw.length)+S.raw,n=f.substring(s.at(-1).raw.length).split(`\n`);continue}}return{type:\"blockquote\",raw:r,tokens:s,text:i}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim(),r=n.length>1,i={type:\"list\",raw:\"\",ordered:r,start:r?+n.slice(0,-1):\"\",loose:!1,items:[]};n=r?`\\\\d{1,9}\\\\${n.slice(-1)}`:`\\\\${n}`,this.options.pedantic&&(n=r?n:\"[*+-]\");let s=this.rules.other.listItemRegex(n),a=!1;for(;e;){let l=!1,p=\"\",c=\"\";if(!(t=s.exec(e))||this.rules.block.hr.test(e))break;p=t[0],e=e.substring(p.length);let d=fe(t[2].split(`\n`,1)[0],t[1].length),h=e.split(`\n`,1)[0],R=!d.trim(),f=0;if(this.options.pedantic?(f=2,c=d.trimStart()):R?f=t[1].length+1:(f=d.search(this.rules.other.nonSpaceChar),f=f>4?1:f,c=d.slice(f),f+=t[1].length),R&&this.rules.other.blankLine.test(h)&&(p+=h+`\n`,e=e.substring(h.length+1),l=!0),!l){let S=this.rules.other.nextBulletRegex(f),V=this.rules.other.hrRegex(f),Y=this.rules.other.fencesBeginRegex(f),ee=this.rules.other.headingBeginRegex(f),xe=this.rules.other.htmlBeginRegex(f),be=this.rules.other.blockquoteBeginRegex(f);for(;e;){let G=e.split(`\n`,1)[0],A;if(h=G,this.options.pedantic?(h=h.replace(this.rules.other.listReplaceNesting,\" \"),A=h):A=h.replace(this.rules.other.tabCharGlobal,\" \"),Y.test(h)||ee.test(h)||xe.test(h)||be.test(h)||S.test(h)||V.test(h))break;if(A.search(this.rules.other.nonSpaceChar)>=f||!h.trim())c+=`\n`+A.slice(f);else{if(R||d.replace(this.rules.other.tabCharGlobal,\" \").search(this.rules.other.nonSpaceChar)>=4||Y.test(d)||ee.test(d)||V.test(d))break;c+=`\n`+h}R=!h.trim(),p+=G+`\n`,e=e.substring(G.length+1),d=A.slice(f)}}i.loose||(a?i.loose=!0:this.rules.other.doubleBlankLine.test(p)&&(a=!0)),i.items.push({type:\"list_item\",raw:p,task:!!this.options.gfm&&this.rules.other.listIsTask.test(c),loose:!1,text:c,tokens:[]}),i.raw+=p}let o=i.items.at(-1);if(o)o.raw=o.raw.trimEnd(),o.text=o.text.trimEnd();else return;i.raw=i.raw.trimEnd();for(let l of i.items){if(this.lexer.state.top=!1,l.tokens=this.lexer.blockTokens(l.text,[]),l.task){if(l.text=l.text.replace(this.rules.other.listReplaceTask,\"\"),l.tokens[0]?.type===\"text\"||l.tokens[0]?.type===\"paragraph\"){l.tokens[0].raw=l.tokens[0].raw.replace(this.rules.other.listReplaceTask,\"\"),l.tokens[0].text=l.tokens[0].text.replace(this.rules.other.listReplaceTask,\"\");for(let c=this.lexer.inlineQueue.length-1;c>=0;c--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[c].src)){this.lexer.inlineQueue[c].src=this.lexer.inlineQueue[c].src.replace(this.rules.other.listReplaceTask,\"\");break}}let p=this.rules.other.listTaskCheckbox.exec(l.raw);if(p){let c={type:\"checkbox\",raw:p[0]+\" \",checked:p[0]!==\"[ ]\"};l.checked=c.checked,i.loose?l.tokens[0]&&[\"paragraph\",\"text\"].includes(l.tokens[0].type)&&\"tokens\"in l.tokens[0]&&l.tokens[0].tokens?(l.tokens[0].raw=c.raw+l.tokens[0].raw,l.tokens[0].text=c.raw+l.tokens[0].text,l.tokens[0].tokens.unshift(c)):l.tokens.unshift({type:\"paragraph\",raw:c.raw,text:c.raw,tokens:[c]}):l.tokens.unshift(c)}}if(!i.loose){let p=l.tokens.filter(d=>d.type===\"space\"),c=p.length>0&&p.some(d=>this.rules.other.anyLine.test(d.raw));i.loose=c}}if(i.loose)for(let l of i.items){l.loose=!0;for(let p of l.tokens)p.type===\"text\"&&(p.type=\"paragraph\")}return i}}html(e){let t=this.rules.block.html.exec(e);if(t)return{type:\"html\",block:!0,raw:t[0],pre:t[1]===\"pre\"||t[1]===\"script\"||t[1]===\"style\",text:t[0]}}def(e){let t=this.rules.block.def.exec(e);if(t){let n=t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal,\" \"),r=t[2]?t[2].replace(this.rules.other.hrefBrackets,\"$1\").replace(this.rules.inline.anyPunctuation,\"$1\"):\"\",i=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,\"$1\"):t[3];return{type:\"def\",tag:n,raw:t[0],href:r,title:i}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let n=J(t[1]),r=t[2].replace(this.rules.other.tableAlignChars,\"\").split(\"|\"),i=t[3]?.trim()?t[3].replace(this.rules.other.tableRowBlankLine,\"\").split(`\n`):[],s={type:\"table\",raw:t[0],header:[],align:[],rows:[]};if(n.length===r.length){for(let a of r)this.rules.other.tableAlignRight.test(a)?s.align.push(\"right\"):this.rules.other.tableAlignCenter.test(a)?s.align.push(\"center\"):this.rules.other.tableAlignLeft.test(a)?s.align.push(\"left\"):s.align.push(null);for(let a=0;a<n.length;a++)s.header.push({text:n[a],tokens:this.lexer.inline(n[a]),header:!0,align:s.align[a]});for(let a of i)s.rows.push(J(a,s.header.length).map((o,l)=>({text:o,tokens:this.lexer.inline(o),header:!1,align:s.align[l]})));return s}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t)return{type:\"heading\",raw:t[0],depth:t[2].charAt(0)===\"=\"?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let n=t[1].charAt(t[1].length-1)===`\n`?t[1].slice(0,-1):t[1];return{type:\"paragraph\",raw:t[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:\"text\",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:\"escape\",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:\"html\",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let n=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let s=C(n.slice(0,-1),\"\\\\\");if((n.length-s.length)%2===0)return}else{let s=ge(t[2],\"()\");if(s===-2)return;if(s>-1){let o=(t[0].indexOf(\"!\")===0?5:4)+t[1].length+s;t[2]=t[2].substring(0,s),t[0]=t[0].substring(0,o).trim(),t[3]=\"\"}}let r=t[2],i=\"\";if(this.options.pedantic){let s=this.rules.other.pedanticHrefTitle.exec(r);s&&(r=s[1],i=s[3])}else i=t[3]?t[3].slice(1,-1):\"\";return r=r.trim(),this.rules.other.startAngleBracket.test(r)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?r=r.slice(1):r=r.slice(1,-1)),me(t,{href:r&&r.replace(this.rules.inline.anyPunctuation,\"$1\"),title:i&&i.replace(this.rules.inline.anyPunctuation,\"$1\")},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let r=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal,\" \"),i=t[r.toLowerCase()];if(!i){let s=n[0].charAt(0);return{type:\"text\",raw:s,text:s}}return me(n,i,n[0],this.lexer,this.rules)}}emStrong(e,t,n=\"\"){let r=this.rules.inline.emStrongLDelim.exec(e);if(!r||r[3]&&n.match(this.rules.other.unicodeAlphaNumeric))return;if(!(r[1]||r[2]||\"\")||!n||this.rules.inline.punctuation.exec(n)){let s=[...r[0]].length-1,a,o,l=s,p=0,c=r[0][0]===\"*\"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(c.lastIndex=0,t=t.slice(-1*e.length+s);(r=c.exec(t))!=null;){if(a=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!a)continue;if(o=[...a].length,r[3]||r[4]){l+=o;continue}else if((r[5]||r[6])&&s%3&&!((s+o)%3)){p+=o;continue}if(l-=o,l>0)continue;o=Math.min(o,o+l+p);let d=[...r[0]][0].length,h=e.slice(0,s+r.index+d+o);if(Math.min(s,o)%2){let f=h.slice(1,-1);return{type:\"em\",raw:h,text:f,tokens:this.lexer.inlineTokens(f)}}let R=h.slice(2,-2);return{type:\"strong\",raw:h,text:R,tokens:this.lexer.inlineTokens(R)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let n=t[2].replace(this.rules.other.newLineCharGlobal,\" \"),r=this.rules.other.nonSpaceChar.test(n),i=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return r&&i&&(n=n.substring(1,n.length-1)),{type:\"codespan\",raw:t[0],text:n}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:\"br\",raw:t[0]}}del(e,t,n=\"\"){let r=this.rules.inline.delLDelim.exec(e);if(!r)return;if(!(r[1]||\"\")||!n||this.rules.inline.punctuation.exec(n)){let s=[...r[0]].length-1,a,o,l=s,p=this.rules.inline.delRDelim;for(p.lastIndex=0,t=t.slice(-1*e.length+s);(r=p.exec(t))!=null;){if(a=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!a||(o=[...a].length,o!==s))continue;if(r[3]||r[4]){l+=o;continue}if(l-=o,l>0)continue;o=Math.min(o,o+l);let c=[...r[0]][0].length,d=e.slice(0,s+r.index+c+o),h=d.slice(s,-s);return{type:\"del\",raw:d,text:h,tokens:this.lexer.inlineTokens(h)}}}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let n,r;return t[2]===\"@\"?(n=t[1],r=\"mailto:\"+n):(n=t[1],r=n),{type:\"link\",raw:t[0],text:n,href:r,tokens:[{type:\"text\",raw:n,text:n}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let n,r;if(t[2]===\"@\")n=t[0],r=\"mailto:\"+n;else{let i;do i=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??\"\";while(i!==t[0]);n=t[0],t[1]===\"www.\"?r=\"http://\"+t[0]:r=t[0]}return{type:\"link\",raw:t[0],text:n,href:r,tokens:[{type:\"text\",raw:n,text:n}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let n=this.lexer.state.inRawBlock;return{type:\"text\",raw:t[0],text:t[0],escaped:n}}}};var x=class u{tokens;options;state;inlineQueue;tokenizer;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||T,this.options.tokenizer=this.options.tokenizer||new w,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let t={other:m,block:E.normal,inline:z.normal};this.options.pedantic?(t.block=E.pedantic,t.inline=z.pedantic):this.options.gfm&&(t.block=E.gfm,this.options.breaks?t.inline=z.breaks:t.inline=z.gfm),this.tokenizer.rules=t}static get rules(){return{block:E,inline:z}}static lex(e,t){return new u(t).lex(e)}static lexInline(e,t){return new u(t).inlineTokens(e)}lex(e){e=e.replace(m.carriageReturn,`\n`),this.blockTokens(e,this.tokens);for(let t=0;t<this.inlineQueue.length;t++){let n=this.inlineQueue[t];this.inlineTokens(n.src,n.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,t=[],n=!1){for(this.options.pedantic&&(e=e.replace(m.tabCharGlobal,\" \").replace(m.spaceLine,\"\"));e;){let r;if(this.options.extensions?.block?.some(s=>(r=s.call({lexer:this},e,t))?(e=e.substring(r.raw.length),t.push(r),!0):!1))continue;if(r=this.tokenizer.space(e)){e=e.substring(r.raw.length);let s=t.at(-1);r.raw.length===1&&s!==void 0?s.raw+=`\n`:t.push(r);continue}if(r=this.tokenizer.code(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"paragraph\"||s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(r=this.tokenizer.fences(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.heading(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.hr(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.blockquote(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.list(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.html(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.def(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"paragraph\"||s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.raw,this.inlineQueue.at(-1).src=s.text):this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title},t.push(r));continue}if(r=this.tokenizer.table(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.lheading(e)){e=e.substring(r.raw.length),t.push(r);continue}let i=e;if(this.options.extensions?.startBlock){let s=1/0,a=e.slice(1),o;this.options.extensions.startBlock.forEach(l=>{o=l.call({lexer:this},a),typeof o==\"number\"&&o>=0&&(s=Math.min(s,o))}),s<1/0&&s>=0&&(i=e.substring(0,s+1))}if(this.state.top&&(r=this.tokenizer.paragraph(i))){let s=t.at(-1);n&&s?.type===\"paragraph\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r),n=i.length!==e.length,e=e.substring(r.raw.length);continue}if(r=this.tokenizer.text(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(e){let s=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(s);break}else throw new Error(s)}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){let n=e,r=null;if(this.tokens.links){let o=Object.keys(this.tokens.links);if(o.length>0)for(;(r=this.tokenizer.rules.inline.reflinkSearch.exec(n))!=null;)o.includes(r[0].slice(r[0].lastIndexOf(\"[\")+1,-1))&&(n=n.slice(0,r.index)+\"[\"+\"a\".repeat(r[0].length-2)+\"]\"+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(r=this.tokenizer.rules.inline.anyPunctuation.exec(n))!=null;)n=n.slice(0,r.index)+\"++\"+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let i;for(;(r=this.tokenizer.rules.inline.blockSkip.exec(n))!=null;)i=r[2]?r[2].length:0,n=n.slice(0,r.index+i)+\"[\"+\"a\".repeat(r[0].length-i-2)+\"]\"+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);n=this.options.hooks?.emStrongMask?.call({lexer:this},n)??n;let s=!1,a=\"\";for(;e;){s||(a=\"\"),s=!1;let o;if(this.options.extensions?.inline?.some(p=>(o=p.call({lexer:this},e,t))?(e=e.substring(o.raw.length),t.push(o),!0):!1))continue;if(o=this.tokenizer.escape(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.tag(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.link(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(o.raw.length);let p=t.at(-1);o.type===\"text\"&&p?.type===\"text\"?(p.raw+=o.raw,p.text+=o.text):t.push(o);continue}if(o=this.tokenizer.emStrong(e,n,a)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.codespan(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.br(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.del(e,n,a)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.autolink(e)){e=e.substring(o.raw.length),t.push(o);continue}if(!this.state.inLink&&(o=this.tokenizer.url(e))){e=e.substring(o.raw.length),t.push(o);continue}let l=e;if(this.options.extensions?.startInline){let p=1/0,c=e.slice(1),d;this.options.extensions.startInline.forEach(h=>{d=h.call({lexer:this},c),typeof d==\"number\"&&d>=0&&(p=Math.min(p,d))}),p<1/0&&p>=0&&(l=e.substring(0,p+1))}if(o=this.tokenizer.inlineText(l)){e=e.substring(o.raw.length),o.raw.slice(-1)!==\"_\"&&(a=o.raw.slice(-1)),s=!0;let p=t.at(-1);p?.type===\"text\"?(p.raw+=o.raw,p.text+=o.text):t.push(o);continue}if(e){let p=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(p);break}else throw new Error(p)}}return t}};var y=class{options;parser;constructor(e){this.options=e||T}space(e){return\"\"}code({text:e,lang:t,escaped:n}){let r=(t||\"\").match(m.notSpaceStart)?.[0],i=e.replace(m.endingNewline,\"\")+`\n`;return r?'<pre><code class=\"language-'+O(r)+'\">'+(n?i:O(i,!0))+`</code></pre>\n`:\"<pre><code>\"+(n?i:O(i,!0))+`</code></pre>\n`}blockquote({tokens:e}){return`<blockquote>\n${this.parser.parse(e)}</blockquote>\n`}html({text:e}){return e}def(e){return\"\"}heading({tokens:e,depth:t}){return`<h${t}>${this.parser.parseInline(e)}</h${t}>\n`}hr(e){return`<hr>\n`}list(e){let t=e.ordered,n=e.start,r=\"\";for(let a=0;a<e.items.length;a++){let o=e.items[a];r+=this.listitem(o)}let i=t?\"ol\":\"ul\",s=t&&n!==1?' start=\"'+n+'\"':\"\";return\"<\"+i+s+`>\n`+r+\"</\"+i+`>\n`}listitem(e){return`<li>${this.parser.parse(e.tokens)}</li>\n`}checkbox({checked:e}){return\"<input \"+(e?'checked=\"\" ':\"\")+'disabled=\"\" type=\"checkbox\"> '}paragraph({tokens:e}){return`<p>${this.parser.parseInline(e)}</p>\n`}table(e){let t=\"\",n=\"\";for(let i=0;i<e.header.length;i++)n+=this.tablecell(e.header[i]);t+=this.tablerow({text:n});let r=\"\";for(let i=0;i<e.rows.length;i++){let s=e.rows[i];n=\"\";for(let a=0;a<s.length;a++)n+=this.tablecell(s[a]);r+=this.tablerow({text:n})}return r&&(r=`<tbody>${r}</tbody>`),`<table>\n<thead>\n`+t+`</thead>\n`+r+`</table>\n`}tablerow({text:e}){return`<tr>\n${e}</tr>\n`}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?\"th\":\"td\";return(e.align?`<${n} align=\"${e.align}\">`:`<${n}>`)+t+`</${n}>\n`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${O(e,!0)}</code>`}br(e){return\"<br>\"}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,tokens:n}){let r=this.parser.parseInline(n),i=X(e);if(i===null)return r;e=i;let s='<a href=\"'+e+'\"';return t&&(s+=' title=\"'+O(t)+'\"'),s+=\">\"+r+\"</a>\",s}image({href:e,title:t,text:n,tokens:r}){r&&(n=this.parser.parseInline(r,this.parser.textRenderer));let i=X(e);if(i===null)return O(n);e=i;let s=`<img src=\"${e}\" alt=\"${O(n)}\"`;return t&&(s+=` title=\"${O(t)}\"`),s+=\">\",s}text(e){return\"tokens\"in e&&e.tokens?this.parser.parseInline(e.tokens):\"escaped\"in e&&e.escaped?e.text:O(e.text)}};var $=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return\"\"+e}image({text:e}){return\"\"+e}br(){return\"\"}checkbox({raw:e}){return e}};var b=class u{options;renderer;textRenderer;constructor(e){this.options=e||T,this.options.renderer=this.options.renderer||new y,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new $}static parse(e,t){return new u(t).parse(e)}static parseInline(e,t){return new u(t).parseInline(e)}parse(e){let t=\"\";for(let n=0;n<e.length;n++){let r=e[n];if(this.options.extensions?.renderers?.[r.type]){let s=r,a=this.options.extensions.renderers[s.type].call({parser:this},s);if(a!==!1||![\"space\",\"hr\",\"heading\",\"code\",\"table\",\"blockquote\",\"list\",\"html\",\"def\",\"paragraph\",\"text\"].includes(s.type)){t+=a||\"\";continue}}let i=r;switch(i.type){case\"space\":{t+=this.renderer.space(i);break}case\"hr\":{t+=this.renderer.hr(i);break}case\"heading\":{t+=this.renderer.heading(i);break}case\"code\":{t+=this.renderer.code(i);break}case\"table\":{t+=this.renderer.table(i);break}case\"blockquote\":{t+=this.renderer.blockquote(i);break}case\"list\":{t+=this.renderer.list(i);break}case\"checkbox\":{t+=this.renderer.checkbox(i);break}case\"html\":{t+=this.renderer.html(i);break}case\"def\":{t+=this.renderer.def(i);break}case\"paragraph\":{t+=this.renderer.paragraph(i);break}case\"text\":{t+=this.renderer.text(i);break}default:{let s='Token with \"'+i.type+'\" type was not found.';if(this.options.silent)return console.error(s),\"\";throw new Error(s)}}}return t}parseInline(e,t=this.renderer){let n=\"\";for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let a=this.options.extensions.renderers[i.type].call({parser:this},i);if(a!==!1||![\"escape\",\"html\",\"link\",\"image\",\"strong\",\"em\",\"codespan\",\"br\",\"del\",\"text\"].includes(i.type)){n+=a||\"\";continue}}let s=i;switch(s.type){case\"escape\":{n+=t.text(s);break}case\"html\":{n+=t.html(s);break}case\"link\":{n+=t.link(s);break}case\"image\":{n+=t.image(s);break}case\"checkbox\":{n+=t.checkbox(s);break}case\"strong\":{n+=t.strong(s);break}case\"em\":{n+=t.em(s);break}case\"codespan\":{n+=t.codespan(s);break}case\"br\":{n+=t.br(s);break}case\"del\":{n+=t.del(s);break}case\"text\":{n+=t.text(s);break}default:{let a='Token with \"'+s.type+'\" type was not found.';if(this.options.silent)return console.error(a),\"\";throw new Error(a)}}}return n}};var P=class{options;block;constructor(e){this.options=e||T}static passThroughHooks=new Set([\"preprocess\",\"postprocess\",\"processAllTokens\",\"emStrongMask\"]);static passThroughHooksRespectAsync=new Set([\"preprocess\",\"postprocess\",\"processAllTokens\"]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(){return this.block?x.lex:x.lexInline}provideParser(){return this.block?b.parse:b.parseInline}};var B=class{defaults=M();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=b;Renderer=y;TextRenderer=$;Lexer=x;Tokenizer=w;Hooks=P;constructor(...e){this.use(...e)}walkTokens(e,t){let n=[];for(let r of e)switch(n=n.concat(t.call(this,r)),r.type){case\"table\":{let i=r;for(let s of i.header)n=n.concat(this.walkTokens(s.tokens,t));for(let s of i.rows)for(let a of s)n=n.concat(this.walkTokens(a.tokens,t));break}case\"list\":{let i=r;n=n.concat(this.walkTokens(i.items,t));break}default:{let i=r;this.defaults.extensions?.childTokens?.[i.type]?this.defaults.extensions.childTokens[i.type].forEach(s=>{let a=i[s].flat(1/0);n=n.concat(this.walkTokens(a,t))}):i.tokens&&(n=n.concat(this.walkTokens(i.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let r={...n};if(r.async=this.defaults.async||r.async||!1,n.extensions&&(n.extensions.forEach(i=>{if(!i.name)throw new Error(\"extension name required\");if(\"renderer\"in i){let s=t.renderers[i.name];s?t.renderers[i.name]=function(...a){let o=i.renderer.apply(this,a);return o===!1&&(o=s.apply(this,a)),o}:t.renderers[i.name]=i.renderer}if(\"tokenizer\"in i){if(!i.level||i.level!==\"block\"&&i.level!==\"inline\")throw new Error(\"extension level must be 'block' or 'inline'\");let s=t[i.level];s?s.unshift(i.tokenizer):t[i.level]=[i.tokenizer],i.start&&(i.level===\"block\"?t.startBlock?t.startBlock.push(i.start):t.startBlock=[i.start]:i.level===\"inline\"&&(t.startInline?t.startInline.push(i.start):t.startInline=[i.start]))}\"childTokens\"in i&&i.childTokens&&(t.childTokens[i.name]=i.childTokens)}),r.extensions=t),n.renderer){let i=this.defaults.renderer||new y(this.defaults);for(let s in n.renderer){if(!(s in i))throw new Error(`renderer '${s}' does not exist`);if([\"options\",\"parser\"].includes(s))continue;let a=s,o=n.renderer[a],l=i[a];i[a]=(...p)=>{let c=o.apply(i,p);return c===!1&&(c=l.apply(i,p)),c||\"\"}}r.renderer=i}if(n.tokenizer){let i=this.defaults.tokenizer||new w(this.defaults);for(let s in n.tokenizer){if(!(s in i))throw new Error(`tokenizer '${s}' does not exist`);if([\"options\",\"rules\",\"lexer\"].includes(s))continue;let a=s,o=n.tokenizer[a],l=i[a];i[a]=(...p)=>{let c=o.apply(i,p);return c===!1&&(c=l.apply(i,p)),c}}r.tokenizer=i}if(n.hooks){let i=this.defaults.hooks||new P;for(let s in n.hooks){if(!(s in i))throw new Error(`hook '${s}' does not exist`);if([\"options\",\"block\"].includes(s))continue;let a=s,o=n.hooks[a],l=i[a];P.passThroughHooks.has(s)?i[a]=p=>{if(this.defaults.async&&P.passThroughHooksRespectAsync.has(s))return(async()=>{let d=await o.call(i,p);return l.call(i,d)})();let c=o.call(i,p);return l.call(i,c)}:i[a]=(...p)=>{if(this.defaults.async)return(async()=>{let d=await o.apply(i,p);return d===!1&&(d=await l.apply(i,p)),d})();let c=o.apply(i,p);return c===!1&&(c=l.apply(i,p)),c}}r.hooks=i}if(n.walkTokens){let i=this.defaults.walkTokens,s=n.walkTokens;r.walkTokens=function(a){let o=[];return o.push(s.call(this,a)),i&&(o=o.concat(i.call(this,a))),o}}this.defaults={...this.defaults,...r}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return x.lex(e,t??this.defaults)}parser(e,t){return b.parse(e,t??this.defaults)}parseMarkdown(e){return(n,r)=>{let i={...r},s={...this.defaults,...i},a=this.onError(!!s.silent,!!s.async);if(this.defaults.async===!0&&i.async===!1)return a(new Error(\"marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.\"));if(typeof n>\"u\"||n===null)return a(new Error(\"marked(): input parameter is undefined or null\"));if(typeof n!=\"string\")return a(new Error(\"marked(): input parameter is of type \"+Object.prototype.toString.call(n)+\", string expected\"));if(s.hooks&&(s.hooks.options=s,s.hooks.block=e),s.async)return(async()=>{let o=s.hooks?await s.hooks.preprocess(n):n,p=await(s.hooks?await s.hooks.provideLexer():e?x.lex:x.lexInline)(o,s),c=s.hooks?await s.hooks.processAllTokens(p):p;s.walkTokens&&await Promise.all(this.walkTokens(c,s.walkTokens));let h=await(s.hooks?await s.hooks.provideParser():e?b.parse:b.parseInline)(c,s);return s.hooks?await s.hooks.postprocess(h):h})().catch(a);try{s.hooks&&(n=s.hooks.preprocess(n));let l=(s.hooks?s.hooks.provideLexer():e?x.lex:x.lexInline)(n,s);s.hooks&&(l=s.hooks.processAllTokens(l)),s.walkTokens&&this.walkTokens(l,s.walkTokens);let c=(s.hooks?s.hooks.provideParser():e?b.parse:b.parseInline)(l,s);return s.hooks&&(c=s.hooks.postprocess(c)),c}catch(o){return a(o)}}}onError(e,t){return n=>{if(n.message+=`\nPlease report this to https://github.com/markedjs/marked.`,e){let r=\"<p>An error occurred:</p><pre>\"+O(n.message+\"\",!0)+\"</pre>\";return t?Promise.resolve(r):r}if(t)return Promise.reject(n);throw n}}};var L=new B;function g(u,e){return L.parse(u,e)}g.options=g.setOptions=function(u){return L.setOptions(u),g.defaults=L.defaults,H(g.defaults),g};g.getDefaults=M;g.defaults=T;g.use=function(...u){return L.use(...u),g.defaults=L.defaults,H(g.defaults),g};g.walkTokens=function(u,e){return L.walkTokens(u,e)};g.parseInline=L.parseInline;g.Parser=b;g.parser=b.parse;g.Renderer=y;g.TextRenderer=$;g.Lexer=x;g.lexer=x.lex;g.Tokenizer=w;g.Hooks=P;g.parse=g;var Ut=g.options,Kt=g.setOptions,Wt=g.use,Xt=g.walkTokens,Jt=g.parseInline,Vt=g,Yt=b.parse,en=x.lex;export{P as Hooks,x as Lexer,B as Marked,b as Parser,y as Renderer,$ as TextRenderer,w as Tokenizer,T as defaults,M as getDefaults,en as lexer,g as marked,Ut as options,Vt as parse,Jt as parseInline,Yt as parser,Kt as setOptions,Wt as use,Xt as walkTokens};\n//# sourceMappingURL=marked.esm.js.map\n","// Kanban types\n\nexport type Priority = 'critical' | 'high' | 'medium' | 'low'\nexport type FeatureStatus = 'backlog' | 'todo' | 'in-progress' | 'review' | 'done'\n\nexport interface Feature {\n id: string\n status: FeatureStatus\n priority: Priority\n assignee: string | null\n dueDate: string | null\n created: string\n modified: string\n completedAt: string | null\n labels: string[]\n attachments: string[]\n order: string\n content: string\n filePath: string\n}\n\n// Parse title from the first # heading in markdown content, falling back to the first line\nexport function getTitleFromContent(content: string): string {\n const match = content.match(/^#\\s+(.+)$/m)\n if (match) return match[1].trim()\n const firstLine = content.split('\\n').map(l => l.trim()).find(l => l.length > 0)\n return firstLine || 'Untitled'\n}\n\n// Generate a filename-safe slug from a title\nexport function generateSlug(title: string): string {\n return title\n .toLowerCase()\n .replace(/[^a-z0-9\\s-]/g, '') // Remove special characters\n .replace(/\\s+/g, '-') // Replace spaces with hyphens\n .replace(/-+/g, '-') // Replace multiple hyphens with single\n .replace(/^-|-$/g, '') // Trim hyphens from start/end\n .slice(0, 50) || 'feature' // Limit length, fallback\n}\n\n// Generate a filename from an incremental ID and a title\nexport function generateFeatureFilename(id: number, title: string): string {\n const slug = generateSlug(title)\n return `${id}-${slug}`\n}\n\n// Extract the numeric ID prefix from a filename or ID string like \"42-build-dashboard\"\nexport function extractNumericId(filenameOrId: string): number | null {\n const match = filenameOrId.match(/^(\\d+)(?:-|$)/)\n return match ? parseInt(match[1], 10) : null\n}\n\nexport interface KanbanColumn {\n id: string\n name: string\n color: string\n}\n\nexport const DEFAULT_COLUMNS: KanbanColumn[] = [\n { id: 'backlog', name: 'Backlog', color: '#6b7280' },\n { id: 'todo', name: 'To Do', color: '#3b82f6' },\n { id: 'in-progress', name: 'In Progress', color: '#f59e0b' },\n { id: 'review', name: 'Review', color: '#8b5cf6' },\n { id: 'done', name: 'Done', color: '#22c55e' }\n]\n\nexport interface CardDisplaySettings {\n showPriorityBadges: boolean\n showAssignee: boolean\n showDueDate: boolean\n showLabels: boolean\n showBuildWithAI: boolean\n showFileName: boolean\n compactMode: boolean\n markdownEditorMode: boolean\n defaultPriority: Priority\n defaultStatus: FeatureStatus\n}\n\n// Messages between extension and webview\nexport type ExtensionMessage =\n | { type: 'init'; features: Feature[]; columns: KanbanColumn[]; settings: CardDisplaySettings }\n | { type: 'featuresUpdated'; features: Feature[] }\n | { type: 'triggerCreateDialog' }\n | { type: 'featureContent'; featureId: string; content: string; frontmatter: FeatureFrontmatter }\n | { type: 'showSettings'; settings: CardDisplaySettings }\n\n// Frontmatter for editing\nexport interface FeatureFrontmatter {\n id: string\n status: FeatureStatus\n priority: Priority\n assignee: string | null\n dueDate: string | null\n created: string\n modified: string\n completedAt: string | null\n labels: string[]\n attachments: string[]\n order: string\n}\n\nexport type WebviewMessage =\n | { type: 'ready' }\n | { type: 'createFeature'; data: { status: FeatureStatus; priority: Priority; content: string; assignee: string | null; dueDate: string | null; labels: string[] } }\n | { type: 'moveFeature'; featureId: string; newStatus: string; newOrder: number }\n | { type: 'deleteFeature'; featureId: string }\n | { type: 'updateFeature'; featureId: string; updates: Partial<Feature> }\n | { type: 'openFeature'; featureId: string }\n | { type: 'saveFeatureContent'; featureId: string; content: string; frontmatter: FeatureFrontmatter }\n | { type: 'closeFeature' }\n | { type: 'openFile'; featureId: string }\n | { type: 'addAttachment'; featureId: string }\n | { type: 'openAttachment'; featureId: string; attachment: string }\n | { type: 'removeAttachment'; featureId: string; attachment: string }\n | { type: 'openSettings' }\n | { type: 'saveSettings'; settings: CardDisplaySettings }\n | { type: 'addColumn'; column: { name: string; color: string } }\n | { type: 'editColumn'; columnId: string; updates: { name: string; color: string } }\n | { type: 'removeColumn'; columnId: string }\n","import { marked } from 'marked'\nimport { Calendar, Check, FileText, Paperclip } from 'lucide-react'\nimport { getTitleFromContent } from '../../shared/types'\nimport type { Feature, Priority } from '../../shared/types'\nimport { useStore } from '../store'\n\ninterface FeatureCardProps {\n feature: Feature\n onClick: () => void\n isDragging?: boolean\n}\n\nconst priorityColors: Record<Priority, string> = {\n critical: 'bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400',\n high: 'bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400',\n medium: 'bg-yellow-100 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-400',\n low: 'bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400'\n}\n\nconst priorityLabels: Record<Priority, string> = {\n critical: 'Critical',\n high: 'High',\n medium: 'Med',\n low: 'Low'\n}\n\nfunction getDescriptionFromContent(content: string): string {\n // Remove the first # heading line, then grab the remaining content\n const lines = content.split('\\n')\n const headingIndex = lines.findIndex(l => /^#\\s+/.test(l))\n const afterHeading = headingIndex >= 0 ? lines.slice(headingIndex + 1) : lines\n // Trim leading/trailing blank lines but preserve internal structure (lists, etc.)\n const trimmed = afterHeading.join('\\n').trim()\n return trimmed\n}\n\nfunction renderDescriptionHtml(text: string): string {\n return marked.parse(text, { async: false, gfm: true, breaks: true }) as string\n}\n\nexport function FeatureCard({ feature, onClick, isDragging }: FeatureCardProps) {\n const { cardSettings } = useStore()\n const title = getTitleFromContent(feature.content)\n const description = getDescriptionFromContent(feature.content)\n const fileName = feature.filePath ? feature.filePath.split('/').pop() || '' : ''\n\n const formatDueDate = (dateStr: string | null) => {\n if (!dateStr) return null\n const date = new Date(dateStr)\n const now = new Date()\n const diff = date.getTime() - now.getTime()\n const days = Math.ceil(diff / (1000 * 60 * 60 * 24))\n\n if (days < 0) return { text: 'Overdue', className: 'text-red-500' }\n if (days === 0) return { text: 'Today', className: 'text-orange-500' }\n if (days === 1) return { text: 'Tomorrow', className: 'text-yellow-600 dark:text-yellow-400' }\n if (days <= 7) return { text: `${days}d`, className: 'text-zinc-500 dark:text-zinc-400' }\n\n return {\n text: date.toLocaleDateString('en-US', { month: 'short', day: 'numeric' }),\n className: 'text-zinc-500 dark:text-zinc-400'\n }\n }\n\n const dueInfo = feature.status === 'done' ? null : formatDueDate(feature.dueDate)\n\n const formatCompletedAt = (dateStr: string | null) => {\n if (!dateStr) return null\n const completed = new Date(dateStr)\n const now = new Date()\n const diffMs = now.getTime() - completed.getTime()\n const diffMins = Math.floor(diffMs / (1000 * 60))\n const diffHours = Math.floor(diffMs / (1000 * 60 * 60))\n const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24))\n\n if (diffMins < 1) return 'Just now'\n if (diffMins < 60) return `${diffMins}m ago`\n if (diffHours < 24) return `${diffHours}h ago`\n if (diffDays === 1) return '1d ago'\n if (diffDays < 30) return `${diffDays}d ago`\n if (diffDays < 365) return `${Math.floor(diffDays / 30)}mo ago`\n return `${Math.floor(diffDays / 365)}y ago`\n }\n\n const completedText = feature.status === 'done' ? formatCompletedAt(feature.completedAt) : null\n\n return (\n <div\n onClick={onClick}\n className={`group relative flex flex-col bg-white dark:bg-zinc-800 rounded-lg border border-zinc-200 dark:border-zinc-700 ${cardSettings.compactMode ? 'p-2 min-h-[4.5rem]' : 'p-3 min-h-[7rem]'} cursor-pointer hover:shadow-md transition-shadow ${\n isDragging ? 'shadow-lg opacity-90' : ''\n }`}\n >\n {/* Title & Content */}\n <div className=\"flex-1\">\n {/* File Name + Priority badge row (when fileName enabled) */}\n {cardSettings.showFileName && fileName && (\n <div className=\"flex items-center gap-1.5 mb-1\">\n <FileText size={10} className=\"shrink-0 text-zinc-400 dark:text-zinc-500\" />\n <span className=\"text-[10px] font-mono text-zinc-400 dark:text-zinc-500 truncate flex-1\">\n {fileName}\n </span>\n {cardSettings.showPriorityBadges && (\n <span\n className={`text-[10px] font-medium px-1.5 py-0.5 rounded shrink-0 ${priorityColors[feature.priority]}`}\n >\n {priorityLabels[feature.priority]}\n </span>\n )}\n </div>\n )}\n\n <div className={`flex items-start gap-2 ${description ? 'mb-1' : cardSettings.compactMode ? 'mb-1' : 'mb-2'}`}>\n <h3 className=\"text-sm font-medium text-zinc-900 dark:text-zinc-100 line-clamp-2 flex-1\">\n {title}\n </h3>\n {cardSettings.showPriorityBadges && !(cardSettings.showFileName && fileName) && (\n <span\n className={`text-xs font-medium px-1.5 py-0.5 rounded shrink-0 ${priorityColors[feature.priority]}`}\n >\n {priorityLabels[feature.priority]}\n </span>\n )}\n </div>\n\n {/* Description */}\n {/* eslint-disable-next-line react/no-danger */}\n {description && !cardSettings.compactMode && (\n <div\n className=\"text-xs text-zinc-500 dark:text-zinc-400 line-clamp-2 mb-2 card-inline-markdown\"\n dangerouslySetInnerHTML={{ __html: renderDescriptionHtml(description) }}\n />\n )}\n\n {/* Labels */}\n {cardSettings.showLabels && feature.labels.length > 0 && (\n <div className=\"flex flex-wrap gap-1 mb-2\">\n {feature.labels.slice(0, 3).map((label) => (\n <span\n key={label}\n className=\"text-xs px-1.5 py-0.5 rounded bg-zinc-100 text-zinc-600 dark:bg-zinc-700 dark:text-zinc-300\"\n >\n {label}\n </span>\n ))}\n {feature.labels.length > 3 && (\n <span className=\"text-xs text-zinc-400\">+{feature.labels.length - 3}</span>\n )}\n </div>\n )}\n </div>\n\n {/* Footer */}\n <div className=\"flex items-center justify-between text-xs mt-auto\">\n <div className=\"flex items-center gap-1\">\n {cardSettings.showAssignee && feature.assignee && feature.assignee !== 'null' && (\n <div className=\"flex items-center gap-1.5 text-zinc-500 dark:text-zinc-400\">\n <span className=\"shrink-0 w-4 h-4 rounded-full flex items-center justify-center text-[8px] font-bold bg-zinc-200 dark:bg-zinc-600 text-zinc-700 dark:text-zinc-300\">\n {feature.assignee.split(/\\s+/).map((w: string) => w[0]).join('').toUpperCase().slice(0, 2)}\n </span>\n <span>{feature.assignee}</span>\n </div>\n )}\n </div>\n {feature.attachments.length > 0 && (\n <div className=\"flex items-center gap-1 text-zinc-400 dark:text-zinc-500\">\n <Paperclip size={12} />\n <span>{feature.attachments.length}</span>\n </div>\n )}\n {cardSettings.showDueDate && dueInfo && (\n <div className={`flex items-center gap-1 ${dueInfo.className}`}>\n <Calendar size={12} />\n <span>{dueInfo.text}</span>\n </div>\n )}\n {completedText && (\n <div className=\"flex items-center gap-1\" style={{ color: 'var(--vscode-descriptionForeground)' }}>\n <Check size={12} />\n <span>{completedText}</span>\n </div>\n )}\n </div>\n </div>\n )\n}\n","import { useState, useRef, useEffect } from 'react'\nimport { Plus, MoreVertical, Pencil, Trash2 } from 'lucide-react'\nimport { FeatureCard } from './FeatureCard'\nimport type { Feature, KanbanColumn as KanbanColumnType } from '../../shared/types'\nimport type { LayoutMode } from '../store'\nimport type { DropTarget } from './KanbanBoard'\n\ninterface KanbanColumnProps {\n column: KanbanColumnType\n features: Feature[]\n onFeatureClick: (feature: Feature) => void\n onAddFeature: (status: string) => void\n onEditColumn: (columnId: string) => void\n onRemoveColumn: (columnId: string) => void\n onDragStart: (e: React.DragEvent, feature: Feature) => void\n onDragOver: (e: React.DragEvent) => void\n onDragOverCard: (e: React.DragEvent, columnId: string, cardIndex: number) => void\n onDrop: (e: React.DragEvent, status: string) => void\n onDragEnd: () => void\n draggedFeature: Feature | null\n dropTarget: DropTarget | null\n layout: LayoutMode\n}\n\nexport function KanbanColumn({\n column,\n features,\n onFeatureClick,\n onAddFeature,\n onEditColumn,\n onRemoveColumn,\n onDragStart,\n onDragOver,\n onDragOverCard,\n onDrop,\n onDragEnd,\n draggedFeature,\n dropTarget,\n layout\n}: KanbanColumnProps) {\n const isVertical = layout === 'vertical'\n const isDropTarget = dropTarget && dropTarget.columnId === column.id\n const [menuOpen, setMenuOpen] = useState(false)\n const menuRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (!menuOpen) return\n const handleClickOutside = (e: MouseEvent) => {\n if (menuRef.current && !menuRef.current.contains(e.target as Node)) {\n setMenuOpen(false)\n }\n }\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }, [menuOpen])\n\n return (\n <div\n className={\n isVertical\n ? \"flex flex-col bg-zinc-100 dark:bg-zinc-800/50 rounded-lg\"\n : \"flex-shrink-0 w-72 h-full flex flex-col bg-zinc-100 dark:bg-zinc-800/50 rounded-lg\"\n }\n onDragOver={onDragOver}\n onDrop={(e) => onDrop(e, column.id)}\n >\n {/* Column Header */}\n <div className=\"flex items-center justify-between w-full px-3 py-2 border-b border-zinc-200 dark:border-zinc-700\">\n <div className=\"flex items-center gap-2\">\n <div className=\"w-2 h-2 rounded-full\" style={{ backgroundColor: column.color }} />\n <h3 className=\"text-sm font-medium text-zinc-900 dark:text-zinc-100\">{column.name}</h3>\n <span className=\"text-xs text-zinc-500 dark:text-zinc-400 bg-zinc-200 dark:bg-zinc-700 px-1.5 py-0.5 rounded-full\">\n {features.length}\n </span>\n </div>\n <div className=\"flex items-center gap-0.5\">\n <button\n type=\"button\"\n onClick={() => onAddFeature(column.id)}\n className=\"p-1 rounded hover:bg-zinc-200/60 dark:hover:bg-zinc-700/60 transition-colors\"\n title={`Add to ${column.name}`}\n >\n <Plus size={16} className=\"text-zinc-500\" />\n </button>\n <div className=\"relative\" ref={menuRef}>\n <button\n type=\"button\"\n onClick={() => setMenuOpen(!menuOpen)}\n className=\"p-1 rounded hover:bg-zinc-200/60 dark:hover:bg-zinc-700/60 transition-colors\"\n title=\"Column options\"\n >\n <MoreVertical size={16} className=\"text-zinc-500\" />\n </button>\n {menuOpen && (\n <div className=\"absolute right-0 top-full mt-1 z-50 bg-white dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-600 rounded-md shadow-lg py-1 min-w-[140px]\">\n <button\n type=\"button\"\n onClick={() => { setMenuOpen(false); onEditColumn(column.id) }}\n className=\"flex items-center gap-2 w-full px-3 py-1.5 text-sm text-zinc-700 dark:text-zinc-200 hover:bg-zinc-100 dark:hover:bg-zinc-700 transition-colors\"\n >\n <Pencil size={14} />\n Edit List\n </button>\n <button\n type=\"button\"\n onClick={() => { setMenuOpen(false); onRemoveColumn(column.id) }}\n className=\"flex items-center gap-2 w-full px-3 py-1.5 text-sm text-red-600 dark:text-red-400 hover:bg-zinc-100 dark:hover:bg-zinc-700 transition-colors\"\n >\n <Trash2 size={14} />\n Remove List\n </button>\n </div>\n )}\n </div>\n </div>\n </div>\n\n {/* Column Content */}\n <div\n className={\n isVertical\n ? \"flex-1 p-2 flex flex-wrap gap-2\"\n : \"flex-1 overflow-y-auto p-2 space-y-2 min-h-[200px]\"\n }\n >\n {features.map((feature, index) => (\n <div key={feature.id}>\n {/* Drop indicator before this card */}\n {isDropTarget && dropTarget.index === index && (\n <div className=\"h-0.5 bg-blue-500 rounded-full mx-1 mb-1\" />\n )}\n <div\n draggable\n onDragStart={(e) => onDragStart(e, feature)}\n onDragOver={(e) => onDragOverCard(e, column.id, index)}\n onDragEnd={onDragEnd}\n className={`${isVertical ? \"w-64\" : \"\"} ${\n draggedFeature?.id === feature.id ? \"opacity-40\" : \"\"\n }`}\n >\n <FeatureCard feature={feature} onClick={() => onFeatureClick(feature)} />\n </div>\n </div>\n ))}\n\n {/* Drop indicator at end of list */}\n {isDropTarget && dropTarget.index === features.length && features.length > 0 && (\n <div className=\"h-0.5 bg-blue-500 rounded-full mx-1\" />\n )}\n\n {features.length === 0 && (\n <div className={isVertical ? \"text-sm text-zinc-400 dark:text-zinc-500 py-4\" : \"text-center py-8 text-sm text-zinc-400 dark:text-zinc-500\"}>\n No features\n </div>\n )}\n </div>\n </div>\n )\n}\n","import { useState, useCallback } from 'react'\nimport { KanbanColumn } from './KanbanColumn'\nimport { useStore } from '../store'\nimport type { Feature, FeatureStatus } from '../../shared/types'\n\nexport interface DropTarget {\n columnId: string\n index: number\n}\n\ninterface KanbanBoardProps {\n onFeatureClick: (feature: Feature) => void\n onAddFeature: (status: string) => void\n onMoveFeature: (featureId: string, newStatus: string, newOrder: number) => void\n onEditColumn: (columnId: string) => void\n onRemoveColumn: (columnId: string) => void\n}\n\nexport function KanbanBoard({ onFeatureClick, onAddFeature, onMoveFeature, onEditColumn, onRemoveColumn }: KanbanBoardProps) {\n const columns = useStore((s) => s.columns)\n const getFilteredFeaturesByStatus = useStore((s) => s.getFilteredFeaturesByStatus)\n const getFeaturesByStatus = useStore((s) => s.getFeaturesByStatus)\n const layout = useStore((s) => s.layout)\n const [draggedFeature, setDraggedFeature] = useState<Feature | null>(null)\n const [dropTarget, setDropTarget] = useState<DropTarget | null>(null)\n\n const handleDragStart = useCallback((e: React.DragEvent, feature: Feature) => {\n setDraggedFeature(feature)\n e.dataTransfer.effectAllowed = 'move'\n e.dataTransfer.setData('text/plain', feature.id)\n }, [])\n\n const handleDragOver = useCallback((e: React.DragEvent) => {\n e.preventDefault()\n e.dataTransfer.dropEffect = 'move'\n }, [])\n\n const handleDragOverCard = useCallback(\n (e: React.DragEvent, columnId: string, cardIndex: number) => {\n e.preventDefault()\n e.dataTransfer.dropEffect = 'move'\n\n const rect = (e.currentTarget as HTMLElement).getBoundingClientRect()\n const midY = rect.top + rect.height / 2\n const insertIndex = e.clientY < midY ? cardIndex : cardIndex + 1\n\n setDropTarget((prev) => {\n if (prev && prev.columnId === columnId && prev.index === insertIndex) return prev\n return { columnId, index: insertIndex }\n })\n },\n []\n )\n\n const handleDrop = useCallback(\n (e: React.DragEvent, columnId: string) => {\n e.preventDefault()\n if (!draggedFeature) return\n\n const filteredFeatures = getFilteredFeaturesByStatus(columnId as FeatureStatus)\n let filteredInsertIndex: number\n\n if (dropTarget && dropTarget.columnId === columnId) {\n filteredInsertIndex = dropTarget.index\n } else {\n // Dropped on empty area of the column — append to end\n filteredInsertIndex = filteredFeatures.length\n }\n\n // Adjust index if dragging within the same column and moving downward\n if (draggedFeature.status === columnId) {\n const currentIndex = filteredFeatures.findIndex((f) => f.id === draggedFeature.id)\n if (currentIndex !== -1 && filteredInsertIndex > currentIndex) {\n filteredInsertIndex--\n }\n // No-op if dropping in the same position\n if (currentIndex === filteredInsertIndex) {\n setDraggedFeature(null)\n setDropTarget(null)\n return\n }\n }\n\n // Translate filtered index to unfiltered index\n const allFeatures = getFeaturesByStatus(columnId as FeatureStatus)\n .filter((f) => f.id !== draggedFeature.id)\n const filteredWithoutDragged = filteredFeatures.filter((f) => f.id !== draggedFeature.id)\n\n let unfilteredInsertIndex: number\n\n if (filteredWithoutDragged.length === 0) {\n // No visible features — append to end of unfiltered list\n unfilteredInsertIndex = allFeatures.length\n } else if (filteredInsertIndex >= filteredWithoutDragged.length) {\n // Inserting past end of filtered list — place after last visible feature\n const lastVisible = filteredWithoutDragged[filteredWithoutDragged.length - 1]\n const lastVisibleUnfilteredIdx = allFeatures.findIndex((f) => f.id === lastVisible.id)\n unfilteredInsertIndex = lastVisibleUnfilteredIdx + 1\n } else {\n // Find the anchor feature at the filtered insert position\n const anchorFeature = filteredWithoutDragged[filteredInsertIndex]\n unfilteredInsertIndex = allFeatures.findIndex((f) => f.id === anchorFeature.id)\n }\n\n onMoveFeature(draggedFeature.id, columnId, unfilteredInsertIndex)\n setDraggedFeature(null)\n setDropTarget(null)\n },\n [draggedFeature, dropTarget, getFilteredFeaturesByStatus, getFeaturesByStatus, onMoveFeature]\n )\n\n const handleDragEnd = useCallback(() => {\n setDraggedFeature(null)\n setDropTarget(null)\n }, [])\n\n const isVertical = layout === 'vertical'\n\n return (\n <div className={isVertical ? \"h-full overflow-y-auto p-4\" : \"h-full overflow-x-auto p-4\"}>\n <div className={isVertical ? \"flex flex-col gap-4\" : \"flex gap-4 h-full min-w-max\"}>\n {columns.map((column) => (\n <KanbanColumn\n key={column.id}\n column={column}\n features={getFilteredFeaturesByStatus(column.id as FeatureStatus)}\n onFeatureClick={onFeatureClick}\n onAddFeature={onAddFeature}\n onEditColumn={onEditColumn}\n onRemoveColumn={onRemoveColumn}\n onDragStart={handleDragStart}\n onDragOver={handleDragOver}\n onDragOverCard={handleDragOverCard}\n onDrop={handleDrop}\n onDragEnd={handleDragEnd}\n draggedFeature={draggedFeature}\n dropTarget={dropTarget}\n layout={layout}\n />\n ))}\n </div>\n </div>\n )\n}\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","const CLASS_PART_SEPARATOR = '-';\nconst createClassGroupUtils = config => {\n const classMap = createClassMap(config);\n const {\n conflictingClassGroups,\n conflictingClassGroupModifiers\n } = config;\n const getClassGroupId = className => {\n const classParts = className.split(CLASS_PART_SEPARATOR);\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and remove it from classParts.\n if (classParts[0] === '' && classParts.length !== 1) {\n classParts.shift();\n }\n return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className);\n };\n const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {\n const conflicts = conflictingClassGroups[classGroupId] || [];\n if (hasPostfixModifier && conflictingClassGroupModifiers[classGroupId]) {\n return [...conflicts, ...conflictingClassGroupModifiers[classGroupId]];\n }\n return conflicts;\n };\n return {\n getClassGroupId,\n getConflictingClassGroupIds\n };\n};\nconst getGroupRecursive = (classParts, classPartObject) => {\n if (classParts.length === 0) {\n return classPartObject.classGroupId;\n }\n const currentClassPart = classParts[0];\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);\n const classGroupFromNextClassPart = nextClassPartObject ? getGroupRecursive(classParts.slice(1), nextClassPartObject) : undefined;\n if (classGroupFromNextClassPart) {\n return classGroupFromNextClassPart;\n }\n if (classPartObject.validators.length === 0) {\n return undefined;\n }\n const classRest = classParts.join(CLASS_PART_SEPARATOR);\n return classPartObject.validators.find(({\n validator\n }) => validator(classRest))?.classGroupId;\n};\nconst arbitraryPropertyRegex = /^\\[(.+)\\]$/;\nconst getGroupIdForArbitraryProperty = className => {\n if (arbitraryPropertyRegex.test(className)) {\n const arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)[1];\n const property = arbitraryPropertyClassName?.substring(0, arbitraryPropertyClassName.indexOf(':'));\n if (property) {\n // I use two dots here because one dot is used as prefix for class groups in plugins\n return 'arbitrary..' + property;\n }\n }\n};\n/**\n * Exported for testing only\n */\nconst createClassMap = config => {\n const {\n theme,\n prefix\n } = config;\n const classMap = {\n nextPart: new Map(),\n validators: []\n };\n const prefixedClassGroupEntries = getPrefixedClassGroupEntries(Object.entries(config.classGroups), prefix);\n prefixedClassGroupEntries.forEach(([classGroupId, classGroup]) => {\n processClassesRecursively(classGroup, classMap, classGroupId, theme);\n });\n return classMap;\n};\nconst processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {\n classGroup.forEach(classDefinition => {\n if (typeof classDefinition === 'string') {\n const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);\n classPartObjectToEdit.classGroupId = classGroupId;\n return;\n }\n if (typeof classDefinition === 'function') {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);\n return;\n }\n classPartObject.validators.push({\n validator: classDefinition,\n classGroupId\n });\n return;\n }\n Object.entries(classDefinition).forEach(([key, classGroup]) => {\n processClassesRecursively(classGroup, getPart(classPartObject, key), classGroupId, theme);\n });\n });\n};\nconst getPart = (classPartObject, path) => {\n let currentClassPartObject = classPartObject;\n path.split(CLASS_PART_SEPARATOR).forEach(pathPart => {\n if (!currentClassPartObject.nextPart.has(pathPart)) {\n currentClassPartObject.nextPart.set(pathPart, {\n nextPart: new Map(),\n validators: []\n });\n }\n currentClassPartObject = currentClassPartObject.nextPart.get(pathPart);\n });\n return currentClassPartObject;\n};\nconst isThemeGetter = func => func.isThemeGetter;\nconst getPrefixedClassGroupEntries = (classGroupEntries, prefix) => {\n if (!prefix) {\n return classGroupEntries;\n }\n return classGroupEntries.map(([classGroupId, classGroup]) => {\n const prefixedClassGroup = classGroup.map(classDefinition => {\n if (typeof classDefinition === 'string') {\n return prefix + classDefinition;\n }\n if (typeof classDefinition === 'object') {\n return Object.fromEntries(Object.entries(classDefinition).map(([key, value]) => [prefix + key, value]));\n }\n return classDefinition;\n });\n return [classGroupId, prefixedClassGroup];\n });\n};\n\n// LRU cache inspired from hashlru (https://github.com/dominictarr/hashlru/blob/v1.0.4/index.js) but object replaced with Map to improve performance\nconst createLruCache = maxCacheSize => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {}\n };\n }\n let cacheSize = 0;\n let cache = new Map();\n let previousCache = new Map();\n const update = (key, value) => {\n cache.set(key, value);\n cacheSize++;\n if (cacheSize > maxCacheSize) {\n cacheSize = 0;\n previousCache = cache;\n cache = new Map();\n }\n };\n return {\n get(key) {\n let value = cache.get(key);\n if (value !== undefined) {\n return value;\n }\n if ((value = previousCache.get(key)) !== undefined) {\n update(key, value);\n return value;\n }\n },\n set(key, value) {\n if (cache.has(key)) {\n cache.set(key, value);\n } else {\n update(key, value);\n }\n }\n };\n};\nconst IMPORTANT_MODIFIER = '!';\nconst createParseClassName = config => {\n const {\n separator,\n experimentalParseClassName\n } = config;\n const isSeparatorSingleCharacter = separator.length === 1;\n const firstSeparatorCharacter = separator[0];\n const separatorLength = separator.length;\n // parseClassName inspired by https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n const parseClassName = className => {\n const modifiers = [];\n let bracketDepth = 0;\n let modifierStart = 0;\n let postfixModifierPosition;\n for (let index = 0; index < className.length; index++) {\n let currentCharacter = className[index];\n if (bracketDepth === 0) {\n if (currentCharacter === firstSeparatorCharacter && (isSeparatorSingleCharacter || className.slice(index, index + separatorLength) === separator)) {\n modifiers.push(className.slice(modifierStart, index));\n modifierStart = index + separatorLength;\n continue;\n }\n if (currentCharacter === '/') {\n postfixModifierPosition = index;\n continue;\n }\n }\n if (currentCharacter === '[') {\n bracketDepth++;\n } else if (currentCharacter === ']') {\n bracketDepth--;\n }\n }\n const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.substring(modifierStart);\n const hasImportantModifier = baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER);\n const baseClassName = hasImportantModifier ? baseClassNameWithImportantModifier.substring(1) : baseClassNameWithImportantModifier;\n const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\n return {\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n };\n };\n if (experimentalParseClassName) {\n return className => experimentalParseClassName({\n className,\n parseClassName\n });\n }\n return parseClassName;\n};\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nconst sortModifiers = modifiers => {\n if (modifiers.length <= 1) {\n return modifiers;\n }\n const sortedModifiers = [];\n let unsortedModifiers = [];\n modifiers.forEach(modifier => {\n const isArbitraryVariant = modifier[0] === '[';\n if (isArbitraryVariant) {\n sortedModifiers.push(...unsortedModifiers.sort(), modifier);\n unsortedModifiers = [];\n } else {\n unsortedModifiers.push(modifier);\n }\n });\n sortedModifiers.push(...unsortedModifiers.sort());\n return sortedModifiers;\n};\nconst createConfigUtils = config => ({\n cache: createLruCache(config.cacheSize),\n parseClassName: createParseClassName(config),\n ...createClassGroupUtils(config)\n});\nconst SPLIT_CLASSES_REGEX = /\\s+/;\nconst mergeClassList = (classList, configUtils) => {\n const {\n parseClassName,\n getClassGroupId,\n getConflictingClassGroupIds\n } = configUtils;\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict = [];\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);\n let result = '';\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index];\n const {\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n } = parseClassName(originalClassName);\n let hasPostfixModifier = Boolean(maybePostfixModifierPosition);\n let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n classGroupId = getClassGroupId(baseClassName);\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n hasPostfixModifier = false;\n }\n const variantModifier = sortModifiers(modifiers).join(':');\n const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;\n const classId = modifierId + classGroupId;\n if (classGroupsInConflict.includes(classId)) {\n // Tailwind class omitted due to conflict\n continue;\n }\n classGroupsInConflict.push(classId);\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);\n for (let i = 0; i < conflictGroups.length; ++i) {\n const group = conflictGroups[i];\n classGroupsInConflict.push(modifierId + group);\n }\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n }\n return result;\n};\n\n/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\nfunction twJoin() {\n let index = 0;\n let argument;\n let resolvedValue;\n let string = '';\n while (index < arguments.length) {\n if (argument = arguments[index++]) {\n if (resolvedValue = toValue(argument)) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n}\nconst toValue = mix => {\n if (typeof mix === 'string') {\n return mix;\n }\n let resolvedValue;\n let string = '';\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if (resolvedValue = toValue(mix[k])) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nfunction createTailwindMerge(createConfigFirst, ...createConfigRest) {\n let configUtils;\n let cacheGet;\n let cacheSet;\n let functionToCall = initTailwindMerge;\n function initTailwindMerge(classList) {\n const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());\n configUtils = createConfigUtils(config);\n cacheGet = configUtils.cache.get;\n cacheSet = configUtils.cache.set;\n functionToCall = tailwindMerge;\n return tailwindMerge(classList);\n }\n function tailwindMerge(classList) {\n const cachedResult = cacheGet(classList);\n if (cachedResult) {\n return cachedResult;\n }\n const result = mergeClassList(classList, configUtils);\n cacheSet(classList, result);\n return result;\n }\n return function callTailwindMerge() {\n return functionToCall(twJoin.apply(null, arguments));\n };\n}\nconst fromTheme = key => {\n const themeGetter = theme => theme[key] || [];\n themeGetter.isThemeGetter = true;\n return themeGetter;\n};\nconst arbitraryValueRegex = /^\\[(?:([a-z-]+):)?(.+)\\]$/i;\nconst fractionRegex = /^\\d+\\/\\d+$/;\nconst stringLengths = /*#__PURE__*/new Set(['px', 'full', 'screen']);\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\nconst lengthUnitRegex = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/;\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\\(.+\\)$/;\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\nconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\nconst isLength = value => isNumber(value) || stringLengths.has(value) || fractionRegex.test(value);\nconst isArbitraryLength = value => getIsArbitraryValue(value, 'length', isLengthOnly);\nconst isNumber = value => Boolean(value) && !Number.isNaN(Number(value));\nconst isArbitraryNumber = value => getIsArbitraryValue(value, 'number', isNumber);\nconst isInteger = value => Boolean(value) && Number.isInteger(Number(value));\nconst isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));\nconst isArbitraryValue = value => arbitraryValueRegex.test(value);\nconst isTshirtSize = value => tshirtUnitRegex.test(value);\nconst sizeLabels = /*#__PURE__*/new Set(['length', 'size', 'percentage']);\nconst isArbitrarySize = value => getIsArbitraryValue(value, sizeLabels, isNever);\nconst isArbitraryPosition = value => getIsArbitraryValue(value, 'position', isNever);\nconst imageLabels = /*#__PURE__*/new Set(['image', 'url']);\nconst isArbitraryImage = value => getIsArbitraryValue(value, imageLabels, isImage);\nconst isArbitraryShadow = value => getIsArbitraryValue(value, '', isShadow);\nconst isAny = () => true;\nconst getIsArbitraryValue = (value, label, testValue) => {\n const result = arbitraryValueRegex.exec(value);\n if (result) {\n if (result[1]) {\n return typeof label === 'string' ? result[1] === label : label.has(result[1]);\n }\n return testValue(result[2]);\n }\n return false;\n};\nconst isLengthOnly = value =>\n// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n// For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\nlengthUnitRegex.test(value) && !colorFunctionRegex.test(value);\nconst isNever = () => false;\nconst isShadow = value => shadowRegex.test(value);\nconst isImage = value => imageRegex.test(value);\nconst validators = /*#__PURE__*/Object.defineProperty({\n __proto__: null,\n isAny,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isInteger,\n isLength,\n isNumber,\n isPercent,\n isTshirtSize\n}, Symbol.toStringTag, {\n value: 'Module'\n});\nconst getDefaultConfig = () => {\n const colors = fromTheme('colors');\n const spacing = fromTheme('spacing');\n const blur = fromTheme('blur');\n const brightness = fromTheme('brightness');\n const borderColor = fromTheme('borderColor');\n const borderRadius = fromTheme('borderRadius');\n const borderSpacing = fromTheme('borderSpacing');\n const borderWidth = fromTheme('borderWidth');\n const contrast = fromTheme('contrast');\n const grayscale = fromTheme('grayscale');\n const hueRotate = fromTheme('hueRotate');\n const invert = fromTheme('invert');\n const gap = fromTheme('gap');\n const gradientColorStops = fromTheme('gradientColorStops');\n const gradientColorStopPositions = fromTheme('gradientColorStopPositions');\n const inset = fromTheme('inset');\n const margin = fromTheme('margin');\n const opacity = fromTheme('opacity');\n const padding = fromTheme('padding');\n const saturate = fromTheme('saturate');\n const scale = fromTheme('scale');\n const sepia = fromTheme('sepia');\n const skew = fromTheme('skew');\n const space = fromTheme('space');\n const translate = fromTheme('translate');\n const getOverscroll = () => ['auto', 'contain', 'none'];\n const getOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];\n const getSpacingWithAutoAndArbitrary = () => ['auto', isArbitraryValue, spacing];\n const getSpacingWithArbitrary = () => [isArbitraryValue, spacing];\n const getLengthWithEmptyAndArbitrary = () => ['', isLength, isArbitraryLength];\n const getNumberWithAutoAndArbitrary = () => ['auto', isNumber, isArbitraryValue];\n const getPositions = () => ['bottom', 'center', 'left', 'left-bottom', 'left-top', 'right', 'right-bottom', 'right-top', 'top'];\n const getLineStyles = () => ['solid', 'dashed', 'dotted', 'double', 'none'];\n const getBlendModes = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\n const getAlign = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch'];\n const getZeroAndEmpty = () => ['', '0', isArbitraryValue];\n const getBreaks = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\n const getNumberAndArbitrary = () => [isNumber, isArbitraryValue];\n return {\n cacheSize: 500,\n separator: ':',\n theme: {\n colors: [isAny],\n spacing: [isLength, isArbitraryLength],\n blur: ['none', '', isTshirtSize, isArbitraryValue],\n brightness: getNumberAndArbitrary(),\n borderColor: [colors],\n borderRadius: ['none', '', 'full', isTshirtSize, isArbitraryValue],\n borderSpacing: getSpacingWithArbitrary(),\n borderWidth: getLengthWithEmptyAndArbitrary(),\n contrast: getNumberAndArbitrary(),\n grayscale: getZeroAndEmpty(),\n hueRotate: getNumberAndArbitrary(),\n invert: getZeroAndEmpty(),\n gap: getSpacingWithArbitrary(),\n gradientColorStops: [colors],\n gradientColorStopPositions: [isPercent, isArbitraryLength],\n inset: getSpacingWithAutoAndArbitrary(),\n margin: getSpacingWithAutoAndArbitrary(),\n opacity: getNumberAndArbitrary(),\n padding: getSpacingWithArbitrary(),\n saturate: getNumberAndArbitrary(),\n scale: getNumberAndArbitrary(),\n sepia: getZeroAndEmpty(),\n skew: getNumberAndArbitrary(),\n space: getSpacingWithArbitrary(),\n translate: getSpacingWithArbitrary()\n },\n classGroups: {\n // Layout\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{\n aspect: ['auto', 'square', 'video', isArbitraryValue]\n }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n */\n container: ['container'],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{\n columns: [isTshirtSize]\n }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{\n 'break-after': getBreaks()\n }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{\n 'break-before': getBreaks()\n }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{\n 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\n }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{\n 'box-decoration': ['slice', 'clone']\n }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{\n box: ['border', 'content']\n }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{\n float: ['right', 'left', 'none', 'start', 'end']\n }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{\n clear: ['left', 'right', 'both', 'none', 'start', 'end']\n }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{\n object: ['contain', 'cover', 'fill', 'none', 'scale-down']\n }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{\n object: [...getPositions(), isArbitraryValue]\n }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{\n overflow: getOverflow()\n }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{\n 'overflow-x': getOverflow()\n }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{\n 'overflow-y': getOverflow()\n }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{\n overscroll: getOverscroll()\n }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{\n 'overscroll-x': getOverscroll()\n }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{\n 'overscroll-y': getOverscroll()\n }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Top / Right / Bottom / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{\n inset: [inset]\n }],\n /**\n * Right / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{\n 'inset-x': [inset]\n }],\n /**\n * Top / Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{\n 'inset-y': [inset]\n }],\n /**\n * Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n start: [{\n start: [inset]\n }],\n /**\n * End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n end: [{\n end: [inset]\n }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{\n top: [inset]\n }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{\n right: [inset]\n }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{\n bottom: [inset]\n }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{\n left: [inset]\n }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{\n z: ['auto', isInteger, isArbitraryValue]\n }],\n // Flexbox and Grid\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{\n basis: getSpacingWithAutoAndArbitrary()\n }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{\n flex: ['row', 'row-reverse', 'col', 'col-reverse']\n }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{\n flex: ['wrap', 'wrap-reverse', 'nowrap']\n }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{\n flex: ['1', 'auto', 'initial', 'none', isArbitraryValue]\n }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{\n grow: getZeroAndEmpty()\n }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{\n shrink: getZeroAndEmpty()\n }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{\n order: ['first', 'last', 'none', isInteger, isArbitraryValue]\n }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{\n 'grid-cols': [isAny]\n }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{\n col: ['auto', {\n span: ['full', isInteger, isArbitraryValue]\n }, isArbitraryValue]\n }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{\n 'col-start': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{\n 'col-end': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{\n 'grid-rows': [isAny]\n }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{\n row: ['auto', {\n span: [isInteger, isArbitraryValue]\n }, isArbitraryValue]\n }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{\n 'row-start': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{\n 'row-end': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{\n 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\n }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{\n 'auto-cols': ['auto', 'min', 'max', 'fr', isArbitraryValue]\n }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{\n 'auto-rows': ['auto', 'min', 'max', 'fr', isArbitraryValue]\n }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{\n gap: [gap]\n }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{\n 'gap-x': [gap]\n }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{\n 'gap-y': [gap]\n }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{\n justify: ['normal', ...getAlign()]\n }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{\n 'justify-items': ['start', 'end', 'center', 'stretch']\n }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{\n 'justify-self': ['auto', 'start', 'end', 'center', 'stretch']\n }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{\n content: ['normal', ...getAlign(), 'baseline']\n }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{\n items: ['start', 'end', 'center', 'baseline', 'stretch']\n }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{\n self: ['auto', 'start', 'end', 'center', 'stretch', 'baseline']\n }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{\n 'place-content': [...getAlign(), 'baseline']\n }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{\n 'place-items': ['start', 'end', 'center', 'baseline', 'stretch']\n }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{\n 'place-self': ['auto', 'start', 'end', 'center', 'stretch']\n }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{\n p: [padding]\n }],\n /**\n * Padding X\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{\n px: [padding]\n }],\n /**\n * Padding Y\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{\n py: [padding]\n }],\n /**\n * Padding Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{\n ps: [padding]\n }],\n /**\n * Padding End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{\n pe: [padding]\n }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{\n pt: [padding]\n }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{\n pr: [padding]\n }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{\n pb: [padding]\n }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{\n pl: [padding]\n }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{\n m: [margin]\n }],\n /**\n * Margin X\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{\n mx: [margin]\n }],\n /**\n * Margin Y\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{\n my: [margin]\n }],\n /**\n * Margin Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{\n ms: [margin]\n }],\n /**\n * Margin End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{\n me: [margin]\n }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{\n mt: [margin]\n }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{\n mr: [margin]\n }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{\n mb: [margin]\n }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{\n ml: [margin]\n }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/space\n */\n 'space-x': [{\n 'space-x': [space]\n }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/space\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/space\n */\n 'space-y': [{\n 'space-y': [space]\n }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/space\n */\n 'space-y-reverse': ['space-y-reverse'],\n // Sizing\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{\n w: ['auto', 'min', 'max', 'fit', 'svw', 'lvw', 'dvw', isArbitraryValue, spacing]\n }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [{\n 'min-w': [isArbitraryValue, spacing, 'min', 'max', 'fit']\n }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [{\n 'max-w': [isArbitraryValue, spacing, 'none', 'full', 'min', 'max', 'fit', 'prose', {\n screen: [isTshirtSize]\n }, isTshirtSize]\n }],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{\n h: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{\n 'min-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{\n 'max-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n }],\n /**\n * Size\n * @see https://tailwindcss.com/docs/size\n */\n size: [{\n size: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit']\n }],\n // Typography\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [{\n text: ['base', isTshirtSize, isArbitraryLength]\n }],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [{\n font: ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black', isArbitraryNumber]\n }],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{\n font: [isAny]\n }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest', isArbitraryValue]\n }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [{\n 'line-clamp': ['none', isNumber, isArbitraryNumber]\n }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [{\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose', isLength, isArbitraryValue]\n }],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{\n 'list-image': ['none', isArbitraryValue]\n }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [{\n list: ['none', 'disc', 'decimal', isArbitraryValue]\n }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{\n list: ['inside', 'outside']\n }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{\n placeholder: [colors]\n }],\n /**\n * Placeholder Opacity\n * @see https://tailwindcss.com/docs/placeholder-opacity\n */\n 'placeholder-opacity': [{\n 'placeholder-opacity': [opacity]\n }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{\n text: ['left', 'center', 'right', 'justify', 'start', 'end']\n }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{\n text: [colors]\n }],\n /**\n * Text Opacity\n * @see https://tailwindcss.com/docs/text-opacity\n */\n 'text-opacity': [{\n 'text-opacity': [opacity]\n }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{\n decoration: [...getLineStyles(), 'wavy']\n }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [{\n decoration: ['auto', 'from-font', isLength, isArbitraryLength]\n }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [{\n 'underline-offset': ['auto', isLength, isArbitraryValue]\n }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{\n decoration: [colors]\n }],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{\n text: ['wrap', 'nowrap', 'balance', 'pretty']\n }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{\n indent: getSpacingWithArbitrary()\n }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [{\n align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryValue]\n }],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [{\n whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']\n }],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{\n break: ['normal', 'words', 'all', 'keep']\n }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{\n hyphens: ['none', 'manual', 'auto']\n }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{\n content: ['none', isArbitraryValue]\n }],\n // Backgrounds\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{\n bg: ['fixed', 'local', 'scroll']\n }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{\n 'bg-clip': ['border', 'padding', 'content', 'text']\n }],\n /**\n * Background Opacity\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/background-opacity\n */\n 'bg-opacity': [{\n 'bg-opacity': [opacity]\n }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{\n 'bg-origin': ['border', 'padding', 'content']\n }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{\n bg: [...getPositions(), isArbitraryPosition]\n }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{\n bg: ['no-repeat', {\n repeat: ['', 'x', 'y', 'round', 'space']\n }]\n }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{\n bg: ['auto', 'cover', 'contain', isArbitrarySize]\n }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [{\n bg: ['none', {\n 'gradient-to': ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\n }, isArbitraryImage]\n }],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{\n bg: [colors]\n }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{\n from: [gradientColorStopPositions]\n }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{\n via: [gradientColorStopPositions]\n }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{\n to: [gradientColorStopPositions]\n }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{\n from: [gradientColorStops]\n }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{\n via: [gradientColorStops]\n }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{\n to: [gradientColorStops]\n }],\n // Borders\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{\n rounded: [borderRadius]\n }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{\n 'rounded-s': [borderRadius]\n }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{\n 'rounded-e': [borderRadius]\n }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{\n 'rounded-t': [borderRadius]\n }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{\n 'rounded-r': [borderRadius]\n }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{\n 'rounded-b': [borderRadius]\n }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{\n 'rounded-l': [borderRadius]\n }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{\n 'rounded-ss': [borderRadius]\n }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{\n 'rounded-se': [borderRadius]\n }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{\n 'rounded-ee': [borderRadius]\n }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{\n 'rounded-es': [borderRadius]\n }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{\n 'rounded-tl': [borderRadius]\n }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{\n 'rounded-tr': [borderRadius]\n }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{\n 'rounded-br': [borderRadius]\n }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{\n 'rounded-bl': [borderRadius]\n }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{\n border: [borderWidth]\n }],\n /**\n * Border Width X\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{\n 'border-x': [borderWidth]\n }],\n /**\n * Border Width Y\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{\n 'border-y': [borderWidth]\n }],\n /**\n * Border Width Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{\n 'border-s': [borderWidth]\n }],\n /**\n * Border Width End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{\n 'border-e': [borderWidth]\n }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{\n 'border-t': [borderWidth]\n }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{\n 'border-r': [borderWidth]\n }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{\n 'border-b': [borderWidth]\n }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{\n 'border-l': [borderWidth]\n }],\n /**\n * Border Opacity\n * @see https://tailwindcss.com/docs/border-opacity\n */\n 'border-opacity': [{\n 'border-opacity': [opacity]\n }],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{\n border: [...getLineStyles(), 'hidden']\n }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-x': [{\n 'divide-x': [borderWidth]\n }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-y': [{\n 'divide-y': [borderWidth]\n }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Divide Opacity\n * @see https://tailwindcss.com/docs/divide-opacity\n */\n 'divide-opacity': [{\n 'divide-opacity': [opacity]\n }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/divide-style\n */\n 'divide-style': [{\n divide: getLineStyles()\n }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{\n border: [borderColor]\n }],\n /**\n * Border Color X\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{\n 'border-x': [borderColor]\n }],\n /**\n * Border Color Y\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{\n 'border-y': [borderColor]\n }],\n /**\n * Border Color S\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{\n 'border-s': [borderColor]\n }],\n /**\n * Border Color E\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{\n 'border-e': [borderColor]\n }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{\n 'border-t': [borderColor]\n }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{\n 'border-r': [borderColor]\n }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{\n 'border-b': [borderColor]\n }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{\n 'border-l': [borderColor]\n }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{\n divide: [borderColor]\n }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{\n outline: ['', ...getLineStyles()]\n }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [{\n 'outline-offset': [isLength, isArbitraryValue]\n }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [{\n outline: [isLength, isArbitraryLength]\n }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{\n outline: [colors]\n }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/ring-width\n */\n 'ring-w': [{\n ring: getLengthWithEmptyAndArbitrary()\n }],\n /**\n * Ring Width Inset\n * @see https://tailwindcss.com/docs/ring-width\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/ring-color\n */\n 'ring-color': [{\n ring: [colors]\n }],\n /**\n * Ring Opacity\n * @see https://tailwindcss.com/docs/ring-opacity\n */\n 'ring-opacity': [{\n 'ring-opacity': [opacity]\n }],\n /**\n * Ring Offset Width\n * @see https://tailwindcss.com/docs/ring-offset-width\n */\n 'ring-offset-w': [{\n 'ring-offset': [isLength, isArbitraryLength]\n }],\n /**\n * Ring Offset Color\n * @see https://tailwindcss.com/docs/ring-offset-color\n */\n 'ring-offset-color': [{\n 'ring-offset': [colors]\n }],\n // Effects\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{\n shadow: ['', 'inner', 'none', isTshirtSize, isArbitraryShadow]\n }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow-color\n */\n 'shadow-color': [{\n shadow: [isAny]\n }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{\n opacity: [opacity]\n }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{\n 'mix-blend': [...getBlendModes(), 'plus-lighter', 'plus-darker']\n }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{\n 'bg-blend': getBlendModes()\n }],\n // Filters\n /**\n * Filter\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{\n filter: ['', 'none']\n }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{\n blur: [blur]\n }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{\n brightness: [brightness]\n }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{\n contrast: [contrast]\n }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [{\n 'drop-shadow': ['', 'none', isTshirtSize, isArbitraryValue]\n }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{\n grayscale: [grayscale]\n }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{\n 'hue-rotate': [hueRotate]\n }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{\n invert: [invert]\n }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{\n saturate: [saturate]\n }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{\n sepia: [sepia]\n }],\n /**\n * Backdrop Filter\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [{\n 'backdrop-filter': ['', 'none']\n }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{\n 'backdrop-blur': [blur]\n }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [{\n 'backdrop-brightness': [brightness]\n }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [{\n 'backdrop-contrast': [contrast]\n }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [{\n 'backdrop-grayscale': [grayscale]\n }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [{\n 'backdrop-hue-rotate': [hueRotate]\n }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [{\n 'backdrop-invert': [invert]\n }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [{\n 'backdrop-opacity': [opacity]\n }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [{\n 'backdrop-saturate': [saturate]\n }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [{\n 'backdrop-sepia': [sepia]\n }],\n // Tables\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{\n border: ['collapse', 'separate']\n }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{\n 'border-spacing': [borderSpacing]\n }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{\n 'border-spacing-x': [borderSpacing]\n }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{\n 'border-spacing-y': [borderSpacing]\n }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{\n table: ['auto', 'fixed']\n }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{\n caption: ['top', 'bottom']\n }],\n // Transitions and Animation\n /**\n * Tranisition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [{\n transition: ['none', 'all', '', 'colors', 'opacity', 'shadow', 'transform', isArbitraryValue]\n }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{\n duration: getNumberAndArbitrary()\n }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{\n ease: ['linear', 'in', 'out', 'in-out', isArbitraryValue]\n }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{\n delay: getNumberAndArbitrary()\n }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{\n animate: ['none', 'spin', 'ping', 'pulse', 'bounce', isArbitraryValue]\n }],\n // Transforms\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{\n transform: ['', 'gpu', 'none']\n }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{\n scale: [scale]\n }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{\n 'scale-x': [scale]\n }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{\n 'scale-y': [scale]\n }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{\n rotate: [isInteger, isArbitraryValue]\n }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{\n 'translate-x': [translate]\n }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{\n 'translate-y': [translate]\n }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{\n 'skew-x': [skew]\n }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{\n 'skew-y': [skew]\n }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [{\n origin: ['center', 'top', 'top-right', 'right', 'bottom-right', 'bottom', 'bottom-left', 'left', 'top-left', isArbitraryValue]\n }],\n // Interactivity\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{\n accent: ['auto', colors]\n }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{\n appearance: ['none', 'auto']\n }],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [{\n cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryValue]\n }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{\n caret: [colors]\n }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{\n 'pointer-events': ['none', 'auto']\n }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{\n resize: ['none', 'y', 'x', '']\n }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{\n scroll: ['auto', 'smooth']\n }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{\n 'scroll-m': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin X\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{\n 'scroll-mx': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Y\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{\n 'scroll-my': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{\n 'scroll-ms': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{\n 'scroll-me': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{\n 'scroll-mt': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{\n 'scroll-mr': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{\n 'scroll-mb': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{\n 'scroll-ml': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{\n 'scroll-p': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding X\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{\n 'scroll-px': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Y\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{\n 'scroll-py': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{\n 'scroll-ps': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{\n 'scroll-pe': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{\n 'scroll-pt': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{\n 'scroll-pr': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{\n 'scroll-pb': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{\n 'scroll-pl': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{\n snap: ['start', 'end', 'center', 'align-none']\n }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{\n snap: ['normal', 'always']\n }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{\n snap: ['none', 'x', 'y', 'both']\n }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{\n snap: ['mandatory', 'proximity']\n }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{\n touch: ['auto', 'none', 'manipulation']\n }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{\n 'touch-pan': ['x', 'left', 'right']\n }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{\n 'touch-pan': ['y', 'up', 'down']\n }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{\n select: ['none', 'text', 'all', 'auto']\n }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [{\n 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryValue]\n }],\n // SVG\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{\n fill: [colors, 'none']\n }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [{\n stroke: [isLength, isArbitraryLength, isArbitraryNumber]\n }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{\n stroke: [colors, 'none']\n }],\n // Accessibility\n /**\n * Screen Readers\n * @see https://tailwindcss.com/docs/screen-readers\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{\n 'forced-color-adjust': ['auto', 'none']\n }]\n },\n conflictingClassGroups: {\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: ['inset-x', 'inset-y', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n 'inset-x': ['right', 'left'],\n 'inset-y': ['top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pt', 'pr', 'pb', 'pl'],\n px: ['pr', 'pl'],\n py: ['pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'],\n mx: ['mr', 'ml'],\n my: ['mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n 'line-clamp': ['display', 'overflow'],\n rounded: ['rounded-s', 'rounded-e', 'rounded-t', 'rounded-r', 'rounded-b', 'rounded-l', 'rounded-ss', 'rounded-se', 'rounded-ee', 'rounded-es', 'rounded-tl', 'rounded-tr', 'rounded-br', 'rounded-bl'],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': ['border-w-s', 'border-w-e', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': ['border-color-s', 'border-color-e', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pt', 'scroll-pb'],\n touch: ['touch-x', 'touch-y', 'touch-pz'],\n 'touch-x': ['touch'],\n 'touch-y': ['touch'],\n 'touch-pz': ['touch']\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading']\n }\n };\n};\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nconst mergeConfigs = (baseConfig, {\n cacheSize,\n prefix,\n separator,\n experimentalParseClassName,\n extend = {},\n override = {}\n}) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize);\n overrideProperty(baseConfig, 'prefix', prefix);\n overrideProperty(baseConfig, 'separator', separator);\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);\n for (const configKey in override) {\n overrideConfigProperties(baseConfig[configKey], override[configKey]);\n }\n for (const key in extend) {\n mergeConfigProperties(baseConfig[key], extend[key]);\n }\n return baseConfig;\n};\nconst overrideProperty = (baseObject, overrideKey, overrideValue) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue;\n }\n};\nconst overrideConfigProperties = (baseObject, overrideObject) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key]);\n }\n }\n};\nconst mergeConfigProperties = (baseObject, mergeObject) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n const mergeValue = mergeObject[key];\n if (mergeValue !== undefined) {\n baseObject[key] = (baseObject[key] || []).concat(mergeValue);\n }\n }\n }\n};\nconst extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);\nconst twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\nexport { createTailwindMerge, extendTailwindMerge, fromTheme, getDefaultConfig, mergeConfigs, twJoin, twMerge, validators };\n//# sourceMappingURL=bundle-mjs.mjs.map\n","import { clsx, type ClassValue } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import { useState } from 'react'\nimport { X, ChevronLeft, ChevronRight } from 'lucide-react'\nimport { cn } from '../lib/utils'\n\nconst DAYS = ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su']\nconst MONTHS = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\n\ninterface DatePickerProps {\n value: string\n onChange: (date: string) => void\n placeholder?: string\n}\n\nexport function DatePicker({ value, onChange, placeholder = 'Due date' }: DatePickerProps) {\n const [isOpen, setIsOpen] = useState(false)\n const today = new Date()\n const selected = value ? new Date(value + 'T00:00:00') : null\n const [viewYear, setViewYear] = useState(selected?.getFullYear() ?? today.getFullYear())\n const [viewMonth, setViewMonth] = useState(selected?.getMonth() ?? today.getMonth())\n\n const daysInMonth = new Date(viewYear, viewMonth + 1, 0).getDate()\n // Monday = 0\n const firstDay = (new Date(viewYear, viewMonth, 1).getDay() + 6) % 7\n const cells: (number | null)[] = Array(firstDay).fill(null)\n for (let d = 1; d <= daysInMonth; d++) cells.push(d)\n\n const prevMonth = () => {\n if (viewMonth === 0) { setViewMonth(11); setViewYear(y => y - 1) }\n else setViewMonth(m => m - 1)\n }\n const nextMonth = () => {\n if (viewMonth === 11) { setViewMonth(0); setViewYear(y => y + 1) }\n else setViewMonth(m => m + 1)\n }\n\n const selectDay = (day: number) => {\n const m = String(viewMonth + 1).padStart(2, '0')\n const d = String(day).padStart(2, '0')\n onChange(`${viewYear}-${m}-${d}`)\n setIsOpen(false)\n }\n\n const isToday = (day: number) =>\n day === today.getDate() && viewMonth === today.getMonth() && viewYear === today.getFullYear()\n const isSelected = (day: number) =>\n selected !== null && day === selected.getDate() && viewMonth === selected.getMonth() && viewYear === selected.getFullYear()\n\n const formatDisplay = (dateStr: string) => {\n const d = new Date(dateStr + 'T00:00:00')\n return d.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' })\n }\n\n return (\n <div className=\"relative\">\n <button\n type=\"button\"\n onClick={() => setIsOpen(!isOpen)}\n className=\"flex items-center gap-2 px-2 py-1 text-xs font-medium rounded transition-colors\"\n style={{\n color: value ? 'var(--vscode-foreground)' : 'var(--vscode-descriptionForeground)',\n }}\n onMouseEnter={e => e.currentTarget.style.background = 'var(--vscode-list-hoverBackground)'}\n onMouseLeave={e => e.currentTarget.style.background = 'transparent'}\n >\n <span>{value ? formatDisplay(value) : placeholder}</span>\n {value && (\n <span\n role=\"button\"\n onClick={(e) => { e.stopPropagation(); onChange(''); setIsOpen(false) }}\n className=\"ml-0.5 hover:text-red-500 transition-colors\"\n >\n <X size={12} />\n </span>\n )}\n </button>\n {isOpen && (\n <>\n <div className=\"fixed inset-0 z-10\" onClick={() => setIsOpen(false)} />\n <div\n className=\"absolute top-full left-0 mt-1 z-20 rounded-lg shadow-lg p-3 w-[252px]\"\n style={{\n background: 'var(--vscode-dropdown-background)',\n border: '1px solid var(--vscode-dropdown-border, var(--vscode-panel-border))',\n }}\n >\n {/* Month/year nav */}\n <div className=\"flex items-center justify-between mb-2\">\n <button\n type=\"button\"\n onClick={prevMonth}\n className=\"p-1 rounded transition-colors\"\n style={{ color: 'var(--vscode-descriptionForeground)' }}\n onMouseEnter={e => e.currentTarget.style.background = 'var(--vscode-list-hoverBackground)'}\n onMouseLeave={e => e.currentTarget.style.background = 'transparent'}\n >\n <ChevronLeft size={14} />\n </button>\n <span className=\"text-xs font-medium\" style={{ color: 'var(--vscode-foreground)' }}>\n {MONTHS[viewMonth]} {viewYear}\n </span>\n <button\n type=\"button\"\n onClick={nextMonth}\n className=\"p-1 rounded transition-colors\"\n style={{ color: 'var(--vscode-descriptionForeground)' }}\n onMouseEnter={e => e.currentTarget.style.background = 'var(--vscode-list-hoverBackground)'}\n onMouseLeave={e => e.currentTarget.style.background = 'transparent'}\n >\n <ChevronRight size={14} />\n </button>\n </div>\n {/* Day headers */}\n <div className=\"grid grid-cols-7 mb-1\">\n {DAYS.map(d => (\n <div\n key={d}\n className=\"text-center text-[10px] font-medium py-1\"\n style={{ color: 'var(--vscode-descriptionForeground)' }}\n >\n {d}\n </div>\n ))}\n </div>\n {/* Day grid */}\n <div className=\"grid grid-cols-7\">\n {cells.map((day, i) => (\n <div key={i} className=\"flex items-center justify-center\">\n {day ? (\n <button\n type=\"button\"\n onClick={() => selectDay(day)}\n className={cn('w-7 h-7 rounded-md text-[11px] transition-colors font-medium')}\n style={{\n background: isSelected(day)\n ? 'var(--vscode-focusBorder)'\n : isToday(day)\n ? 'var(--vscode-editor-selectionBackground)'\n : undefined,\n color: isSelected(day)\n ? 'var(--vscode-editor-background)'\n : isToday(day)\n ? 'var(--vscode-foreground)'\n : 'var(--vscode-foreground)',\n }}\n onMouseEnter={e => {\n if (!isSelected(day)) e.currentTarget.style.background = 'var(--vscode-list-hoverBackground)'\n }}\n onMouseLeave={e => {\n if (!isSelected(day) && !isToday(day)) e.currentTarget.style.background = 'transparent'\n else if (isToday(day) && !isSelected(day)) e.currentTarget.style.background = 'var(--vscode-editor-selectionBackground)'\n }}\n >\n {day}\n </button>\n ) : <div className=\"w-7 h-7\" />}\n </div>\n ))}\n </div>\n {/* Today shortcut */}\n <div\n className=\"mt-2 pt-2 flex justify-center\"\n style={{ borderTop: '1px solid var(--vscode-panel-border)' }}\n >\n <button\n type=\"button\"\n onClick={() => {\n const m = String(today.getMonth() + 1).padStart(2, '0')\n const d = String(today.getDate()).padStart(2, '0')\n onChange(`${today.getFullYear()}-${m}-${d}`)\n setIsOpen(false)\n }}\n className=\"text-[11px] font-medium transition-colors\"\n style={{ color: 'var(--vscode-textLink-foreground)' }}\n onMouseEnter={e => e.currentTarget.style.color = 'var(--vscode-textLink-activeForeground)'}\n onMouseLeave={e => e.currentTarget.style.color = 'var(--vscode-textLink-foreground)'}\n >\n Today\n </button>\n </div>\n </div>\n </>\n )}\n </div>\n )\n}\n","import { useState, useRef, useEffect, useCallback, useMemo } from 'react'\nimport { marked } from 'marked'\nimport { Heading, Bold, Italic, Quote, Code, Link, List, ListOrdered, ListChecks } from 'lucide-react'\nimport { cn } from '../lib/utils'\n\ninterface MarkdownEditorProps {\n value: string\n onChange: (value: string) => void\n placeholder?: string\n className?: string\n autoFocus?: boolean\n}\n\ntype FormatAction = 'heading' | 'bold' | 'italic' | 'quote' | 'code' | 'link' | 'ul' | 'ol' | 'tasklist'\n\nfunction wrapSelection(\n textarea: HTMLTextAreaElement,\n value: string,\n onChange: (v: string) => void,\n action: FormatAction\n) {\n const start = textarea.selectionStart\n const end = textarea.selectionEnd\n const selected = value.substring(start, end)\n let before = value.substring(0, start)\n const after = value.substring(end)\n let replacement = selected\n let cursorOffset = 0\n\n switch (action) {\n case 'heading': {\n // Insert/cycle heading at line start\n const lineStart = value.lastIndexOf('\\n', start - 1) + 1\n const linePrefix = value.substring(lineStart, start)\n if (linePrefix.startsWith('### ')) {\n // Remove heading\n before = value.substring(0, lineStart) + linePrefix.slice(4)\n replacement = selected\n cursorOffset = -4\n } else if (linePrefix.startsWith('## ')) {\n before = value.substring(0, lineStart) + '### ' + linePrefix.slice(3)\n replacement = selected\n cursorOffset = 1\n } else if (linePrefix.startsWith('# ')) {\n before = value.substring(0, lineStart) + '## ' + linePrefix.slice(2)\n replacement = selected\n cursorOffset = 1\n } else {\n before = value.substring(0, lineStart) + '# ' + linePrefix\n replacement = selected\n cursorOffset = 2\n }\n break\n }\n case 'bold':\n replacement = selected ? `**${selected}**` : '**bold**'\n cursorOffset = selected ? 4 : 2\n break\n case 'italic':\n replacement = selected ? `_${selected}_` : '_italic_'\n cursorOffset = selected ? 2 : 1\n break\n case 'quote': {\n const lines = selected ? selected.split('\\n').map(l => `> ${l}`).join('\\n') : '> '\n replacement = lines\n cursorOffset = selected ? replacement.length - selected.length : 2\n break\n }\n case 'code':\n if (selected.includes('\\n')) {\n replacement = `\\`\\`\\`\\n${selected}\\n\\`\\`\\``\n cursorOffset = 4\n } else {\n replacement = selected ? `\\`${selected}\\`` : '`code`'\n cursorOffset = selected ? 2 : 1\n }\n break\n case 'link':\n replacement = selected ? `[${selected}](url)` : '[text](url)'\n cursorOffset = selected ? selected.length + 3 : 1\n break\n case 'ul': {\n const ulLines = selected ? selected.split('\\n').map(l => `- ${l}`).join('\\n') : '- '\n replacement = ulLines\n cursorOffset = selected ? replacement.length - selected.length : 2\n break\n }\n case 'ol': {\n const olLines = selected ? selected.split('\\n').map((l, i) => `${i + 1}. ${l}`).join('\\n') : '1. '\n replacement = olLines\n cursorOffset = selected ? replacement.length - selected.length : 3\n break\n }\n case 'tasklist': {\n const tlLines = selected ? selected.split('\\n').map(l => `- [ ] ${l}`).join('\\n') : '- [ ] '\n replacement = tlLines\n cursorOffset = selected ? replacement.length - selected.length : 6\n break\n }\n }\n\n const newValue = before + replacement + after\n onChange(newValue)\n requestAnimationFrame(() => {\n textarea.focus()\n const newPos = start + (selected ? replacement.length : cursorOffset)\n textarea.selectionStart = textarea.selectionEnd = newPos\n })\n}\n\ninterface ToolbarButtonProps {\n icon: React.ReactNode\n title: string\n onClick: () => void\n separator?: boolean\n}\n\nfunction ToolbarButton({ icon, title, onClick, separator }: ToolbarButtonProps) {\n return (\n <>\n {separator && (\n <div\n className=\"w-px h-4 mx-1\"\n style={{ background: 'var(--vscode-panel-border)' }}\n />\n )}\n <button\n type=\"button\"\n onClick={onClick}\n title={title}\n className=\"p-1 rounded transition-colors\"\n style={{ color: 'var(--vscode-descriptionForeground)' }}\n onMouseEnter={e => e.currentTarget.style.background = 'var(--vscode-list-hoverBackground)'}\n onMouseLeave={e => e.currentTarget.style.background = 'transparent'}\n >\n {icon}\n </button>\n </>\n )\n}\n\nexport function MarkdownEditor({ value, onChange, placeholder = 'Write markdown...', className, autoFocus }: MarkdownEditorProps) {\n const [activeTab, setActiveTab] = useState<'write' | 'preview'>('write')\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n\n const previewHtml = useMemo(() => {\n if (!value.trim()) return ''\n return marked.parse(value, { async: false, gfm: true, breaks: true }) as string\n }, [value])\n\n // Auto-focus textarea when switching to write tab\n useEffect(() => {\n if (activeTab === 'write' && textareaRef.current) {\n textareaRef.current.focus()\n }\n }, [activeTab])\n\n // Initial auto-focus\n useEffect(() => {\n if (autoFocus && textareaRef.current) {\n textareaRef.current.focus()\n }\n }, [autoFocus])\n\n const handleFormat = useCallback((action: FormatAction) => {\n if (textareaRef.current) {\n wrapSelection(textareaRef.current, value, onChange, action)\n }\n }, [value, onChange])\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n // Tab key inserts spaces instead of changing focus\n if (e.key === 'Tab') {\n e.preventDefault()\n const textarea = e.currentTarget\n const start = textarea.selectionStart\n const end = textarea.selectionEnd\n const newValue = value.substring(0, start) + ' ' + value.substring(end)\n onChange(newValue)\n requestAnimationFrame(() => {\n textarea.selectionStart = textarea.selectionEnd = start + 2\n })\n }\n // Ctrl/Cmd+B for bold\n if ((e.metaKey || e.ctrlKey) && e.key === 'b') {\n e.preventDefault()\n e.stopPropagation()\n handleFormat('bold')\n }\n // Ctrl/Cmd+I for italic\n if ((e.metaKey || e.ctrlKey) && e.key === 'i') {\n e.preventDefault()\n handleFormat('italic')\n }\n // Ctrl/Cmd+K for link\n if ((e.metaKey || e.ctrlKey) && e.key === 'k') {\n e.preventDefault()\n handleFormat('link')\n }\n }\n\n return (\n <div className={cn('flex flex-col h-full', className)}>\n {/* Tab bar + toolbar */}\n <div\n className=\"flex items-center shrink-0\"\n style={{ borderBottom: '1px solid var(--vscode-panel-border)' }}\n >\n {/* Tabs */}\n <button\n type=\"button\"\n onClick={() => setActiveTab('write')}\n className=\"px-3 py-2 text-xs font-medium transition-colors relative\"\n style={{\n color: activeTab === 'write' ? 'var(--vscode-foreground)' : 'var(--vscode-descriptionForeground)',\n }}\n >\n Write\n {activeTab === 'write' && (\n <span\n className=\"absolute bottom-0 left-0 right-0 h-[2px] rounded-t\"\n style={{ background: 'var(--vscode-focusBorder)' }}\n />\n )}\n </button>\n <button\n type=\"button\"\n onClick={() => setActiveTab('preview')}\n className=\"px-3 py-2 text-xs font-medium transition-colors relative\"\n style={{\n color: activeTab === 'preview' ? 'var(--vscode-foreground)' : 'var(--vscode-descriptionForeground)',\n }}\n >\n Preview\n {activeTab === 'preview' && (\n <span\n className=\"absolute bottom-0 left-0 right-0 h-[2px] rounded-t\"\n style={{ background: 'var(--vscode-focusBorder)' }}\n />\n )}\n </button>\n\n {/* Toolbar - only visible on Write tab */}\n {activeTab === 'write' && (\n <div className=\"flex items-center ml-auto pr-2 gap-0.5\">\n <ToolbarButton icon={<Heading size={14} />} title=\"Heading\" onClick={() => handleFormat('heading')} />\n <ToolbarButton icon={<Bold size={14} />} title=\"Bold (⌘B)\" onClick={() => handleFormat('bold')} />\n <ToolbarButton icon={<Italic size={14} />} title=\"Italic (⌘I)\" onClick={() => handleFormat('italic')} />\n <ToolbarButton icon={<Quote size={14} />} title=\"Quote\" onClick={() => handleFormat('quote')} separator />\n <ToolbarButton icon={<Code size={14} />} title=\"Code\" onClick={() => handleFormat('code')} />\n <ToolbarButton icon={<Link size={14} />} title=\"Link (⌘K)\" onClick={() => handleFormat('link')} />\n <ToolbarButton icon={<List size={14} />} title=\"Bulleted list\" onClick={() => handleFormat('ul')} separator />\n <ToolbarButton icon={<ListOrdered size={14} />} title=\"Numbered list\" onClick={() => handleFormat('ol')} />\n <ToolbarButton icon={<ListChecks size={14} />} title=\"Task list\" onClick={() => handleFormat('tasklist')} />\n </div>\n )}\n </div>\n\n {/* Content */}\n <div className=\"flex-1 overflow-auto\">\n {activeTab === 'write' ? (\n <textarea\n ref={textareaRef}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n className=\"markdown-editor-textarea\"\n spellCheck={false}\n />\n ) : (\n <div className=\"min-h-[200px]\">\n {previewHtml ? (\n <div\n className=\"prose prose-sm dark:prose-invert max-w-none p-4\"\n dangerouslySetInnerHTML={{ __html: previewHtml }}\n />\n ) : (\n <p\n className=\"p-4 text-sm italic\"\n style={{ color: 'var(--vscode-descriptionForeground)' }}\n >\n Nothing to preview\n </p>\n )}\n </div>\n )}\n </div>\n </div>\n )\n}\n","import { useState, useEffect, useRef, useMemo } from 'react'\nimport { X, ChevronDown, User, Tag, Check, CircleDot, Signal, Calendar } from 'lucide-react'\nimport type { FeatureStatus, Priority } from '../../shared/types'\nimport { useStore } from '../store'\nimport { cn } from '../lib/utils'\nimport { DatePicker } from './DatePicker'\nimport { MarkdownEditor } from './MarkdownEditor'\n\ninterface CreateFeatureDialogProps {\n isOpen: boolean\n onClose: () => void\n onCreate: (data: { status: FeatureStatus; priority: Priority; content: string; assignee: string | null; dueDate: string | null; labels: string[] }) => void\n initialStatus?: FeatureStatus\n}\n\nconst priorityConfig: { value: Priority; label: string; dot: string }[] = [\n { value: 'critical', label: 'Critical', dot: 'bg-red-500' },\n { value: 'high', label: 'High', dot: 'bg-orange-500' },\n { value: 'medium', label: 'Medium', dot: 'bg-yellow-500' },\n { value: 'low', label: 'Low', dot: 'bg-green-500' }\n]\n\nconst statusConfig: { value: FeatureStatus; label: string; dot: string }[] = [\n { value: 'backlog', label: 'Backlog', dot: 'bg-zinc-400' },\n { value: 'todo', label: 'To Do', dot: 'bg-blue-400' },\n { value: 'in-progress', label: 'In Progress', dot: 'bg-amber-400' },\n { value: 'review', label: 'Review', dot: 'bg-purple-400' },\n { value: 'done', label: 'Done', dot: 'bg-emerald-400' }\n]\n\ninterface DropdownProps {\n value: string\n options: { value: string; label: string; dot?: string }[]\n onChange: (value: string) => void\n className?: string\n}\n\nfunction Dropdown({ value, options, onChange, className }: DropdownProps) {\n const [isOpen, setIsOpen] = useState(false)\n const current = options.find(o => o.value === value)\n\n return (\n <div className={cn('relative', className)}>\n <button\n type=\"button\"\n onClick={() => setIsOpen(!isOpen)}\n className=\"flex items-center gap-2 px-2 py-1 text-xs font-medium rounded transition-colors\"\n style={{\n color: 'var(--vscode-foreground)',\n }}\n onMouseEnter={e => e.currentTarget.style.background = 'var(--vscode-list-hoverBackground)'}\n onMouseLeave={e => e.currentTarget.style.background = 'transparent'}\n >\n {current?.dot && <span className={cn('w-2 h-2 rounded-full shrink-0', current.dot)} />}\n <span>{current?.label}</span>\n <ChevronDown size={12} style={{ color: 'var(--vscode-descriptionForeground)' }} className=\"ml-0.5\" />\n </button>\n {isOpen && (\n <>\n <div className=\"fixed inset-0 z-10\" onClick={() => setIsOpen(false)} />\n <div\n className=\"absolute top-full left-0 mt-1 z-20 rounded-lg shadow-lg py-1 min-w-[140px]\"\n style={{\n background: 'var(--vscode-dropdown-background)',\n border: '1px solid var(--vscode-dropdown-border, var(--vscode-panel-border))',\n }}\n >\n {options.map(option => (\n <button\n key={option.value}\n type=\"button\"\n onClick={() => {\n onChange(option.value)\n setIsOpen(false)\n }}\n className=\"w-full flex items-center gap-2 px-3 py-1.5 text-xs transition-colors\"\n style={{\n color: 'var(--vscode-dropdown-foreground)',\n background: option.value === value ? 'var(--vscode-list-activeSelectionBackground)' : undefined,\n }}\n onMouseEnter={e => {\n if (option.value !== value) e.currentTarget.style.background = 'var(--vscode-list-hoverBackground)'\n }}\n onMouseLeave={e => {\n if (option.value !== value) e.currentTarget.style.background = 'transparent'\n }}\n >\n {option.dot && <span className={cn('w-2 h-2 rounded-full shrink-0', option.dot)} />}\n <span className=\"flex-1 text-left\">{option.label}</span>\n {option.value === value && <Check size={12} style={{ color: 'var(--vscode-focusBorder)' }} className=\"shrink-0\" />}\n </button>\n ))}\n </div>\n </>\n )}\n </div>\n )\n}\n\nfunction AssigneeInput({ value, onChange }: { value: string; onChange: (value: string) => void }) {\n const [isFocused, setIsFocused] = useState(false)\n const inputRef = useRef<HTMLInputElement>(null)\n const containerRef = useRef<HTMLDivElement>(null)\n const features = useStore(s => s.features)\n\n const existingAssignees = useMemo(() => {\n const assignees = new Set<string>()\n features.forEach(f => { if (f.assignee) assignees.add(f.assignee) })\n return Array.from(assignees).sort()\n }, [features])\n\n const suggestions = useMemo(() => {\n if (!value.trim()) return existingAssignees\n return existingAssignees.filter(a => a.toLowerCase().includes(value.toLowerCase()) && a !== value)\n }, [value, existingAssignees])\n\n const showSuggestions = isFocused && suggestions.length > 0\n\n const initials = value.trim()\n ? value.trim().split(/\\s+/).map(w => w[0]).join('').toUpperCase().slice(0, 2)\n : null\n\n return (\n <div ref={containerRef} className=\"relative flex-1\">\n <div\n className=\"flex items-center gap-2 cursor-text\"\n onClick={() => inputRef.current?.focus()}\n >\n {initials && (\n <span\n className=\"shrink-0 w-4 h-4 rounded-full flex items-center justify-center text-[8px] font-bold\"\n style={{\n background: 'var(--vscode-badge-background)',\n color: 'var(--vscode-badge-foreground)',\n }}\n >{initials}</span>\n )}\n <input\n ref={inputRef}\n type=\"text\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setTimeout(() => setIsFocused(false), 150)}\n placeholder=\"No assignee\"\n className=\"flex-1 bg-transparent border-none outline-none text-xs\"\n style={{ color: value ? 'var(--vscode-foreground)' : 'var(--vscode-descriptionForeground)' }}\n />\n </div>\n {showSuggestions && (\n <div\n className=\"absolute top-full left-0 mt-1 z-20 rounded-lg shadow-lg py-1 max-h-[160px] overflow-auto min-w-[180px]\"\n style={{\n background: 'var(--vscode-dropdown-background)',\n border: '1px solid var(--vscode-dropdown-border, var(--vscode-panel-border))',\n }}\n >\n {suggestions.map(assignee => (\n <button\n key={assignee}\n type=\"button\"\n onMouseDown={(e) => { e.preventDefault(); onChange(assignee) }}\n className=\"w-full flex items-center gap-2 px-3 py-1.5 text-xs transition-colors\"\n style={{ color: 'var(--vscode-dropdown-foreground)' }}\n onMouseEnter={e => e.currentTarget.style.background = 'var(--vscode-list-hoverBackground)'}\n onMouseLeave={e => e.currentTarget.style.background = 'transparent'}\n >\n <span\n className=\"shrink-0 w-4 h-4 rounded-full flex items-center justify-center text-[8px] font-bold\"\n style={{\n background: 'var(--vscode-badge-background)',\n color: 'var(--vscode-badge-foreground)',\n }}\n >{assignee.split(/\\s+/).map(w => w[0]).join('').toUpperCase().slice(0, 2)}</span>\n <span>{assignee}</span>\n </button>\n ))}\n </div>\n )}\n </div>\n )\n}\n\nfunction LabelInput({ labels, onChange }: { labels: string[]; onChange: (labels: string[]) => void }) {\n const [newLabel, setNewLabel] = useState('')\n const [isFocused, setIsFocused] = useState(false)\n const inputRef = useRef<HTMLInputElement>(null)\n const features = useStore(s => s.features)\n\n const existingLabels = useMemo(() => {\n const labelSet = new Set<string>()\n features.forEach(f => f.labels.forEach(l => labelSet.add(l)))\n return Array.from(labelSet).sort()\n }, [features])\n\n const suggestions = useMemo(() => {\n const available = existingLabels.filter(l => !labels.includes(l))\n if (!newLabel.trim()) return available\n return available.filter(l => l.toLowerCase().includes(newLabel.toLowerCase()))\n }, [newLabel, existingLabels, labels])\n\n const showSuggestions = isFocused && suggestions.length > 0\n\n const addLabel = (label?: string) => {\n const l = (label || newLabel).trim()\n if (l && !labels.includes(l)) {\n onChange([...labels, l])\n }\n setNewLabel('')\n }\n\n return (\n <div className=\"relative flex-1\">\n <div\n className=\"flex items-center gap-1.5 flex-wrap cursor-text\"\n onClick={() => inputRef.current?.focus()}\n >\n {labels.map(label => (\n <span\n key={label}\n className=\"inline-flex items-center gap-1 px-1.5 py-0.5 text-[10px] font-medium rounded\"\n style={{\n background: 'var(--vscode-badge-background)',\n color: 'var(--vscode-badge-foreground)',\n }}\n >\n {label}\n <button\n onClick={(e) => { e.stopPropagation(); onChange(labels.filter(l => l !== label)) }}\n className=\"hover:text-red-500 transition-colors\"\n >\n <X size={9} />\n </button>\n </span>\n ))}\n <input\n ref={inputRef}\n type=\"text\"\n value={newLabel}\n onChange={(e) => setNewLabel(e.target.value)}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setTimeout(() => setIsFocused(false), 150)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') { e.preventDefault(); addLabel() }\n if (e.key === 'Backspace' && !newLabel && labels.length > 0) {\n onChange(labels.slice(0, -1))\n }\n if (e.key === 'Escape') { setNewLabel(''); inputRef.current?.blur() }\n }}\n placeholder={labels.length === 0 ? 'Add labels...' : ''}\n className=\"flex-1 min-w-[60px] bg-transparent border-none outline-none text-xs\"\n style={{ color: 'var(--vscode-foreground)' }}\n />\n </div>\n {showSuggestions && (\n <div\n className=\"absolute top-full left-0 mt-1 z-20 rounded-lg shadow-lg py-1 max-h-[160px] overflow-auto min-w-[180px]\"\n style={{\n background: 'var(--vscode-dropdown-background)',\n border: '1px solid var(--vscode-dropdown-border, var(--vscode-panel-border))',\n }}\n >\n {suggestions.map(label => (\n <button\n key={label}\n type=\"button\"\n onMouseDown={(e) => { e.preventDefault(); addLabel(label) }}\n className=\"w-full flex items-center gap-2 px-3 py-1.5 text-xs transition-colors\"\n style={{ color: 'var(--vscode-dropdown-foreground)' }}\n onMouseEnter={e => e.currentTarget.style.background = 'var(--vscode-list-hoverBackground)'}\n onMouseLeave={e => e.currentTarget.style.background = 'transparent'}\n >\n <span\n className=\"inline-block px-1.5 py-0.5 text-[10px] font-medium rounded\"\n style={{\n background: 'var(--vscode-badge-background)',\n color: 'var(--vscode-badge-foreground)',\n }}\n >{label}</span>\n </button>\n ))}\n </div>\n )}\n </div>\n )\n}\n\nfunction PropertyRow({ label, icon, children }: { label: string; icon: React.ReactNode; children: React.ReactNode }) {\n return (\n <div\n className=\"flex items-center gap-3 px-4 py-[5px] transition-colors\"\n onMouseEnter={e => e.currentTarget.style.background = 'var(--vscode-list-hoverBackground)'}\n onMouseLeave={e => e.currentTarget.style.background = 'transparent'}\n >\n <div className=\"flex items-center gap-2 w-[90px] shrink-0\">\n <span style={{ color: 'var(--vscode-descriptionForeground)' }}>{icon}</span>\n <span className=\"text-[11px]\" style={{ color: 'var(--vscode-descriptionForeground)' }}>{label}</span>\n </div>\n <div className=\"flex-1 min-w-0\">\n {children}\n </div>\n </div>\n )\n}\n\n// Wrapper that unmounts and remounts content when dialog opens to reset state\nexport function CreateFeatureDialog({ isOpen, ...props }: CreateFeatureDialogProps) {\n if (!isOpen) return null\n return <CreateFeatureDialogContent isOpen={isOpen} {...props} />\n}\n\nfunction CreateFeatureDialogContent({\n isOpen,\n onClose,\n onCreate,\n initialStatus\n}: CreateFeatureDialogProps) {\n const { cardSettings } = useStore()\n const [title, setTitle] = useState('')\n const [status, setStatus] = useState<FeatureStatus>(initialStatus ?? cardSettings.defaultStatus)\n const [priority, setPriority] = useState<Priority>(cardSettings.defaultPriority)\n const [assignee, setAssignee] = useState('')\n const [dueDate, setDueDate] = useState('')\n const [labels, setLabels] = useState<string[]>([])\n const [description, setDescription] = useState('')\n const inputRef = useRef<HTMLTextAreaElement>(null)\n\n // Focus input on mount\n useEffect(() => {\n const timer = setTimeout(() => inputRef.current?.focus(), 50)\n return () => clearTimeout(timer)\n }, [])\n\n const handleSubmit = () => {\n const desc = description.trim()\n const heading = title.trim()\n const content = heading\n ? `# ${heading}${desc ? `\\n\\n${desc}` : ''}`\n : desc\n onCreate({ status, priority, content, assignee: assignee.trim() || null, dueDate: dueDate || null, labels })\n }\n\n const handleSaveAndClose = () => {\n handleSubmit()\n onClose()\n }\n\n const handleCancel = () => {\n onClose()\n }\n\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n handleCancel()\n }\n if ((e.metaKey || e.ctrlKey) && e.key === 'Enter') {\n handleSaveAndClose()\n }\n if ((e.metaKey || e.ctrlKey) && e.key === 's') {\n e.preventDefault()\n handleSaveAndClose()\n }\n }\n\n if (isOpen) {\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }\n })\n\n return (\n <div className=\"fixed inset-0 z-50 flex justify-end\">\n <div className=\"absolute inset-0 bg-black/30\" onClick={handleCancel} />\n <div\n className=\"relative h-full w-1/2 shadow-xl flex flex-col animate-in slide-in-from-right duration-200\"\n style={{\n background: 'var(--vscode-editor-background)',\n borderLeft: '1px solid var(--vscode-panel-border)',\n }}\n >\n {/* Header */}\n <div\n className=\"flex items-center justify-between px-4 py-3\"\n style={{ borderBottom: '1px solid var(--vscode-panel-border)' }}\n >\n <div className=\"flex items-center gap-3\">\n <h2 className=\"font-medium\" style={{ color: 'var(--vscode-foreground)' }}>\n Create Feature\n </h2>\n </div>\n <button\n onClick={handleCancel}\n className=\"p-1.5 rounded transition-colors\"\n style={{ color: 'var(--vscode-descriptionForeground)' }}\n onMouseEnter={e => e.currentTarget.style.background = 'var(--vscode-list-hoverBackground)'}\n onMouseLeave={e => e.currentTarget.style.background = 'transparent'}\n >\n <X size={18} />\n </button>\n </div>\n\n {/* Metadata */}\n <div\n className=\"flex flex-col py-0.5\"\n style={{\n borderBottom: '1px solid var(--vscode-panel-border)',\n }}\n >\n <PropertyRow label=\"Status\" icon={<CircleDot size={13} />}>\n <Dropdown\n value={status}\n options={statusConfig.map(s => ({ value: s.value, label: s.label, dot: s.dot }))}\n onChange={(v) => setStatus(v as FeatureStatus)}\n />\n </PropertyRow>\n {cardSettings.showPriorityBadges && (\n <PropertyRow label=\"Priority\" icon={<Signal size={13} />}>\n <Dropdown\n value={priority}\n options={priorityConfig.map(p => ({ value: p.value, label: p.label, dot: p.dot }))}\n onChange={(v) => setPriority(v as Priority)}\n />\n </PropertyRow>\n )}\n {cardSettings.showAssignee && (\n <PropertyRow label=\"Assignee\" icon={<User size={13} />}>\n <AssigneeInput value={assignee} onChange={setAssignee} />\n </PropertyRow>\n )}\n {cardSettings.showDueDate && (\n <PropertyRow label=\"Due date\" icon={<Calendar size={13} />}>\n <DatePicker value={dueDate} onChange={setDueDate} />\n </PropertyRow>\n )}\n {cardSettings.showLabels && (\n <PropertyRow label=\"Labels\" icon={<Tag size={13} />}>\n <LabelInput labels={labels} onChange={setLabels} />\n </PropertyRow>\n )}\n </div>\n\n {/* Content */}\n <div className=\"flex-1 overflow-auto p-4\">\n <textarea\n ref={inputRef}\n value={title}\n onChange={(e) => setTitle(e.target.value)}\n placeholder=\"Feature title...\"\n className=\"w-full text-lg font-medium bg-transparent border-none outline-none resize-none mb-4\"\n style={{\n color: 'var(--vscode-foreground)',\n }}\n rows={1}\n onInput={(e) => {\n const target = e.target as HTMLTextAreaElement\n target.style.height = 'auto'\n target.style.height = target.scrollHeight + 'px'\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n }\n }}\n />\n <MarkdownEditor\n value={description}\n onChange={setDescription}\n placeholder=\"Add a description...\"\n />\n </div>\n\n {/* Footer with Cancel / Save buttons */}\n <div\n className=\"flex items-center justify-between px-4 py-3\"\n style={{\n borderTop: '1px solid var(--vscode-panel-border)',\n background: 'var(--vscode-sideBar-background, var(--vscode-editor-background))',\n }}\n >\n <p className=\"text-xs\" style={{ color: 'var(--vscode-descriptionForeground)' }}>\n <kbd\n className=\"px-1.5 py-0.5 rounded text-[10px] font-mono\"\n style={{ background: 'var(--vscode-keybindingLabel-background, var(--vscode-badge-background))', color: 'var(--vscode-keybindingLabel-foreground, var(--vscode-foreground))', border: '1px solid var(--vscode-keybindingLabel-border, var(--vscode-panel-border))' }}\n >Esc</kbd>{' '}cancel ·{' '}\n <kbd\n className=\"px-1.5 py-0.5 rounded text-[10px] font-mono\"\n style={{ background: 'var(--vscode-keybindingLabel-background, var(--vscode-badge-background))', color: 'var(--vscode-keybindingLabel-foreground, var(--vscode-foreground))', border: '1px solid var(--vscode-keybindingLabel-border, var(--vscode-panel-border))' }}\n >⌘S</kbd>{' '}save\n </p>\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={handleCancel}\n className=\"px-3 py-1.5 text-xs font-medium rounded transition-colors\"\n style={{\n color: 'var(--vscode-foreground)',\n background: 'transparent',\n border: '1px solid var(--vscode-panel-border)',\n }}\n onMouseEnter={e => e.currentTarget.style.background = 'var(--vscode-list-hoverBackground)'}\n onMouseLeave={e => e.currentTarget.style.background = 'transparent'}\n >\n Cancel\n </button>\n <button\n type=\"button\"\n onClick={handleSaveAndClose}\n className=\"px-3 py-1.5 text-xs font-medium rounded transition-colors\"\n style={{\n color: 'var(--vscode-button-foreground)',\n background: 'var(--vscode-button-background)',\n }}\n onMouseEnter={e => e.currentTarget.style.background = 'var(--vscode-button-hoverBackground)'}\n onMouseLeave={e => e.currentTarget.style.background = 'var(--vscode-button-background)'}\n >\n Save\n </button>\n </div>\n </div>\n </div>\n </div>\n )\n}\n","import { useEffect, useCallback, useState, useRef, useMemo } from 'react'\nimport { X, User, ChevronDown, Wand2, Tag, Plus, Check, CircleDot, Signal, Calendar, Trash2, FileText, Paperclip } from 'lucide-react'\nimport type { FeatureFrontmatter, Priority, FeatureStatus } from '../../shared/types'\nimport { cn } from '../lib/utils'\nimport { useStore } from '../store'\nimport { MarkdownEditor } from './MarkdownEditor'\n\ntype AIAgent = 'claude' | 'codex' | 'opencode'\ntype PermissionMode = 'default' | 'plan' | 'acceptEdits' | 'bypassPermissions'\n\ninterface FeatureEditorProps {\n featureId: string\n content: string\n frontmatter: FeatureFrontmatter\n contentVersion?: number\n onSave: (content: string, frontmatter: FeatureFrontmatter) => void\n onClose: () => void\n onDelete: () => void\n onOpenFile: () => void\n onStartWithAI: (agent: AIAgent, permissionMode: PermissionMode) => void\n onAddAttachment: () => void\n onOpenAttachment: (attachment: string) => void\n onRemoveAttachment: (attachment: string) => void\n}\n\nconst priorityLabels: Record<Priority, string> = {\n critical: 'Critical',\n high: 'High',\n medium: 'Medium',\n low: 'Low'\n}\n\nconst statusLabels: Record<FeatureStatus, string> = {\n backlog: 'Backlog',\n todo: 'To Do',\n 'in-progress': 'In Progress',\n review: 'Review',\n done: 'Done'\n}\n\nconst priorities: Priority[] = ['critical', 'high', 'medium', 'low']\nconst statuses: FeatureStatus[] = ['backlog', 'todo', 'in-progress', 'review', 'done']\n\nconst priorityDots: Record<Priority, string> = {\n critical: 'bg-red-500',\n high: 'bg-orange-500',\n medium: 'bg-yellow-500',\n low: 'bg-green-500',\n}\n\nconst statusDots: Record<FeatureStatus, string> = {\n backlog: 'bg-zinc-400',\n todo: 'bg-blue-400',\n 'in-progress': 'bg-amber-400',\n review: 'bg-purple-400',\n done: 'bg-emerald-400',\n}\n\nconst aiAgentTabs: { agent: AIAgent; label: string; color: string; activeColor: string }[] = [\n { agent: 'claude', label: 'Claude', color: 'hover:bg-amber-100 dark:hover:bg-amber-900/30', activeColor: 'bg-amber-700 text-white' },\n { agent: 'codex', label: 'Codex', color: 'hover:bg-emerald-100 dark:hover:bg-emerald-900/30', activeColor: 'bg-emerald-500 text-white' },\n { agent: 'opencode', label: 'OpenCode', color: 'hover:bg-slate-100 dark:hover:bg-slate-700/30', activeColor: 'bg-slate-500 text-white' },\n]\n\nconst agentButtonColors: Record<AIAgent, { bg: string; hover: string; shadow: string; border: string }> = {\n claude: {\n bg: 'bg-amber-700',\n hover: 'hover:bg-amber-800',\n shadow: 'shadow-sm',\n border: 'border border-amber-800/50'\n },\n codex: {\n bg: 'bg-emerald-600',\n hover: 'hover:bg-emerald-700',\n shadow: 'shadow-sm',\n border: 'border border-emerald-700/50'\n },\n opencode: {\n bg: 'bg-slate-600',\n hover: 'hover:bg-slate-700',\n shadow: 'shadow-sm',\n border: 'border border-slate-700/50'\n },\n}\n\nconst aiModesByAgent: Record<AIAgent, { permissionMode: PermissionMode; label: string; description: string }[]> = {\n claude: [\n { permissionMode: 'default', label: 'Default', description: 'With confirmations' },\n { permissionMode: 'plan', label: 'Plan', description: 'Creates a plan first' },\n { permissionMode: 'acceptEdits', label: 'Auto-edit', description: 'Auto-accepts file edits' },\n { permissionMode: 'bypassPermissions', label: 'Full Auto', description: 'Bypasses all prompts' },\n ],\n codex: [\n { permissionMode: 'default', label: 'Suggest', description: 'Suggests changes' },\n { permissionMode: 'acceptEdits', label: 'Auto-edit', description: 'Auto-accepts edits' },\n { permissionMode: 'bypassPermissions', label: 'Full Auto', description: 'Full automation' },\n ],\n opencode: [\n { permissionMode: 'default', label: 'Default', description: 'Standard mode' },\n ],\n}\n\ninterface DropdownProps {\n value: string\n options: { value: string; label: string; dot?: string }[]\n onChange: (value: string) => void\n className?: string\n}\n\nfunction Dropdown({ value, options, onChange, className }: DropdownProps) {\n const [isOpen, setIsOpen] = useState(false)\n const current = options.find(o => o.value === value)\n\n return (\n <div className={cn('relative', className)}>\n <button\n onClick={() => setIsOpen(!isOpen)}\n className=\"flex items-center gap-2 px-2 py-1 text-xs font-medium rounded transition-colors vscode-hover-bg\"\n style={{ color: 'var(--vscode-foreground)' }}\n >\n {current?.dot && <span className={cn('w-2 h-2 rounded-full shrink-0', current.dot)} />}\n <span>{current?.label}</span>\n <ChevronDown size={12} style={{ color: 'var(--vscode-descriptionForeground)' }} className=\"ml-0.5\" />\n </button>\n {isOpen && (\n <>\n <div className=\"fixed inset-0 z-10\" onClick={() => setIsOpen(false)} />\n <div\n className=\"absolute top-full left-0 mt-1 z-20 rounded-lg shadow-lg py-1 min-w-[140px]\"\n style={{\n background: 'var(--vscode-dropdown-background)',\n border: '1px solid var(--vscode-dropdown-border, var(--vscode-panel-border))',\n }}\n >\n {options.map(option => (\n <button\n key={option.value}\n onClick={() => {\n onChange(option.value)\n setIsOpen(false)\n }}\n className=\"w-full flex items-center gap-2 px-3 py-1.5 text-xs transition-colors\"\n style={{\n color: 'var(--vscode-dropdown-foreground)',\n background: option.value === value ? 'var(--vscode-list-activeSelectionBackground)' : undefined,\n }}\n onMouseEnter={e => {\n if (option.value !== value) e.currentTarget.style.background = 'var(--vscode-list-hoverBackground)'\n }}\n onMouseLeave={e => {\n if (option.value !== value) e.currentTarget.style.background = 'transparent'\n }}\n >\n {option.dot && <span className={cn('w-2 h-2 rounded-full shrink-0', option.dot)} />}\n <span className=\"flex-1 text-left\">{option.label}</span>\n {option.value === value && <Check size={12} style={{ color: 'var(--vscode-focusBorder)' }} className=\"shrink-0\" />}\n </button>\n ))}\n </div>\n </>\n )}\n </div>\n )\n}\n\nfunction PropertyRow({ label, icon, children }: { label: string; icon: React.ReactNode; children: React.ReactNode }) {\n return (\n <div\n className=\"flex items-center gap-3 px-4 py-[5px] transition-colors vscode-hover-bg\"\n >\n <div className=\"flex items-center gap-2 w-[90px] shrink-0\">\n <span style={{ color: 'var(--vscode-descriptionForeground)' }}>{icon}</span>\n <span className=\"text-[11px]\" style={{ color: 'var(--vscode-descriptionForeground)' }}>{label}</span>\n </div>\n <div className=\"flex-1 min-w-0\">\n {children}\n </div>\n </div>\n )\n}\n\ninterface AIDropdownProps {\n onSelect: (agent: AIAgent, permissionMode: PermissionMode) => void\n}\n\nfunction AIDropdown({ onSelect }: AIDropdownProps) {\n const [isOpen, setIsOpen] = useState(false)\n const [selectedTab, setSelectedTab] = useState<AIAgent>('claude')\n\n const modes = aiModesByAgent[selectedTab]\n const buttonColors = agentButtonColors[selectedTab]\n\n return (\n <div className=\"relative\">\n <button\n onClick={() => setIsOpen(!isOpen)}\n className={cn(\n 'flex items-center gap-1.5 px-2.5 py-1.5 text-xs font-medium text-white rounded-md transition-colors',\n buttonColors.bg,\n buttonColors.hover,\n buttonColors.shadow,\n buttonColors.border\n )}\n >\n <Wand2 size={13} />\n <span>Build with AI</span>\n <kbd className=\"ml-0.5 text-[9px] opacity-60 font-mono\">⌘B</kbd>\n <ChevronDown size={11} className={cn('ml-0.5 opacity-60 transition-transform', isOpen && 'rotate-180')} />\n </button>\n {isOpen && (\n <>\n <div className=\"fixed inset-0 z-10\" onClick={() => setIsOpen(false)} />\n <div className=\"absolute top-full right-0 mt-1 z-20 bg-white dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-700 rounded-lg shadow-xl min-w-[260px] overflow-hidden\">\n {/* Tabs */}\n <div className=\"flex\">\n {aiAgentTabs.map((tab) => (\n <button\n key={tab.agent}\n onClick={() => setSelectedTab(tab.agent)}\n className={cn(\n 'flex-1 px-3 py-2.5 text-xs font-medium transition-all',\n selectedTab === tab.agent\n ? tab.activeColor\n : cn('text-zinc-600 dark:text-zinc-400', tab.color)\n )}\n >\n {tab.label}\n </button>\n ))}\n </div>\n {/* Options */}\n <div className=\"p-2 space-y-1\">\n {modes.map((mode) => (\n <button\n key={mode.permissionMode}\n onClick={() => {\n onSelect(selectedTab, mode.permissionMode)\n setIsOpen(false)\n }}\n className=\"w-full text-left px-3 py-2.5 rounded-md hover:bg-zinc-100 dark:hover:bg-zinc-700/50 transition-colors\"\n >\n <div className=\"text-xs font-medium text-zinc-900 dark:text-zinc-100\">{mode.label}</div>\n <div className=\"text-[10px] text-zinc-500 dark:text-zinc-400 mt-0.5\">{mode.description}</div>\n </button>\n ))}\n </div>\n </div>\n </>\n )}\n </div>\n )\n}\n\nfunction LabelEditor({ labels, onChange }: { labels: string[]; onChange: (labels: string[]) => void }) {\n const [newLabel, setNewLabel] = useState('')\n const [isFocused, setIsFocused] = useState(false)\n const inputRef = useRef<HTMLInputElement>(null)\n const features = useStore(s => s.features)\n\n const existingLabels = useMemo(() => {\n const labelSet = new Set<string>()\n features.forEach(f => f.labels.forEach(l => labelSet.add(l)))\n return Array.from(labelSet).sort()\n }, [features])\n\n const suggestions = useMemo(() => {\n const available = existingLabels.filter(l => !labels.includes(l))\n if (!newLabel.trim()) return available\n return available.filter(l => l.toLowerCase().includes(newLabel.toLowerCase()))\n }, [newLabel, existingLabels, labels])\n\n const showSuggestions = isFocused && suggestions.length > 0\n\n const addLabel = (label?: string) => {\n const l = (label || newLabel).trim()\n if (l && !labels.includes(l)) {\n onChange([...labels, l])\n }\n setNewLabel('')\n }\n\n const removeLabel = (label: string) => {\n onChange(labels.filter(l => l !== label))\n }\n\n return (\n <div className=\"relative flex items-center gap-1.5 flex-wrap\">\n {labels.map(label => (\n <span\n key={label}\n className=\"inline-flex items-center gap-1 px-1.5 py-0.5 text-[10px] font-medium rounded\"\n style={{\n background: 'var(--vscode-badge-background)',\n color: 'var(--vscode-badge-foreground)',\n }}\n >\n {label}\n <button\n onClick={() => removeLabel(label)}\n className=\"hover:text-red-500 transition-colors\"\n >\n <X size={9} />\n </button>\n </span>\n ))}\n <button\n onClick={() => { setIsFocused(true); setTimeout(() => inputRef.current?.focus(), 0) }}\n className=\"inline-flex items-center gap-0.5 px-1 py-0.5 text-[10px] rounded transition-colors vscode-hover-bg\"\n style={{ color: 'var(--vscode-descriptionForeground)' }}\n >\n <Plus size={10} />\n </button>\n <input\n ref={inputRef}\n type=\"text\"\n value={newLabel}\n onChange={(e) => setNewLabel(e.target.value)}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setTimeout(() => setIsFocused(false), 150)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') { e.preventDefault(); addLabel() }\n if (e.key === 'Backspace' && !newLabel && labels.length > 0) {\n onChange(labels.slice(0, -1))\n }\n if (e.key === 'Escape') { setNewLabel(''); inputRef.current?.blur() }\n }}\n placeholder={labels.length === 0 ? 'Add labels...' : ''}\n className=\"flex-1 min-w-[60px] bg-transparent border-none outline-none text-xs\"\n style={{ color: 'var(--vscode-foreground)', display: isFocused || newLabel ? 'block' : 'none' }}\n />\n {showSuggestions && (\n <div\n className=\"absolute top-full left-0 mt-1 z-20 rounded-lg shadow-lg py-1 max-h-[160px] overflow-auto min-w-[180px]\"\n style={{\n background: 'var(--vscode-dropdown-background)',\n border: '1px solid var(--vscode-dropdown-border, var(--vscode-panel-border))',\n }}\n >\n {suggestions.map(label => (\n <button\n key={label}\n type=\"button\"\n onMouseDown={(e) => { e.preventDefault(); addLabel(label) }}\n className=\"w-full flex items-center gap-2 px-3 py-1.5 text-xs transition-colors\"\n style={{ color: 'var(--vscode-dropdown-foreground)' }}\n onMouseEnter={e => e.currentTarget.style.background = 'var(--vscode-list-hoverBackground)'}\n onMouseLeave={e => e.currentTarget.style.background = 'transparent'}\n >\n <span\n className=\"inline-block px-1.5 py-0.5 text-[10px] font-medium rounded\"\n style={{\n background: 'var(--vscode-badge-background)',\n color: 'var(--vscode-badge-foreground)',\n }}\n >{label}</span>\n </button>\n ))}\n </div>\n )}\n </div>\n )\n}\n\nexport function FeatureEditor({ featureId, content, frontmatter, contentVersion, onSave, onClose, onDelete, onOpenFile, onStartWithAI, onAddAttachment, onOpenAttachment, onRemoveAttachment }: FeatureEditorProps) {\n const { cardSettings } = useStore()\n const [currentFrontmatter, setCurrentFrontmatter] = useState(frontmatter)\n const [currentContent, setCurrentContent] = useState(content)\n const [confirmingDelete, setConfirmingDelete] = useState(false)\n const debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const currentFrontmatterRef = useRef(currentFrontmatter)\n const currentContentRef = useRef(currentContent)\n currentFrontmatterRef.current = currentFrontmatter\n currentContentRef.current = currentContent\n\n const save = useCallback(() => {\n onSave(currentContentRef.current, currentFrontmatterRef.current)\n }, [onSave])\n\n // Clean up debounce on unmount\n useEffect(() => {\n return () => {\n if (debounceRef.current) clearTimeout(debounceRef.current)\n }\n }, [])\n\n // Set content when a new feature is opened (keyed by featureId)\n useEffect(() => {\n setCurrentContent(content)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [featureId, contentVersion])\n\n // Reset frontmatter when prop changes\n useEffect(() => {\n setCurrentFrontmatter(frontmatter)\n }, [frontmatter])\n\n const handleContentChange = useCallback((value: string) => {\n setCurrentContent(value)\n if (debounceRef.current) clearTimeout(debounceRef.current)\n debounceRef.current = setTimeout(() => {\n onSave(value, currentFrontmatterRef.current)\n }, 800)\n }, [onSave])\n\n const handleFrontmatterUpdate = useCallback((updates: Partial<FeatureFrontmatter>) => {\n setCurrentFrontmatter(prev => {\n const next = { ...prev, ...updates }\n // Schedule a save with the updated frontmatter\n if (debounceRef.current) clearTimeout(debounceRef.current)\n debounceRef.current = setTimeout(() => {\n onSave(currentContentRef.current, next)\n }, 800)\n return next\n })\n }, [onSave])\n\n // Keyboard shortcuts\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key === 's') {\n e.preventDefault()\n // Flush any pending debounce and save immediately\n if (debounceRef.current) clearTimeout(debounceRef.current)\n save()\n }\n if ((e.metaKey || e.ctrlKey) && e.key === 'b' && cardSettings.showBuildWithAI) {\n e.preventDefault()\n onStartWithAI('claude', 'default')\n }\n if (e.key === 'Escape') {\n // Flush any pending save before closing\n if (debounceRef.current) {\n clearTimeout(debounceRef.current)\n save()\n }\n onClose()\n }\n }\n window.addEventListener('keydown', handleKeyDown)\n return () => window.removeEventListener('keydown', handleKeyDown)\n }, [save, onClose, onStartWithAI, cardSettings.showBuildWithAI])\n\n return (\n <div\n className=\"h-full flex flex-col\"\n style={{\n background: 'var(--vscode-editor-background)',\n borderLeft: '1px solid var(--vscode-panel-border)',\n }}\n >\n {/* Header */}\n <div\n className=\"flex items-center justify-between px-4 py-3\"\n style={{ borderBottom: '1px solid var(--vscode-panel-border)' }}\n >\n <div className=\"flex items-center gap-3\">\n <span className=\"text-xs font-mono\" style={{ color: 'var(--vscode-descriptionForeground)' }}>{featureId}</span>\n {confirmingDelete ? (\n <div className=\"flex items-center gap-1.5\">\n <span className=\"text-xs\" style={{ color: 'var(--vscode-errorForeground)' }}>Delete?</span>\n <button\n onClick={() => { setConfirmingDelete(false); onDelete() }}\n className=\"px-2 py-1 text-xs font-medium rounded transition-colors text-white bg-red-600 hover:bg-red-700\"\n >\n Yes\n </button>\n <button\n onClick={() => setConfirmingDelete(false)}\n className=\"px-2 py-1 text-xs font-medium rounded transition-colors vscode-hover-bg\"\n style={{ color: 'var(--vscode-foreground)' }}\n >\n No\n </button>\n </div>\n ) : (\n <>\n <button\n onClick={() => { onOpenFile(); onClose(); }}\n className=\"p-1.5 px-2 rounded border transition-colors vscode-hover-bg flex items-center gap-1\"\n style={{ color: 'var(--vscode-descriptionForeground)', borderColor: 'var(--vscode-widget-border, var(--vscode-contrastBorder, rgba(128,128,128,0.35)))' }}\n title=\"Open .md file\"\n >\n <FileText size={16} />\n <span className=\"text-xs\">OPEN</span>\n </button>\n <button\n onClick={() => setConfirmingDelete(true)}\n className=\"p-1.5 px-2 rounded border transition-colors vscode-hover-bg flex items-center gap-1\"\n style={{ color: 'var(--vscode-descriptionForeground)', borderColor: 'var(--vscode-widget-border, var(--vscode-contrastBorder, rgba(128,128,128,0.35)))' }}\n title=\"Delete ticket\"\n >\n <Trash2 size={16} />\n <span className=\"text-xs\">DELETE</span>\n </button>\n </>\n )}\n </div>\n <div className=\"flex items-center gap-2\">\n {cardSettings.showBuildWithAI && <AIDropdown onSelect={onStartWithAI} />}\n <button\n onClick={onClose}\n className=\"p-1.5 rounded transition-colors vscode-hover-bg\"\n style={{ color: 'var(--vscode-descriptionForeground)' }}\n >\n <X size={18} />\n </button>\n </div>\n </div>\n\n {/* Metadata */}\n <div\n className=\"flex flex-col py-0.5\"\n style={{ borderBottom: '1px solid var(--vscode-panel-border)' }}\n >\n <PropertyRow label=\"Status\" icon={<CircleDot size={13} />}>\n <Dropdown\n value={currentFrontmatter.status}\n options={statuses.map(s => ({ value: s, label: statusLabels[s], dot: statusDots[s] }))}\n onChange={(v) => handleFrontmatterUpdate({ status: v as FeatureStatus })}\n />\n </PropertyRow>\n {cardSettings.showPriorityBadges && (\n <PropertyRow label=\"Priority\" icon={<Signal size={13} />}>\n <Dropdown\n value={currentFrontmatter.priority}\n options={priorities.map(p => ({ value: p, label: priorityLabels[p], dot: priorityDots[p] }))}\n onChange={(v) => handleFrontmatterUpdate({ priority: v as Priority })}\n />\n </PropertyRow>\n )}\n {cardSettings.showAssignee && (\n <PropertyRow label=\"Assignee\" icon={<User size={13} />}>\n <div className=\"flex items-center gap-2\">\n {currentFrontmatter.assignee && (\n <span\n className=\"shrink-0 w-4 h-4 rounded-full flex items-center justify-center text-[8px] font-bold\"\n style={{\n background: 'var(--vscode-badge-background)',\n color: 'var(--vscode-badge-foreground)',\n }}\n >{currentFrontmatter.assignee.split(/\\s+/).filter(Boolean).map(w => w[0]).join('').toUpperCase().slice(0, 2)}</span>\n )}\n <input\n type=\"text\"\n value={currentFrontmatter.assignee || ''}\n onChange={(e) => handleFrontmatterUpdate({ assignee: e.target.value || null })}\n placeholder=\"No assignee\"\n className=\"bg-transparent border-none outline-none text-xs w-32\"\n style={{ color: currentFrontmatter.assignee ? 'var(--vscode-foreground)' : 'var(--vscode-descriptionForeground)' }}\n />\n </div>\n </PropertyRow>\n )}\n {cardSettings.showDueDate && (\n <PropertyRow label=\"Due date\" icon={<Calendar size={13} />}>\n <input\n type=\"date\"\n value={currentFrontmatter.dueDate || ''}\n onChange={(e) => handleFrontmatterUpdate({ dueDate: e.target.value || null })}\n className=\"bg-transparent border-none outline-none text-xs\"\n style={{ color: currentFrontmatter.dueDate ? 'var(--vscode-foreground)' : 'var(--vscode-descriptionForeground)' }}\n />\n </PropertyRow>\n )}\n {cardSettings.showLabels && (\n <PropertyRow label=\"Labels\" icon={<Tag size={13} />}>\n <LabelEditor\n labels={currentFrontmatter.labels}\n onChange={(labels) => handleFrontmatterUpdate({ labels })}\n />\n </PropertyRow>\n )}\n <PropertyRow label=\"Attachments\" icon={<Paperclip size={13} />}>\n <div className=\"flex items-center gap-1.5 flex-wrap\">\n {currentFrontmatter.attachments.map(attachment => (\n <span\n key={attachment}\n className=\"inline-flex items-center gap-1 px-1.5 py-0.5 text-[10px] font-medium rounded\"\n style={{\n background: 'var(--vscode-badge-background)',\n color: 'var(--vscode-badge-foreground)',\n }}\n >\n <button\n type=\"button\"\n onClick={() => onOpenAttachment(attachment)}\n className=\"inline-flex items-center gap-1 hover:underline\"\n title={attachment}\n >\n <Paperclip size={9} />\n {attachment}\n </button>\n <button\n type=\"button\"\n onClick={() => onRemoveAttachment(attachment)}\n className=\"hover:text-red-500 transition-colors\"\n >\n <X size={9} />\n </button>\n </span>\n ))}\n <button\n type=\"button\"\n onClick={onAddAttachment}\n className=\"inline-flex items-center gap-0.5 px-1 py-0.5 text-[10px] rounded transition-colors vscode-hover-bg\"\n style={{ color: 'var(--vscode-descriptionForeground)' }}\n >\n <Plus size={10} />\n </button>\n </div>\n </PropertyRow>\n </div>\n\n {/* Editor */}\n <MarkdownEditor\n value={currentContent}\n onChange={handleContentChange}\n placeholder=\"Start writing...\"\n className=\"flex-1 min-h-0\"\n />\n </div>\n )\n}\n","import { Search, X, Columns, Rows, Settings, Plus } from 'lucide-react'\nimport { useStore, type DueDateFilter } from '../store'\nimport type { Priority } from '../../shared/types'\n\nconst priorities: { value: Priority | 'all'; label: string }[] = [\n { value: 'all', label: 'All Priorities' },\n { value: 'critical', label: 'Critical' },\n { value: 'high', label: 'High' },\n { value: 'medium', label: 'Medium' },\n { value: 'low', label: 'Low' }\n]\n\nconst dueDateOptions: { value: DueDateFilter; label: string }[] = [\n { value: 'all', label: 'All Dates' },\n { value: 'overdue', label: 'Overdue' },\n { value: 'today', label: 'Due Today' },\n { value: 'this-week', label: 'Due This Week' },\n { value: 'no-date', label: 'No Due Date' }\n]\n\nconst selectClassName =\n 'text-sm bg-white dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-600 rounded-md px-2 py-1.5 focus:outline-none focus:ring-2 focus:ring-blue-500 text-zinc-900 dark:text-zinc-100'\n\nexport function Toolbar({ onOpenSettings, onAddColumn }: { onOpenSettings: () => void; onAddColumn: () => void }) {\n const {\n searchQuery,\n setSearchQuery,\n priorityFilter,\n setPriorityFilter,\n assigneeFilter,\n setAssigneeFilter,\n labelFilter,\n setLabelFilter,\n dueDateFilter,\n setDueDateFilter,\n clearAllFilters,\n getUniqueAssignees,\n getUniqueLabels,\n hasActiveFilters,\n layout,\n toggleLayout,\n cardSettings\n } = useStore()\n\n const assignees = getUniqueAssignees()\n const labels = getUniqueLabels()\n const filtersActive = hasActiveFilters()\n\n return (\n <div className=\"flex items-center gap-2 px-4 py-2 border-b border-zinc-200 dark:border-zinc-700 bg-zinc-50 dark:bg-zinc-900/50 flex-wrap\">\n {/* Search */}\n <div className=\"relative flex-1 min-w-[180px] max-w-xs\">\n <Search\n size={14}\n className=\"absolute left-2.5 top-1/2 -translate-y-1/2 text-zinc-400\"\n />\n <input\n type=\"text\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n placeholder=\"Search features...\"\n className=\"w-full pl-8 pr-3 py-1.5 text-sm bg-white dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 text-zinc-900 dark:text-zinc-100 placeholder-zinc-400\"\n />\n </div>\n\n {/* Priority Filter */}\n {cardSettings.showPriorityBadges && (\n <select\n value={priorityFilter}\n onChange={(e) => setPriorityFilter(e.target.value as Priority | 'all')}\n className={selectClassName}\n >\n {priorities.map((p) => (\n <option key={p.value} value={p.value}>\n {p.label}\n </option>\n ))}\n </select>\n )}\n\n {/* Assignee Filter */}\n {cardSettings.showAssignee && (\n <select\n value={assigneeFilter}\n onChange={(e) => setAssigneeFilter(e.target.value)}\n className={selectClassName}\n >\n <option value=\"all\">All Assignees</option>\n <option value=\"unassigned\">Unassigned</option>\n {assignees.map((a) => (\n <option key={a} value={a}>\n {a}\n </option>\n ))}\n </select>\n )}\n\n {/* Label Filter */}\n {cardSettings.showLabels && (\n <select\n value={labelFilter}\n onChange={(e) => setLabelFilter(e.target.value)}\n className={selectClassName}\n >\n <option value=\"all\">All Labels</option>\n {labels.map((l) => (\n <option key={l} value={l}>\n {l}\n </option>\n ))}\n </select>\n )}\n\n {/* Due Date Filter */}\n {cardSettings.showDueDate && (\n <select\n value={dueDateFilter}\n onChange={(e) => setDueDateFilter(e.target.value as DueDateFilter)}\n className={selectClassName}\n >\n {dueDateOptions.map((d) => (\n <option key={d.value} value={d.value}>\n {d.label}\n </option>\n ))}\n </select>\n )}\n\n {/* Clear Filters Button */}\n {filtersActive && (\n <button\n onClick={clearAllFilters}\n className=\"flex items-center gap-1 px-2 py-1.5 text-sm text-zinc-500 hover:text-zinc-700 dark:text-zinc-400 dark:hover:text-zinc-200 hover:bg-zinc-100 dark:hover:bg-zinc-800 rounded-md transition-colors\"\n title=\"Clear all filters\"\n >\n <X size={14} />\n <span>Clear</span>\n </button>\n )}\n\n {/* Add List */}\n <button\n onClick={onAddColumn}\n className=\"flex items-center gap-1 px-2 py-1.5 text-sm text-zinc-500 hover:text-zinc-700 dark:text-zinc-400 dark:hover:text-zinc-200 hover:bg-zinc-100 dark:hover:bg-zinc-800 rounded-md transition-colors\"\n title=\"Add new list\"\n >\n <Plus size={16} />\n <span>Add List</span>\n </button>\n\n {/* Layout Toggle */}\n <button\n onClick={toggleLayout}\n className=\"flex items-center gap-1 px-2 py-1.5 text-sm text-zinc-500 hover:text-zinc-700 dark:text-zinc-400 dark:hover:text-zinc-200 hover:bg-zinc-100 dark:hover:bg-zinc-800 rounded-md transition-colors\"\n title={layout === 'horizontal' ? 'Switch to vertical layout' : 'Switch to horizontal layout'}\n >\n {layout === 'horizontal' ? <Rows size={16} /> : <Columns size={16} />}\n </button>\n\n {/* Settings */}\n <button\n onClick={onOpenSettings}\n className=\"flex items-center gap-1 px-2 py-1.5 text-sm text-zinc-500 hover:text-zinc-700 dark:text-zinc-400 dark:hover:text-zinc-200 hover:bg-zinc-100 dark:hover:bg-zinc-800 rounded-md transition-colors\"\n title=\"Open settings\"\n >\n <Settings size={16} />\n </button>\n\n {/* Keyboard hint */}\n <div className=\"ml-auto text-xs text-zinc-400\">\n Press <kbd className=\"px-1.5 py-0.5 bg-zinc-200 dark:bg-zinc-700 rounded\">n</kbd> to add\n </div>\n </div>\n )\n}\n","import { useEffect, useState } from 'react'\n\ninterface UndoToastProps {\n message: string\n onUndo: () => void\n onExpire: () => void\n duration: number\n index: number\n}\n\nexport function UndoToast({ message, onUndo, onExpire, duration, index }: UndoToastProps) {\n const [progress, setProgress] = useState(100)\n\n useEffect(() => {\n const interval = 50\n const step = (interval / duration) * 100\n const timer = setInterval(() => {\n setProgress(prev => {\n const next = prev - step\n if (next <= 0) {\n clearInterval(timer)\n return 0\n }\n return next\n })\n }, interval)\n\n return () => clearInterval(timer)\n }, [duration])\n\n useEffect(() => {\n if (progress <= 0) {\n onExpire()\n }\n }, [progress, onExpire])\n\n return (\n <div\n className=\"fixed right-4 z-50 flex flex-col min-w-[320px] max-w-[420px] shadow-[0_4px_16px_rgba(0,0,0,0.4)] transition-[bottom] duration-200 ease-out\"\n style={{\n bottom: `${24 + index * 52}px`,\n background: 'var(--vscode-notifications-background)',\n color: 'var(--vscode-notifications-foreground)',\n border: '1px solid var(--vscode-notifications-border, var(--vscode-widget-border))',\n }}\n >\n <div className=\"flex items-center gap-3 px-3 py-2.5\">\n <span className=\"text-[13px] leading-snug flex-1 truncate\">{message}</span>\n <button\n onClick={onUndo}\n className=\"text-[13px] px-2 py-0.5 shrink-0\"\n style={{\n background: 'var(--vscode-button-background)',\n color: 'var(--vscode-button-foreground)',\n }}\n onMouseEnter={e => e.currentTarget.style.background = 'var(--vscode-button-hoverBackground)'}\n onMouseLeave={e => e.currentTarget.style.background = 'var(--vscode-button-background)'}\n >\n Undo\n </button>\n </div>\n <div className=\"h-[2px] w-full\" style={{ background: 'var(--vscode-widget-border)' }}>\n <div\n className=\"h-full transition-none\"\n style={{ width: `${progress}%`, background: 'var(--vscode-progressBar-background)' }}\n />\n </div>\n </div>\n )\n}\n","import { useState, useEffect } from 'react'\nimport { X, ChevronDown } from 'lucide-react'\nimport type { CardDisplaySettings, Priority, FeatureStatus } from '../../shared/types'\nimport { cn } from '../lib/utils'\n\nconst priorityConfig: { value: Priority; label: string; dot: string }[] = [\n { value: 'critical', label: 'Critical', dot: 'bg-red-500' },\n { value: 'high', label: 'High', dot: 'bg-orange-500' },\n { value: 'medium', label: 'Medium', dot: 'bg-yellow-500' },\n { value: 'low', label: 'Low', dot: 'bg-green-500' }\n]\n\nconst statusConfig: { value: FeatureStatus; label: string; dot: string }[] = [\n { value: 'backlog', label: 'Backlog', dot: 'bg-zinc-400' },\n { value: 'todo', label: 'To Do', dot: 'bg-blue-400' },\n { value: 'in-progress', label: 'In Progress', dot: 'bg-amber-400' },\n { value: 'review', label: 'Review', dot: 'bg-purple-400' },\n { value: 'done', label: 'Done', dot: 'bg-emerald-400' }\n]\n\ninterface SettingsPanelProps {\n isOpen: boolean\n settings: CardDisplaySettings\n onClose: () => void\n onSave: (settings: CardDisplaySettings) => void\n}\n\nexport function SettingsPanel({ isOpen, settings, onClose, onSave }: SettingsPanelProps) {\n if (!isOpen) return null\n return <SettingsPanelContent settings={settings} onClose={onClose} onSave={onSave} />\n}\n\nfunction ToggleSwitch({ checked, onChange }: { checked: boolean; onChange: (v: boolean) => void }) {\n return (\n <button\n type=\"button\"\n onClick={() => onChange(!checked)}\n className={cn(\n 'relative inline-flex h-5 w-9 items-center rounded-full transition-colors shrink-0'\n )}\n style={{\n background: checked\n ? 'var(--vscode-button-background)'\n : 'var(--vscode-badge-background, #6b7280)'\n }}\n >\n <span\n className=\"inline-block h-3.5 w-3.5 rounded-full bg-white transition-transform\"\n style={{\n transform: checked ? 'translateX(18px)' : 'translateX(3px)'\n }}\n />\n </button>\n )\n}\n\nfunction SettingsSection({ title, children }: { title: string; children: React.ReactNode }) {\n return (\n <div className=\"py-3\">\n <h3\n className=\"px-4 pb-2 text-xs font-semibold uppercase tracking-wider\"\n style={{ color: 'var(--vscode-descriptionForeground)' }}\n >\n {title}\n </h3>\n <div>{children}</div>\n </div>\n )\n}\n\nfunction SettingsToggle({ label, description, checked, onChange }: {\n label: string\n description?: string\n checked: boolean\n onChange: (v: boolean) => void\n}) {\n return (\n <div\n className=\"flex items-center justify-between gap-4 px-4 py-2 transition-colors cursor-pointer\"\n onClick={() => onChange(!checked)}\n onMouseEnter={e => e.currentTarget.style.background = 'var(--vscode-list-hoverBackground)'}\n onMouseLeave={e => e.currentTarget.style.background = 'transparent'}\n >\n <div className=\"flex-1 min-w-0\">\n <div className=\"text-sm\" style={{ color: 'var(--vscode-foreground)' }}>{label}</div>\n {description && (\n <div className=\"text-xs mt-0.5\" style={{ color: 'var(--vscode-descriptionForeground)' }}>{description}</div>\n )}\n </div>\n <ToggleSwitch checked={checked} onChange={onChange} />\n </div>\n )\n}\n\nfunction SettingsDropdown({ label, value, options, onChange }: {\n label: string\n value: string\n options: { value: string; label: string; dot?: string }[]\n onChange: (value: string) => void\n}) {\n const [isOpen, setIsOpen] = useState(false)\n const current = options.find(o => o.value === value)\n\n return (\n <div\n className=\"flex items-center justify-between gap-4 px-4 py-2 transition-colors\"\n onMouseEnter={e => e.currentTarget.style.background = 'var(--vscode-list-hoverBackground)'}\n onMouseLeave={e => e.currentTarget.style.background = 'transparent'}\n >\n <div className=\"text-sm\" style={{ color: 'var(--vscode-foreground)' }}>{label}</div>\n <div className=\"relative\">\n <button\n type=\"button\"\n onClick={() => setIsOpen(!isOpen)}\n className=\"flex items-center gap-2 px-2 py-1 text-xs font-medium rounded transition-colors\"\n style={{ color: 'var(--vscode-foreground)' }}\n >\n {current?.dot && <span className={cn('w-2 h-2 rounded-full shrink-0', current.dot)} />}\n <span>{current?.label}</span>\n <ChevronDown size={12} style={{ color: 'var(--vscode-descriptionForeground)' }} />\n </button>\n {isOpen && (\n <>\n <div className=\"fixed inset-0 z-10\" onClick={() => setIsOpen(false)} />\n <div\n className=\"absolute top-full right-0 mt-1 z-20 rounded-lg shadow-lg py-1 min-w-[140px]\"\n style={{\n background: 'var(--vscode-dropdown-background)',\n border: '1px solid var(--vscode-dropdown-border, var(--vscode-panel-border))',\n }}\n >\n {options.map(option => (\n <button\n key={option.value}\n type=\"button\"\n onClick={() => {\n onChange(option.value)\n setIsOpen(false)\n }}\n className=\"w-full flex items-center gap-2 px-3 py-1.5 text-xs transition-colors\"\n style={{\n color: 'var(--vscode-dropdown-foreground)',\n background: option.value === value ? 'var(--vscode-list-activeSelectionBackground)' : undefined,\n }}\n onMouseEnter={e => {\n if (option.value !== value) e.currentTarget.style.background = 'var(--vscode-list-hoverBackground)'\n }}\n onMouseLeave={e => {\n if (option.value !== value) e.currentTarget.style.background = 'transparent'\n }}\n >\n {option.dot && <span className={cn('w-2 h-2 rounded-full shrink-0', option.dot)} />}\n <span className=\"flex-1 text-left\">{option.label}</span>\n </button>\n ))}\n </div>\n </>\n )}\n </div>\n </div>\n )\n}\n\nfunction SettingsPanelContent({ settings, onClose, onSave }: Omit<SettingsPanelProps, 'isOpen'>) {\n const [local, setLocal] = useState<CardDisplaySettings>(settings)\n\n useEffect(() => { setLocal(settings) }, [settings])\n\n const update = (patch: Partial<CardDisplaySettings>) => {\n const next = { ...local, ...patch }\n setLocal(next)\n onSave(next)\n }\n\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.stopPropagation()\n onClose()\n }\n }\n document.addEventListener('keydown', handleKeyDown, true)\n return () => document.removeEventListener('keydown', handleKeyDown, true)\n }, [onClose])\n\n return (\n <div className=\"fixed inset-0 z-50 flex justify-end\">\n <div className=\"absolute inset-0 bg-black/30\" onClick={onClose} />\n <div\n className=\"relative h-full w-1/2 max-w-lg shadow-xl flex flex-col animate-in slide-in-from-right duration-200\"\n style={{\n background: 'var(--vscode-editor-background)',\n borderLeft: '1px solid var(--vscode-panel-border)',\n }}\n >\n {/* Header */}\n <div\n className=\"flex items-center justify-between px-4 py-3\"\n style={{ borderBottom: '1px solid var(--vscode-panel-border)' }}\n >\n <h2 className=\"font-medium\" style={{ color: 'var(--vscode-foreground)' }}>Settings</h2>\n <button\n onClick={onClose}\n className=\"p-1.5 rounded transition-colors\"\n style={{ color: 'var(--vscode-descriptionForeground)' }}\n onMouseEnter={e => e.currentTarget.style.background = 'var(--vscode-list-hoverBackground)'}\n onMouseLeave={e => e.currentTarget.style.background = 'transparent'}\n >\n <X size={18} />\n </button>\n </div>\n\n {/* Content */}\n <div className=\"flex-1 overflow-auto\">\n <SettingsSection title=\"Card Display\">\n <SettingsToggle\n label=\"Show Priority Badges\"\n description=\"Display priority indicators on feature cards\"\n checked={local.showPriorityBadges}\n onChange={v => update({ showPriorityBadges: v })}\n />\n <SettingsToggle\n label=\"Show Assignee\"\n description=\"Display assigned person on feature cards\"\n checked={local.showAssignee}\n onChange={v => update({ showAssignee: v })}\n />\n <SettingsToggle\n label=\"Show Due Date\"\n description=\"Display due dates on feature cards\"\n checked={local.showDueDate}\n onChange={v => update({ showDueDate: v })}\n />\n <SettingsToggle\n label=\"Show Labels\"\n description=\"Display labels on feature cards and in editors\"\n checked={local.showLabels}\n onChange={v => update({ showLabels: v })}\n />\n <SettingsToggle\n label=\"Show Filename\"\n description=\"Display the source markdown filename on cards\"\n checked={local.showFileName}\n onChange={v => update({ showFileName: v })}\n />\n <SettingsToggle\n label=\"Compact Mode\"\n description=\"Use compact card layout to show more features\"\n checked={local.compactMode}\n onChange={v => update({ compactMode: v })}\n />\n </SettingsSection>\n\n <div style={{ borderTop: '1px solid var(--vscode-panel-border)' }} />\n\n <SettingsSection title=\"Defaults\">\n <SettingsDropdown\n label=\"Default Priority\"\n value={local.defaultPriority}\n options={priorityConfig}\n onChange={v => update({ defaultPriority: v as Priority })}\n />\n <SettingsDropdown\n label=\"Default Status\"\n value={local.defaultStatus}\n options={statusConfig}\n onChange={v => update({ defaultStatus: v as FeatureStatus })}\n />\n </SettingsSection>\n </div>\n\n {/* Footer */}\n <div\n className=\"px-4 py-2\"\n style={{ borderTop: '1px solid var(--vscode-panel-border)' }}\n >\n <p className=\"text-xs\" style={{ color: 'var(--vscode-descriptionForeground)' }}>\n Settings are saved automatically and apply to all connected clients.\n </p>\n </div>\n </div>\n </div>\n )\n}\n","import { useState, useEffect, useRef } from 'react'\nimport { X } from 'lucide-react'\n\nconst PRESET_COLORS = [\n '#6b7280', '#3b82f6', '#f59e0b', '#8b5cf6', '#22c55e',\n '#ef4444', '#ec4899', '#14b8a6', '#f97316', '#06b6d4'\n]\n\ninterface ColumnDialogProps {\n isOpen: boolean\n onClose: () => void\n onSave: (data: { name: string; color: string }) => void\n initial?: { name: string; color: string }\n title: string\n}\n\nexport function ColumnDialog({ isOpen, onClose, onSave, initial, title }: ColumnDialogProps) {\n const [name, setName] = useState(initial?.name ?? '')\n const [color, setColor] = useState(initial?.color ?? '#3b82f6')\n const inputRef = useRef<HTMLInputElement>(null)\n\n useEffect(() => {\n if (isOpen) {\n setName(initial?.name ?? '')\n setColor(initial?.color ?? '#3b82f6')\n setTimeout(() => inputRef.current?.focus(), 50)\n }\n }, [isOpen, initial])\n\n useEffect(() => {\n if (!isOpen) return\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose()\n if (e.key === 'Enter' && (e.ctrlKey || e.metaKey) && name.trim()) {\n onSave({ name: name.trim(), color })\n }\n }\n window.addEventListener('keydown', handleKeyDown)\n return () => window.removeEventListener('keydown', handleKeyDown)\n }, [isOpen, onClose, onSave, name, color])\n\n if (!isOpen) return null\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center\">\n <div className=\"absolute inset-0 bg-black/50\" onClick={onClose} />\n <div className=\"relative bg-white dark:bg-zinc-800 rounded-lg shadow-xl w-full max-w-sm mx-4 border border-zinc-200 dark:border-zinc-600\">\n {/* Header */}\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-zinc-200 dark:border-zinc-700\">\n <h2 className=\"text-sm font-semibold text-zinc-900 dark:text-zinc-100\">{title}</h2>\n <button\n type=\"button\"\n onClick={onClose}\n className=\"p-1 rounded hover:bg-zinc-100 dark:hover:bg-zinc-700 transition-colors\"\n >\n <X size={16} className=\"text-zinc-500\" />\n </button>\n </div>\n\n {/* Body */}\n <div className=\"px-4 py-4 space-y-4\">\n <div>\n <label className=\"block text-xs font-medium text-zinc-600 dark:text-zinc-400 mb-1\">Name</label>\n <input\n ref={inputRef}\n type=\"text\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder=\"List name...\"\n className=\"w-full px-3 py-1.5 text-sm bg-white dark:bg-zinc-700 border border-zinc-200 dark:border-zinc-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 text-zinc-900 dark:text-zinc-100 placeholder-zinc-400\"\n />\n </div>\n\n <div>\n <label className=\"block text-xs font-medium text-zinc-600 dark:text-zinc-400 mb-1\">Color</label>\n <div className=\"flex items-center gap-2 flex-wrap\">\n {PRESET_COLORS.map((c) => (\n <button\n key={c}\n type=\"button\"\n onClick={() => setColor(c)}\n className={`w-6 h-6 rounded-full border-2 transition-all ${color === c ? 'border-zinc-900 dark:border-white scale-110' : 'border-transparent hover:scale-110'}`}\n style={{ backgroundColor: c }}\n title={c}\n />\n ))}\n <input\n type=\"color\"\n value={color}\n onChange={(e) => setColor(e.target.value)}\n className=\"w-6 h-6 rounded cursor-pointer border-0 p-0 bg-transparent\"\n title=\"Custom color\"\n />\n </div>\n </div>\n </div>\n\n {/* Footer */}\n <div className=\"flex items-center justify-end gap-2 px-4 py-3 border-t border-zinc-200 dark:border-zinc-700\">\n <button\n type=\"button\"\n onClick={onClose}\n className=\"px-3 py-1.5 text-sm rounded-md text-zinc-600 dark:text-zinc-400 hover:bg-zinc-100 dark:hover:bg-zinc-700 transition-colors\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n onClick={() => { if (name.trim()) onSave({ name: name.trim(), color }) }}\n disabled={!name.trim()}\n className=\"px-3 py-1.5 text-sm rounded-md bg-blue-600 text-white hover:bg-blue-700 disabled:opacity-50 disabled:cursor-not-allowed transition-colors\"\n >\n Save\n </button>\n </div>\n </div>\n </div>\n )\n}\n","import { useEffect, useState, useRef, useCallback } from 'react'\nimport { generateKeyBetween } from 'fractional-indexing'\nimport { useStore } from './store'\nimport { KanbanBoard } from './components/KanbanBoard'\nimport { CreateFeatureDialog } from './components/CreateFeatureDialog'\nimport { FeatureEditor } from './components/FeatureEditor'\nimport { Toolbar } from './components/Toolbar'\nimport { UndoToast } from './components/UndoToast'\nimport { SettingsPanel } from './components/SettingsPanel'\nimport { ColumnDialog } from './components/ColumnDialog'\nimport type { Feature, FeatureStatus, KanbanColumn, Priority, ExtensionMessage, FeatureFrontmatter, CardDisplaySettings } from '../shared/types'\nimport { getTitleFromContent } from '../shared/types'\n\n// Declare vscode API type\ndeclare const acquireVsCodeApi: () => {\n postMessage: (message: unknown) => void\n getState: () => unknown\n setState: (state: unknown) => void\n}\n\nconst vscode = acquireVsCodeApi()\n\nfunction App(): React.JSX.Element {\n\n const {\n columns,\n cardSettings,\n settingsOpen,\n setFeatures,\n setColumns,\n setIsDarkMode,\n setCardSettings,\n setSettingsOpen\n } = useStore()\n\n const [createFeatureOpen, setCreateFeatureOpen] = useState(false)\n const [createFeatureStatus, setCreateFeatureStatus] = useState<FeatureStatus>('backlog')\n\n // Column dialog state\n const [columnDialogOpen, setColumnDialogOpen] = useState(false)\n const [editingColumn, setEditingColumn] = useState<KanbanColumn | null>(null)\n\n // Editor state\n const contentVersionRef = useRef(0)\n const [editingFeature, setEditingFeature] = useState<{\n id: string\n content: string\n frontmatter: FeatureFrontmatter\n contentVersion: number\n } | null>(null)\n\n // Undo delete stack\n const [pendingDeletes, setPendingDeletes] = useState<{ id: string; feature: Feature }[]>([])\n const pendingDeletesRef = useRef(pendingDeletes)\n useEffect(() => {\n pendingDeletesRef.current = pendingDeletes\n }, [pendingDeletes])\n\n const nextIdRef = useRef(0)\n\n const handleDeleteFeatureFromCard = useCallback((featureId: string) => {\n const { features } = useStore.getState()\n const feature = features.find(f => f.id === featureId)\n if (!feature) return\n\n // Optimistically remove from local state\n setFeatures(features.filter(f => f.id !== featureId))\n\n // Close editor if this feature is open\n if (editingFeature?.id === featureId) {\n setEditingFeature(null)\n }\n\n // Push onto the undo stack\n const id = String(nextIdRef.current++)\n setPendingDeletes(prev => [...prev, { id, feature }])\n }, [editingFeature, setFeatures])\n\n const commitDelete = useCallback((entryId: string) => {\n const entry = pendingDeletesRef.current.find(d => d.id === entryId)\n if (!entry) return\n vscode.postMessage({ type: 'deleteFeature', featureId: entry.feature.id })\n setPendingDeletes(prev => prev.filter(d => d.id !== entryId))\n }, [])\n\n const handleUndoDelete = useCallback((entryId: string) => {\n const entry = pendingDeletesRef.current.find(d => d.id === entryId)\n if (!entry) return\n // Restore the feature\n const { features } = useStore.getState()\n setFeatures([...features, entry.feature])\n setPendingDeletes(prev => prev.filter(d => d.id !== entryId))\n }, [setFeatures])\n\n const handleUndoLatest = useCallback(() => {\n const stack = pendingDeletesRef.current\n if (stack.length === 0) return\n handleUndoDelete(stack[stack.length - 1].id)\n }, [handleUndoDelete])\n\n // Keyboard shortcuts\n useEffect(() => {\n let altPressedAlone = false\n let altDownTimer: ReturnType<typeof setTimeout> | null = null\n\n const handleKeyDown = (e: KeyboardEvent) => {\n // Track bare ALT press to forward to VS Code menu bar\n if (e.key === 'Alt') {\n altPressedAlone = true\n // If ALT is held >1s it's likely a modifier hold or window drag, not a menu toggle\n if (altDownTimer) clearTimeout(altDownTimer)\n altDownTimer = setTimeout(() => { altPressedAlone = false }, 1000)\n return\n }\n if (e.altKey) {\n altPressedAlone = false\n if (altDownTimer) { clearTimeout(altDownTimer); altDownTimer = null }\n }\n\n // Ctrl/Cmd+Z to undo delete (works even in inputs)\n if (e.key === 'z' && (e.ctrlKey || e.metaKey) && !e.shiftKey && pendingDeletesRef.current.length > 0) {\n e.preventDefault()\n handleUndoLatest()\n return\n }\n\n // Ignore if user is typing in an input or contentEditable (e.g. TipTap editor)\n if (\n e.target instanceof HTMLInputElement ||\n e.target instanceof HTMLTextAreaElement ||\n e.target instanceof HTMLSelectElement ||\n (e.target instanceof HTMLElement && e.target.isContentEditable)\n ) {\n return\n }\n\n switch (e.key) {\n case 'n':\n if (e.ctrlKey || e.metaKey || e.altKey || e.shiftKey) {\n return\n }\n e.preventDefault()\n setCreateFeatureStatus('backlog')\n setCreateFeatureOpen(true)\n break\n case 'Escape':\n if (createFeatureOpen) {\n setCreateFeatureOpen(false)\n }\n break\n }\n }\n\n const handleKeyUp = (e: KeyboardEvent) => {\n if (e.key === 'Alt' && altPressedAlone) {\n altPressedAlone = false\n if (altDownTimer) { clearTimeout(altDownTimer); altDownTimer = null }\n vscode.postMessage({ type: 'focusMenuBar' })\n }\n }\n\n // Cancel ALT-alone if mouse is clicked while ALT is held (e.g. ALT+click window drag on Linux)\n const handleMouseDown = () => { altPressedAlone = false }\n\n window.addEventListener('keydown', handleKeyDown)\n window.addEventListener('keyup', handleKeyUp)\n window.addEventListener('mousedown', handleMouseDown)\n return () => {\n window.removeEventListener('keydown', handleKeyDown)\n window.removeEventListener('keyup', handleKeyUp)\n window.removeEventListener('mousedown', handleMouseDown)\n if (altDownTimer) clearTimeout(altDownTimer)\n }\n }, [createFeatureOpen, handleUndoLatest])\n\n // Listen for VSCode theme changes\n useEffect(() => {\n const updateTheme = () => {\n const isDark = document.body.classList.contains('vscode-dark') ||\n document.body.classList.contains('vscode-high-contrast')\n setIsDarkMode(isDark)\n if (isDark) {\n document.documentElement.classList.add('dark')\n } else {\n document.documentElement.classList.remove('dark')\n }\n }\n\n updateTheme()\n\n // Watch for class changes on body\n const observer = new MutationObserver(updateTheme)\n observer.observe(document.body, { attributes: true, attributeFilter: ['class'] })\n\n return () => observer.disconnect()\n }, [setIsDarkMode])\n\n // Listen for messages from extension\n useEffect(() => {\n const handleMessage = (event: MessageEvent<ExtensionMessage>) => {\n const message = event.data\n if (!message || typeof message.type !== 'string') return\n\n switch (message.type) {\n case 'init':\n setFeatures(message.features)\n setColumns(message.columns)\n if (message.settings) {\n if (message.settings.markdownEditorMode && editingFeature) {\n setEditingFeature(null)\n }\n setCardSettings(message.settings)\n }\n break\n case 'featuresUpdated':\n setFeatures(message.features)\n break\n case 'triggerCreateDialog':\n setCreateFeatureStatus('backlog')\n setCreateFeatureOpen(true)\n break\n case 'showSettings':\n setCardSettings(message.settings)\n setSettingsOpen(true)\n break\n case 'featureContent': {\n const { cardSettings } = useStore.getState()\n if (cardSettings.markdownEditorMode) break\n contentVersionRef.current += 1\n setEditingFeature({\n id: message.featureId,\n content: message.content,\n frontmatter: message.frontmatter,\n contentVersion: contentVersionRef.current\n })\n break\n }\n }\n }\n\n window.addEventListener('message', handleMessage)\n\n // Tell extension we're ready\n vscode.postMessage({ type: 'ready' })\n\n return () => window.removeEventListener('message', handleMessage)\n }, [setFeatures, setColumns, setCardSettings, setSettingsOpen])\n\n const handleFeatureClick = (feature: Feature): void => {\n // Request feature content for inline editing\n vscode.postMessage({\n type: 'openFeature',\n featureId: feature.id\n })\n }\n\n const handleSaveFeature = (content: string, frontmatter: FeatureFrontmatter): void => {\n if (!editingFeature) return\n vscode.postMessage({\n type: 'saveFeatureContent',\n featureId: editingFeature.id,\n content,\n frontmatter\n })\n }\n\n const handleCloseEditor = (): void => {\n setEditingFeature(null)\n vscode.postMessage({ type: 'closeFeature' })\n }\n\n const handleDeleteFeature = (): void => {\n if (!editingFeature) return\n handleDeleteFeatureFromCard(editingFeature.id)\n }\n\n const handleOpenFile = (): void => {\n if (!editingFeature) return\n vscode.postMessage({ type: 'openFile', featureId: editingFeature.id })\n }\n\n const handleStartWithAI = (agent: 'claude' | 'codex' | 'opencode', permissionMode: 'default' | 'plan' | 'acceptEdits' | 'bypassPermissions'): void => {\n vscode.postMessage({ type: 'startWithAI', agent, permissionMode })\n }\n\n const handleAddAttachment = (): void => {\n if (!editingFeature) return\n vscode.postMessage({ type: 'addAttachment', featureId: editingFeature.id })\n }\n\n const handleOpenAttachment = (attachment: string): void => {\n if (!editingFeature) return\n vscode.postMessage({ type: 'openAttachment', featureId: editingFeature.id, attachment })\n }\n\n const handleRemoveAttachment = (attachment: string): void => {\n if (!editingFeature) return\n vscode.postMessage({ type: 'removeAttachment', featureId: editingFeature.id, attachment })\n }\n\n const handleSaveSettings = (settings: CardDisplaySettings): void => {\n vscode.postMessage({ type: 'saveSettings', settings })\n }\n\n const handleAddColumn = (): void => {\n setEditingColumn(null)\n setColumnDialogOpen(true)\n }\n\n const handleEditColumn = (columnId: string): void => {\n const col = columns.find(c => c.id === columnId)\n if (col) {\n setEditingColumn(col)\n setColumnDialogOpen(true)\n }\n }\n\n const handleRemoveColumn = (columnId: string): void => {\n const col = columns.find(c => c.id === columnId)\n if (!col) return\n const featuresInColumn = useStore.getState().features.filter(f => f.status === columnId)\n if (featuresInColumn.length > 0) {\n // Don't remove columns that still have features\n return\n }\n vscode.postMessage({ type: 'removeColumn', columnId })\n }\n\n const handleSaveColumn = (data: { name: string; color: string }): void => {\n if (editingColumn) {\n vscode.postMessage({ type: 'editColumn', columnId: editingColumn.id, updates: data })\n } else {\n vscode.postMessage({ type: 'addColumn', column: data })\n }\n setColumnDialogOpen(false)\n setEditingColumn(null)\n }\n\n const handleAddFeatureInColumn = (status: string): void => {\n setCreateFeatureStatus(status as FeatureStatus)\n setCreateFeatureOpen(true)\n }\n\n const handleCreateFeature = (data: {\n status: FeatureStatus\n priority: Priority\n content: string\n }): void => {\n vscode.postMessage({\n type: 'createFeature',\n data\n })\n }\n\n const handleMoveFeature = (\n featureId: string,\n newStatus: string,\n newOrder: number\n ): void => {\n // Optimistic update: compute fractional index locally before server confirms\n const { features } = useStore.getState()\n const feature = features.find(f => f.id === featureId)\n if (feature) {\n // Get sorted target column features (excluding the moved feature)\n const targetColumn = features\n .filter(f => f.status === newStatus && f.id !== featureId)\n .sort((a, b) => (a.order < b.order ? -1 : a.order > b.order ? 1 : 0))\n\n const clampedOrder = Math.max(0, Math.min(newOrder, targetColumn.length))\n const before = clampedOrder > 0 ? targetColumn[clampedOrder - 1].order : null\n const after = clampedOrder < targetColumn.length ? targetColumn[clampedOrder].order : null\n const newOrderKey = generateKeyBetween(before, after)\n\n const updated = features.map(f =>\n f.id === featureId\n ? { ...f, status: newStatus as FeatureStatus, order: newOrderKey }\n : f\n )\n setFeatures(updated)\n }\n\n // Tell extension to persist\n vscode.postMessage({\n type: 'moveFeature',\n featureId,\n newStatus,\n newOrder\n })\n }\n\n // Show loading if no columns yet\n if (columns.length === 0) {\n return (\n <div className=\"h-full w-full flex items-center justify-center bg-[var(--vscode-editor-background)]\">\n <div className=\"text-[var(--vscode-foreground)] opacity-60\">Loading...</div>\n </div>\n )\n }\n\n return (\n <div className=\"h-full w-full flex flex-col bg-[var(--vscode-editor-background)]\">\n <Toolbar onOpenSettings={() => vscode.postMessage({ type: 'openSettings' })} onAddColumn={handleAddColumn} />\n <div className=\"flex-1 flex overflow-hidden\">\n <div className={editingFeature ? 'w-1/2' : 'w-full'}>\n <KanbanBoard\n onFeatureClick={handleFeatureClick}\n onAddFeature={handleAddFeatureInColumn}\n onMoveFeature={handleMoveFeature}\n onEditColumn={handleEditColumn}\n onRemoveColumn={handleRemoveColumn}\n />\n </div>\n {editingFeature && (\n <div className=\"w-1/2\">\n <FeatureEditor\n featureId={editingFeature.id}\n content={editingFeature.content}\n frontmatter={editingFeature.frontmatter}\n contentVersion={editingFeature.contentVersion}\n onSave={handleSaveFeature}\n onClose={handleCloseEditor}\n onDelete={handleDeleteFeature}\n onOpenFile={handleOpenFile}\n onStartWithAI={handleStartWithAI}\n onAddAttachment={handleAddAttachment}\n onOpenAttachment={handleOpenAttachment}\n onRemoveAttachment={handleRemoveAttachment}\n />\n </div>\n )}\n </div>\n\n <CreateFeatureDialog\n isOpen={createFeatureOpen}\n onClose={() => setCreateFeatureOpen(false)}\n onCreate={handleCreateFeature}\n initialStatus={createFeatureStatus}\n />\n\n <SettingsPanel\n isOpen={settingsOpen}\n settings={cardSettings}\n onClose={() => setSettingsOpen(false)}\n onSave={handleSaveSettings}\n />\n\n <ColumnDialog\n isOpen={columnDialogOpen}\n onClose={() => { setColumnDialogOpen(false); setEditingColumn(null) }}\n onSave={handleSaveColumn}\n initial={editingColumn ? { name: editingColumn.name, color: editingColumn.color } : undefined}\n title={editingColumn ? 'Edit List' : 'Add List'}\n />\n\n {pendingDeletes.map((entry, i) => (\n <UndoToast\n key={entry.id}\n message={`Deleted \"${getTitleFromContent(entry.feature.content)}\"`}\n onUndo={() => handleUndoDelete(entry.id)}\n onExpire={() => commitDelete(entry.id)}\n duration={5000}\n index={i}\n />\n ))}\n </div>\n )\n}\n\nexport default App\n","import './standalone-shim'\nimport './assets/main.css'\nimport './assets/standalone-theme.css'\n\nimport { StrictMode } from 'react'\nimport { createRoot } from 'react-dom/client'\nimport App from './App'\n\ncreateRoot(document.getElementById('root')!).render(\n <StrictMode>\n <App />\n </StrictMode>\n)\n"],"names":["f","require$$0","k","l","m","n","p","q","c","a","g","b","d","e","h","reactJsxRuntime_production_min","jsxRuntimeModule","ws","pendingMessages","connected","msg","event","data","savedState","stored","handleAddAttachment","featureId","input","cleanup","files","file","buf","bytes","binary","i","err","handleOpenAttachment","attachment","url","message","json","state","darkMq","applyTheme","dark","createRoot","BASE_62_DIGITS","midpoint","digits","zero","digitA","digitB","midDigit","validateInteger","int","getIntegerLength","head","getIntegerPart","key","integerPartLength","validateOrderKey","incrementInteger","x","digs","carry","decrementInteger","borrow","generateKeyBetween","ib","fb","res","ia","fa","createStoreImpl","createState","listeners","setState","partial","replace","nextState","previousState","listener","getState","api","initialState","createStore","identity","arg","useStore","selector","slice","React","createImpl","useBoundStore","create","getInitialDarkMode","isToday","date","today","isThisWeek","startOfWeek","endOfWeek","isOverdue","set","get","features","columns","settings","open","query","priority","assignee","label","filter","layout","feature","id","updates","status","searchQuery","priorityFilter","assigneeFilter","labelFilter","dueDateFilter","dueDate","assignees","labels","M","T","H","u","_","t","r","s","Re","Te","Oe","we","I","ye","N","re","se","Pe","Q","Se","F","$e","_e","j","Le","ie","Me","U","te","ze","Ce","Ae","Ie","oe","Ee","v","K","ae","Be","le","De","qe","ue","ve","Ge","He","pe","Ze","Ne","ce","Qe","Fe","je","Ue","Ke","We","Xe","Je","Ve","Ye","D","et","he","ke","tt","ne","W","nt","Z","rt","E","z","st","de","O","X","J","o","_a","C","ge","fe","me","it","w","__publicField","R","S","V","Y","ee","xe","be","G","A","_b","_c","_d","y","$","P","B","L","getTitleFromContent","content","match","priorityColors","priorityLabels","getDescriptionFromContent","lines","headingIndex","renderDescriptionHtml","text","marked","FeatureCard","onClick","isDragging","cardSettings","title","description","fileName","formatDueDate","dateStr","now","diff","days","dueInfo","formatCompletedAt","completed","diffMs","diffMins","diffHours","diffDays","completedText","jsxs","jsx","FileText","Paperclip","Calendar","Check","KanbanColumn","column","onFeatureClick","onAddFeature","onEditColumn","onRemoveColumn","onDragStart","onDragOver","onDragOverCard","onDrop","onDragEnd","draggedFeature","dropTarget","isVertical","isDropTarget","menuOpen","setMenuOpen","useState","menuRef","useRef","useEffect","handleClickOutside","Plus","MoreVertical","Pencil","Trash2","index","KanbanBoard","onMoveFeature","getFilteredFeaturesByStatus","getFeaturesByStatus","setDraggedFeature","setDropTarget","handleDragStart","useCallback","handleDragOver","handleDragOverCard","columnId","cardIndex","rect","midY","insertIndex","prev","handleDrop","filteredFeatures","filteredInsertIndex","currentIndex","allFeatures","filteredWithoutDragged","unfilteredInsertIndex","lastVisible","anchorFeature","handleDragEnd","clsx","CLASS_PART_SEPARATOR","createClassGroupUtils","config","classMap","createClassMap","conflictingClassGroups","conflictingClassGroupModifiers","className","classParts","getGroupRecursive","getGroupIdForArbitraryProperty","classGroupId","hasPostfixModifier","conflicts","classPartObject","currentClassPart","nextClassPartObject","classGroupFromNextClassPart","classRest","validator","arbitraryPropertyRegex","arbitraryPropertyClassName","property","theme","prefix","getPrefixedClassGroupEntries","classGroup","processClassesRecursively","classDefinition","classPartObjectToEdit","getPart","isThemeGetter","path","currentClassPartObject","pathPart","func","classGroupEntries","prefixedClassGroup","value","createLruCache","maxCacheSize","cacheSize","cache","previousCache","update","IMPORTANT_MODIFIER","createParseClassName","separator","experimentalParseClassName","isSeparatorSingleCharacter","firstSeparatorCharacter","separatorLength","parseClassName","modifiers","bracketDepth","modifierStart","postfixModifierPosition","currentCharacter","baseClassNameWithImportantModifier","hasImportantModifier","baseClassName","maybePostfixModifierPosition","sortModifiers","sortedModifiers","unsortedModifiers","modifier","createConfigUtils","SPLIT_CLASSES_REGEX","mergeClassList","classList","configUtils","getClassGroupId","getConflictingClassGroupIds","classGroupsInConflict","classNames","result","originalClassName","variantModifier","modifierId","classId","conflictGroups","group","twJoin","argument","resolvedValue","string","toValue","mix","createTailwindMerge","createConfigFirst","createConfigRest","cacheGet","cacheSet","functionToCall","initTailwindMerge","previousConfig","createConfigCurrent","tailwindMerge","cachedResult","fromTheme","themeGetter","arbitraryValueRegex","fractionRegex","stringLengths","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isLength","isNumber","isArbitraryLength","getIsArbitraryValue","isLengthOnly","isArbitraryNumber","isInteger","isPercent","isArbitraryValue","isTshirtSize","sizeLabels","isArbitrarySize","isNever","isArbitraryPosition","imageLabels","isArbitraryImage","isImage","isArbitraryShadow","isShadow","isAny","testValue","getDefaultConfig","colors","spacing","blur","brightness","borderColor","borderRadius","borderSpacing","borderWidth","contrast","grayscale","hueRotate","invert","gap","gradientColorStops","gradientColorStopPositions","inset","margin","opacity","padding","saturate","scale","sepia","skew","space","translate","getOverscroll","getOverflow","getSpacingWithAutoAndArbitrary","getSpacingWithArbitrary","getLengthWithEmptyAndArbitrary","getNumberWithAutoAndArbitrary","getPositions","getLineStyles","getBlendModes","getAlign","getZeroAndEmpty","getBreaks","getNumberAndArbitrary","twMerge","cn","inputs","DAYS","MONTHS","DatePicker","onChange","placeholder","isOpen","setIsOpen","selected","viewYear","setViewYear","viewMonth","setViewMonth","daysInMonth","firstDay","cells","prevMonth","nextMonth","selectDay","day","isSelected","formatDisplay","Fragment","ChevronLeft","ChevronRight","wrapSelection","textarea","action","start","end","before","after","replacement","cursorOffset","lineStart","linePrefix","newValue","newPos","ToolbarButton","icon","MarkdownEditor","autoFocus","activeTab","setActiveTab","textareaRef","previewHtml","useMemo","handleFormat","handleKeyDown","Heading","Bold","Italic","Quote","Code","Link","List","ListOrdered","ListChecks","priorityConfig","statusConfig","Dropdown","options","current","ChevronDown","option","AssigneeInput","isFocused","setIsFocused","inputRef","containerRef","existingAssignees","suggestions","showSuggestions","initials","LabelInput","newLabel","setNewLabel","existingLabels","labelSet","available","addLabel","PropertyRow","children","CreateFeatureDialog","props","CreateFeatureDialogContent","onClose","onCreate","initialStatus","setTitle","setStatus","setPriority","setAssignee","setDueDate","setLabels","setDescription","timer","handleSubmit","desc","heading","handleSaveAndClose","handleCancel","CircleDot","Signal","User","Tag","target","statusLabels","priorities","statuses","priorityDots","statusDots","aiAgentTabs","agentButtonColors","aiModesByAgent","AIDropdown","onSelect","selectedTab","setSelectedTab","modes","buttonColors","Wand2","tab","mode","LabelEditor","removeLabel","FeatureEditor","frontmatter","contentVersion","onSave","onDelete","onOpenFile","onStartWithAI","onAddAttachment","onOpenAttachment","onRemoveAttachment","currentFrontmatter","setCurrentFrontmatter","currentContent","setCurrentContent","confirmingDelete","setConfirmingDelete","debounceRef","currentFrontmatterRef","currentContentRef","save","handleContentChange","handleFrontmatterUpdate","next","dueDateOptions","selectClassName","Toolbar","onOpenSettings","onAddColumn","setSearchQuery","setPriorityFilter","setAssigneeFilter","setLabelFilter","setDueDateFilter","clearAllFilters","getUniqueAssignees","getUniqueLabels","hasActiveFilters","toggleLayout","filtersActive","Search","Rows","Columns","Settings","UndoToast","onUndo","onExpire","duration","progress","setProgress","step","SettingsPanel","SettingsPanelContent","ToggleSwitch","checked","SettingsSection","SettingsToggle","SettingsDropdown","local","setLocal","patch","PRESET_COLORS","ColumnDialog","initial","name","setName","color","setColor","vscode","App","settingsOpen","setFeatures","setColumns","setIsDarkMode","setCardSettings","setSettingsOpen","createFeatureOpen","setCreateFeatureOpen","createFeatureStatus","setCreateFeatureStatus","columnDialogOpen","setColumnDialogOpen","editingColumn","setEditingColumn","contentVersionRef","editingFeature","setEditingFeature","pendingDeletes","setPendingDeletes","pendingDeletesRef","nextIdRef","handleDeleteFeatureFromCard","commitDelete","entryId","entry","handleUndoDelete","handleUndoLatest","stack","altPressedAlone","altDownTimer","handleKeyUp","handleMouseDown","updateTheme","isDark","observer","handleMessage","handleFeatureClick","handleSaveFeature","handleCloseEditor","handleDeleteFeature","handleOpenFile","handleStartWithAI","agent","permissionMode","handleRemoveAttachment","handleSaveSettings","handleAddColumn","handleEditColumn","col","handleRemoveColumn","handleSaveColumn","handleAddFeatureInColumn","handleCreateFeature","handleMoveFeature","newStatus","newOrder","targetColumn","clampedOrder","newOrderKey","updated","StrictMode"],"mappings":"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","x_google_ignoreList":[0,1,3,4,5,6,8,13,14]}