kanban-lite 1.0.21 → 1.0.23

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 (44) hide show
  1. package/{CLAUDE.md → AGENTS.md} +13 -0
  2. package/CHANGELOG.md +68 -0
  3. package/README.md +10 -0
  4. package/dist/cli.js +168 -102
  5. package/dist/extension.js +178 -104
  6. package/dist/mcp-server.js +145 -95
  7. package/dist/sdk/index.cjs +126 -93
  8. package/dist/sdk/index.mjs +126 -93
  9. package/dist/sdk/sdk/KanbanSDK.d.ts +39 -7
  10. package/dist/sdk/shared/config.d.ts +4 -0
  11. package/dist/sdk/shared/types.d.ts +4 -0
  12. package/dist/standalone-webview/index.js +58 -58
  13. package/dist/standalone-webview/index.js.map +1 -1
  14. package/dist/standalone-webview/style.css +1 -1
  15. package/dist/standalone.js +606 -364
  16. package/dist/webview/index.js +57 -57
  17. package/dist/webview/index.js.map +1 -1
  18. package/dist/webview/style.css +1 -1
  19. package/docs/plans/2026-02-26-settings-tabs-design.md +40 -0
  20. package/docs/plans/2026-02-26-settings-tabs.md +166 -0
  21. package/docs/plans/2026-02-27-zoom-settings-design.md +82 -0
  22. package/docs/plans/2026-02-27-zoom-settings.md +395 -0
  23. package/docs/sdk.md +3 -6
  24. package/package.json +1 -1
  25. package/src/cli/index.ts +12 -2
  26. package/src/extension/KanbanPanel.ts +25 -5
  27. package/src/mcp-server/index.ts +20 -2
  28. package/src/sdk/KanbanSDK.ts +64 -7
  29. package/src/sdk/__tests__/KanbanSDK.test.ts +17 -1
  30. package/src/sdk/__tests__/metadata.test.ts +3 -1
  31. package/src/sdk/__tests__/multi-board.test.ts +2 -0
  32. package/src/sdk/parser.ts +50 -83
  33. package/src/shared/config.ts +14 -2
  34. package/src/shared/types.ts +4 -0
  35. package/src/standalone/__tests__/server.integration.test.ts +2 -2
  36. package/src/standalone/index.ts +7 -4
  37. package/src/standalone/server.ts +31 -6
  38. package/src/webview/App.tsx +42 -3
  39. package/src/webview/assets/main.css +31 -2
  40. package/src/webview/components/KanbanBoard.tsx +35 -3
  41. package/src/webview/components/KanbanColumn.tsx +40 -4
  42. package/src/webview/components/SettingsPanel.tsx +179 -77
  43. package/src/webview/components/Toolbar.tsx +127 -32
  44. package/src/webview/store/index.ts +26 -28
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../node_modules/react/cjs/react-jsx-runtime.production.min.js","../../node_modules/react/jsx-runtime.js","../../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","../../node_modules/clsx/dist/clsx.mjs","../../node_modules/tailwind-merge/dist/bundle-mjs.mjs","../../src/webview/lib/utils.ts","../../src/webview/components/FeatureCard.tsx","../../src/webview/components/KanbanColumn.tsx","../../src/webview/components/KanbanBoard.tsx","../../src/webview/components/DatePicker.tsx","../../src/webview/lib/markdownTools.tsx","../../src/webview/components/CommentEditor.tsx","../../src/webview/components/CommentsSection.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/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","'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, KanbanColumn, Priority, CardDisplaySettings, BoardInfo, WorkspaceInfo, LabelDefinition } from '../../shared/types'\n\nexport type DueDateFilter = 'all' | 'overdue' | 'today' | 'this-week' | 'no-date'\nexport type LayoutMode = 'horizontal' | 'vertical'\nexport type SortOrder = 'order' | 'created:asc' | 'created:desc' | 'modified:asc' | 'modified:desc'\n\ninterface KanbanState {\n features: Feature[]\n columns: KanbanColumn[]\n boards: BoardInfo[]\n currentBoard: string\n isDarkMode: boolean\n searchQuery: string\n priorityFilter: Priority | 'all'\n assigneeFilter: string | 'all'\n labelFilter: string | 'all'\n dueDateFilter: DueDateFilter\n sortOrder: SortOrder\n layout: LayoutMode\n workspace: WorkspaceInfo | null\n cardSettings: CardDisplaySettings\n settingsOpen: boolean\n labelDefs: Record<string, LabelDefinition>\n\n setWorkspace: (workspace: WorkspaceInfo) => void\n setLabelDefs: (labels: Record<string, LabelDefinition>) => void\n setFeatures: (features: Feature[]) => void\n setColumns: (columns: KanbanColumn[]) => void\n setBoards: (boards: BoardInfo[]) => void\n setCurrentBoard: (boardId: string) => 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 setSortOrder: (sort: SortOrder) => 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: string) => Feature[]\n getFilteredFeaturesByStatus: (status: string) => 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\n/**\n * Parses `meta.path: value` tokens from the search query string.\n * Returns the extracted meta filters and the remaining plain-text query.\n *\n * @example\n * parseMetaTokens('meta.sprint: Q1 bug fix')\n * // => { metaFilter: { sprint: 'Q1' }, plainText: 'bug fix' }\n */\nfunction parseMetaTokens(query: string): { metaFilter: Record<string, string>; plainText: string } {\n const metaFilter: Record<string, string> = {}\n const plainText = query.replace(/meta\\.([a-zA-Z0-9_.]+):\\s*(\\S+)/g, (_full, key, value) => {\n metaFilter[key] = value\n return ''\n }).trim()\n return { metaFilter, plainText }\n}\n\nexport const useStore = create<KanbanState>((set, get) => ({\n features: [],\n columns: [],\n boards: [],\n currentBoard: 'default',\n isDarkMode: getInitialDarkMode(),\n searchQuery: '',\n priorityFilter: 'all',\n assigneeFilter: 'all',\n labelFilter: 'all',\n dueDateFilter: 'all',\n sortOrder: 'order',\n layout: 'horizontal',\n workspace: null,\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 showDeletedColumn: false,\n defaultPriority: 'medium',\n defaultStatus: 'backlog'\n },\n settingsOpen: false,\n labelDefs: {},\n\n setWorkspace: (workspace) => set({ workspace }),\n setLabelDefs: (labels) => set({ labelDefs: labels }),\n setFeatures: (features) => set({ features }),\n setColumns: (columns) => set({ columns }),\n setBoards: (boards) => set({ boards }),\n setCurrentBoard: (boardId) => set({ currentBoard: boardId }),\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 setSortOrder: (sort) => set({ sortOrder: sort }),\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 sortOrder: 'order'\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 sortOrder\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') {\n if (labelFilter.startsWith('group:')) {\n const group = labelFilter.slice(6)\n const { labelDefs } = get()\n const groupLabels = Object.entries(labelDefs)\n .filter(([, def]) => def.group === group)\n .map(([name]) => name)\n if (!f.labels.some(l => groupLabels.includes(l))) return false\n } else {\n if (!f.labels.includes(labelFilter)) return false\n }\n }\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 - supports meta.field: value tokens and plain text\n if (searchQuery) {\n const { metaFilter, plainText } = parseMetaTokens(searchQuery)\n\n if (Object.keys(metaFilter).length > 0) {\n const passes = Object.entries(metaFilter).every(([path, needle]) => {\n if (!f.metadata) return false\n const val = path.split('.').reduce((curr: unknown, k) =>\n curr != null && typeof curr === 'object' ? (curr as Record<string, unknown>)[k] : undefined, f.metadata)\n return val != null && String(val).toLowerCase().includes(needle.toLowerCase())\n })\n if (!passes) return false\n }\n\n if (plainText) {\n const q = plainText.toLowerCase()\n const textMatch = (\n f.content.toLowerCase().includes(q) ||\n f.id.toLowerCase().includes(q) ||\n f.assignee?.toLowerCase().includes(q) ||\n f.labels.some((l) => l.toLowerCase().includes(q))\n )\n if (!textMatch) return false\n }\n }\n\n return true\n })\n .sort((a, b) => {\n if (sortOrder === 'created:asc') return a.created.localeCompare(b.created)\n if (sortOrder === 'created:desc') return b.created.localeCompare(a.created)\n if (sortOrder === 'modified:asc') return a.modified.localeCompare(b.modified)\n if (sortOrder === 'modified:desc') return b.modified.localeCompare(a.modified)\n return a.order < b.order ? -1 : a.order > b.order ? 1 : 0\n })\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 sortOrder\n } = get()\n return (\n searchQuery !== '' ||\n priorityFilter !== 'all' ||\n assigneeFilter !== 'all' ||\n labelFilter !== 'all' ||\n dueDateFilter !== 'all' ||\n sortOrder !== 'order'\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\n/** Current card frontmatter schema version. Increment when the format changes. */\nexport const CARD_FORMAT_VERSION = 1\n\n/**\n * Priority level for a kanban card.\n * Cards are ranked from most urgent (`'critical'`) to least urgent (`'low'`).\n *\n * @example\n * const p: Priority = 'high'\n */\nexport type Priority = 'critical' | 'high' | 'medium' | 'low'\n\n/**\n * Sort option for {@link KanbanSDK.listCards}.\n * - `'created:asc'` — oldest cards first\n * - `'created:desc'` — newest cards first\n * - `'modified:asc'` — least recently modified first\n * - `'modified:desc'` — most recently modified first\n *\n * When omitted, cards are sorted by their fractional `order` index (board order).\n */\nexport type CardSortOption = 'created:asc' | 'created:desc' | 'modified:asc' | 'modified:desc'\n\n/**\n * String alias representing a column or status identifier.\n * Corresponds to the `id` field of a {@link KanbanColumn} (e.g. `'backlog'`, `'in-progress'`).\n */\nexport type FeatureStatus = string\n\n/**\n * A comment attached to a kanban card.\n */\nexport interface Comment {\n /** Unique identifier for the comment. */\n id: string\n /** Display name of the comment author. */\n author: string\n /** ISO 8601 timestamp of when the comment was created. */\n created: string\n /** Markdown body of the comment. */\n content: string\n}\n\n/**\n * A kanban card with all associated metadata.\n *\n * Cards are persisted as markdown files with YAML frontmatter inside the\n * `.kanban/{status}/` directory structure.\n */\nexport interface Feature {\n /** Card frontmatter schema version. 0 = legacy (pre-versioning). */\n version: number\n /** Unique identifier for the card (e.g. `'42-build-dashboard'`). */\n id: string\n /** Board this card belongs to. Omitted when only one board exists. */\n boardId?: string\n /** Current column/status of the card. */\n status: FeatureStatus\n /** Priority level of the card. */\n priority: Priority\n /** Assignee name, or `null` if unassigned. */\n assignee: string | null\n /** ISO 8601 due date string, or `null` if no due date is set. */\n dueDate: string | null\n /** ISO 8601 timestamp of when the card was created. */\n created: string\n /** ISO 8601 timestamp of the last modification. */\n modified: string\n /** ISO 8601 timestamp of when the card was moved to done, or `null`. */\n completedAt: string | null\n /** Tags/labels attached to the card. */\n labels: string[]\n /** File paths of attachments associated with the card. */\n attachments: string[]\n /** Discussion comments on the card. */\n comments: Comment[]\n /** Fractional index (base-62) controlling sort order within a column. */\n order: string\n /** Markdown body content of the card. */\n content: string\n /** Arbitrary user-defined metadata stored as YAML in the frontmatter. */\n metadata?: Record<string, any>\n /** Named action strings that can be triggered via the action webhook. */\n actions?: string[]\n /** Absolute path to the card's markdown file on disk. */\n filePath: string\n}\n\n/**\n * Summary information for a kanban board.\n */\nexport interface BoardInfo {\n /** Unique identifier for the board. */\n id: string\n /** Human-readable board name. */\n name: string\n /** Optional description of the board's purpose. */\n description?: string\n columns?: KanbanColumn[]\n}\n\n/**\n * Extracts a title from markdown content by finding the first `# heading`.\n * Falls back to the first non-empty line if no heading is found,\n * or `'Untitled'` if the content is empty.\n *\n * @param content - Raw markdown string to extract the title from.\n * @returns The extracted title string.\n *\n * @example\n * getTitleFromContent('# My Card\\nSome body text')\n * // => 'My Card'\n *\n * @example\n * getTitleFromContent('Just a line of text')\n * // => 'Just a line of text'\n */\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/**\n * Creates a filename-safe slug from a title string.\n *\n * The slug is lowercased, stripped of special characters, limited to 50\n * characters, and falls back to `'feature'` if the result would be empty.\n *\n * @param title - The human-readable title to slugify.\n * @returns A URL/filename-safe slug string.\n *\n * @example\n * generateSlug('Build Dashboard UI')\n * // => 'build-dashboard-ui'\n *\n * @example\n * generateSlug('Hello, World!!!')\n * // => 'hello-world'\n */\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/**\n * Generates a card filename from an incremental numeric ID and a title.\n *\n * The filename is composed of the ID prefix followed by a slugified title\n * (e.g. `'42-build-dashboard'`).\n *\n * @param id - The numeric card ID.\n * @param title - The human-readable card title.\n * @returns A filename string in the format `'{id}-{slug}'`.\n *\n * @example\n * generateFeatureFilename(42, 'Build Dashboard')\n * // => '42-build-dashboard'\n */\nexport function generateFeatureFilename(id: number, title: string): string {\n const slug = generateSlug(title)\n return `${id}-${slug}`\n}\n\n/**\n * Extracts the numeric ID prefix from a filename or card ID string.\n *\n * Looks for a leading sequence of digits optionally followed by a hyphen\n * (e.g. `'42-build-dashboard'` yields `42`).\n *\n * @param filenameOrId - A filename or card ID string such as `'42-build-dashboard'`.\n * @returns The parsed numeric ID, or `null` if no numeric prefix is found.\n *\n * @example\n * extractNumericId('42-build-dashboard')\n * // => 42\n *\n * @example\n * extractNumericId('no-number')\n * // => null\n */\nexport function extractNumericId(filenameOrId: string): number | null {\n const match = filenameOrId.match(/^(\\d+)(?:-|$)/)\n return match ? parseInt(match[1], 10) : null\n}\n\n/**\n * Definition of a kanban board column.\n */\nexport interface KanbanColumn {\n /** Unique identifier used as the card status value (e.g. `'in-progress'`). */\n id: string\n /** Human-readable column name displayed in the UI (e.g. `'In Progress'`). */\n name: string\n /** CSS color string for the column header (e.g. `'#f59e0b'`). */\n color: string\n}\n\n/**\n * The default set of five kanban columns provided when no custom columns\n * are configured: Backlog, To Do, In Progress, Review, and Done.\n *\n * @example\n * // Use as the initial column configuration\n * const config = { columns: [...DEFAULT_COLUMNS] }\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 const DELETED_STATUS_ID = 'deleted'\nexport const DELETED_COLUMN: KanbanColumn = { id: DELETED_STATUS_ID, name: 'Deleted', color: '#ef4444' }\n\n/**\n * UI display preferences controlling which card fields are visible and\n * how the board renders cards.\n */\nexport interface CardDisplaySettings {\n /** Whether to show colored priority badges on cards. */\n showPriorityBadges: boolean\n /** Whether to display the assignee on cards. */\n showAssignee: boolean\n /** Whether to display the due date on cards. */\n showDueDate: boolean\n /** Whether to display labels/tags on cards. */\n showLabels: boolean\n /** Whether to show the \"Build with AI\" action on cards. */\n showBuildWithAI: boolean\n /** Whether to display the source filename on cards. */\n showFileName: boolean\n /** Whether to use a compact card layout with reduced spacing. */\n compactMode: boolean\n /** Whether to use the markdown editor when editing card content. */\n markdownEditorMode: boolean\n /** Whether to display the hidden Deleted column on the board. */\n showDeletedColumn: boolean\n /** The default priority assigned to newly created cards. */\n defaultPriority: Priority\n /** The default column/status assigned to newly created cards. */\n defaultStatus: string\n}\n\nexport interface LabelDefinition {\n color: string\n group?: string\n}\n\nexport const LABEL_PRESET_COLORS: { name: string; hex: string }[] = [\n { name: 'red', hex: '#e11d48' },\n { name: 'orange', hex: '#ea580c' },\n { name: 'amber', hex: '#d97706' },\n { name: 'yellow', hex: '#ca8a04' },\n { name: 'lime', hex: '#65a30d' },\n { name: 'green', hex: '#16a34a' },\n { name: 'teal', hex: '#0d9488' },\n { name: 'cyan', hex: '#0891b2' },\n { name: 'blue', hex: '#2563eb' },\n { name: 'indigo', hex: '#4f46e5' },\n { name: 'violet', hex: '#7c3aed' },\n { name: 'pink', hex: '#db2777' },\n]\n\n/**\n * YAML frontmatter fields stored at the top of each card's markdown file.\n *\n * These fields are parsed from and serialized back to the frontmatter block\n * when reading/writing card files.\n */\nexport interface FeatureFrontmatter {\n /** Card frontmatter schema version. 0 = legacy (pre-versioning). */\n version: number\n /** Unique card identifier. */\n id: string\n /** Current column/status of the card. */\n status: string\n /** Priority level of the card. */\n priority: Priority\n /** Assignee name, or `null` if unassigned. */\n assignee: string | null\n /** ISO 8601 due date, or `null` if none. */\n dueDate: string | null\n /** ISO 8601 creation timestamp. */\n created: string\n /** ISO 8601 last-modified timestamp. */\n modified: string\n /** ISO 8601 completion timestamp, or `null` if not completed. */\n completedAt: string | null\n /** Tags/labels attached to the card. */\n labels: string[]\n /** File paths of attachments. */\n attachments: string[]\n /** Fractional index (base-62) for ordering within a column. */\n order: string\n /** Arbitrary user-defined metadata stored as YAML in the frontmatter. */\n metadata?: Record<string, any>\n /** Named action strings that can be triggered via the action webhook. */\n actions?: string[]\n}\n\n/**\n * Read-only workspace information displayed in the settings panel.\n */\nexport interface WorkspaceInfo {\n projectPath: string\n featuresDirectory: string\n port: number\n configVersion: number\n}\n\n// Messages between extension and webview\nexport type ExtensionMessage =\n | { type: 'init'; features: Feature[]; columns: KanbanColumn[]; settings: CardDisplaySettings; boards?: BoardInfo[]; currentBoard?: string; workspace?: WorkspaceInfo; labels?: Record<string, LabelDefinition> }\n | { type: 'featuresUpdated'; features: Feature[] }\n | { type: 'triggerCreateDialog' }\n | { type: 'featureContent'; featureId: string; content: string; frontmatter: FeatureFrontmatter; comments: Comment[] }\n | { type: 'showSettings'; settings: CardDisplaySettings }\n | { type: 'labelsUpdated'; labels: Record<string, LabelDefinition> }\n | { type: 'actionResult'; callbackKey: string; error?: string }\n\nexport type WebviewMessage =\n | { type: 'ready' }\n | { type: 'createFeature'; data: { status: string; priority: Priority; content: string; assignee: string | null; dueDate: string | null; labels: string[]; metadata?: Record<string, any>; actions?: 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 | { type: 'addComment'; featureId: string; author: string; content: string }\n | { type: 'updateComment'; featureId: string; commentId: string; content: string }\n | { type: 'deleteComment'; featureId: string; commentId: string }\n | { type: 'switchBoard'; boardId: string }\n | { type: 'createBoard'; name: string }\n | { type: 'permanentDeleteFeature'; featureId: string }\n | { type: 'restoreFeature'; featureId: string }\n | { type: 'purgeDeletedCards' }\n | { type: 'transferCard'; featureId: string; toBoard: string; targetStatus: string }\n | { type: 'setLabel'; name: string; definition: LabelDefinition }\n | { type: 'renameLabel'; oldName: string; newName: string }\n | { type: 'deleteLabel'; name: string }\n | { type: 'triggerAction'; featureId: string; action: string; callbackKey: string }\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\n/**\n * Format an ISO date string as compact relative time.\n * Examples: \"30s\", \"1m40s\", \"1h15m\", \"1d10h\", \"3w2d\", \"2mo\", \"1y3mo\"\n */\nexport function formatRelativeCompact(isoDate: string | null | undefined): string {\n if (!isoDate) return ''\n const now = Date.now()\n const then = new Date(isoDate).getTime()\n if (Number.isNaN(then)) return ''\n let diff = Math.max(0, Math.floor((now - then) / 1000))\n\n const years = Math.floor(diff / (365 * 24 * 3600))\n diff %= 365 * 24 * 3600\n const months = Math.floor(diff / (30 * 24 * 3600))\n diff %= 30 * 24 * 3600\n const weeks = Math.floor(diff / (7 * 24 * 3600))\n diff %= 7 * 24 * 3600\n const days = Math.floor(diff / (24 * 3600))\n diff %= 24 * 3600\n const hours = Math.floor(diff / 3600)\n diff %= 3600\n const minutes = Math.floor(diff / 60)\n const seconds = diff % 60\n\n if (years > 0) return months > 0 ? `${years}y${months}mo` : `${years}y`\n if (months > 0) return `${months}mo`\n if (weeks > 0) return days > 0 ? `${weeks}w${days}d` : `${weeks}w`\n if (days > 0) return hours > 0 ? `${days}d${hours}h` : `${days}d`\n if (hours > 0) return minutes > 0 ? `${hours}h${minutes}m` : `${hours}h`\n if (minutes > 0) return seconds > 0 ? `${minutes}m${seconds}s` : `${minutes}m`\n return `${seconds}s`\n}\n\n/**\n * Format an ISO date string as \"YYYY-MM-DD HH:mm:ss\".\n */\nexport function formatAbsoluteDate(isoDate: string | null | undefined): string {\n if (!isoDate) return ''\n const d = new Date(isoDate)\n if (Number.isNaN(d.getTime())) return ''\n const pad = (n: number) => String(n).padStart(2, '0')\n return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`\n}\n\n/**\n * Format an ISO date string as verbose relative time.\n * Examples: \"1 hour 15 mins ago\", \"3 days 10 hours ago\", \"just now\"\n */\nexport function formatVerboseRelative(isoDate: string | null | undefined): string {\n if (!isoDate) return ''\n const now = Date.now()\n const then = new Date(isoDate).getTime()\n if (Number.isNaN(then)) return ''\n let diff = Math.max(0, Math.floor((now - then) / 1000))\n\n const years = Math.floor(diff / (365 * 24 * 3600))\n diff %= 365 * 24 * 3600\n const months = Math.floor(diff / (30 * 24 * 3600))\n diff %= 30 * 24 * 3600\n const days = Math.floor(diff / (24 * 3600))\n diff %= 24 * 3600\n const hours = Math.floor(diff / 3600)\n diff %= 3600\n const minutes = Math.floor(diff / 60)\n const seconds = diff % 60\n\n const parts: string[] = []\n if (years > 0) parts.push(`${years} ${years === 1 ? 'year' : 'years'}`)\n if (months > 0) parts.push(`${months} ${months === 1 ? 'month' : 'months'}`)\n if (days > 0) parts.push(`${days} ${days === 1 ? 'day' : 'days'}`)\n if (hours > 0) parts.push(`${hours} ${hours === 1 ? 'hour' : 'hours'}`)\n if (minutes > 0) parts.push(`${minutes} ${minutes === 1 ? 'min' : 'mins'}`)\n if (parts.length === 0) return seconds > 0 ? `${seconds} ${seconds === 1 ? 'sec' : 'secs'} ago` : 'just now'\n\n return `${parts.slice(0, 2).join(' ')} ago`\n}\n\n/**\n * Build a tooltip string showing created and modified dates\n * with both absolute timestamps and verbose relative times.\n */\nexport function buildDateTooltip(created: string | null | undefined, modified: string | null | undefined): string {\n const lines: string[] = []\n if (created) {\n lines.push(`Created at: ${formatAbsoluteDate(created)} (${formatVerboseRelative(created)})`)\n }\n if (modified) {\n lines.push(`Modified at: ${formatAbsoluteDate(modified)} (${formatVerboseRelative(modified)})`)\n }\n return lines.join('\\n')\n}\n","import { marked } from 'marked'\nimport { Calendar, Check, Clock, FileText, Paperclip } from 'lucide-react'\nimport { getTitleFromContent } from '../../shared/types'\nimport type { Feature, Priority } from '../../shared/types'\nimport { useStore } from '../store'\nimport { formatRelativeCompact, buildDateTooltip } from '../lib/utils'\n\ninterface FeatureCardProps {\n feature: Feature\n onClick: () => void\n isDragging?: boolean\n isSelected?: 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, isSelected }: FeatureCardProps) {\n const { cardSettings } = useStore()\n const labelDefs = useStore(s => s.labelDefs)\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 ${isSelected ? 'border-blue-500 dark:border-blue-400 ring-1 ring-blue-500 dark:ring-blue-400' : '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 const def = labelDefs[label]\n return (\n <span\n key={label}\n className={`text-xs px-1.5 py-0.5 rounded ${!def ? 'bg-zinc-100 text-zinc-600 dark:bg-zinc-700 dark:text-zinc-300' : ''}`}\n style={def ? { backgroundColor: `${def.color}20`, color: def.color } : undefined}\n >\n {label}\n </span>\n )\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 {feature.metadata && Object.keys(feature.metadata).length > 0 && (\n <div className=\"flex items-center gap-1 text-zinc-400 dark:text-zinc-500\">\n <span className=\"text-[10px] font-mono\">{`{${Object.keys(feature.metadata).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 className=\"flex items-center gap-1 text-zinc-400 dark:text-zinc-500\"\n title={buildDateTooltip(feature.created, feature.modified)}\n >\n <Clock size={12} />\n <span>{formatRelativeCompact(feature.modified)}</span>\n </div>\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 isDeletedColumn?: boolean\n onPurgeColumn?: () => void\n selectedFeatureId?: string\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 isDeletedColumn,\n onPurgeColumn,\n selectedFeatureId\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 rounded-lg\"\n : \"flex-shrink-0 w-72 h-full flex flex-col bg-zinc-100 dark:bg-zinc-800 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 {isDeletedColumn ? (\n <button\n type=\"button\"\n onClick={() => {\n if (features.length === 0) return\n if (window.confirm(`Permanently delete all ${features.length} card${features.length === 1 ? '' : 's'} from disk?`)) {\n onPurgeColumn?.()\n }\n }}\n className=\"p-1 rounded hover:bg-red-100 dark:hover:bg-red-900/30 transition-colors\"\n title=\"Permanently delete all cards\"\n >\n <Trash2 size={16} className=\"text-red-500\" />\n </button>\n ) : (\n <>\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 </>\n )}\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)} isSelected={feature.id === selectedFeatureId} />\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'\nimport { DELETED_COLUMN } 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 onPurgeDeletedCards: () => void\n selectedFeatureId?: string\n}\n\nexport function KanbanBoard({ onFeatureClick, onAddFeature, onMoveFeature, onEditColumn, onRemoveColumn, onPurgeDeletedCards, selectedFeatureId }: KanbanBoardProps) {\n const columns = useStore((s) => s.columns)\n const cardSettings = useStore((s) => s.cardSettings)\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 selectedFeatureId={selectedFeatureId}\n />\n ))}\n {cardSettings.showDeletedColumn && (\n <KanbanColumn\n key={DELETED_COLUMN.id}\n column={DELETED_COLUMN}\n features={getFilteredFeaturesByStatus(DELETED_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 isDeletedColumn\n onPurgeColumn={onPurgeDeletedCards}\n selectedFeatureId={selectedFeatureId}\n />\n )}\n </div>\n </div>\n )\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","// src/webview/lib/markdownTools.tsx\nimport { Marked } from 'marked'\nimport type React from 'react'\n\nexport type FormatAction = 'heading' | 'bold' | 'italic' | 'quote' | 'code' | 'link' | 'ul' | 'ol' | 'tasklist'\n\nexport function 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 const lineStart = value.lastIndexOf('\\n', start - 1) + 1\n const linePrefix = value.substring(lineStart, start)\n if (linePrefix.startsWith('### ')) {\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\nexport function 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 const commentMarked = new Marked({\n gfm: true,\n breaks: true,\n renderer: {\n link({ href, title, tokens }) {\n const text = this.parser.parseInline(tokens)\n const titleAttr = title ? ` title=\"${title}\"` : ''\n return `<a href=\"${href}\"${titleAttr} target=\"_blank\" rel=\"noopener noreferrer\">${text}</a>`\n }\n }\n})\n\nexport function parseCommentMarkdown(content: string): string {\n const processed = content.replace(\n /(?<!\\]\\(|\"|'|<)(https?:\\/\\/[^\\s<>\\])\"']+)/g,\n '<$1>'\n )\n return commentMarked.parse(processed, { async: false }) as string\n}\n","// src/webview/components/CommentEditor.tsx\nimport { useState, useRef, useEffect, useCallback, useMemo } from 'react'\nimport { Bold, Italic, Quote, Code, Link, List, ListOrdered } from 'lucide-react'\nimport { wrapSelection, ToolbarButton, parseCommentMarkdown, type FormatAction } from '../lib/markdownTools'\n\nconst AUTHOR_KEY = 'kanban-comment-author'\n\ninterface CommentEditorProps {\n initialContent?: string\n onSubmit: (author: string, content: string) => void\n onCancel?: () => void\n submitLabel?: string\n}\n\nexport function CommentEditor({\n initialContent = '',\n onSubmit,\n onCancel,\n submitLabel = 'Comment',\n}: CommentEditorProps) {\n const [author, setAuthor] = useState(() => localStorage.getItem(AUTHOR_KEY) ?? '')\n const [content, setContent] = useState(initialContent)\n const [activeTab, setActiveTab] = useState<'write' | 'preview'>('write')\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n const isFirstRender = useRef(true)\n\n useEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = false\n return\n }\n if (activeTab === 'write') {\n textareaRef.current?.focus()\n }\n }, [activeTab])\n\n const previewHtml = useMemo(() => {\n if (!content.trim()) return ''\n return parseCommentMarkdown(content)\n }, [content])\n\n const handleFormat = useCallback((action: FormatAction) => {\n if (textareaRef.current) {\n wrapSelection(textareaRef.current, content, setContent, action)\n }\n }, [content])\n\n const handleSubmit = () => {\n const trimmedAuthor = author.trim()\n const trimmedContent = content.trim()\n if (!trimmedAuthor || !trimmedContent) return\n localStorage.setItem(AUTHOR_KEY, trimmedAuthor)\n onSubmit(trimmedAuthor, trimmedContent)\n if (!initialContent) {\n setContent('')\n setActiveTab('write')\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault()\n handleSubmit()\n }\n if ((e.metaKey || e.ctrlKey) && e.key === 'b') {\n e.preventDefault()\n handleFormat('bold')\n }\n if ((e.metaKey || e.ctrlKey) && e.key === 'i') {\n e.preventDefault()\n handleFormat('italic')\n }\n if ((e.metaKey || e.ctrlKey) && e.key === 'k') {\n e.preventDefault()\n handleFormat('link')\n }\n }\n\n const canSubmit = author.trim().length > 0 && content.trim().length > 0\n\n return (\n <div className=\"flex flex-col gap-1.5\">\n <input\n type=\"text\"\n value={author}\n onChange={e => setAuthor(e.target.value)}\n placeholder=\"Your name\"\n aria-label=\"Comment author name\"\n className=\"w-full rounded px-2 py-1 text-xs outline-none\"\n style={{\n background: 'var(--vscode-input-background)',\n color: 'var(--vscode-foreground)',\n border: '1px solid var(--vscode-input-border, var(--vscode-panel-border))',\n }}\n />\n\n <div\n className=\"flex flex-col rounded overflow-hidden\"\n style={{ border: '1px solid var(--vscode-input-border, var(--vscode-panel-border))' }}\n >\n <div\n className=\"flex items-center\"\n style={{ borderBottom: '1px solid var(--vscode-panel-border)' }}\n >\n {(['write', 'preview'] as const).map(tab => (\n <button\n key={tab}\n type=\"button\"\n onClick={() => setActiveTab(tab)}\n className=\"px-3 py-1.5 text-xs font-medium transition-colors relative capitalize\"\n style={{\n color: activeTab === tab\n ? 'var(--vscode-foreground)'\n : 'var(--vscode-descriptionForeground)',\n background: 'transparent',\n }}\n >\n {tab}\n {activeTab === tab && (\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 </div>\n\n {activeTab === 'write' ? (\n <>\n <div\n className=\"flex items-center px-1 py-0.5\"\n style={{ borderBottom: '1px solid var(--vscode-panel-border)' }}\n >\n <ToolbarButton icon={<Bold size={12} />} title=\"Bold (Cmd+B)\" onClick={() => handleFormat('bold')} />\n <ToolbarButton icon={<Italic size={12} />} title=\"Italic (Cmd+I)\" onClick={() => handleFormat('italic')} />\n <ToolbarButton icon={<Quote size={12} />} title=\"Quote\" onClick={() => handleFormat('quote')} separator />\n <ToolbarButton icon={<Code size={12} />} title=\"Code\" onClick={() => handleFormat('code')} />\n <ToolbarButton icon={<Link size={12} />} title=\"Link (Cmd+K)\" onClick={() => handleFormat('link')} separator />\n <ToolbarButton icon={<List size={12} />} title=\"Unordered list\" onClick={() => handleFormat('ul')} separator />\n <ToolbarButton icon={<ListOrdered size={12} />} title=\"Ordered list\" onClick={() => handleFormat('ol')} />\n </div>\n\n <textarea\n ref={textareaRef}\n value={content}\n onChange={e => setContent(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder=\"Add a comment... (Markdown supported)\"\n className=\"w-full px-2 py-1.5 text-xs resize-none outline-none\"\n style={{\n background: 'var(--vscode-input-background)',\n color: 'var(--vscode-foreground)',\n minHeight: '120px',\n }}\n rows={5}\n />\n </>\n ) : (\n previewHtml ? (\n // eslint-disable-next-line react/no-danger\n <div\n className=\"px-2 py-1.5 text-xs comment-markdown\"\n style={{\n background: 'var(--vscode-input-background)',\n color: 'var(--vscode-foreground)',\n minHeight: '120px',\n }}\n dangerouslySetInnerHTML={{ __html: previewHtml }}\n />\n ) : (\n <div\n className=\"px-2 py-1.5 text-xs\"\n style={{\n background: 'var(--vscode-input-background)',\n color: 'var(--vscode-descriptionForeground)',\n minHeight: '120px',\n }}\n >\n Nothing to preview\n </div>\n )\n )}\n </div>\n\n <div className=\"flex items-center justify-end gap-1.5\">\n {onCancel && (\n <button\n type=\"button\"\n onClick={onCancel}\n className=\"px-2.5 py-1 text-xs 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 Cancel\n </button>\n )}\n <button\n type=\"button\"\n onClick={handleSubmit}\n disabled={!canSubmit}\n className=\"px-2.5 py-1 text-xs font-medium rounded transition-colors disabled:opacity-30\"\n style={{\n background: 'var(--vscode-button-background)',\n color: 'var(--vscode-button-foreground)',\n }}\n title={`${submitLabel} (Cmd+Enter)`}\n >\n {submitLabel}\n </button>\n </div>\n </div>\n )\n}\n","import { useState, useMemo } from 'react'\nimport { Pencil, Trash2 } from 'lucide-react'\nimport { parseCommentMarkdown } from '../lib/markdownTools'\nimport type { Comment } from '../../shared/types'\nimport { CommentEditor } from './CommentEditor'\n\nfunction CommentBody({ content }: { content: string }) {\n const html = useMemo(() => parseCommentMarkdown(content), [content])\n return (\n <div\n className=\"comment-markdown\"\n style={{ color: 'var(--vscode-foreground)' }}\n dangerouslySetInnerHTML={{ __html: html }}\n />\n )\n}\n\nfunction timeAgo(dateStr: string): string {\n const now = Date.now()\n const then = new Date(dateStr).getTime()\n const seconds = Math.floor((now - then) / 1000)\n if (seconds < 60) return 'just now'\n const minutes = Math.floor(seconds / 60)\n if (minutes < 60) return `${minutes}m ago`\n const hours = Math.floor(minutes / 60)\n if (hours < 24) return `${hours}h ago`\n const days = Math.floor(hours / 24)\n if (days < 30) return `${days}d ago`\n return new Date(dateStr).toLocaleDateString()\n}\n\ninterface CommentsSectionProps {\n comments: Comment[]\n onAddComment: (author: string, content: string) => void\n onUpdateComment: (commentId: string, content: string) => void\n onDeleteComment: (commentId: string) => void\n}\n\nexport function CommentsSection({ comments, onAddComment, onUpdateComment, onDeleteComment }: CommentsSectionProps) {\n const [editingId, setEditingId] = useState<string | null>(null)\n\n return (\n <div className=\"flex flex-col\">\n {comments.length > 0 && (\n <div className=\"flex flex-col gap-2 px-4 py-3\">\n {comments.map(comment => (\n <div\n key={comment.id}\n className=\"rounded p-2 pl-3 text-xs group\"\n style={{\n background: 'var(--vscode-input-background)',\n borderLeft: '2px solid var(--vscode-textLink-foreground, #3b82f6)',\n }}\n >\n <div className=\"flex items-center justify-between mb-1\">\n <div className=\"flex items-center gap-2\">\n <span\n className=\"shrink-0 w-5 h-5 rounded-full flex items-center justify-center text-[9px] font-bold\"\n style={{\n background: 'var(--vscode-badge-background)',\n color: 'var(--vscode-badge-foreground)',\n }}\n >\n {comment.author.split(/\\s+/).filter(Boolean).map(w => w[0]).join('').toUpperCase().slice(0, 2)}\n </span>\n <span className=\"font-medium\" style={{ color: 'var(--vscode-foreground)' }}>\n {comment.author}\n </span>\n <span className=\"text-[10px]\" style={{ color: 'var(--vscode-descriptionForeground)' }}>\n {timeAgo(comment.created)}\n </span>\n </div>\n <div className=\"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity\">\n <button\n onClick={() => setEditingId(comment.id)}\n className=\"p-0.5 rounded transition-colors vscode-hover-bg\"\n style={{ color: 'var(--vscode-descriptionForeground)' }}\n title=\"Edit\"\n >\n <Pencil size={10} />\n </button>\n <button\n onClick={() => onDeleteComment(comment.id)}\n className=\"p-0.5 rounded transition-colors hover:text-red-500\"\n style={{ color: 'var(--vscode-descriptionForeground)' }}\n title=\"Delete\"\n >\n <Trash2 size={10} />\n </button>\n </div>\n </div>\n\n {editingId === comment.id ? (\n <div className=\"mt-1\">\n <CommentEditor\n initialContent={comment.content}\n submitLabel=\"Save\"\n onSubmit={(_, content) => {\n onUpdateComment(comment.id, content)\n setEditingId(null)\n }}\n onCancel={() => setEditingId(null)}\n />\n </div>\n ) : (\n <CommentBody content={comment.content} />\n )}\n </div>\n ))}\n </div>\n )}\n\n <div className=\"px-4 pb-3\">\n <CommentEditor\n onSubmit={(author, content) => onAddComment(author, content)}\n submitLabel=\"Comment\"\n />\n </div>\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, MessageCircle } from 'lucide-react'\nimport type { Comment } from '../../shared/types'\nimport { cn } from '../lib/utils'\nimport { CommentsSection } from './CommentsSection'\nimport { wrapSelection, ToolbarButton, type FormatAction } from '../lib/markdownTools'\n\ninterface MarkdownEditorProps {\n value: string\n onChange: (value: string) => void\n placeholder?: string\n className?: string\n autoFocus?: boolean\n mode?: 'create' | 'edit'\n comments?: Comment[]\n onAddComment?: (author: string, content: string) => void\n onUpdateComment?: (commentId: string, content: string) => void\n onDeleteComment?: (commentId: string) => void\n}\n\n\nexport function MarkdownEditor({ value, onChange, placeholder = 'Write markdown...', className, autoFocus, mode = 'create', comments, onAddComment, onUpdateComment, onDeleteComment }: MarkdownEditorProps) {\n const isEditMode = mode === 'edit'\n const writeLabel = isEditMode ? 'Edit' : 'Write'\n const [activeTab, setActiveTab] = useState<'write' | 'preview' | 'comments'>(isEditMode ? '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 {(isEditMode ? ['preview', 'write'] as const : ['write', 'preview'] as const).map(tab => (\n <button\n key={tab}\n type=\"button\"\n onClick={() => setActiveTab(tab)}\n className=\"px-3 py-2 text-xs font-medium transition-colors relative\"\n style={{\n color: activeTab === tab ? 'var(--vscode-foreground)' : 'var(--vscode-descriptionForeground)',\n }}\n >\n {tab === 'write' ? writeLabel : 'Preview'}\n {activeTab === tab && (\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 {comments && (\n <button\n type=\"button\"\n onClick={() => setActiveTab('comments')}\n className=\"px-3 py-2 text-xs font-medium transition-colors relative flex items-center gap-1.5\"\n style={{\n color: activeTab === 'comments' ? 'var(--vscode-foreground)' : 'var(--vscode-descriptionForeground)',\n }}\n >\n <MessageCircle size={12} />\n Comments\n {comments.length > 0 && (\n <span\n className=\"text-[10px] px-1 rounded-full\"\n style={{\n background: 'var(--vscode-badge-background)',\n color: 'var(--vscode-badge-foreground)',\n }}\n >\n {comments.length}\n </span>\n )}\n {activeTab === 'comments' && (\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\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 {activeTab === 'preview' && (\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 {activeTab === 'comments' && comments && onAddComment && onUpdateComment && onDeleteComment && (\n <CommentsSection\n comments={comments}\n onAddComment={onAddComment}\n onUpdateComment={onUpdateComment}\n onDeleteComment={onDeleteComment}\n />\n )}\n </div>\n </div>\n )\n}\n","import { useState, useEffect, useRef, useMemo } from 'react'\nimport { X, ChevronDown, User, Tag, Check, CircleDot, Signal, Calendar, Zap } 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[]; actions: 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 const labelDefs = useStore(s => s.labelDefs)\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 const def = labelDefs[label]\n return (\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={def ? { backgroundColor: `${def.color}20`, color: def.color } : {\n background: 'var(--vscode-badge-background)',\n color: 'var(--vscode-badge-foreground)',\n }}\n >\n {label}\n <button\n type=\"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 })}\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 const def = labelDefs[label]\n return (\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={def ? { backgroundColor: `${def.color}20`, color: def.color } : {\n background: 'var(--vscode-badge-background)',\n color: 'var(--vscode-badge-foreground)',\n }}\n >{label}</span>\n </button>\n )\n })}\n </div>\n )}\n </div>\n )\n}\n\nfunction ActionInput({ actions, onChange }: { actions: string[]; onChange: (actions: string[]) => void }) {\n const [newAction, setNewAction] = useState('')\n const inputRef = useRef<HTMLInputElement>(null)\n\n const addAction = (action?: string) => {\n const a = (action || newAction).trim()\n if (a && !actions.includes(a)) {\n onChange([...actions, a])\n }\n setNewAction('')\n }\n\n return (\n <div className=\"relative flex-1\">\n <label className=\"flex items-center gap-1.5 flex-wrap cursor-text\">\n {actions.map(action => (\n <span\n key={action}\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 {action}\n <button\n type=\"button\"\n onClick={(e) => { e.stopPropagation(); onChange(actions.filter(a => a !== action)) }}\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={newAction}\n onChange={(e) => setNewAction(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ',') { e.preventDefault(); addAction() }\n if (e.key === 'Backspace' && !newAction && actions.length > 0) {\n onChange(actions.slice(0, -1))\n }\n if (e.key === 'Escape') { setNewAction(''); inputRef.current?.blur() }\n }}\n placeholder={actions.length === 0 ? 'Add actions...' : ''}\n className=\"flex-1 min-w-[60px] bg-transparent border-none outline-none text-xs\"\n style={{ color: 'var(--vscode-foreground)' }}\n />\n </label>\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 [actions, setActions] = 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, actions })\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 <PropertyRow label=\"Actions\" icon={<Zap size={13} />}>\n <ActionInput actions={actions} onChange={setActions} />\n </PropertyRow>\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, Clock } from 'lucide-react'\nimport type { Comment, FeatureFrontmatter, Priority, FeatureStatus } from '../../shared/types'\nimport { DELETED_STATUS_ID } from '../../shared/types'\nimport { cn, formatAbsoluteDate, formatRelativeCompact, formatVerboseRelative } 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 comments: Comment[]\n contentVersion?: number\n onSave: (content: string, frontmatter: FeatureFrontmatter) => void\n onClose: () => void\n onDelete: () => void\n onPermanentDelete: () => void\n onRestore: () => 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 onAddComment: (author: string, content: string) => void\n onUpdateComment: (commentId: string, content: string) => void\n onDeleteComment: (commentId: string) => void\n onTransferToBoard: (toBoard: string, targetStatus: string) => void\n onTriggerAction?: (action: string) => void\n}\n\nconst priorityLabels: Record<Priority, string> = {\n critical: 'Critical',\n high: 'High',\n medium: 'Medium',\n low: 'Low'\n}\n\nconst priorities: Priority[] = ['critical', 'high', 'medium', 'low']\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 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\ninterface StatusDropdownProps {\n value: string\n onChange: (status: string) => void\n onTransferToBoard: (toBoard: string, targetStatus: string) => void\n}\n\nfunction StatusDropdown({ value, onChange, onTransferToBoard }: StatusDropdownProps) {\n const [isOpen, setIsOpen] = useState(false)\n const columns = useStore(s => s.columns)\n const boards = useStore(s => s.boards)\n const currentBoard = useStore(s => s.currentBoard)\n\n const otherBoards = boards.filter(b => b.id !== currentBoard)\n\n return (\n <div className=\"relative\">\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 {(() => {\n const col = columns.find(c => c.id === value)\n return col ? (\n <>\n <span className=\"w-2 h-2 rounded-full shrink-0\" style={{ backgroundColor: col.color }} />\n <span>{col.name}</span>\n </>\n ) : (\n <span>{value}</span>\n )\n })()}\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-[180px] max-h-[320px] overflow-y-auto\"\n style={{\n background: 'var(--vscode-dropdown-background)',\n border: '1px solid var(--vscode-dropdown-border, var(--vscode-panel-border))',\n }}\n >\n {/* Current board statuses (flat) */}\n {columns.map(col => (\n <button\n key={col.id}\n onClick={() => {\n onChange(col.id)\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: col.id === value ? 'var(--vscode-list-activeSelectionBackground)' : undefined,\n }}\n onMouseEnter={e => {\n if (col.id !== value) e.currentTarget.style.background = 'var(--vscode-list-hoverBackground)'\n }}\n onMouseLeave={e => {\n if (col.id !== value) e.currentTarget.style.background = 'transparent'\n }}\n >\n <span className=\"w-2 h-2 rounded-full shrink-0\" style={{ backgroundColor: col.color }} />\n <span className=\"flex-1 text-left\">{col.name}</span>\n {col.id === value && <Check size={12} style={{ color: 'var(--vscode-focusBorder)' }} className=\"shrink-0\" />}\n </button>\n ))}\n\n {/* Other boards section */}\n {otherBoards.length > 0 && (\n <>\n <div\n className=\"mx-2 my-1\"\n style={{ borderTop: '1px solid var(--vscode-panel-border)' }}\n />\n <div\n className=\"px-3 py-1 text-[10px] font-medium uppercase tracking-wider\"\n style={{ color: 'var(--vscode-descriptionForeground)' }}\n >\n Move to...\n </div>\n {otherBoards.map(board => (\n <div key={board.id}>\n <div\n className=\"px-3 py-1 text-[10px] font-semibold\"\n style={{ color: 'var(--vscode-descriptionForeground)' }}\n >\n {board.name}\n </div>\n {(board.columns || []).map(col => (\n <button\n key={`${board.id}-${col.id}`}\n onClick={() => {\n onTransferToBoard(board.id, col.id)\n setIsOpen(false)\n }}\n className=\"w-full flex items-center gap-2 pl-5 pr-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 className=\"w-2 h-2 rounded-full shrink-0\" style={{ backgroundColor: col.color }} />\n <span className=\"flex-1 text-left\">{col.name}</span>\n </button>\n ))}\n </div>\n ))}\n </>\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\ninterface RunActionsDropdownProps {\n actions: string[]\n onTriggerAction: (action: string) => void\n}\n\nfunction RunActionsDropdown({ actions, onTriggerAction }: RunActionsDropdownProps) {\n const [isOpen, setIsOpen] = useState(false)\n\n return (\n <div className=\"relative\">\n <button\n onClick={() => setIsOpen(!isOpen)}\n className=\"flex items-center gap-1.5 px-2.5 py-1.5 text-xs font-medium rounded-md transition-colors vscode-hover-bg\"\n style={{\n color: 'var(--vscode-foreground)',\n border: '1px solid var(--vscode-widget-border, var(--vscode-contrastBorder, rgba(128,128,128,0.35)))',\n }}\n >\n <span>Run Action</span>\n <ChevronDown size={11} className={cn('opacity-60 transition-transform', isOpen && 'rotate-180')} />\n </button>\n {isOpen && (\n <>\n <button\n type=\"button\"\n aria-label=\"Close actions menu\"\n className=\"fixed inset-0 z-10 cursor-default\"\n onClick={() => setIsOpen(false)}\n />\n <div\n className=\"absolute top-full right-0 mt-1 z-20 rounded-lg shadow-lg py-1 min-w-[160px]\"\n style={{\n background: 'var(--vscode-dropdown-background)',\n border: '1px solid var(--vscode-dropdown-border, var(--vscode-panel-border))',\n }}\n >\n {actions.map(action => (\n <button\n type=\"button\"\n key={action}\n onClick={() => { setIsOpen(false); onTriggerAction(action) }}\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 {action}\n </button>\n ))}\n </div>\n </>\n )}\n </div>\n )\n}\n\nfunction MetadataSection({ metadata }: { metadata?: Record<string, any> }) {\n const [expanded, setExpanded] = useState(false)\n\n if (!metadata || Object.keys(metadata).length === 0) return null\n\n const keys = Object.keys(metadata)\n\n return (\n <div className=\"mt-3\">\n <button\n onClick={() => setExpanded(!expanded)}\n className=\"flex items-center gap-1.5 text-xs font-medium text-zinc-500 dark:text-zinc-400 hover:text-zinc-700 dark:hover:text-zinc-300\"\n >\n <span className=\"text-[10px]\">{expanded ? '\\u25BC' : '\\u25B6'}</span>\n <span>Metadata</span>\n <span className=\"text-zinc-400 dark:text-zinc-500\">({keys.length})</span>\n </button>\n {!expanded && (\n <div className=\"flex flex-wrap gap-1 mt-1.5\">\n {keys.map(key => (\n <span key={key} className=\"text-xs px-1.5 py-0.5 rounded bg-zinc-100 text-zinc-600 dark:bg-zinc-700 dark:text-zinc-300 font-mono\">\n {key}\n </span>\n ))}\n </div>\n )}\n {expanded && (\n <div className=\"mt-1.5 text-xs font-mono bg-zinc-50 dark:bg-zinc-900 rounded p-2 border border-zinc-200 dark:border-zinc-700\">\n <MetadataTree data={metadata} depth={0} />\n </div>\n )}\n </div>\n )\n}\n\nfunction MetadataTree({ data, depth }: { data: Record<string, any>; depth: number }) {\n return (\n <div style={{ paddingLeft: depth > 0 ? 12 : 0 }}>\n {Object.entries(data).map(([key, value]) => (\n <div key={key} className=\"py-0.5\">\n {value && typeof value === 'object' && !Array.isArray(value) ? (\n <>\n <span className=\"text-zinc-500 dark:text-zinc-400\">{key}:</span>\n <MetadataTree data={value} depth={depth + 1} />\n </>\n ) : Array.isArray(value) ? (\n <div>\n <span className=\"text-zinc-500 dark:text-zinc-400\">{key}: </span>\n <span className=\"text-zinc-700 dark:text-zinc-300\">[{value.join(', ')}]</span>\n </div>\n ) : (\n <div>\n <span className=\"text-zinc-500 dark:text-zinc-400\">{key}: </span>\n <span className=\"text-zinc-700 dark:text-zinc-300\">{String(value)}</span>\n </div>\n )}\n </div>\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 const labelDefs = useStore(s => s.labelDefs)\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 const def = labelDefs[label]\n return (\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={def ? { backgroundColor: `${def.color}20`, color: def.color } : {\n background: 'var(--vscode-badge-background)',\n color: 'var(--vscode-badge-foreground)',\n }}\n >\n {label}\n <button\n type=\"button\"\n onClick={() => removeLabel(label)}\n className=\"hover:text-red-500 transition-colors\"\n >\n <X size={9} />\n </button>\n </span>\n )\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 const def = labelDefs[label]\n return (\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={def ? { backgroundColor: `${def.color}20`, color: def.color } : {\n background: 'var(--vscode-badge-background)',\n color: 'var(--vscode-badge-foreground)',\n }}\n >{label}</span>\n </button>\n )\n })}\n </div>\n )}\n </div>\n )\n}\n\nexport function FeatureEditor({ featureId, content, frontmatter, comments, contentVersion, onSave, onClose, onDelete, onPermanentDelete, onRestore, onOpenFile, onStartWithAI, onAddAttachment, onOpenAttachment, onRemoveAttachment, onAddComment, onUpdateComment, onDeleteComment, onTransferToBoard, onTriggerAction }: FeatureEditorProps) {\n const { cardSettings } = useStore()\n const [currentFrontmatter, setCurrentFrontmatter] = useState(frontmatter)\n const [currentContent, setCurrentContent] = useState(content)\n const [confirmingPermanentDelete, setConfirmingPermanentDelete] = useState(false)\n const isDeleted = currentFrontmatter.status === DELETED_STATUS_ID\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 {isDeleted ? (\n confirmingPermanentDelete ? (\n <div className=\"flex items-center gap-1.5\">\n <span className=\"text-xs\" style={{ color: 'var(--vscode-errorForeground)' }}>Permanently delete from disk?</span>\n <button\n onClick={() => { setConfirmingPermanentDelete(false); onPermanentDelete() }}\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={() => setConfirmingPermanentDelete(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={onRestore}\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=\"Restore card\"\n >\n <CircleDot size={16} />\n <span className=\"text-xs\">RESTORE</span>\n </button>\n <button\n onClick={() => setConfirmingPermanentDelete(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-errorForeground)', borderColor: 'var(--vscode-widget-border, var(--vscode-contrastBorder, rgba(128,128,128,0.35)))' }}\n title=\"Permanently delete from disk\"\n >\n <Trash2 size={16} />\n <span className=\"text-xs\">PERMANENT DELETE</span>\n </button>\n </>\n )\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={onDelete}\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=\"Move to deleted\"\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 {currentFrontmatter.actions && currentFrontmatter.actions.length > 0 && onTriggerAction && (\n <RunActionsDropdown actions={currentFrontmatter.actions} onTriggerAction={onTriggerAction} />\n )}\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 <StatusDropdown\n value={currentFrontmatter.status}\n onChange={(v) => handleFrontmatterUpdate({ status: v as FeatureStatus })}\n onTransferToBoard={onTransferToBoard}\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 <PropertyRow label=\"Created\" icon={<Clock size={13} />}>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs\" style={{ color: 'var(--vscode-foreground)' }}>\n {formatAbsoluteDate(currentFrontmatter.created)}\n </span>\n <span className=\"text-[10px]\" style={{ color: 'var(--vscode-descriptionForeground)' }}\n title={formatVerboseRelative(currentFrontmatter.created)}\n >\n {formatRelativeCompact(currentFrontmatter.created)}\n </span>\n </div>\n </PropertyRow>\n <PropertyRow label=\"Modified\" icon={<Clock size={13} />}>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs\" style={{ color: 'var(--vscode-foreground)' }}>\n {formatAbsoluteDate(currentFrontmatter.modified)}\n </span>\n <span className=\"text-[10px]\" style={{ color: 'var(--vscode-descriptionForeground)' }}\n title={formatVerboseRelative(currentFrontmatter.modified)}\n >\n {formatRelativeCompact(currentFrontmatter.modified)}\n </span>\n </div>\n </PropertyRow>\n <div className=\"px-4 pb-2\">\n <MetadataSection metadata={currentFrontmatter.metadata} />\n </div>\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 mode=\"edit\"\n comments={comments}\n onAddComment={onAddComment}\n onUpdateComment={onUpdateComment}\n onDeleteComment={onDeleteComment}\n />\n </div>\n )\n}\n","import { useState, useRef, useEffect, useMemo } from 'react'\nimport { Search, X, Columns, Rows, Settings, Plus, Moon, Sun, ChevronDown, Check } from 'lucide-react'\nimport { useStore, type DueDateFilter, type SortOrder } 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, onToggleTheme, onSwitchBoard, onCreateBoard }: { onOpenSettings: () => void; onAddColumn: () => void; onToggleTheme: () => void; onSwitchBoard: (boardId: string) => void; onCreateBoard: (name: string) => void }) {\n const {\n searchQuery,\n setSearchQuery,\n priorityFilter,\n setPriorityFilter,\n assigneeFilter,\n setAssigneeFilter,\n labelFilter,\n setLabelFilter,\n dueDateFilter,\n setDueDateFilter,\n sortOrder,\n setSortOrder,\n clearAllFilters,\n getUniqueAssignees,\n getUniqueLabels,\n hasActiveFilters,\n layout,\n toggleLayout,\n isDarkMode,\n cardSettings,\n boards,\n currentBoard\n } = useStore()\n\n const labelDefs = useStore(s => s.labelDefs)\n\n const assignees = getUniqueAssignees()\n const labels = getUniqueLabels()\n const filtersActive = hasActiveFilters()\n\n const groupedLabels = useMemo(() => {\n const groups: Record<string, string[]> = {}\n labels.forEach(label => {\n const def = labelDefs[label]\n const group = def?.group || 'Other'\n if (!groups[group]) groups[group] = []\n groups[group].push(label)\n })\n return groups\n }, [labels, labelDefs])\n\n const [boardDropdownOpen, setBoardDropdownOpen] = useState(false)\n const [creatingBoard, setCreatingBoard] = useState(false)\n const [newBoardName, setNewBoardName] = useState('')\n const dropdownRef = useRef<HTMLDivElement>(null)\n const newBoardInputRef = useRef<HTMLInputElement>(null)\n\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(e.target as Node)) {\n setBoardDropdownOpen(false)\n setCreatingBoard(false)\n setNewBoardName('')\n }\n }\n if (boardDropdownOpen) {\n document.addEventListener('mousedown', handleClickOutside)\n }\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }, [boardDropdownOpen])\n\n useEffect(() => {\n if (creatingBoard && newBoardInputRef.current) {\n newBoardInputRef.current.focus()\n }\n }, [creatingBoard])\n\n const currentBoardName = boards.find(b => b.id === currentBoard)?.name || currentBoard\n\n const handleCreateBoard = () => {\n const name = newBoardName.trim()\n if (!name) return\n onCreateBoard(name)\n setNewBoardName('')\n setCreatingBoard(false)\n setBoardDropdownOpen(false)\n }\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 {/* Board Selector */}\n <div className=\"relative\" ref={dropdownRef}>\n <button\n type=\"button\"\n onClick={() => setBoardDropdownOpen(!boardDropdownOpen)}\n className=\"flex items-center gap-1.5 px-2 py-1.5 text-sm bg-white dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-600 rounded-md hover:bg-zinc-50 dark:hover:bg-zinc-700 text-zinc-900 dark:text-zinc-100 transition-colors\"\n >\n <span className=\"max-w-[120px] truncate\">{currentBoardName}</span>\n <ChevronDown size={14} className={`text-zinc-400 transition-transform ${boardDropdownOpen ? 'rotate-180' : ''}`} />\n </button>\n {boardDropdownOpen && (\n <div className=\"absolute top-full left-0 mt-1 min-w-[180px] bg-white dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-600 rounded-md shadow-lg z-50 py-1\">\n {boards.map((b) => (\n <button\n key={b.id}\n type=\"button\"\n onClick={() => {\n onSwitchBoard(b.id)\n setBoardDropdownOpen(false)\n }}\n className=\"w-full flex items-center gap-2 px-3 py-1.5 text-sm text-left hover:bg-zinc-100 dark:hover:bg-zinc-700 text-zinc-900 dark:text-zinc-100 transition-colors\"\n >\n <Check size={14} className={b.id === currentBoard ? 'text-blue-500' : 'invisible'} />\n <span className=\"truncate\">{b.name}</span>\n </button>\n ))}\n <div className=\"border-t border-zinc-200 dark:border-zinc-600 my-1\" />\n {creatingBoard ? (\n <div className=\"px-3 py-1.5\">\n <input\n ref={newBoardInputRef}\n type=\"text\"\n value={newBoardName}\n onChange={(e) => setNewBoardName(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') handleCreateBoard()\n if (e.key === 'Escape') { setCreatingBoard(false); setNewBoardName('') }\n }}\n placeholder=\"Board name...\"\n className=\"w-full px-2 py-1 text-sm bg-zinc-50 dark:bg-zinc-900 border border-zinc-300 dark:border-zinc-500 rounded 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 <button\n type=\"button\"\n onClick={() => setCreatingBoard(true)}\n className=\"w-full flex items-center gap-2 px-3 py-1.5 text-sm text-left hover:bg-zinc-100 dark:hover:bg-zinc-700 text-blue-600 dark:text-blue-400 transition-colors\"\n >\n <Plus size={14} />\n <span>New Board</span>\n </button>\n )}\n </div>\n )}\n </div>\n\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... (meta.field: value)\"\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 {Object.entries(groupedLabels).map(([group, groupLabels]) => (\n <optgroup key={group} label={group}>\n <option value={`group:${group}`}>All {group}</option>\n {groupLabels.map((l) => (\n <option key={l} value={l}>{l}</option>\n ))}\n </optgroup>\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 {/* Sort Order */}\n <select\n value={sortOrder}\n onChange={(e) => setSortOrder(e.target.value as SortOrder)}\n className={selectClassName}\n >\n <option value=\"order\">Board Order</option>\n <option value=\"created:asc\">Created (oldest)</option>\n <option value=\"created:desc\">Created (newest)</option>\n <option value=\"modified:asc\">Modified (oldest)</option>\n <option value=\"modified:desc\">Modified (newest)</option>\n </select>\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 {/* Theme Toggle */}\n <button\n onClick={onToggleTheme}\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={isDarkMode ? 'Switch to light theme' : 'Switch to dark theme'}\n >\n {isDarkMode ? <Sun size={16} /> : <Moon 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, useMemo } from 'react'\nimport { X, ChevronDown, Plus, Pencil, Trash2 } from 'lucide-react'\nimport type { CardDisplaySettings, Priority, FeatureStatus, WorkspaceInfo, LabelDefinition } from '../../shared/types'\nimport { LABEL_PRESET_COLORS } from '../../shared/types'\nimport { useStore } from '../store'\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 workspace?: WorkspaceInfo | null\n onClose: () => void\n onSave: (settings: CardDisplaySettings) => void\n onSetLabel?: (name: string, definition: LabelDefinition) => void\n onRenameLabel?: (oldName: string, newName: string) => void\n onDeleteLabel?: (name: string) => void\n}\n\nexport function SettingsPanel({ isOpen, settings, workspace, onClose, onSave, onSetLabel, onRenameLabel, onDeleteLabel }: SettingsPanelProps) {\n if (!isOpen) return null\n return <SettingsPanelContent settings={settings} workspace={workspace} onClose={onClose} onSave={onSave} onSetLabel={onSetLabel} onRenameLabel={onRenameLabel} onDeleteLabel={onDeleteLabel} />\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 SettingsInfo({ label, value }: { label: string; value: string }) {\n return (\n <div className=\"flex items-center justify-between gap-4 px-4 py-1.5\">\n <div className=\"text-sm\" style={{ color: 'var(--vscode-descriptionForeground)' }}>{label}</div>\n <div\n className=\"text-xs font-mono truncate max-w-[60%] text-right\"\n style={{ color: 'var(--vscode-foreground)', opacity: 0.7 }}\n title={value}\n >\n {value}\n </div>\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 ColorPicker({ value, onChange }: { value: string; onChange: (color: string) => void }) {\n const [isOpen, setIsOpen] = useState(false)\n const [customHex, setCustomHex] = useState('')\n\n return (\n <div className=\"relative\">\n <button\n type=\"button\"\n onClick={() => setIsOpen(!isOpen)}\n className=\"w-5 h-5 rounded-full border border-white/20 cursor-pointer shrink-0\"\n style={{ backgroundColor: value }}\n />\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-2 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 <div className=\"grid grid-cols-6 gap-1.5 mb-2\">\n {LABEL_PRESET_COLORS.map(c => (\n <button\n key={c.name}\n type=\"button\"\n onClick={() => { onChange(c.hex); setIsOpen(false) }}\n className=\"w-6 h-6 rounded-full border-2 transition-transform hover:scale-110\"\n style={{\n backgroundColor: c.hex,\n borderColor: value === c.hex ? 'white' : 'transparent'\n }}\n title={c.name}\n />\n ))}\n </div>\n <div className=\"flex gap-1\">\n <input\n type=\"text\"\n placeholder=\"#hex\"\n value={customHex}\n onChange={e => setCustomHex(e.target.value)}\n className=\"flex-1 px-2 py-1 text-xs rounded\"\n style={{\n background: 'var(--vscode-input-background)',\n color: 'var(--vscode-input-foreground)',\n border: '1px solid var(--vscode-input-border, transparent)',\n }}\n />\n <button\n type=\"button\"\n onClick={() => {\n if (/^#[0-9a-fA-F]{6}$/.test(customHex)) {\n onChange(customHex)\n setIsOpen(false)\n setCustomHex('')\n }\n }}\n className=\"px-2 py-1 text-xs rounded\"\n style={{\n background: 'var(--vscode-button-background)',\n color: 'var(--vscode-button-foreground)',\n }}\n >\n OK\n </button>\n </div>\n </div>\n </>\n )}\n </div>\n )\n}\n\nfunction LabelsSection({ onSetLabel, onRenameLabel, onDeleteLabel }: {\n onSetLabel?: (name: string, definition: LabelDefinition) => void\n onRenameLabel?: (oldName: string, newName: string) => void\n onDeleteLabel?: (name: string) => void\n}) {\n const labelDefs = useStore(s => s.labelDefs)\n const features = useStore(s => s.features)\n const [newName, setNewName] = useState('')\n const [newColor, setNewColor] = useState(LABEL_PRESET_COLORS[0].hex)\n const [newGroup, setNewGroup] = useState('')\n const [renamingLabel, setRenamingLabel] = useState<string | null>(null)\n const [renameValue, setRenameValue] = useState('')\n const [confirmingDelete, setConfirmingDelete] = useState<string | null>(null)\n\n // Merge config labels + orphan labels from cards\n const allLabels = useMemo(() => {\n const labels = new Map<string, LabelDefinition | undefined>()\n for (const [name, def] of Object.entries(labelDefs)) {\n labels.set(name, def)\n }\n for (const f of features) {\n for (const l of f.labels) {\n if (!labels.has(l)) labels.set(l, undefined)\n }\n }\n return labels\n }, [labelDefs, features])\n\n // Group labels\n const groupedLabels = useMemo(() => {\n const groups: Record<string, { name: string; def?: LabelDefinition }[]> = {}\n allLabels.forEach((def, name) => {\n const group = def?.group || 'Other'\n if (!groups[group]) groups[group] = []\n groups[group].push({ name, def })\n })\n const sorted: [string, typeof groups[string]][] = Object.entries(groups).sort(([a], [b]) => {\n if (a === 'Other') return 1\n if (b === 'Other') return -1\n return a.localeCompare(b)\n })\n return sorted\n }, [allLabels])\n\n // Existing group names for autocomplete\n const existingGroups = useMemo(() => {\n const groups = new Set<string>()\n Object.values(labelDefs).forEach(def => {\n if (def.group) groups.add(def.group)\n })\n return Array.from(groups).sort()\n }, [labelDefs])\n\n const getCardCount = (labelName: string) =>\n features.filter(f => f.labels.includes(labelName)).length\n\n const handleAdd = () => {\n const trimmed = newName.trim()\n if (!trimmed) return\n onSetLabel?.(trimmed, { color: newColor, group: newGroup || undefined })\n setNewName('')\n setNewColor(LABEL_PRESET_COLORS[0].hex)\n setNewGroup('')\n }\n\n const handleRename = (oldName: string) => {\n const trimmed = renameValue.trim()\n if (trimmed && trimmed !== oldName) {\n onRenameLabel?.(oldName, trimmed)\n }\n setRenamingLabel(null)\n setRenameValue('')\n }\n\n const handleDelete = (name: string) => {\n onDeleteLabel?.(name)\n setConfirmingDelete(null)\n }\n\n const inputStyle = {\n background: 'var(--vscode-input-background)',\n color: 'var(--vscode-input-foreground)',\n border: '1px solid var(--vscode-input-border, transparent)',\n }\n\n return (\n <div className=\"px-4 space-y-3\">\n {groupedLabels.map(([group, labels]) => (\n <div key={group}>\n <div\n className=\"text-[10px] font-semibold uppercase tracking-wider mb-1.5\"\n style={{ color: 'var(--vscode-descriptionForeground)' }}\n >\n {group}\n </div>\n <div className=\"space-y-1\">\n {labels.map(({ name, def }) => (\n <div\n key={name}\n className=\"flex items-center gap-2 px-2 py-1.5 rounded group/label transition-colors\"\n onMouseEnter={e => e.currentTarget.style.background = 'var(--vscode-list-hoverBackground)'}\n onMouseLeave={e => e.currentTarget.style.background = 'transparent'}\n >\n <ColorPicker\n value={def?.color || '#6b7280'}\n onChange={color => onSetLabel?.(name, { ...def, color, group: def?.group })}\n />\n {renamingLabel === name ? (\n <input\n type=\"text\"\n value={renameValue}\n onChange={e => setRenameValue(e.target.value)}\n onKeyDown={e => {\n if (e.key === 'Enter') handleRename(name)\n if (e.key === 'Escape') { setRenamingLabel(null); setRenameValue('') }\n }}\n onBlur={() => handleRename(name)}\n autoFocus\n className=\"flex-1 px-1.5 py-0.5 text-xs rounded min-w-0\"\n style={inputStyle}\n />\n ) : (\n <span className=\"flex-1 text-xs truncate\" style={{ color: 'var(--vscode-foreground)' }}>\n {name}\n </span>\n )}\n {def?.group && renamingLabel !== name && (\n <span\n className=\"text-[10px] px-1.5 py-0.5 rounded-full shrink-0\"\n style={{\n background: 'var(--vscode-badge-background)',\n color: 'var(--vscode-badge-foreground)',\n }}\n >\n {def.group}\n </span>\n )}\n {confirmingDelete === name ? (\n <div className=\"flex items-center gap-1 shrink-0\">\n <span className=\"text-[10px]\" style={{ color: 'var(--vscode-errorForeground, #f44)' }}>\n {getCardCount(name)} card{getCardCount(name) !== 1 ? 's' : ''}\n </span>\n <button\n type=\"button\"\n onClick={() => handleDelete(name)}\n className=\"px-1.5 py-0.5 text-[10px] rounded\"\n style={{\n background: 'var(--vscode-inputValidation-errorBackground, #5a1d1d)',\n color: 'var(--vscode-errorForeground, #f44)',\n }}\n >\n Delete\n </button>\n <button\n type=\"button\"\n onClick={() => setConfirmingDelete(null)}\n className=\"px-1.5 py-0.5 text-[10px] rounded\"\n style={{ color: 'var(--vscode-descriptionForeground)' }}\n >\n Cancel\n </button>\n </div>\n ) : (\n <div className=\"flex items-center gap-0.5 shrink-0 opacity-0 group-hover/label:opacity-100 transition-opacity\">\n <button\n type=\"button\"\n onClick={() => { setRenamingLabel(name); setRenameValue(name) }}\n className=\"p-1 rounded transition-colors\"\n style={{ color: 'var(--vscode-descriptionForeground)' }}\n onMouseEnter={e => e.currentTarget.style.color = 'var(--vscode-foreground)'}\n onMouseLeave={e => e.currentTarget.style.color = 'var(--vscode-descriptionForeground)'}\n title=\"Rename label\"\n >\n <Pencil size={12} />\n </button>\n <button\n type=\"button\"\n onClick={() => setConfirmingDelete(name)}\n className=\"p-1 rounded transition-colors\"\n style={{ color: 'var(--vscode-descriptionForeground)' }}\n onMouseEnter={e => e.currentTarget.style.color = 'var(--vscode-errorForeground, #f44)'}\n onMouseLeave={e => e.currentTarget.style.color = 'var(--vscode-descriptionForeground)'}\n title=\"Delete label\"\n >\n <Trash2 size={12} />\n </button>\n </div>\n )}\n </div>\n ))}\n </div>\n </div>\n ))}\n\n {/* Add new label form */}\n <div\n className=\"rounded-lg p-2 space-y-2\"\n style={{\n background: 'var(--vscode-input-background)',\n border: '1px solid var(--vscode-input-border, transparent)',\n }}\n >\n <div className=\"flex items-center gap-2\">\n <ColorPicker value={newColor} onChange={setNewColor} />\n <input\n type=\"text\"\n placeholder=\"New label name...\"\n value={newName}\n onChange={e => setNewName(e.target.value)}\n onKeyDown={e => { if (e.key === 'Enter') handleAdd() }}\n className=\"flex-1 px-1.5 py-1 text-xs rounded bg-transparent min-w-0\"\n style={{\n color: 'var(--vscode-input-foreground)',\n outline: 'none',\n }}\n />\n </div>\n <div className=\"flex items-center gap-2\">\n <input\n type=\"text\"\n placeholder=\"Group (optional)\"\n value={newGroup}\n onChange={e => setNewGroup(e.target.value)}\n onKeyDown={e => { if (e.key === 'Enter') handleAdd() }}\n list=\"label-groups\"\n className=\"flex-1 px-1.5 py-1 text-xs rounded\"\n style={inputStyle}\n />\n <datalist id=\"label-groups\">\n {existingGroups.map(g => <option key={g} value={g} />)}\n </datalist>\n <button\n type=\"button\"\n onClick={handleAdd}\n disabled={!newName.trim()}\n className=\"flex items-center gap-1 px-2 py-1 text-xs rounded transition-colors disabled:opacity-40\"\n style={{\n background: 'var(--vscode-button-background)',\n color: 'var(--vscode-button-foreground)',\n }}\n >\n <Plus size={12} />\n Add\n </button>\n </div>\n </div>\n </div>\n )\n}\n\nfunction SettingsPanelContent({ settings, workspace, onClose, onSave, onSetLabel, onRenameLabel, onDeleteLabel }: 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 {workspace && (\n <>\n <SettingsSection title=\"Workspace\">\n <SettingsInfo label=\"Project Path\" value={workspace.projectPath} />\n <SettingsInfo label=\"Features Directory\" value={workspace.featuresDirectory} />\n <SettingsInfo label=\"Server Port\" value={String(workspace.port)} />\n <SettingsInfo label=\"Config Version\" value={String(workspace.configVersion)} />\n </SettingsSection>\n <div style={{ borderTop: '1px solid var(--vscode-panel-border)' }} />\n </>\n )}\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 <SettingsToggle\n label=\"Show Deleted Column\"\n description=\"Display the Deleted column to manage soft-deleted cards\"\n checked={local.showDeletedColumn}\n onChange={v => update({ showDeletedColumn: 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\n <div style={{ borderTop: '1px solid var(--vscode-panel-border)' }} />\n\n <SettingsSection title=\"Labels\">\n <LabelsSection\n onSetLabel={onSetLabel}\n onRenameLabel={onRenameLabel}\n onDeleteLabel={onDeleteLabel}\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 { Comment, Feature, KanbanColumn, Priority, ExtensionMessage, FeatureFrontmatter, CardDisplaySettings } from '../shared/types'\nimport { DELETED_STATUS_ID, 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 workspace,\n cardSettings,\n settingsOpen,\n setFeatures,\n setColumns,\n setBoards,\n setCurrentBoard,\n setIsDarkMode,\n setWorkspace,\n setCardSettings,\n setSettingsOpen,\n setLabelDefs\n } = useStore()\n\n const [createFeatureOpen, setCreateFeatureOpen] = useState(false)\n const [createFeatureStatus, setCreateFeatureStatus] = useState<string>('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 comments: Comment[]\n contentVersion: number\n } | null>(null)\n\n // Undo delete stack\n const [pendingDeletes, setPendingDeletes] = useState<{ id: string; feature: Feature; originalStatus: string }[]>([])\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 move to deleted status in local state\n const originalStatus = feature.status\n setFeatures(features.map(f => f.id === featureId ? { ...f, status: DELETED_STATUS_ID } : f))\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, originalStatus }])\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 to its original status\n const { features } = useStore.getState()\n setFeatures(features.map(f => f.id === entry.feature.id ? { ...f, status: entry.originalStatus } : f))\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.boards) setBoards(message.boards)\n if (message.currentBoard) setCurrentBoard(message.currentBoard)\n if (message.workspace) setWorkspace(message.workspace)\n if (message.settings) {\n if (message.settings.markdownEditorMode && editingFeature) {\n setEditingFeature(null)\n }\n setCardSettings(message.settings)\n }\n if (message.labels) setLabelDefs(message.labels)\n break\n case 'featuresUpdated':\n setFeatures(message.features)\n break\n case 'triggerCreateDialog':\n setCreateFeatureStatus('backlog')\n setCreateFeatureOpen(true)\n break\n case 'labelsUpdated':\n setLabelDefs(message.labels)\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 comments: message.comments || [],\n contentVersion: contentVersionRef.current\n })\n break\n }\n case 'actionResult': {\n // fire-and-forget: no UI feedback needed for now\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, setBoards, setCurrentBoard, setWorkspace, setCardSettings, setSettingsOpen, setLabelDefs])\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 handleTransferToBoard = (toBoard: string, targetStatus: string): void => {\n if (!editingFeature) return\n vscode.postMessage({\n type: 'transferCard',\n featureId: editingFeature.id,\n toBoard,\n targetStatus\n })\n setEditingFeature(null)\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 handlePermanentDeleteFeature = (): void => {\n if (!editingFeature) return\n vscode.postMessage({ type: 'permanentDeleteFeature', featureId: editingFeature.id })\n setEditingFeature(null)\n }\n\n const handleRestoreFeature = (): void => {\n if (!editingFeature) return\n vscode.postMessage({ type: 'restoreFeature', featureId: editingFeature.id })\n setEditingFeature(null)\n }\n\n const handlePurgeDeletedCards = (): void => {\n vscode.postMessage({ type: 'purgeDeletedCards' })\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 handleAddComment = (author: string, content: string): void => {\n if (!editingFeature) return\n vscode.postMessage({ type: 'addComment', featureId: editingFeature.id, author, content })\n }\n\n const handleUpdateComment = (commentId: string, content: string): void => {\n if (!editingFeature) return\n vscode.postMessage({ type: 'updateComment', featureId: editingFeature.id, commentId, content })\n }\n\n const handleDeleteComment = (commentId: string): void => {\n if (!editingFeature) return\n vscode.postMessage({ type: 'deleteComment', featureId: editingFeature.id, commentId })\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)\n setCreateFeatureOpen(true)\n }\n\n const handleCreateFeature = (data: {\n status: string\n priority: Priority\n content: string\n assignee: string | null\n dueDate: string | null\n labels: string[]\n actions: string[]\n }): void => {\n vscode.postMessage({\n type: 'createFeature',\n data\n })\n }\n\n const handleTriggerAction = useCallback((action: string): void => {\n if (!editingFeature) return\n const callbackKey = `action-${Date.now()}`\n vscode.postMessage({\n type: 'triggerAction',\n featureId: editingFeature.id,\n action,\n callbackKey\n })\n }, [editingFeature])\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, 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\n onOpenSettings={() => vscode.postMessage({ type: 'openSettings' })}\n onAddColumn={handleAddColumn}\n onToggleTheme={() => vscode.postMessage({ type: 'toggleTheme' })}\n onSwitchBoard={(boardId) => vscode.postMessage({ type: 'switchBoard', boardId })}\n onCreateBoard={(name) => vscode.postMessage({ type: 'createBoard', name })}\n />\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 onPurgeDeletedCards={handlePurgeDeletedCards}\n selectedFeatureId={editingFeature?.id}\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 comments={editingFeature.comments}\n contentVersion={editingFeature.contentVersion}\n onSave={handleSaveFeature}\n onClose={handleCloseEditor}\n onDelete={handleDeleteFeature}\n onPermanentDelete={handlePermanentDeleteFeature}\n onRestore={handleRestoreFeature}\n onOpenFile={handleOpenFile}\n onStartWithAI={handleStartWithAI}\n onAddAttachment={handleAddAttachment}\n onOpenAttachment={handleOpenAttachment}\n onRemoveAttachment={handleRemoveAttachment}\n onAddComment={handleAddComment}\n onUpdateComment={handleUpdateComment}\n onDeleteComment={handleDeleteComment}\n onTransferToBoard={handleTransferToBoard}\n onTriggerAction={handleTriggerAction}\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 workspace={workspace}\n onClose={() => setSettingsOpen(false)}\n onSave={handleSaveSettings}\n onSetLabel={(name, definition) => vscode.postMessage({ type: 'setLabel', name, definition })}\n onRenameLabel={(oldName, newName) => vscode.postMessage({ type: 'renameLabel', oldName, newName })}\n onDeleteLabel={(name) => vscode.postMessage({ type: 'deleteLabel', name })}\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 './assets/main.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","createRoot","BASE_62_DIGITS","midpoint","digits","zero","digitA","digitB","midDigit","validateInteger","int","getIntegerLength","head","getIntegerPart","key","integerPartLength","validateOrderKey","i","incrementInteger","x","digs","carry","decrementInteger","borrow","generateKeyBetween","ib","fb","res","ia","fa","createStoreImpl","createState","state","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","parseMetaTokens","query","metaFilter","plainText","_full","value","set","get","workspace","labels","features","columns","boards","boardId","dark","settings","open","priority","assignee","label","filter","sort","layout","feature","id","updates","status","searchQuery","priorityFilter","assigneeFilter","labelFilter","dueDateFilter","sortOrder","group","labelDefs","groupLabels","def","name","dueDate","path","needle","val","curr","_a","assignees","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","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","DELETED_STATUS_ID","DELETED_COLUMN","LABEL_PRESET_COLORS","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","currentClassPartObject","pathPart","func","classGroupEntries","prefixedClassGroup","createLruCache","maxCacheSize","cacheSize","cache","previousCache","update","IMPORTANT_MODIFIER","createParseClassName","separator","experimentalParseClassName","isSeparatorSingleCharacter","firstSeparatorCharacter","separatorLength","parseClassName","modifiers","bracketDepth","modifierStart","postfixModifierPosition","index","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","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","formatRelativeCompact","isoDate","now","then","diff","years","months","weeks","days","hours","minutes","seconds","formatAbsoluteDate","pad","formatVerboseRelative","parts","buildDateTooltip","created","modified","lines","priorityColors","priorityLabels","getDescriptionFromContent","headingIndex","renderDescriptionHtml","text","marked","FeatureCard","onClick","isDragging","isSelected","cardSettings","title","description","fileName","formatDueDate","dateStr","dueInfo","formatCompletedAt","completed","diffMs","diffMins","diffHours","diffDays","completedText","jsxs","jsx","FileText","Paperclip","Calendar","Check","Clock","KanbanColumn","column","onFeatureClick","onAddFeature","onEditColumn","onRemoveColumn","onDragStart","onDragOver","onDragOverCard","onDrop","onDragEnd","draggedFeature","dropTarget","isDeletedColumn","onPurgeColumn","selectedFeatureId","isVertical","isDropTarget","menuOpen","setMenuOpen","useState","menuRef","useRef","useEffect","handleClickOutside","Trash2","Fragment","Plus","MoreVertical","Pencil","KanbanBoard","onMoveFeature","onPurgeDeletedCards","getFilteredFeaturesByStatus","getFeaturesByStatus","setDraggedFeature","setDropTarget","handleDragStart","useCallback","handleDragOver","handleDragOverCard","columnId","cardIndex","rect","midY","insertIndex","prev","handleDrop","filteredFeatures","filteredInsertIndex","currentIndex","allFeatures","filteredWithoutDragged","unfilteredInsertIndex","lastVisible","anchorFeature","handleDragEnd","DAYS","MONTHS","DatePicker","onChange","placeholder","isOpen","setIsOpen","selected","viewYear","setViewYear","viewMonth","setViewMonth","daysInMonth","firstDay","cells","prevMonth","nextMonth","selectDay","day","formatDisplay","ChevronLeft","ChevronRight","wrapSelection","textarea","action","start","end","before","after","replacement","cursorOffset","lineStart","linePrefix","newValue","newPos","ToolbarButton","icon","commentMarked","Marked","href","tokens","titleAttr","parseCommentMarkdown","processed","AUTHOR_KEY","CommentEditor","initialContent","onSubmit","onCancel","submitLabel","author","setAuthor","setContent","activeTab","setActiveTab","textareaRef","isFirstRender","previewHtml","useMemo","handleFormat","handleSubmit","trimmedAuthor","trimmedContent","handleKeyDown","canSubmit","tab","Bold","Italic","Quote","Code","Link","List","ListOrdered","CommentBody","html","timeAgo","CommentsSection","comments","onAddComment","onUpdateComment","onDeleteComment","editingId","setEditingId","comment","MarkdownEditor","autoFocus","mode","isEditMode","writeLabel","MessageCircle","Heading","ListChecks","priorityConfig","statusConfig","Dropdown","options","current","ChevronDown","option","AssigneeInput","isFocused","setIsFocused","inputRef","containerRef","existingAssignees","suggestions","showSuggestions","initials","LabelInput","newLabel","setNewLabel","existingLabels","labelSet","available","addLabel","ActionInput","actions","newAction","setNewAction","addAction","PropertyRow","children","CreateFeatureDialog","props","CreateFeatureDialogContent","onClose","onCreate","initialStatus","setTitle","setStatus","setPriority","setAssignee","setDueDate","setLabels","setActions","setDescription","timer","desc","heading","handleSaveAndClose","handleCancel","CircleDot","Signal","User","Tag","Zap","target","priorities","priorityDots","aiAgentTabs","agentButtonColors","aiModesByAgent","StatusDropdown","onTransferToBoard","currentBoard","otherBoards","col","board","AIDropdown","onSelect","selectedTab","setSelectedTab","modes","buttonColors","Wand2","RunActionsDropdown","onTriggerAction","MetadataSection","metadata","expanded","setExpanded","keys","MetadataTree","data","depth","LabelEditor","removeLabel","FeatureEditor","featureId","frontmatter","contentVersion","onSave","onDelete","onPermanentDelete","onRestore","onOpenFile","onStartWithAI","onAddAttachment","onOpenAttachment","onRemoveAttachment","currentFrontmatter","setCurrentFrontmatter","currentContent","setCurrentContent","confirmingPermanentDelete","setConfirmingPermanentDelete","isDeleted","debounceRef","currentFrontmatterRef","currentContentRef","save","handleContentChange","handleFrontmatterUpdate","next","attachment","dueDateOptions","selectClassName","Toolbar","onOpenSettings","onAddColumn","onToggleTheme","onSwitchBoard","onCreateBoard","setSearchQuery","setPriorityFilter","setAssigneeFilter","setLabelFilter","setDueDateFilter","setSortOrder","clearAllFilters","getUniqueAssignees","getUniqueLabels","hasActiveFilters","toggleLayout","isDarkMode","filtersActive","groupedLabels","groups","boardDropdownOpen","setBoardDropdownOpen","creatingBoard","setCreatingBoard","newBoardName","setNewBoardName","dropdownRef","newBoardInputRef","currentBoardName","handleCreateBoard","Search","Rows","Columns","Sun","Moon","Settings","UndoToast","message","onUndo","onExpire","duration","progress","setProgress","step","SettingsPanel","onSetLabel","onRenameLabel","onDeleteLabel","SettingsPanelContent","ToggleSwitch","checked","SettingsSection","SettingsToggle","SettingsInfo","SettingsDropdown","ColorPicker","customHex","setCustomHex","LabelsSection","newName","setNewName","newColor","setNewColor","newGroup","setNewGroup","renamingLabel","setRenamingLabel","renameValue","setRenameValue","confirmingDelete","setConfirmingDelete","allLabels","existingGroups","getCardCount","labelName","handleAdd","trimmed","handleRename","oldName","handleDelete","inputStyle","color","local","setLocal","patch","PRESET_COLORS","ColumnDialog","initial","setName","setColor","vscode","App","settingsOpen","setFeatures","setColumns","setBoards","setCurrentBoard","setIsDarkMode","setWorkspace","setCardSettings","setSettingsOpen","setLabelDefs","createFeatureOpen","setCreateFeatureOpen","createFeatureStatus","setCreateFeatureStatus","columnDialogOpen","setColumnDialogOpen","editingColumn","setEditingColumn","contentVersionRef","editingFeature","setEditingFeature","pendingDeletes","setPendingDeletes","pendingDeletesRef","nextIdRef","handleDeleteFeatureFromCard","originalStatus","commitDelete","entryId","entry","handleUndoDelete","handleUndoLatest","stack","altPressedAlone","altDownTimer","handleKeyUp","handleMouseDown","updateTheme","isDark","observer","handleMessage","event","handleFeatureClick","handleSaveFeature","handleTransferToBoard","toBoard","targetStatus","handleCloseEditor","handleDeleteFeature","handlePermanentDeleteFeature","handleRestoreFeature","handlePurgeDeletedCards","handleOpenFile","handleStartWithAI","agent","permissionMode","handleAddAttachment","handleOpenAttachment","handleRemoveAttachment","handleAddComment","handleUpdateComment","commentId","handleDeleteComment","handleSaveSettings","handleAddColumn","handleEditColumn","handleRemoveColumn","handleSaveColumn","handleAddFeatureInColumn","handleCreateFeature","handleTriggerAction","callbackKey","handleMoveFeature","newStatus","newOrder","targetColumn","clampedOrder","newOrderKey","updated","definition","StrictMode"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,7,9,10]}
1
+ {"version":3,"file":"index.js","sources":["../../node_modules/react/cjs/react-jsx-runtime.production.min.js","../../node_modules/react/jsx-runtime.js","../../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","../../node_modules/clsx/dist/clsx.mjs","../../node_modules/tailwind-merge/dist/bundle-mjs.mjs","../../src/webview/lib/utils.ts","../../src/webview/components/FeatureCard.tsx","../../src/webview/components/KanbanColumn.tsx","../../src/webview/components/KanbanBoard.tsx","../../src/webview/components/DatePicker.tsx","../../src/webview/lib/markdownTools.tsx","../../src/webview/components/CommentEditor.tsx","../../src/webview/components/CommentsSection.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/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","'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, KanbanColumn, Priority, CardDisplaySettings, BoardInfo, WorkspaceInfo, LabelDefinition } from '../../shared/types'\n\nexport type DueDateFilter = 'all' | 'overdue' | 'today' | 'this-week' | 'no-date'\nexport type LayoutMode = 'horizontal' | 'vertical'\nexport type SortOrder = 'order' | 'created:asc' | 'created:desc' | 'modified:asc' | 'modified:desc'\n\ninterface KanbanState {\n features: Feature[]\n columns: KanbanColumn[]\n boards: BoardInfo[]\n currentBoard: string\n isDarkMode: boolean\n searchQuery: string\n priorityFilter: Priority | 'all'\n assigneeFilter: string | 'all'\n labelFilter: string[]\n dueDateFilter: DueDateFilter\n columnSorts: Record<string, SortOrder>\n layout: LayoutMode\n workspace: WorkspaceInfo | null\n cardSettings: CardDisplaySettings\n settingsOpen: boolean\n labelDefs: Record<string, LabelDefinition>\n\n setWorkspace: (workspace: WorkspaceInfo) => void\n setLabelDefs: (labels: Record<string, LabelDefinition>) => void\n setFeatures: (features: Feature[]) => void\n setColumns: (columns: KanbanColumn[]) => void\n setBoards: (boards: BoardInfo[]) => void\n setCurrentBoard: (boardId: string) => 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: (labels: string[]) => void\n setDueDateFilter: (filter: DueDateFilter) => void\n setColumnSort: (columnId: string, sort: SortOrder) => 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: string) => Feature[]\n getFilteredFeaturesByStatus: (status: string) => 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\n/**\n * Parses `meta.path: value` tokens from the search query string.\n * Returns the extracted meta filters and the remaining plain-text query.\n *\n * @example\n * parseMetaTokens('meta.sprint: Q1 bug fix')\n * // => { metaFilter: { sprint: 'Q1' }, plainText: 'bug fix' }\n */\nfunction parseMetaTokens(query: string): { metaFilter: Record<string, string>; plainText: string } {\n const metaFilter: Record<string, string> = {}\n const plainText = query.replace(/meta\\.([a-zA-Z0-9_.]+):\\s*(\\S+)/g, (_full, key, value) => {\n metaFilter[key] = value\n return ''\n }).trim()\n return { metaFilter, plainText }\n}\n\nexport const useStore = create<KanbanState>((set, get) => ({\n features: [],\n columns: [],\n boards: [],\n currentBoard: 'default',\n isDarkMode: getInitialDarkMode(),\n searchQuery: '',\n priorityFilter: 'all',\n assigneeFilter: 'all',\n labelFilter: [],\n dueDateFilter: 'all',\n columnSorts: {},\n layout: 'horizontal',\n workspace: null,\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 showDeletedColumn: false,\n defaultPriority: 'medium',\n defaultStatus: 'backlog',\n boardZoom: 100,\n cardZoom: 100\n },\n settingsOpen: false,\n labelDefs: {},\n\n setWorkspace: (workspace) => set({ workspace }),\n setLabelDefs: (labels) => set({ labelDefs: labels }),\n setFeatures: (features) => set({ features }),\n setColumns: (columns) => set({ columns }),\n setBoards: (boards) => set({ boards }),\n setCurrentBoard: (boardId) => set({ currentBoard: boardId }),\n setIsDarkMode: (dark) => set({ isDarkMode: dark }),\n setCardSettings: (settings) => set((state) => ({ cardSettings: { ...settings, boardZoom: settings.boardZoom ?? state.cardSettings.boardZoom, cardZoom: settings.cardZoom ?? state.cardSettings.cardZoom } })),\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: (labels) => set({ labelFilter: labels }),\n setDueDateFilter: (filter) => set({ dueDateFilter: filter }),\n setColumnSort: (columnId, sort) => set((state) => ({\n columnSorts: sort === 'order'\n ? Object.fromEntries(Object.entries(state.columnSorts).filter(([k]) => k !== columnId))\n : { ...state.columnSorts, [columnId]: sort }\n })),\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: [],\n dueDateFilter: 'all',\n columnSorts: {}\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 columnSorts\n } = get()\n const sortOrder: SortOrder = columnSorts[status] || 'order'\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 (multiselect)\n if (labelFilter.length > 0) {\n if (!f.labels.some(l => labelFilter.includes(l))) return false\n }\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 - supports meta.field: value tokens and plain text\n if (searchQuery) {\n const { metaFilter, plainText } = parseMetaTokens(searchQuery)\n\n if (Object.keys(metaFilter).length > 0) {\n const passes = Object.entries(metaFilter).every(([path, needle]) => {\n if (!f.metadata) return false\n const val = path.split('.').reduce((curr: unknown, k) =>\n curr != null && typeof curr === 'object' ? (curr as Record<string, unknown>)[k] : undefined, f.metadata)\n return val != null && String(val).toLowerCase().includes(needle.toLowerCase())\n })\n if (!passes) return false\n }\n\n if (plainText) {\n const q = plainText.toLowerCase()\n const textMatch = (\n f.content.toLowerCase().includes(q) ||\n f.id.toLowerCase().includes(q) ||\n f.assignee?.toLowerCase().includes(q) ||\n f.labels.some((l) => l.toLowerCase().includes(q))\n )\n if (!textMatch) return false\n }\n }\n\n return true\n })\n .sort((a, b) => {\n if (sortOrder === 'created:asc') return a.created.localeCompare(b.created)\n if (sortOrder === 'created:desc') return b.created.localeCompare(a.created)\n if (sortOrder === 'modified:asc') return a.modified.localeCompare(b.modified)\n if (sortOrder === 'modified:desc') return b.modified.localeCompare(a.modified)\n return a.order < b.order ? -1 : a.order > b.order ? 1 : 0\n })\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 columnSorts\n } = get()\n return (\n searchQuery !== '' ||\n priorityFilter !== 'all' ||\n assigneeFilter !== 'all' ||\n labelFilter.length > 0 ||\n dueDateFilter !== 'all' ||\n Object.keys(columnSorts).length > 0\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\n/** Current card frontmatter schema version. Increment when the format changes. */\nexport const CARD_FORMAT_VERSION = 1\n\n/**\n * Priority level for a kanban card.\n * Cards are ranked from most urgent (`'critical'`) to least urgent (`'low'`).\n *\n * @example\n * const p: Priority = 'high'\n */\nexport type Priority = 'critical' | 'high' | 'medium' | 'low'\n\n/**\n * Sort option for {@link KanbanSDK.listCards}.\n * - `'created:asc'` — oldest cards first\n * - `'created:desc'` — newest cards first\n * - `'modified:asc'` — least recently modified first\n * - `'modified:desc'` — most recently modified first\n *\n * When omitted, cards are sorted by their fractional `order` index (board order).\n */\nexport type CardSortOption = 'created:asc' | 'created:desc' | 'modified:asc' | 'modified:desc'\n\n/**\n * String alias representing a column or status identifier.\n * Corresponds to the `id` field of a {@link KanbanColumn} (e.g. `'backlog'`, `'in-progress'`).\n */\nexport type FeatureStatus = string\n\n/**\n * A comment attached to a kanban card.\n */\nexport interface Comment {\n /** Unique identifier for the comment. */\n id: string\n /** Display name of the comment author. */\n author: string\n /** ISO 8601 timestamp of when the comment was created. */\n created: string\n /** Markdown body of the comment. */\n content: string\n}\n\n/**\n * A kanban card with all associated metadata.\n *\n * Cards are persisted as markdown files with YAML frontmatter inside the\n * `.kanban/{status}/` directory structure.\n */\nexport interface Feature {\n /** Card frontmatter schema version. 0 = legacy (pre-versioning). */\n version: number\n /** Unique identifier for the card (e.g. `'42-build-dashboard'`). */\n id: string\n /** Board this card belongs to. Omitted when only one board exists. */\n boardId?: string\n /** Current column/status of the card. */\n status: FeatureStatus\n /** Priority level of the card. */\n priority: Priority\n /** Assignee name, or `null` if unassigned. */\n assignee: string | null\n /** ISO 8601 due date string, or `null` if no due date is set. */\n dueDate: string | null\n /** ISO 8601 timestamp of when the card was created. */\n created: string\n /** ISO 8601 timestamp of the last modification. */\n modified: string\n /** ISO 8601 timestamp of when the card was moved to done, or `null`. */\n completedAt: string | null\n /** Tags/labels attached to the card. */\n labels: string[]\n /** File paths of attachments associated with the card. */\n attachments: string[]\n /** Discussion comments on the card. */\n comments: Comment[]\n /** Fractional index (base-62) controlling sort order within a column. */\n order: string\n /** Markdown body content of the card. */\n content: string\n /** Arbitrary user-defined metadata stored as YAML in the frontmatter. */\n metadata?: Record<string, any>\n /** Named action strings that can be triggered via the action webhook. */\n actions?: string[]\n /** Absolute path to the card's markdown file on disk. */\n filePath: string\n}\n\n/**\n * Summary information for a kanban board.\n */\nexport interface BoardInfo {\n /** Unique identifier for the board. */\n id: string\n /** Human-readable board name. */\n name: string\n /** Optional description of the board's purpose. */\n description?: string\n columns?: KanbanColumn[]\n}\n\n/**\n * Extracts a title from markdown content by finding the first `# heading`.\n * Falls back to the first non-empty line if no heading is found,\n * or `'Untitled'` if the content is empty.\n *\n * @param content - Raw markdown string to extract the title from.\n * @returns The extracted title string.\n *\n * @example\n * getTitleFromContent('# My Card\\nSome body text')\n * // => 'My Card'\n *\n * @example\n * getTitleFromContent('Just a line of text')\n * // => 'Just a line of text'\n */\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/**\n * Creates a filename-safe slug from a title string.\n *\n * The slug is lowercased, stripped of special characters, limited to 50\n * characters, and falls back to `'feature'` if the result would be empty.\n *\n * @param title - The human-readable title to slugify.\n * @returns A URL/filename-safe slug string.\n *\n * @example\n * generateSlug('Build Dashboard UI')\n * // => 'build-dashboard-ui'\n *\n * @example\n * generateSlug('Hello, World!!!')\n * // => 'hello-world'\n */\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/**\n * Generates a card filename from an incremental numeric ID and a title.\n *\n * The filename is composed of the ID prefix followed by a slugified title\n * (e.g. `'42-build-dashboard'`).\n *\n * @param id - The numeric card ID.\n * @param title - The human-readable card title.\n * @returns A filename string in the format `'{id}-{slug}'`.\n *\n * @example\n * generateFeatureFilename(42, 'Build Dashboard')\n * // => '42-build-dashboard'\n */\nexport function generateFeatureFilename(id: number, title: string): string {\n const slug = generateSlug(title)\n return `${id}-${slug}`\n}\n\n/**\n * Extracts the numeric ID prefix from a filename or card ID string.\n *\n * Looks for a leading sequence of digits optionally followed by a hyphen\n * (e.g. `'42-build-dashboard'` yields `42`).\n *\n * @param filenameOrId - A filename or card ID string such as `'42-build-dashboard'`.\n * @returns The parsed numeric ID, or `null` if no numeric prefix is found.\n *\n * @example\n * extractNumericId('42-build-dashboard')\n * // => 42\n *\n * @example\n * extractNumericId('no-number')\n * // => null\n */\nexport function extractNumericId(filenameOrId: string): number | null {\n const match = filenameOrId.match(/^(\\d+)(?:-|$)/)\n return match ? parseInt(match[1], 10) : null\n}\n\n/**\n * Definition of a kanban board column.\n */\nexport interface KanbanColumn {\n /** Unique identifier used as the card status value (e.g. `'in-progress'`). */\n id: string\n /** Human-readable column name displayed in the UI (e.g. `'In Progress'`). */\n name: string\n /** CSS color string for the column header (e.g. `'#f59e0b'`). */\n color: string\n}\n\n/**\n * The default set of five kanban columns provided when no custom columns\n * are configured: Backlog, To Do, In Progress, Review, and Done.\n *\n * @example\n * // Use as the initial column configuration\n * const config = { columns: [...DEFAULT_COLUMNS] }\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 const DELETED_STATUS_ID = 'deleted'\nexport const DELETED_COLUMN: KanbanColumn = { id: DELETED_STATUS_ID, name: 'Deleted', color: '#ef4444' }\n\n/**\n * UI display preferences controlling which card fields are visible and\n * how the board renders cards.\n */\nexport interface CardDisplaySettings {\n /** Whether to show colored priority badges on cards. */\n showPriorityBadges: boolean\n /** Whether to display the assignee on cards. */\n showAssignee: boolean\n /** Whether to display the due date on cards. */\n showDueDate: boolean\n /** Whether to display labels/tags on cards. */\n showLabels: boolean\n /** Whether to show the \"Build with AI\" action on cards. */\n showBuildWithAI: boolean\n /** Whether to display the source filename on cards. */\n showFileName: boolean\n /** Whether to use a compact card layout with reduced spacing. */\n compactMode: boolean\n /** Whether to use the markdown editor when editing card content. */\n markdownEditorMode: boolean\n /** Whether to display the hidden Deleted column on the board. */\n showDeletedColumn: boolean\n /** The default priority assigned to newly created cards. */\n defaultPriority: Priority\n /** The default column/status assigned to newly created cards. */\n defaultStatus: string\n /** Zoom level for the board view as a percentage (75–150). Default 100. */\n boardZoom: number\n /** Zoom level for the card detail panel as a percentage (75–150). Default 100. */\n cardZoom: number\n}\n\nexport interface LabelDefinition {\n color: string\n group?: string\n}\n\nexport const LABEL_PRESET_COLORS: { name: string; hex: string }[] = [\n { name: 'red', hex: '#e11d48' },\n { name: 'orange', hex: '#ea580c' },\n { name: 'amber', hex: '#d97706' },\n { name: 'yellow', hex: '#ca8a04' },\n { name: 'lime', hex: '#65a30d' },\n { name: 'green', hex: '#16a34a' },\n { name: 'teal', hex: '#0d9488' },\n { name: 'cyan', hex: '#0891b2' },\n { name: 'blue', hex: '#2563eb' },\n { name: 'indigo', hex: '#4f46e5' },\n { name: 'violet', hex: '#7c3aed' },\n { name: 'pink', hex: '#db2777' },\n]\n\n/**\n * YAML frontmatter fields stored at the top of each card's markdown file.\n *\n * These fields are parsed from and serialized back to the frontmatter block\n * when reading/writing card files.\n */\nexport interface FeatureFrontmatter {\n /** Card frontmatter schema version. 0 = legacy (pre-versioning). */\n version: number\n /** Unique card identifier. */\n id: string\n /** Current column/status of the card. */\n status: string\n /** Priority level of the card. */\n priority: Priority\n /** Assignee name, or `null` if unassigned. */\n assignee: string | null\n /** ISO 8601 due date, or `null` if none. */\n dueDate: string | null\n /** ISO 8601 creation timestamp. */\n created: string\n /** ISO 8601 last-modified timestamp. */\n modified: string\n /** ISO 8601 completion timestamp, or `null` if not completed. */\n completedAt: string | null\n /** Tags/labels attached to the card. */\n labels: string[]\n /** File paths of attachments. */\n attachments: string[]\n /** Fractional index (base-62) for ordering within a column. */\n order: string\n /** Arbitrary user-defined metadata stored as YAML in the frontmatter. */\n metadata?: Record<string, any>\n /** Named action strings that can be triggered via the action webhook. */\n actions?: string[]\n}\n\n/**\n * Read-only workspace information displayed in the settings panel.\n */\nexport interface WorkspaceInfo {\n projectPath: string\n featuresDirectory: string\n port: number\n configVersion: number\n}\n\n// Messages between extension and webview\nexport type ExtensionMessage =\n | { type: 'init'; features: Feature[]; columns: KanbanColumn[]; settings: CardDisplaySettings; boards?: BoardInfo[]; currentBoard?: string; workspace?: WorkspaceInfo; labels?: Record<string, LabelDefinition> }\n | { type: 'featuresUpdated'; features: Feature[] }\n | { type: 'triggerCreateDialog' }\n | { type: 'featureContent'; featureId: string; content: string; frontmatter: FeatureFrontmatter; comments: Comment[] }\n | { type: 'showSettings'; settings: CardDisplaySettings }\n | { type: 'labelsUpdated'; labels: Record<string, LabelDefinition> }\n | { type: 'actionResult'; callbackKey: string; error?: string }\n\nexport type WebviewMessage =\n | { type: 'ready' }\n | { type: 'createFeature'; data: { status: string; priority: Priority; content: string; assignee: string | null; dueDate: string | null; labels: string[]; metadata?: Record<string, any>; actions?: 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 | { type: 'addComment'; featureId: string; author: string; content: string }\n | { type: 'updateComment'; featureId: string; commentId: string; content: string }\n | { type: 'deleteComment'; featureId: string; commentId: string }\n | { type: 'switchBoard'; boardId: string }\n | { type: 'createBoard'; name: string }\n | { type: 'permanentDeleteFeature'; featureId: string }\n | { type: 'restoreFeature'; featureId: string }\n | { type: 'purgeDeletedCards' }\n | { type: 'transferCard'; featureId: string; toBoard: string; targetStatus: string }\n | { type: 'setLabel'; name: string; definition: LabelDefinition }\n | { type: 'renameLabel'; oldName: string; newName: string }\n | { type: 'deleteLabel'; name: string }\n | { type: 'triggerAction'; featureId: string; action: string; callbackKey: string }\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\n/**\n * Format an ISO date string as compact relative time.\n * Examples: \"30s\", \"1m40s\", \"1h15m\", \"1d10h\", \"3w2d\", \"2mo\", \"1y3mo\"\n */\nexport function formatRelativeCompact(isoDate: string | null | undefined): string {\n if (!isoDate) return ''\n const now = Date.now()\n const then = new Date(isoDate).getTime()\n if (Number.isNaN(then)) return ''\n let diff = Math.max(0, Math.floor((now - then) / 1000))\n\n const years = Math.floor(diff / (365 * 24 * 3600))\n diff %= 365 * 24 * 3600\n const months = Math.floor(diff / (30 * 24 * 3600))\n diff %= 30 * 24 * 3600\n const weeks = Math.floor(diff / (7 * 24 * 3600))\n diff %= 7 * 24 * 3600\n const days = Math.floor(diff / (24 * 3600))\n diff %= 24 * 3600\n const hours = Math.floor(diff / 3600)\n diff %= 3600\n const minutes = Math.floor(diff / 60)\n const seconds = diff % 60\n\n if (years > 0) return months > 0 ? `${years}y${months}mo` : `${years}y`\n if (months > 0) return `${months}mo`\n if (weeks > 0) return days > 0 ? `${weeks}w${days}d` : `${weeks}w`\n if (days > 0) return hours > 0 ? `${days}d${hours}h` : `${days}d`\n if (hours > 0) return minutes > 0 ? `${hours}h${minutes}m` : `${hours}h`\n if (minutes > 0) return seconds > 0 ? `${minutes}m${seconds}s` : `${minutes}m`\n return `${seconds}s`\n}\n\n/**\n * Format an ISO date string as \"YYYY-MM-DD HH:mm:ss\".\n */\nexport function formatAbsoluteDate(isoDate: string | null | undefined): string {\n if (!isoDate) return ''\n const d = new Date(isoDate)\n if (Number.isNaN(d.getTime())) return ''\n const pad = (n: number) => String(n).padStart(2, '0')\n return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`\n}\n\n/**\n * Format an ISO date string as verbose relative time.\n * Examples: \"1 hour 15 mins ago\", \"3 days 10 hours ago\", \"just now\"\n */\nexport function formatVerboseRelative(isoDate: string | null | undefined): string {\n if (!isoDate) return ''\n const now = Date.now()\n const then = new Date(isoDate).getTime()\n if (Number.isNaN(then)) return ''\n let diff = Math.max(0, Math.floor((now - then) / 1000))\n\n const years = Math.floor(diff / (365 * 24 * 3600))\n diff %= 365 * 24 * 3600\n const months = Math.floor(diff / (30 * 24 * 3600))\n diff %= 30 * 24 * 3600\n const days = Math.floor(diff / (24 * 3600))\n diff %= 24 * 3600\n const hours = Math.floor(diff / 3600)\n diff %= 3600\n const minutes = Math.floor(diff / 60)\n const seconds = diff % 60\n\n const parts: string[] = []\n if (years > 0) parts.push(`${years} ${years === 1 ? 'year' : 'years'}`)\n if (months > 0) parts.push(`${months} ${months === 1 ? 'month' : 'months'}`)\n if (days > 0) parts.push(`${days} ${days === 1 ? 'day' : 'days'}`)\n if (hours > 0) parts.push(`${hours} ${hours === 1 ? 'hour' : 'hours'}`)\n if (minutes > 0) parts.push(`${minutes} ${minutes === 1 ? 'min' : 'mins'}`)\n if (parts.length === 0) return seconds > 0 ? `${seconds} ${seconds === 1 ? 'sec' : 'secs'} ago` : 'just now'\n\n return `${parts.slice(0, 2).join(' ')} ago`\n}\n\n/**\n * Build a tooltip string showing created and modified dates\n * with both absolute timestamps and verbose relative times.\n */\nexport function buildDateTooltip(created: string | null | undefined, modified: string | null | undefined): string {\n const lines: string[] = []\n if (created) {\n lines.push(`Created at: ${formatAbsoluteDate(created)} (${formatVerboseRelative(created)})`)\n }\n if (modified) {\n lines.push(`Modified at: ${formatAbsoluteDate(modified)} (${formatVerboseRelative(modified)})`)\n }\n return lines.join('\\n')\n}\n","import { marked } from 'marked'\nimport { Calendar, Check, Clock, FileText, Paperclip } from 'lucide-react'\nimport { getTitleFromContent } from '../../shared/types'\nimport type { Feature, Priority } from '../../shared/types'\nimport { useStore } from '../store'\nimport { formatRelativeCompact, buildDateTooltip } from '../lib/utils'\n\ninterface FeatureCardProps {\n feature: Feature\n onClick: () => void\n isDragging?: boolean\n isSelected?: 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, isSelected }: FeatureCardProps) {\n const { cardSettings } = useStore()\n const labelDefs = useStore(s => s.labelDefs)\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 ${isSelected ? 'border-blue-500 dark:border-blue-400 ring-1 ring-blue-500 dark:ring-blue-400' : '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 const def = labelDefs[label]\n return (\n <span\n key={label}\n className={`text-xs px-1.5 py-0.5 rounded ${!def ? 'bg-zinc-100 text-zinc-600 dark:bg-zinc-700 dark:text-zinc-300' : ''}`}\n style={def ? { backgroundColor: `${def.color}20`, color: def.color } : undefined}\n >\n {label}\n </span>\n )\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 {feature.metadata && Object.keys(feature.metadata).length > 0 && (\n <div className=\"flex items-center gap-1 text-zinc-400 dark:text-zinc-500\">\n <span className=\"text-[10px] font-mono\">{`{${Object.keys(feature.metadata).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 className=\"flex items-center gap-1 text-zinc-400 dark:text-zinc-500\"\n title={buildDateTooltip(feature.created, feature.modified)}\n >\n <Clock size={12} />\n <span>{formatRelativeCompact(feature.modified)}</span>\n </div>\n </div>\n </div>\n )\n}\n","import { useState, useRef, useEffect } from 'react'\nimport { Plus, MoreVertical, Pencil, Trash2, Check } from 'lucide-react'\nimport { FeatureCard } from './FeatureCard'\nimport type { Feature, KanbanColumn as KanbanColumnType } from '../../shared/types'\nimport type { LayoutMode, SortOrder } from '../store'\nimport type { DropTarget } from './KanbanBoard'\n\nconst SORT_OPTIONS: { value: SortOrder; label: string }[] = [\n { value: 'order', label: 'Board Order' },\n { value: 'created:asc', label: 'Created (oldest)' },\n { value: 'created:desc', label: 'Created (newest)' },\n { value: 'modified:asc', label: 'Modified (oldest)' },\n { value: 'modified:desc', label: 'Modified (newest)' },\n]\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 onCleanupColumn: (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 isDeletedColumn?: boolean\n onPurgeColumn?: () => void\n selectedFeatureId?: string\n sort: SortOrder\n onSortChange: (sort: SortOrder) => void\n}\n\nexport function KanbanColumn({\n column,\n features,\n onFeatureClick,\n onAddFeature,\n onEditColumn,\n onRemoveColumn,\n onCleanupColumn,\n onDragStart,\n onDragOver,\n onDragOverCard,\n onDrop,\n onDragEnd,\n draggedFeature,\n dropTarget,\n layout,\n isDeletedColumn,\n onPurgeColumn,\n selectedFeatureId,\n sort,\n onSortChange\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 rounded-lg\"\n : \"flex-shrink-0 w-72 h-full flex flex-col bg-zinc-100 dark:bg-zinc-800 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 {isDeletedColumn ? (\n <button\n type=\"button\"\n onClick={() => {\n if (features.length === 0) return\n if (window.confirm(`Permanently delete all ${features.length} card${features.length === 1 ? '' : 's'} from disk?`)) {\n onPurgeColumn?.()\n }\n }}\n className=\"p-1 rounded hover:bg-red-100 dark:hover:bg-red-900/30 transition-colors\"\n title=\"Permanently delete all cards\"\n >\n <Trash2 size={16} className=\"text-red-500\" />\n </button>\n ) : (\n <>\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-[170px]\">\n <div className=\"px-3 py-1 text-xs font-medium text-zinc-400 dark:text-zinc-500 uppercase tracking-wide\">Sort by</div>\n {SORT_OPTIONS.map((opt) => (\n <button\n key={opt.value}\n type=\"button\"\n onClick={() => { onSortChange(opt.value) }}\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 <Check size={14} className={sort === opt.value ? 'text-blue-500' : 'invisible'} />\n {opt.label}\n </button>\n ))}\n <div className=\"border-t border-zinc-200 dark:border-zinc-600 my-1\" />\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 <button\n type=\"button\"\n onClick={() => { setMenuOpen(false); onCleanupColumn(column.id) }}\n className=\"flex items-center gap-2 w-full px-3 py-1.5 text-sm text-orange-600 dark:text-orange-400 hover:bg-zinc-100 dark:hover:bg-zinc-700 transition-colors\"\n >\n <Trash2 size={14} />\n Cleanup List\n </button>\n </div>\n )}\n </div>\n </>\n )}\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 data-card-id={feature.id}\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)} isSelected={feature.id === selectedFeatureId} />\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, useRef, useEffect } from 'react'\nimport { KanbanColumn } from './KanbanColumn'\nimport { useStore } from '../store'\nimport type { SortOrder } from '../store'\nimport type { Feature, FeatureStatus } from '../../shared/types'\nimport { DELETED_COLUMN } 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 onCleanupColumn: (columnId: string) => void\n onPurgeDeletedCards: () => void\n selectedFeatureId?: string\n}\n\nexport function KanbanBoard({ onFeatureClick, onAddFeature, onMoveFeature, onEditColumn, onRemoveColumn, onCleanupColumn, onPurgeDeletedCards, selectedFeatureId }: KanbanBoardProps) {\n const scrollContainerRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (!selectedFeatureId) return\n const container = scrollContainerRef.current\n if (!container) return\n // Wait a frame so the panel layout transition has started and the board has shrunk\n requestAnimationFrame(() => {\n const cardEl = container.querySelector<HTMLElement>(`[data-card-id=\"${selectedFeatureId}\"]`)\n if (!cardEl) return\n const containerRect = container.getBoundingClientRect()\n const cardRect = cardEl.getBoundingClientRect()\n // Check if the card is fully visible horizontally inside the scroll container\n const isFullyVisible = cardRect.left >= containerRect.left && cardRect.right <= containerRect.right\n if (!isFullyVisible) {\n // Scroll so the card's right edge is visible with 10px breathing room\n const overflow = cardRect.right - containerRect.right\n container.scrollBy({ left: overflow + 10, behavior: 'smooth' })\n }\n })\n }, [selectedFeatureId])\n\n const columns = useStore((s) => s.columns)\n const cardSettings = useStore((s) => s.cardSettings)\n const getFilteredFeaturesByStatus = useStore((s) => s.getFilteredFeaturesByStatus)\n const getFeaturesByStatus = useStore((s) => s.getFeaturesByStatus)\n const layout = useStore((s) => s.layout)\n const columnSorts = useStore((s) => s.columnSorts)\n const setColumnSort = useStore((s) => s.setColumnSort)\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 ref={scrollContainerRef} 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 onCleanupColumn={onCleanupColumn}\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 selectedFeatureId={selectedFeatureId}\n sort={(columnSorts[column.id] || 'order') as SortOrder}\n onSortChange={(s) => setColumnSort(column.id, s)}\n />\n ))}\n {cardSettings.showDeletedColumn && (\n <KanbanColumn\n key={DELETED_COLUMN.id}\n column={DELETED_COLUMN}\n features={getFilteredFeaturesByStatus(DELETED_COLUMN.id as FeatureStatus)}\n onFeatureClick={onFeatureClick}\n onAddFeature={onAddFeature}\n onEditColumn={onEditColumn}\n onRemoveColumn={onRemoveColumn}\n onCleanupColumn={onCleanupColumn}\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 isDeletedColumn\n onPurgeColumn={onPurgeDeletedCards}\n selectedFeatureId={selectedFeatureId}\n sort={(columnSorts[DELETED_COLUMN.id] || 'order') as SortOrder}\n onSortChange={(s) => setColumnSort(DELETED_COLUMN.id, s)}\n />\n )}\n </div>\n </div>\n )\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","// src/webview/lib/markdownTools.tsx\nimport { Marked } from 'marked'\nimport type React from 'react'\n\nexport type FormatAction = 'heading' | 'bold' | 'italic' | 'quote' | 'code' | 'link' | 'ul' | 'ol' | 'tasklist'\n\nexport function 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 const lineStart = value.lastIndexOf('\\n', start - 1) + 1\n const linePrefix = value.substring(lineStart, start)\n if (linePrefix.startsWith('### ')) {\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\nexport function 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 const commentMarked = new Marked({\n gfm: true,\n breaks: true,\n renderer: {\n link({ href, title, tokens }) {\n const text = this.parser.parseInline(tokens)\n const titleAttr = title ? ` title=\"${title}\"` : ''\n return `<a href=\"${href}\"${titleAttr} target=\"_blank\" rel=\"noopener noreferrer\">${text}</a>`\n }\n }\n})\n\nexport function parseCommentMarkdown(content: string): string {\n const processed = content.replace(\n /(?<!\\]\\(|\"|'|<)(https?:\\/\\/[^\\s<>\\])\"']+)/g,\n '<$1>'\n )\n return commentMarked.parse(processed, { async: false }) as string\n}\n","// src/webview/components/CommentEditor.tsx\nimport { useState, useRef, useEffect, useCallback, useMemo } from 'react'\nimport { Bold, Italic, Quote, Code, Link, List, ListOrdered } from 'lucide-react'\nimport { wrapSelection, ToolbarButton, parseCommentMarkdown, type FormatAction } from '../lib/markdownTools'\n\nconst AUTHOR_KEY = 'kanban-comment-author'\n\ninterface CommentEditorProps {\n initialContent?: string\n onSubmit: (author: string, content: string) => void\n onCancel?: () => void\n submitLabel?: string\n}\n\nexport function CommentEditor({\n initialContent = '',\n onSubmit,\n onCancel,\n submitLabel = 'Comment',\n}: CommentEditorProps) {\n const [author, setAuthor] = useState(() => localStorage.getItem(AUTHOR_KEY) ?? '')\n const [content, setContent] = useState(initialContent)\n const [activeTab, setActiveTab] = useState<'write' | 'preview'>('write')\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n const isFirstRender = useRef(true)\n\n useEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = false\n return\n }\n if (activeTab === 'write') {\n textareaRef.current?.focus()\n }\n }, [activeTab])\n\n const previewHtml = useMemo(() => {\n if (!content.trim()) return ''\n return parseCommentMarkdown(content)\n }, [content])\n\n const handleFormat = useCallback((action: FormatAction) => {\n if (textareaRef.current) {\n wrapSelection(textareaRef.current, content, setContent, action)\n }\n }, [content])\n\n const handleSubmit = () => {\n const trimmedAuthor = author.trim()\n const trimmedContent = content.trim()\n if (!trimmedAuthor || !trimmedContent) return\n localStorage.setItem(AUTHOR_KEY, trimmedAuthor)\n onSubmit(trimmedAuthor, trimmedContent)\n if (!initialContent) {\n setContent('')\n setActiveTab('write')\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault()\n handleSubmit()\n }\n if ((e.metaKey || e.ctrlKey) && e.key === 'b') {\n e.preventDefault()\n handleFormat('bold')\n }\n if ((e.metaKey || e.ctrlKey) && e.key === 'i') {\n e.preventDefault()\n handleFormat('italic')\n }\n if ((e.metaKey || e.ctrlKey) && e.key === 'k') {\n e.preventDefault()\n handleFormat('link')\n }\n }\n\n const canSubmit = author.trim().length > 0 && content.trim().length > 0\n\n return (\n <div className=\"flex flex-col gap-1.5\">\n <input\n type=\"text\"\n value={author}\n onChange={e => setAuthor(e.target.value)}\n placeholder=\"Your name\"\n aria-label=\"Comment author name\"\n className=\"w-full rounded px-2 py-1 text-xs outline-none\"\n style={{\n background: 'var(--vscode-input-background)',\n color: 'var(--vscode-foreground)',\n border: '1px solid var(--vscode-input-border, var(--vscode-panel-border))',\n }}\n />\n\n <div\n className=\"flex flex-col rounded overflow-hidden\"\n style={{ border: '1px solid var(--vscode-input-border, var(--vscode-panel-border))' }}\n >\n <div\n className=\"flex items-center\"\n style={{ borderBottom: '1px solid var(--vscode-panel-border)' }}\n >\n {(['write', 'preview'] as const).map(tab => (\n <button\n key={tab}\n type=\"button\"\n onClick={() => setActiveTab(tab)}\n className=\"px-3 py-1.5 text-xs font-medium transition-colors relative capitalize\"\n style={{\n color: activeTab === tab\n ? 'var(--vscode-foreground)'\n : 'var(--vscode-descriptionForeground)',\n background: 'transparent',\n }}\n >\n {tab}\n {activeTab === tab && (\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 </div>\n\n {activeTab === 'write' ? (\n <>\n <div\n className=\"flex items-center px-1 py-0.5\"\n style={{ borderBottom: '1px solid var(--vscode-panel-border)' }}\n >\n <ToolbarButton icon={<Bold size={12} />} title=\"Bold (Cmd+B)\" onClick={() => handleFormat('bold')} />\n <ToolbarButton icon={<Italic size={12} />} title=\"Italic (Cmd+I)\" onClick={() => handleFormat('italic')} />\n <ToolbarButton icon={<Quote size={12} />} title=\"Quote\" onClick={() => handleFormat('quote')} separator />\n <ToolbarButton icon={<Code size={12} />} title=\"Code\" onClick={() => handleFormat('code')} />\n <ToolbarButton icon={<Link size={12} />} title=\"Link (Cmd+K)\" onClick={() => handleFormat('link')} separator />\n <ToolbarButton icon={<List size={12} />} title=\"Unordered list\" onClick={() => handleFormat('ul')} separator />\n <ToolbarButton icon={<ListOrdered size={12} />} title=\"Ordered list\" onClick={() => handleFormat('ol')} />\n </div>\n\n <textarea\n ref={textareaRef}\n value={content}\n onChange={e => setContent(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder=\"Add a comment... (Markdown supported)\"\n className=\"w-full px-2 py-1.5 text-xs resize-none outline-none\"\n style={{\n background: 'var(--vscode-input-background)',\n color: 'var(--vscode-foreground)',\n minHeight: '120px',\n }}\n rows={5}\n />\n </>\n ) : (\n previewHtml ? (\n // eslint-disable-next-line react/no-danger\n <div\n className=\"px-2 py-1.5 text-xs comment-markdown\"\n style={{\n background: 'var(--vscode-input-background)',\n color: 'var(--vscode-foreground)',\n minHeight: '120px',\n }}\n dangerouslySetInnerHTML={{ __html: previewHtml }}\n />\n ) : (\n <div\n className=\"px-2 py-1.5 text-xs\"\n style={{\n background: 'var(--vscode-input-background)',\n color: 'var(--vscode-descriptionForeground)',\n minHeight: '120px',\n }}\n >\n Nothing to preview\n </div>\n )\n )}\n </div>\n\n <div className=\"flex items-center justify-end gap-1.5\">\n {onCancel && (\n <button\n type=\"button\"\n onClick={onCancel}\n className=\"px-2.5 py-1 text-xs 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 Cancel\n </button>\n )}\n <button\n type=\"button\"\n onClick={handleSubmit}\n disabled={!canSubmit}\n className=\"px-2.5 py-1 text-xs font-medium rounded transition-colors disabled:opacity-30\"\n style={{\n background: 'var(--vscode-button-background)',\n color: 'var(--vscode-button-foreground)',\n }}\n title={`${submitLabel} (Cmd+Enter)`}\n >\n {submitLabel}\n </button>\n </div>\n </div>\n )\n}\n","import { useState, useMemo } from 'react'\nimport { Pencil, Trash2 } from 'lucide-react'\nimport { parseCommentMarkdown } from '../lib/markdownTools'\nimport type { Comment } from '../../shared/types'\nimport { CommentEditor } from './CommentEditor'\n\nfunction CommentBody({ content }: { content: string }) {\n const html = useMemo(() => parseCommentMarkdown(content), [content])\n return (\n <div\n className=\"comment-markdown\"\n style={{ color: 'var(--vscode-foreground)' }}\n dangerouslySetInnerHTML={{ __html: html }}\n />\n )\n}\n\nfunction timeAgo(dateStr: string): string {\n const now = Date.now()\n const then = new Date(dateStr).getTime()\n const seconds = Math.floor((now - then) / 1000)\n if (seconds < 60) return 'just now'\n const minutes = Math.floor(seconds / 60)\n if (minutes < 60) return `${minutes}m ago`\n const hours = Math.floor(minutes / 60)\n if (hours < 24) return `${hours}h ago`\n const days = Math.floor(hours / 24)\n if (days < 30) return `${days}d ago`\n return new Date(dateStr).toLocaleDateString()\n}\n\ninterface CommentsSectionProps {\n comments: Comment[]\n onAddComment: (author: string, content: string) => void\n onUpdateComment: (commentId: string, content: string) => void\n onDeleteComment: (commentId: string) => void\n}\n\nexport function CommentsSection({ comments, onAddComment, onUpdateComment, onDeleteComment }: CommentsSectionProps) {\n const [editingId, setEditingId] = useState<string | null>(null)\n\n return (\n <div className=\"flex flex-col\">\n {comments.length > 0 && (\n <div className=\"flex flex-col gap-2 px-4 py-3\">\n {comments.map(comment => (\n <div\n key={comment.id}\n className=\"rounded p-2 pl-3 text-xs group\"\n style={{\n background: 'var(--vscode-input-background)',\n borderLeft: '2px solid var(--vscode-textLink-foreground, #3b82f6)',\n }}\n >\n <div className=\"flex items-center justify-between mb-1\">\n <div className=\"flex items-center gap-2\">\n <span\n className=\"shrink-0 w-5 h-5 rounded-full flex items-center justify-center text-[9px] font-bold\"\n style={{\n background: 'var(--vscode-badge-background)',\n color: 'var(--vscode-badge-foreground)',\n }}\n >\n {comment.author.split(/\\s+/).filter(Boolean).map(w => w[0]).join('').toUpperCase().slice(0, 2)}\n </span>\n <span className=\"font-medium\" style={{ color: 'var(--vscode-foreground)' }}>\n {comment.author}\n </span>\n <span className=\"text-[10px]\" style={{ color: 'var(--vscode-descriptionForeground)' }}>\n {timeAgo(comment.created)}\n </span>\n </div>\n <div className=\"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity\">\n <button\n onClick={() => setEditingId(comment.id)}\n className=\"p-0.5 rounded transition-colors vscode-hover-bg\"\n style={{ color: 'var(--vscode-descriptionForeground)' }}\n title=\"Edit\"\n >\n <Pencil size={10} />\n </button>\n <button\n onClick={() => onDeleteComment(comment.id)}\n className=\"p-0.5 rounded transition-colors hover:text-red-500\"\n style={{ color: 'var(--vscode-descriptionForeground)' }}\n title=\"Delete\"\n >\n <Trash2 size={10} />\n </button>\n </div>\n </div>\n\n {editingId === comment.id ? (\n <div className=\"mt-1\">\n <CommentEditor\n initialContent={comment.content}\n submitLabel=\"Save\"\n onSubmit={(_, content) => {\n onUpdateComment(comment.id, content)\n setEditingId(null)\n }}\n onCancel={() => setEditingId(null)}\n />\n </div>\n ) : (\n <CommentBody content={comment.content} />\n )}\n </div>\n ))}\n </div>\n )}\n\n <div className=\"px-4 pb-3\">\n <CommentEditor\n onSubmit={(author, content) => onAddComment(author, content)}\n submitLabel=\"Comment\"\n />\n </div>\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, MessageCircle } from 'lucide-react'\nimport type { Comment } from '../../shared/types'\nimport { cn } from '../lib/utils'\nimport { CommentsSection } from './CommentsSection'\nimport { wrapSelection, ToolbarButton, type FormatAction } from '../lib/markdownTools'\n\ninterface MarkdownEditorProps {\n value: string\n onChange: (value: string) => void\n placeholder?: string\n className?: string\n autoFocus?: boolean\n mode?: 'create' | 'edit'\n comments?: Comment[]\n onAddComment?: (author: string, content: string) => void\n onUpdateComment?: (commentId: string, content: string) => void\n onDeleteComment?: (commentId: string) => void\n}\n\n\nexport function MarkdownEditor({ value, onChange, placeholder = 'Write markdown...', className, autoFocus, mode = 'create', comments, onAddComment, onUpdateComment, onDeleteComment }: MarkdownEditorProps) {\n const isEditMode = mode === 'edit'\n const writeLabel = isEditMode ? 'Edit' : 'Write'\n const [activeTab, setActiveTab] = useState<'write' | 'preview' | 'comments'>(isEditMode ? '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 {(isEditMode ? ['preview', 'write'] as const : ['write', 'preview'] as const).map(tab => (\n <button\n key={tab}\n type=\"button\"\n onClick={() => setActiveTab(tab)}\n className=\"px-3 py-2 text-xs font-medium transition-colors relative\"\n style={{\n color: activeTab === tab ? 'var(--vscode-foreground)' : 'var(--vscode-descriptionForeground)',\n }}\n >\n {tab === 'write' ? writeLabel : 'Preview'}\n {activeTab === tab && (\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 {comments && (\n <button\n type=\"button\"\n onClick={() => setActiveTab('comments')}\n className=\"px-3 py-2 text-xs font-medium transition-colors relative flex items-center gap-1.5\"\n style={{\n color: activeTab === 'comments' ? 'var(--vscode-foreground)' : 'var(--vscode-descriptionForeground)',\n }}\n >\n <MessageCircle size={12} />\n Comments\n {comments.length > 0 && (\n <span\n className=\"text-[10px] px-1 rounded-full\"\n style={{\n background: 'var(--vscode-badge-background)',\n color: 'var(--vscode-badge-foreground)',\n }}\n >\n {comments.length}\n </span>\n )}\n {activeTab === 'comments' && (\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\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 {activeTab === 'preview' && (\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 {activeTab === 'comments' && comments && onAddComment && onUpdateComment && onDeleteComment && (\n <CommentsSection\n comments={comments}\n onAddComment={onAddComment}\n onUpdateComment={onUpdateComment}\n onDeleteComment={onDeleteComment}\n />\n )}\n </div>\n </div>\n )\n}\n","import { useState, useEffect, useRef, useMemo } from 'react'\nimport { X, ChevronDown, User, Tag, Check, CircleDot, Signal, Calendar, Zap } 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[]; actions: 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 const labelDefs = useStore(s => s.labelDefs)\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 const def = labelDefs[label]\n return (\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={def ? { backgroundColor: `${def.color}20`, color: def.color } : {\n background: 'var(--vscode-badge-background)',\n color: 'var(--vscode-badge-foreground)',\n }}\n >\n {label}\n <button\n type=\"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 })}\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 const def = labelDefs[label]\n return (\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={def ? { backgroundColor: `${def.color}20`, color: def.color } : {\n background: 'var(--vscode-badge-background)',\n color: 'var(--vscode-badge-foreground)',\n }}\n >{label}</span>\n </button>\n )\n })}\n </div>\n )}\n </div>\n )\n}\n\nfunction ActionInput({ actions, onChange }: { actions: string[]; onChange: (actions: string[]) => void }) {\n const [newAction, setNewAction] = useState('')\n const inputRef = useRef<HTMLInputElement>(null)\n\n const addAction = (action?: string) => {\n const a = (action || newAction).trim()\n if (a && !actions.includes(a)) {\n onChange([...actions, a])\n }\n setNewAction('')\n }\n\n return (\n <div className=\"relative flex-1\">\n <label className=\"flex items-center gap-1.5 flex-wrap cursor-text\">\n {actions.map(action => (\n <span\n key={action}\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 {action}\n <button\n type=\"button\"\n onClick={(e) => { e.stopPropagation(); onChange(actions.filter(a => a !== action)) }}\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={newAction}\n onChange={(e) => setNewAction(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ',') { e.preventDefault(); addAction() }\n if (e.key === 'Backspace' && !newAction && actions.length > 0) {\n onChange(actions.slice(0, -1))\n }\n if (e.key === 'Escape') { setNewAction(''); inputRef.current?.blur() }\n }}\n placeholder={actions.length === 0 ? 'Add actions...' : ''}\n className=\"flex-1 min-w-[60px] bg-transparent border-none outline-none text-xs\"\n style={{ color: 'var(--vscode-foreground)' }}\n />\n </label>\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 [actions, setActions] = 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, actions })\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 <PropertyRow label=\"Actions\" icon={<Zap size={13} />}>\n <ActionInput actions={actions} onChange={setActions} />\n </PropertyRow>\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, Clock } from 'lucide-react'\nimport type { Comment, FeatureFrontmatter, Priority, FeatureStatus } from '../../shared/types'\nimport { DELETED_STATUS_ID } from '../../shared/types'\nimport { cn, formatAbsoluteDate, formatRelativeCompact, formatVerboseRelative } 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 comments: Comment[]\n contentVersion?: number\n onSave: (content: string, frontmatter: FeatureFrontmatter) => void\n onClose: () => void\n onDelete: () => void\n onPermanentDelete: () => void\n onRestore: () => 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 onAddComment: (author: string, content: string) => void\n onUpdateComment: (commentId: string, content: string) => void\n onDeleteComment: (commentId: string) => void\n onTransferToBoard: (toBoard: string, targetStatus: string) => void\n onTriggerAction?: (action: string) => void\n}\n\nconst priorityLabels: Record<Priority, string> = {\n critical: 'Critical',\n high: 'High',\n medium: 'Medium',\n low: 'Low'\n}\n\nconst priorities: Priority[] = ['critical', 'high', 'medium', 'low']\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 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\ninterface StatusDropdownProps {\n value: string\n onChange: (status: string) => void\n onTransferToBoard: (toBoard: string, targetStatus: string) => void\n}\n\nfunction StatusDropdown({ value, onChange, onTransferToBoard }: StatusDropdownProps) {\n const [isOpen, setIsOpen] = useState(false)\n const columns = useStore(s => s.columns)\n const boards = useStore(s => s.boards)\n const currentBoard = useStore(s => s.currentBoard)\n\n const otherBoards = boards.filter(b => b.id !== currentBoard)\n\n return (\n <div className=\"relative\">\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 {(() => {\n const col = columns.find(c => c.id === value)\n return col ? (\n <>\n <span className=\"w-2 h-2 rounded-full shrink-0\" style={{ backgroundColor: col.color }} />\n <span>{col.name}</span>\n </>\n ) : (\n <span>{value}</span>\n )\n })()}\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-[180px] max-h-[320px] overflow-y-auto\"\n style={{\n background: 'var(--vscode-dropdown-background)',\n border: '1px solid var(--vscode-dropdown-border, var(--vscode-panel-border))',\n }}\n >\n {/* Current board statuses (flat) */}\n {columns.map(col => (\n <button\n key={col.id}\n onClick={() => {\n onChange(col.id)\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: col.id === value ? 'var(--vscode-list-activeSelectionBackground)' : undefined,\n }}\n onMouseEnter={e => {\n if (col.id !== value) e.currentTarget.style.background = 'var(--vscode-list-hoverBackground)'\n }}\n onMouseLeave={e => {\n if (col.id !== value) e.currentTarget.style.background = 'transparent'\n }}\n >\n <span className=\"w-2 h-2 rounded-full shrink-0\" style={{ backgroundColor: col.color }} />\n <span className=\"flex-1 text-left\">{col.name}</span>\n {col.id === value && <Check size={12} style={{ color: 'var(--vscode-focusBorder)' }} className=\"shrink-0\" />}\n </button>\n ))}\n\n {/* Other boards section */}\n {otherBoards.length > 0 && (\n <>\n <div\n className=\"mx-2 my-1\"\n style={{ borderTop: '1px solid var(--vscode-panel-border)' }}\n />\n <div\n className=\"px-3 py-1 text-[10px] font-medium uppercase tracking-wider\"\n style={{ color: 'var(--vscode-descriptionForeground)' }}\n >\n Move to...\n </div>\n {otherBoards.map(board => (\n <div key={board.id}>\n <div\n className=\"px-3 py-1 text-[10px] font-semibold\"\n style={{ color: 'var(--vscode-descriptionForeground)' }}\n >\n {board.name}\n </div>\n {(board.columns || []).map(col => (\n <button\n key={`${board.id}-${col.id}`}\n onClick={() => {\n onTransferToBoard(board.id, col.id)\n setIsOpen(false)\n }}\n className=\"w-full flex items-center gap-2 pl-5 pr-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 className=\"w-2 h-2 rounded-full shrink-0\" style={{ backgroundColor: col.color }} />\n <span className=\"flex-1 text-left\">{col.name}</span>\n </button>\n ))}\n </div>\n ))}\n </>\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\ninterface RunActionsDropdownProps {\n actions: string[]\n onTriggerAction: (action: string) => void\n}\n\nfunction RunActionsDropdown({ actions, onTriggerAction }: RunActionsDropdownProps) {\n const [isOpen, setIsOpen] = useState(false)\n\n return (\n <div className=\"relative\">\n <button\n onClick={() => setIsOpen(!isOpen)}\n className=\"flex items-center gap-1.5 px-2.5 py-1.5 text-xs font-medium rounded-md transition-colors vscode-hover-bg\"\n style={{\n color: 'var(--vscode-foreground)',\n border: '1px solid var(--vscode-widget-border, var(--vscode-contrastBorder, rgba(128,128,128,0.35)))',\n }}\n >\n <span>Run Action</span>\n <ChevronDown size={11} className={cn('opacity-60 transition-transform', isOpen && 'rotate-180')} />\n </button>\n {isOpen && (\n <>\n <button\n type=\"button\"\n aria-label=\"Close actions menu\"\n className=\"fixed inset-0 z-10 cursor-default\"\n onClick={() => setIsOpen(false)}\n />\n <div\n className=\"absolute top-full right-0 mt-1 z-20 rounded-lg shadow-lg py-1 min-w-[160px]\"\n style={{\n background: 'var(--vscode-dropdown-background)',\n border: '1px solid var(--vscode-dropdown-border, var(--vscode-panel-border))',\n }}\n >\n {actions.map(action => (\n <button\n type=\"button\"\n key={action}\n onClick={() => { setIsOpen(false); onTriggerAction(action) }}\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 {action}\n </button>\n ))}\n </div>\n </>\n )}\n </div>\n )\n}\n\nfunction MetadataSection({ metadata }: { metadata?: Record<string, any> }) {\n const [expanded, setExpanded] = useState(false)\n\n if (!metadata || Object.keys(metadata).length === 0) return null\n\n const keys = Object.keys(metadata)\n\n return (\n <div className=\"mt-3\">\n <button\n onClick={() => setExpanded(!expanded)}\n className=\"flex items-center gap-1.5 text-xs font-medium text-zinc-500 dark:text-zinc-400 hover:text-zinc-700 dark:hover:text-zinc-300\"\n >\n <span className=\"text-[10px]\">{expanded ? '\\u25BC' : '\\u25B6'}</span>\n <span>Metadata</span>\n <span className=\"text-zinc-400 dark:text-zinc-500\">({keys.length})</span>\n </button>\n {!expanded && (\n <div className=\"flex flex-wrap gap-1 mt-1.5\">\n {keys.map(key => (\n <span key={key} className=\"text-xs px-1.5 py-0.5 rounded bg-zinc-100 text-zinc-600 dark:bg-zinc-700 dark:text-zinc-300 font-mono\">\n {key}\n </span>\n ))}\n </div>\n )}\n {expanded && (\n <div className=\"mt-1.5 text-xs font-mono bg-zinc-50 dark:bg-zinc-900 rounded p-2 border border-zinc-200 dark:border-zinc-700\">\n <MetadataTree data={metadata} depth={0} />\n </div>\n )}\n </div>\n )\n}\n\nfunction MetadataTree({ data, depth }: { data: Record<string, any>; depth: number }) {\n return (\n <div style={{ paddingLeft: depth > 0 ? 12 : 0 }}>\n {Object.entries(data).map(([key, value]) => (\n <div key={key} className=\"py-0.5\">\n {value && typeof value === 'object' && !Array.isArray(value) ? (\n <>\n <span className=\"text-zinc-500 dark:text-zinc-400\">{key}:</span>\n <MetadataTree data={value} depth={depth + 1} />\n </>\n ) : Array.isArray(value) ? (\n <div>\n <span className=\"text-zinc-500 dark:text-zinc-400\">{key}: </span>\n <span className=\"text-zinc-700 dark:text-zinc-300\">[{value.join(', ')}]</span>\n </div>\n ) : (\n <div>\n <span className=\"text-zinc-500 dark:text-zinc-400\">{key}: </span>\n <span className=\"text-zinc-700 dark:text-zinc-300\">{String(value)}</span>\n </div>\n )}\n </div>\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 const labelDefs = useStore(s => s.labelDefs)\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 const def = labelDefs[label]\n return (\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={def ? { backgroundColor: `${def.color}20`, color: def.color } : {\n background: 'var(--vscode-badge-background)',\n color: 'var(--vscode-badge-foreground)',\n }}\n >\n {label}\n <button\n type=\"button\"\n onClick={() => removeLabel(label)}\n className=\"hover:text-red-500 transition-colors\"\n >\n <X size={9} />\n </button>\n </span>\n )\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 const def = labelDefs[label]\n return (\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={def ? { backgroundColor: `${def.color}20`, color: def.color } : {\n background: 'var(--vscode-badge-background)',\n color: 'var(--vscode-badge-foreground)',\n }}\n >{label}</span>\n </button>\n )\n })}\n </div>\n )}\n </div>\n )\n}\n\nexport function FeatureEditor({ featureId, content, frontmatter, comments, contentVersion, onSave, onClose, onDelete, onPermanentDelete, onRestore, onOpenFile, onStartWithAI, onAddAttachment, onOpenAttachment, onRemoveAttachment, onAddComment, onUpdateComment, onDeleteComment, onTransferToBoard, onTriggerAction }: FeatureEditorProps) {\n const { cardSettings } = useStore()\n const [currentFrontmatter, setCurrentFrontmatter] = useState(frontmatter)\n const [currentContent, setCurrentContent] = useState(content)\n const [confirmingPermanentDelete, setConfirmingPermanentDelete] = useState(false)\n const isDeleted = currentFrontmatter.status === DELETED_STATUS_ID\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 {isDeleted ? (\n confirmingPermanentDelete ? (\n <div className=\"flex items-center gap-1.5\">\n <span className=\"text-xs\" style={{ color: 'var(--vscode-errorForeground)' }}>Permanently delete from disk?</span>\n <button\n onClick={() => { setConfirmingPermanentDelete(false); onPermanentDelete() }}\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={() => setConfirmingPermanentDelete(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={onRestore}\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=\"Restore card\"\n >\n <CircleDot size={16} />\n <span className=\"text-xs\">RESTORE</span>\n </button>\n <button\n onClick={() => setConfirmingPermanentDelete(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-errorForeground)', borderColor: 'var(--vscode-widget-border, var(--vscode-contrastBorder, rgba(128,128,128,0.35)))' }}\n title=\"Permanently delete from disk\"\n >\n <Trash2 size={16} />\n <span className=\"text-xs\">PERMANENT DELETE</span>\n </button>\n </>\n )\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={onDelete}\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=\"Move to deleted\"\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 {currentFrontmatter.actions && currentFrontmatter.actions.length > 0 && onTriggerAction && (\n <RunActionsDropdown actions={currentFrontmatter.actions} onTriggerAction={onTriggerAction} />\n )}\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 <StatusDropdown\n value={currentFrontmatter.status}\n onChange={(v) => handleFrontmatterUpdate({ status: v as FeatureStatus })}\n onTransferToBoard={onTransferToBoard}\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 <PropertyRow label=\"Created\" icon={<Clock size={13} />}>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs\" style={{ color: 'var(--vscode-foreground)' }}>\n {formatAbsoluteDate(currentFrontmatter.created)}\n </span>\n <span className=\"text-[10px]\" style={{ color: 'var(--vscode-descriptionForeground)' }}\n title={formatVerboseRelative(currentFrontmatter.created)}\n >\n {formatRelativeCompact(currentFrontmatter.created)}\n </span>\n </div>\n </PropertyRow>\n <PropertyRow label=\"Modified\" icon={<Clock size={13} />}>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs\" style={{ color: 'var(--vscode-foreground)' }}>\n {formatAbsoluteDate(currentFrontmatter.modified)}\n </span>\n <span className=\"text-[10px]\" style={{ color: 'var(--vscode-descriptionForeground)' }}\n title={formatVerboseRelative(currentFrontmatter.modified)}\n >\n {formatRelativeCompact(currentFrontmatter.modified)}\n </span>\n </div>\n </PropertyRow>\n <div className=\"px-4 pb-2\">\n <MetadataSection metadata={currentFrontmatter.metadata} />\n </div>\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 mode=\"edit\"\n comments={comments}\n onAddComment={onAddComment}\n onUpdateComment={onUpdateComment}\n onDeleteComment={onDeleteComment}\n />\n </div>\n )\n}\n","import { useState, useRef, useEffect, useMemo } from 'react'\nimport { Search, X, Columns, Rows, Settings, Plus, Moon, Sun, ChevronDown, Check, Tag } 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, onToggleTheme, onSwitchBoard, onCreateBoard }: { onOpenSettings: () => void; onAddColumn: () => void; onToggleTheme: () => void; onSwitchBoard: (boardId: string) => void; onCreateBoard: (name: string) => 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 isDarkMode,\n cardSettings,\n boards,\n currentBoard\n } = useStore()\n\n const labelDefs = useStore(s => s.labelDefs)\n\n const assignees = getUniqueAssignees()\n const labels = getUniqueLabels()\n const filtersActive = hasActiveFilters()\n\n const groupedLabels = useMemo(() => {\n const groups: Record<string, string[]> = {}\n labels.forEach(label => {\n const def = labelDefs[label]\n const group = def?.group || 'Other'\n if (!groups[group]) groups[group] = []\n groups[group].push(label)\n })\n return groups\n }, [labels, labelDefs])\n\n const [boardDropdownOpen, setBoardDropdownOpen] = useState(false)\n const [creatingBoard, setCreatingBoard] = useState(false)\n const [newBoardName, setNewBoardName] = useState('')\n const dropdownRef = useRef<HTMLDivElement>(null)\n const newBoardInputRef = useRef<HTMLInputElement>(null)\n\n const [labelDropdownOpen, setLabelDropdownOpen] = useState(false)\n const [labelSearch, setLabelSearch] = useState('')\n const labelDropdownRef = useRef<HTMLDivElement>(null)\n\n const filteredGroupedLabels = useMemo(() => {\n if (!labelSearch) return groupedLabels\n const q = labelSearch.toLowerCase()\n const result: Record<string, string[]> = {}\n Object.entries(groupedLabels).forEach(([group, groupLabels]) => {\n const matched = groupLabels.filter(l => l.toLowerCase().includes(q))\n if (matched.length > 0) result[group] = matched\n })\n return result\n }, [groupedLabels, labelSearch])\n\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(e.target as Node)) {\n setBoardDropdownOpen(false)\n setCreatingBoard(false)\n setNewBoardName('')\n }\n }\n if (boardDropdownOpen) {\n document.addEventListener('mousedown', handleClickOutside)\n }\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }, [boardDropdownOpen])\n\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (labelDropdownRef.current && !labelDropdownRef.current.contains(e.target as Node)) {\n setLabelDropdownOpen(false)\n setLabelSearch('')\n }\n }\n if (labelDropdownOpen) {\n document.addEventListener('mousedown', handleClickOutside)\n }\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }, [labelDropdownOpen])\n\n useEffect(() => {\n if (creatingBoard && newBoardInputRef.current) {\n newBoardInputRef.current.focus()\n }\n }, [creatingBoard])\n\n const currentBoardName = boards.find(b => b.id === currentBoard)?.name || currentBoard\n\n const handleCreateBoard = () => {\n const name = newBoardName.trim()\n if (!name) return\n onCreateBoard(name)\n setNewBoardName('')\n setCreatingBoard(false)\n setBoardDropdownOpen(false)\n }\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 {/* Board Selector */}\n <div className=\"relative\" ref={dropdownRef}>\n <button\n type=\"button\"\n onClick={() => setBoardDropdownOpen(!boardDropdownOpen)}\n className=\"flex items-center gap-1.5 px-2 py-1.5 text-sm bg-white dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-600 rounded-md hover:bg-zinc-50 dark:hover:bg-zinc-700 text-zinc-900 dark:text-zinc-100 transition-colors\"\n >\n <span className=\"max-w-[120px] truncate\">{currentBoardName}</span>\n <ChevronDown size={14} className={`text-zinc-400 transition-transform ${boardDropdownOpen ? 'rotate-180' : ''}`} />\n </button>\n {boardDropdownOpen && (\n <div className=\"absolute top-full left-0 mt-1 min-w-[180px] bg-white dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-600 rounded-md shadow-lg z-50 py-1\">\n {boards.map((b) => (\n <button\n key={b.id}\n type=\"button\"\n onClick={() => {\n onSwitchBoard(b.id)\n setBoardDropdownOpen(false)\n }}\n className=\"w-full flex items-center gap-2 px-3 py-1.5 text-sm text-left hover:bg-zinc-100 dark:hover:bg-zinc-700 text-zinc-900 dark:text-zinc-100 transition-colors\"\n >\n <Check size={14} className={b.id === currentBoard ? 'text-blue-500' : 'invisible'} />\n <span className=\"truncate\">{b.name}</span>\n </button>\n ))}\n <div className=\"border-t border-zinc-200 dark:border-zinc-600 my-1\" />\n {creatingBoard ? (\n <div className=\"px-3 py-1.5\">\n <input\n ref={newBoardInputRef}\n type=\"text\"\n value={newBoardName}\n onChange={(e) => setNewBoardName(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') handleCreateBoard()\n if (e.key === 'Escape') { setCreatingBoard(false); setNewBoardName('') }\n }}\n placeholder=\"Board name...\"\n className=\"w-full px-2 py-1 text-sm bg-zinc-50 dark:bg-zinc-900 border border-zinc-300 dark:border-zinc-500 rounded 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 <button\n type=\"button\"\n onClick={() => setCreatingBoard(true)}\n className=\"w-full flex items-center gap-2 px-3 py-1.5 text-sm text-left hover:bg-zinc-100 dark:hover:bg-zinc-700 text-blue-600 dark:text-blue-400 transition-colors\"\n >\n <Plus size={14} />\n <span>New Board</span>\n </button>\n )}\n </div>\n )}\n </div>\n\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... (meta.field: value)\"\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 <div className=\"relative\" ref={labelDropdownRef}>\n <button\n type=\"button\"\n onClick={() => setLabelDropdownOpen(!labelDropdownOpen)}\n className={`flex items-center gap-1.5 text-sm bg-white dark:bg-zinc-800 border rounded-md px-2 py-1.5 focus:outline-none focus:ring-2 focus:ring-blue-500 text-zinc-900 dark:text-zinc-100 transition-colors ${\n labelFilter.length > 0\n ? 'border-blue-500 dark:border-blue-400'\n : 'border-zinc-200 dark:border-zinc-600'\n }`}\n >\n <Tag size={14} className=\"text-zinc-400 shrink-0\" />\n <span className=\"max-w-[100px] truncate\">\n {labelFilter.length === 0\n ? 'All Labels'\n : labelFilter.length === 1\n ? labelFilter[0]\n : `${labelFilter.length} Labels`}\n </span>\n <ChevronDown size={14} className={`text-zinc-400 transition-transform ${labelDropdownOpen ? 'rotate-180' : ''}`} />\n </button>\n {labelDropdownOpen && (\n <div className=\"absolute top-full left-0 mt-1 min-w-[200px] max-h-72 overflow-y-auto bg-white dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-600 rounded-md shadow-lg z-50 py-1\">\n {/* Search */}\n <div className=\"px-2 pb-1\">\n <input\n type=\"text\"\n value={labelSearch}\n onChange={(e) => setLabelSearch(e.target.value)}\n placeholder=\"Filter labels...\"\n autoFocus\n className=\"w-full px-2 py-1 text-sm bg-zinc-50 dark:bg-zinc-900 border border-zinc-300 dark:border-zinc-500 rounded focus:outline-none focus:ring-2 focus:ring-blue-500 text-zinc-900 dark:text-zinc-100 placeholder-zinc-400\"\n />\n </div>\n {/* All Labels option */}\n {!labelSearch && (\n <button\n type=\"button\"\n onClick={() => setLabelFilter([])}\n className={`w-full flex items-center gap-2 px-3 py-1.5 text-sm text-left hover:bg-zinc-100 dark:hover:bg-zinc-700 transition-colors ${\n labelFilter.length === 0 ? 'text-blue-600 dark:text-blue-400 font-medium' : 'text-zinc-900 dark:text-zinc-100'\n }`}\n >\n <div className={`w-3.5 h-3.5 rounded border flex items-center justify-center shrink-0 ${\n labelFilter.length === 0 ? 'border-blue-500 bg-blue-500' : 'border-zinc-300 dark:border-zinc-500'\n }`}>\n {labelFilter.length === 0 && <Check size={10} className=\"text-white\" />}\n </div>\n <span>All Labels</span>\n </button>\n )}\n {/* Grouped labels */}\n {Object.entries(filteredGroupedLabels).map(([group, groupLabels]) => (\n <div key={group}>\n {Object.keys(filteredGroupedLabels).length > 1 && (\n <div className=\"px-3 pt-1.5 pb-0.5 text-xs font-semibold text-zinc-400 dark:text-zinc-500 uppercase tracking-wide\">\n {group}\n </div>\n )}\n {groupLabels.map((l) => {\n const def = labelDefs[l]\n const checked = labelFilter.includes(l)\n return (\n <button\n key={l}\n type=\"button\"\n onClick={() => {\n if (checked) {\n setLabelFilter(labelFilter.filter(x => x !== l))\n } else {\n setLabelFilter([...labelFilter, l])\n }\n }}\n className=\"w-full flex items-center gap-2 px-3 py-1.5 text-sm text-left hover:bg-zinc-100 dark:hover:bg-zinc-700 text-zinc-900 dark:text-zinc-100 transition-colors\"\n >\n <div className={`w-3.5 h-3.5 rounded border flex items-center justify-center shrink-0 ${\n checked ? 'border-blue-500 bg-blue-500' : 'border-zinc-300 dark:border-zinc-500'\n }`}>\n {checked && <Check size={10} className=\"text-white\" />}\n </div>\n {def?.color && (\n <span\n className=\"w-2.5 h-2.5 rounded-full shrink-0\"\n style={{ backgroundColor: def.color }}\n />\n )}\n <span className=\"truncate\">{l}</span>\n </button>\n )\n })}\n </div>\n ))}\n {Object.keys(filteredGroupedLabels).length === 0 && (\n <div className=\"px-3 py-2 text-sm text-zinc-400 dark:text-zinc-500\">No labels found</div>\n )}\n </div>\n )}\n </div>\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 {/* Theme Toggle */}\n <button\n onClick={onToggleTheme}\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={isDarkMode ? 'Switch to light theme' : 'Switch to dark theme'}\n >\n {isDarkMode ? <Sun size={16} /> : <Moon 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, useMemo } from 'react'\nimport { X, ChevronDown, Plus, Pencil, Trash2 } from 'lucide-react'\nimport type { CardDisplaySettings, Priority, FeatureStatus, WorkspaceInfo, LabelDefinition } from '../../shared/types'\nimport { LABEL_PRESET_COLORS } from '../../shared/types'\nimport { useStore } from '../store'\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 workspace?: WorkspaceInfo | null\n onClose: () => void\n onSave: (settings: CardDisplaySettings) => void\n onSetLabel?: (name: string, definition: LabelDefinition) => void\n onRenameLabel?: (oldName: string, newName: string) => void\n onDeleteLabel?: (name: string) => void\n}\n\nexport function SettingsPanel({ isOpen, settings, workspace, onClose, onSave, onSetLabel, onRenameLabel, onDeleteLabel }: SettingsPanelProps) {\n if (!isOpen) return null\n return <SettingsPanelContent settings={settings} workspace={workspace} onClose={onClose} onSave={onSave} onSetLabel={onSetLabel} onRenameLabel={onRenameLabel} onDeleteLabel={onDeleteLabel} />\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 SettingsInfo({ label, value }: { label: string; value: string }) {\n return (\n <div className=\"flex items-center justify-between gap-4 px-4 py-1.5\">\n <div className=\"text-sm\" style={{ color: 'var(--vscode-descriptionForeground)' }}>{label}</div>\n <div\n className=\"text-xs font-mono truncate max-w-[60%] text-right\"\n style={{ color: 'var(--vscode-foreground)', opacity: 0.7 }}\n title={value}\n >\n {value}\n </div>\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 SettingsSlider({ label, description, value, min, max, step, unit, onChange }: {\n label: string\n description?: string\n value: number\n min: number\n max: number\n step: number\n unit?: string\n onChange: (v: number) => void\n}) {\n const pct = ((value - min) / (max - min)) * 100\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=\"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 <div className=\"flex items-center gap-2 shrink-0\">\n <input\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={value}\n onChange={e => onChange(Number(e.target.value))}\n className=\"settings-slider\"\n style={{\n background: `linear-gradient(to right, var(--vscode-button-background) ${pct}%, var(--vscode-badge-background, #6b7280) ${pct}%)`,\n }}\n />\n <span\n className=\"text-xs font-mono w-12 text-right tabular-nums\"\n style={{ color: 'var(--vscode-foreground)' }}\n >\n {value}{unit || '%'}\n </span>\n </div>\n </div>\n )\n}\n\nfunction ColorPicker({ value, onChange }: { value: string; onChange: (color: string) => void }) {\n const [isOpen, setIsOpen] = useState(false)\n const [customHex, setCustomHex] = useState('')\n\n return (\n <div className=\"relative\">\n <button\n type=\"button\"\n onClick={() => setIsOpen(!isOpen)}\n className=\"w-5 h-5 rounded-full border border-white/20 cursor-pointer shrink-0\"\n style={{ backgroundColor: value }}\n />\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-2 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 <div className=\"grid grid-cols-6 gap-1.5 mb-2\">\n {LABEL_PRESET_COLORS.map(c => (\n <button\n key={c.name}\n type=\"button\"\n onClick={() => { onChange(c.hex); setIsOpen(false) }}\n className=\"w-6 h-6 rounded-full border-2 transition-transform hover:scale-110\"\n style={{\n backgroundColor: c.hex,\n borderColor: value === c.hex ? 'white' : 'transparent'\n }}\n title={c.name}\n />\n ))}\n </div>\n <div className=\"flex gap-1\">\n <input\n type=\"text\"\n placeholder=\"#hex\"\n value={customHex}\n onChange={e => setCustomHex(e.target.value)}\n className=\"flex-1 px-2 py-1 text-xs rounded\"\n style={{\n background: 'var(--vscode-input-background)',\n color: 'var(--vscode-input-foreground)',\n border: '1px solid var(--vscode-input-border, transparent)',\n }}\n />\n <button\n type=\"button\"\n onClick={() => {\n if (/^#[0-9a-fA-F]{6}$/.test(customHex)) {\n onChange(customHex)\n setIsOpen(false)\n setCustomHex('')\n }\n }}\n className=\"px-2 py-1 text-xs rounded\"\n style={{\n background: 'var(--vscode-button-background)',\n color: 'var(--vscode-button-foreground)',\n }}\n >\n OK\n </button>\n </div>\n </div>\n </>\n )}\n </div>\n )\n}\n\nfunction LabelsSection({ onSetLabel, onRenameLabel, onDeleteLabel }: {\n onSetLabel?: (name: string, definition: LabelDefinition) => void\n onRenameLabel?: (oldName: string, newName: string) => void\n onDeleteLabel?: (name: string) => void\n}) {\n const labelDefs = useStore(s => s.labelDefs)\n const features = useStore(s => s.features)\n const [newName, setNewName] = useState('')\n const [newColor, setNewColor] = useState(LABEL_PRESET_COLORS[0].hex)\n const [newGroup, setNewGroup] = useState('')\n const [renamingLabel, setRenamingLabel] = useState<string | null>(null)\n const [renameValue, setRenameValue] = useState('')\n const [confirmingDelete, setConfirmingDelete] = useState<string | null>(null)\n\n // Merge config labels + orphan labels from cards\n const allLabels = useMemo(() => {\n const labels = new Map<string, LabelDefinition | undefined>()\n for (const [name, def] of Object.entries(labelDefs)) {\n labels.set(name, def)\n }\n for (const f of features) {\n for (const l of f.labels) {\n if (!labels.has(l)) labels.set(l, undefined)\n }\n }\n return labels\n }, [labelDefs, features])\n\n // Group labels\n const groupedLabels = useMemo(() => {\n const groups: Record<string, { name: string; def?: LabelDefinition }[]> = {}\n allLabels.forEach((def, name) => {\n const group = def?.group || 'Other'\n if (!groups[group]) groups[group] = []\n groups[group].push({ name, def })\n })\n const sorted: [string, typeof groups[string]][] = Object.entries(groups).sort(([a], [b]) => {\n if (a === 'Other') return 1\n if (b === 'Other') return -1\n return a.localeCompare(b)\n })\n return sorted\n }, [allLabels])\n\n // Existing group names for autocomplete\n const existingGroups = useMemo(() => {\n const groups = new Set<string>()\n Object.values(labelDefs).forEach(def => {\n if (def.group) groups.add(def.group)\n })\n return Array.from(groups).sort()\n }, [labelDefs])\n\n const getCardCount = (labelName: string) =>\n features.filter(f => f.labels.includes(labelName)).length\n\n const handleAdd = () => {\n const trimmed = newName.trim()\n if (!trimmed) return\n onSetLabel?.(trimmed, { color: newColor, group: newGroup || undefined })\n setNewName('')\n setNewColor(LABEL_PRESET_COLORS[0].hex)\n setNewGroup('')\n }\n\n const handleRename = (oldName: string) => {\n const trimmed = renameValue.trim()\n if (trimmed && trimmed !== oldName) {\n onRenameLabel?.(oldName, trimmed)\n }\n setRenamingLabel(null)\n setRenameValue('')\n }\n\n const handleDelete = (name: string) => {\n onDeleteLabel?.(name)\n setConfirmingDelete(null)\n }\n\n const inputStyle = {\n background: 'var(--vscode-input-background)',\n color: 'var(--vscode-input-foreground)',\n border: '1px solid var(--vscode-input-border, transparent)',\n }\n\n return (\n <div className=\"px-4 space-y-3\">\n {groupedLabels.map(([group, labels]) => (\n <div key={group}>\n <div\n className=\"text-[10px] font-semibold uppercase tracking-wider mb-1.5\"\n style={{ color: 'var(--vscode-descriptionForeground)' }}\n >\n {group}\n </div>\n <div className=\"space-y-1\">\n {labels.map(({ name, def }) => (\n <div\n key={name}\n className=\"flex items-center gap-2 px-2 py-1.5 rounded group/label transition-colors\"\n onMouseEnter={e => e.currentTarget.style.background = 'var(--vscode-list-hoverBackground)'}\n onMouseLeave={e => e.currentTarget.style.background = 'transparent'}\n >\n <ColorPicker\n value={def?.color || '#6b7280'}\n onChange={color => onSetLabel?.(name, { ...def, color, group: def?.group })}\n />\n {renamingLabel === name ? (\n <input\n type=\"text\"\n value={renameValue}\n onChange={e => setRenameValue(e.target.value)}\n onKeyDown={e => {\n if (e.key === 'Enter') handleRename(name)\n if (e.key === 'Escape') { setRenamingLabel(null); setRenameValue('') }\n }}\n onBlur={() => handleRename(name)}\n autoFocus\n className=\"flex-1 px-1.5 py-0.5 text-xs rounded min-w-0\"\n style={inputStyle}\n />\n ) : (\n <span className=\"flex-1 text-xs truncate\" style={{ color: 'var(--vscode-foreground)' }}>\n {name}\n </span>\n )}\n {def?.group && renamingLabel !== name && (\n <span\n className=\"text-[10px] px-1.5 py-0.5 rounded-full shrink-0\"\n style={{\n background: 'var(--vscode-badge-background)',\n color: 'var(--vscode-badge-foreground)',\n }}\n >\n {def.group}\n </span>\n )}\n {confirmingDelete === name ? (\n <div className=\"flex items-center gap-1 shrink-0\">\n <span className=\"text-[10px]\" style={{ color: 'var(--vscode-errorForeground, #f44)' }}>\n {getCardCount(name)} card{getCardCount(name) !== 1 ? 's' : ''}\n </span>\n <button\n type=\"button\"\n onClick={() => handleDelete(name)}\n className=\"px-1.5 py-0.5 text-[10px] rounded\"\n style={{\n background: 'var(--vscode-inputValidation-errorBackground, #5a1d1d)',\n color: 'var(--vscode-errorForeground, #f44)',\n }}\n >\n Delete\n </button>\n <button\n type=\"button\"\n onClick={() => setConfirmingDelete(null)}\n className=\"px-1.5 py-0.5 text-[10px] rounded\"\n style={{ color: 'var(--vscode-descriptionForeground)' }}\n >\n Cancel\n </button>\n </div>\n ) : (\n <div className=\"flex items-center gap-0.5 shrink-0 opacity-0 group-hover/label:opacity-100 transition-opacity\">\n <button\n type=\"button\"\n onClick={() => { setRenamingLabel(name); setRenameValue(name) }}\n className=\"p-1 rounded transition-colors\"\n style={{ color: 'var(--vscode-descriptionForeground)' }}\n onMouseEnter={e => e.currentTarget.style.color = 'var(--vscode-foreground)'}\n onMouseLeave={e => e.currentTarget.style.color = 'var(--vscode-descriptionForeground)'}\n title=\"Rename label\"\n >\n <Pencil size={12} />\n </button>\n <button\n type=\"button\"\n onClick={() => setConfirmingDelete(name)}\n className=\"p-1 rounded transition-colors\"\n style={{ color: 'var(--vscode-descriptionForeground)' }}\n onMouseEnter={e => e.currentTarget.style.color = 'var(--vscode-errorForeground, #f44)'}\n onMouseLeave={e => e.currentTarget.style.color = 'var(--vscode-descriptionForeground)'}\n title=\"Delete label\"\n >\n <Trash2 size={12} />\n </button>\n </div>\n )}\n </div>\n ))}\n </div>\n </div>\n ))}\n\n {/* Add new label form */}\n <div\n className=\"rounded-lg p-2 space-y-2\"\n style={{\n background: 'var(--vscode-input-background)',\n border: '1px solid var(--vscode-input-border, transparent)',\n }}\n >\n <div className=\"flex items-center gap-2\">\n <ColorPicker value={newColor} onChange={setNewColor} />\n <input\n type=\"text\"\n placeholder=\"New label name...\"\n value={newName}\n onChange={e => setNewName(e.target.value)}\n onKeyDown={e => { if (e.key === 'Enter') handleAdd() }}\n className=\"flex-1 px-1.5 py-1 text-xs rounded bg-transparent min-w-0\"\n style={{\n color: 'var(--vscode-input-foreground)',\n outline: 'none',\n }}\n />\n </div>\n <div className=\"flex items-center gap-2\">\n <input\n type=\"text\"\n placeholder=\"Group (optional)\"\n value={newGroup}\n onChange={e => setNewGroup(e.target.value)}\n onKeyDown={e => { if (e.key === 'Enter') handleAdd() }}\n list=\"label-groups\"\n className=\"flex-1 px-1.5 py-1 text-xs rounded\"\n style={inputStyle}\n />\n <datalist id=\"label-groups\">\n {existingGroups.map(g => <option key={g} value={g} />)}\n </datalist>\n <button\n type=\"button\"\n onClick={handleAdd}\n disabled={!newName.trim()}\n className=\"flex items-center gap-1 px-2 py-1 text-xs rounded transition-colors disabled:opacity-40\"\n style={{\n background: 'var(--vscode-button-background)',\n color: 'var(--vscode-button-foreground)',\n }}\n >\n <Plus size={12} />\n Add\n </button>\n </div>\n </div>\n </div>\n )\n}\n\nfunction SettingsPanelContent({ settings, workspace, onClose, onSave, onSetLabel, onRenameLabel, onDeleteLabel }: Omit<SettingsPanelProps, 'isOpen'>) {\n const [local, setLocal] = useState<CardDisplaySettings>(settings)\n const [activeTab, setActiveTab] = useState<'general' | 'defaults' | 'labels'>('general')\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 {/* Tab Bar */}\n <div\n className=\"flex\"\n style={{ borderBottom: '1px solid var(--vscode-panel-border)' }}\n >\n {(['general', 'defaults', 'labels'] as const).map(tab => (\n <button\n key={tab}\n type=\"button\"\n onClick={() => setActiveTab(tab)}\n className=\"px-4 py-2.5 text-xs font-medium transition-colors relative\"\n style={{\n color: activeTab === tab\n ? 'var(--vscode-foreground)'\n : 'var(--vscode-descriptionForeground)',\n background: 'transparent',\n }}\n >\n {tab.charAt(0).toUpperCase() + tab.slice(1)}\n {activeTab === tab && (\n <span\n className=\"absolute bottom-0 left-0 right-0 h-0.5\"\n style={{ background: 'var(--vscode-button-background)' }}\n />\n )}\n </button>\n ))}\n </div>\n\n {/* Content */}\n <div className=\"flex-1 overflow-auto\">\n {activeTab === 'general' && (\n <>\n {workspace && (\n <>\n <SettingsSection title=\"Workspace\">\n <SettingsInfo label=\"Project Path\" value={workspace.projectPath} />\n <SettingsInfo label=\"Features Directory\" value={workspace.featuresDirectory} />\n <SettingsInfo label=\"Server Port\" value={String(workspace.port)} />\n <SettingsInfo label=\"Config Version\" value={String(workspace.configVersion)} />\n </SettingsSection>\n <div style={{ borderTop: '1px solid var(--vscode-panel-border)' }} />\n </>\n )}\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 <SettingsToggle\n label=\"Show Deleted Column\"\n description=\"Display the Deleted column to manage soft-deleted cards\"\n checked={local.showDeletedColumn}\n onChange={v => update({ showDeletedColumn: v })}\n />\n </SettingsSection>\n <div style={{ borderTop: '1px solid var(--vscode-panel-border)' }} />\n <SettingsSection title=\"Zoom\">\n <SettingsSlider\n label=\"Board Zoom\"\n description=\"Scale text size on the board view\"\n value={local.boardZoom}\n min={75}\n max={150}\n step={5}\n onChange={v => update({ boardZoom: v })}\n />\n <SettingsSlider\n label=\"Card Detail Zoom\"\n description=\"Scale text size in the card detail panel\"\n value={local.cardZoom}\n min={75}\n max={150}\n step={5}\n onChange={v => update({ cardZoom: v })}\n />\n </SettingsSection>\n </>\n )}\n\n {activeTab === 'defaults' && (\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 )}\n\n {activeTab === 'labels' && (\n <SettingsSection title=\"Labels\">\n <LabelsSection\n onSetLabel={onSetLabel}\n onRenameLabel={onRenameLabel}\n onDeleteLabel={onDeleteLabel}\n />\n </SettingsSection>\n )}\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 { Comment, Feature, KanbanColumn, Priority, ExtensionMessage, FeatureFrontmatter, CardDisplaySettings } from '../shared/types'\nimport { DELETED_STATUS_ID, 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 workspace,\n cardSettings,\n settingsOpen,\n setFeatures,\n setColumns,\n setBoards,\n setCurrentBoard,\n setIsDarkMode,\n setWorkspace,\n setCardSettings,\n setSettingsOpen,\n setLabelDefs\n } = useStore()\n\n const [createFeatureOpen, setCreateFeatureOpen] = useState(false)\n const [createFeatureStatus, setCreateFeatureStatus] = useState<string>('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 comments: Comment[]\n contentVersion: number\n } | null>(null)\n\n // Undo delete stack\n const [pendingDeletes, setPendingDeletes] = useState<{ id: string; feature: Feature; originalStatus: string }[]>([])\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 move to deleted status in local state\n const originalStatus = feature.status\n setFeatures(features.map(f => f.id === featureId ? { ...f, status: DELETED_STATUS_ID } : f))\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, originalStatus }])\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 to its original status\n const { features } = useStore.getState()\n setFeatures(features.map(f => f.id === entry.feature.id ? { ...f, status: entry.originalStatus } : f))\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 // Ctrl/Cmd +/- for board zoom, Ctrl/Cmd+Shift +/- for card detail zoom\n if ((e.key === '=' || e.key === '+' || e.key === '-') && (e.ctrlKey || e.metaKey)) {\n e.preventDefault()\n const delta = (e.key === '-') ? -5 : 5\n const { cardSettings } = useStore.getState()\n if (e.shiftKey) {\n const newZoom = Math.max(75, Math.min(150, cardSettings.cardZoom + delta))\n if (newZoom !== cardSettings.cardZoom) {\n const next = { ...cardSettings, cardZoom: newZoom }\n setCardSettings(next)\n vscode.postMessage({ type: 'saveSettings', settings: next })\n }\n } else {\n const newZoom = Math.max(75, Math.min(150, cardSettings.boardZoom + delta))\n if (newZoom !== cardSettings.boardZoom) {\n const next = { ...cardSettings, boardZoom: newZoom }\n setCardSettings(next)\n vscode.postMessage({ type: 'saveSettings', settings: next })\n }\n }\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, setCardSettings])\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 // Sync zoom CSS custom properties\n useEffect(() => {\n const root = document.documentElement\n root.style.setProperty('--board-zoom', String(cardSettings.boardZoom / 100))\n root.style.setProperty('--card-zoom', String(cardSettings.cardZoom / 100))\n }, [cardSettings.boardZoom, cardSettings.cardZoom])\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.boards) setBoards(message.boards)\n if (message.currentBoard) setCurrentBoard(message.currentBoard)\n if (message.workspace) setWorkspace(message.workspace)\n if (message.settings) {\n if (message.settings.markdownEditorMode && editingFeature) {\n setEditingFeature(null)\n }\n setCardSettings(message.settings)\n }\n if (message.labels) setLabelDefs(message.labels)\n break\n case 'featuresUpdated':\n setFeatures(message.features)\n break\n case 'triggerCreateDialog':\n setCreateFeatureStatus('backlog')\n setCreateFeatureOpen(true)\n break\n case 'labelsUpdated':\n setLabelDefs(message.labels)\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 comments: message.comments || [],\n contentVersion: contentVersionRef.current\n })\n break\n }\n case 'actionResult': {\n // fire-and-forget: no UI feedback needed for now\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, setBoards, setCurrentBoard, setWorkspace, setCardSettings, setSettingsOpen, setLabelDefs])\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 handleTransferToBoard = (toBoard: string, targetStatus: string): void => {\n if (!editingFeature) return\n vscode.postMessage({\n type: 'transferCard',\n featureId: editingFeature.id,\n toBoard,\n targetStatus\n })\n setEditingFeature(null)\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 handlePermanentDeleteFeature = (): void => {\n if (!editingFeature) return\n vscode.postMessage({ type: 'permanentDeleteFeature', featureId: editingFeature.id })\n setEditingFeature(null)\n }\n\n const handleRestoreFeature = (): void => {\n if (!editingFeature) return\n vscode.postMessage({ type: 'restoreFeature', featureId: editingFeature.id })\n setEditingFeature(null)\n }\n\n const handlePurgeDeletedCards = (): void => {\n vscode.postMessage({ type: 'purgeDeletedCards' })\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 handleAddComment = (author: string, content: string): void => {\n if (!editingFeature) return\n vscode.postMessage({ type: 'addComment', featureId: editingFeature.id, author, content })\n }\n\n const handleUpdateComment = (commentId: string, content: string): void => {\n if (!editingFeature) return\n vscode.postMessage({ type: 'updateComment', featureId: editingFeature.id, commentId, content })\n }\n\n const handleDeleteComment = (commentId: string): void => {\n if (!editingFeature) return\n vscode.postMessage({ type: 'deleteComment', featureId: editingFeature.id, commentId })\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 handleCleanupColumn = (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) return\n vscode.postMessage({ type: 'cleanupColumn', 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)\n setCreateFeatureOpen(true)\n }\n\n const handleCreateFeature = (data: {\n status: string\n priority: Priority\n content: string\n assignee: string | null\n dueDate: string | null\n labels: string[]\n actions: string[]\n }): void => {\n vscode.postMessage({\n type: 'createFeature',\n data\n })\n }\n\n const handleTriggerAction = useCallback((action: string): void => {\n if (!editingFeature) return\n const callbackKey = `action-${Date.now()}`\n vscode.postMessage({\n type: 'triggerAction',\n featureId: editingFeature.id,\n action,\n callbackKey\n })\n }, [editingFeature])\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, 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\n onOpenSettings={() => vscode.postMessage({ type: 'openSettings' })}\n onAddColumn={handleAddColumn}\n onToggleTheme={() => vscode.postMessage({ type: 'toggleTheme' })}\n onSwitchBoard={(boardId) => vscode.postMessage({ type: 'switchBoard', boardId })}\n onCreateBoard={(name) => vscode.postMessage({ type: 'createBoard', name })}\n />\n <div className=\"flex-1 flex overflow-hidden\">\n <div className={`board-zoom-scope ${editingFeature ? 'w-1/2' : 'w-full'}`}>\n <KanbanBoard\n onFeatureClick={handleFeatureClick}\n onAddFeature={handleAddFeatureInColumn}\n onMoveFeature={handleMoveFeature}\n onEditColumn={handleEditColumn}\n onRemoveColumn={handleRemoveColumn}\n onCleanupColumn={handleCleanupColumn}\n onPurgeDeletedCards={handlePurgeDeletedCards}\n selectedFeatureId={editingFeature?.id}\n />\n </div>\n {editingFeature && (\n <div className=\"w-1/2\" style={{ fontSize: `calc(1em * var(--card-zoom, 1))` }}>\n <FeatureEditor\n featureId={editingFeature.id}\n content={editingFeature.content}\n frontmatter={editingFeature.frontmatter}\n comments={editingFeature.comments}\n contentVersion={editingFeature.contentVersion}\n onSave={handleSaveFeature}\n onClose={handleCloseEditor}\n onDelete={handleDeleteFeature}\n onPermanentDelete={handlePermanentDeleteFeature}\n onRestore={handleRestoreFeature}\n onOpenFile={handleOpenFile}\n onStartWithAI={handleStartWithAI}\n onAddAttachment={handleAddAttachment}\n onOpenAttachment={handleOpenAttachment}\n onRemoveAttachment={handleRemoveAttachment}\n onAddComment={handleAddComment}\n onUpdateComment={handleUpdateComment}\n onDeleteComment={handleDeleteComment}\n onTransferToBoard={handleTransferToBoard}\n onTriggerAction={handleTriggerAction}\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 workspace={workspace}\n onClose={() => setSettingsOpen(false)}\n onSave={handleSaveSettings}\n onSetLabel={(name, definition) => vscode.postMessage({ type: 'setLabel', name, definition })}\n onRenameLabel={(oldName, newName) => vscode.postMessage({ type: 'renameLabel', oldName, newName })}\n onDeleteLabel={(name) => vscode.postMessage({ type: 'deleteLabel', name })}\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 './assets/main.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","createRoot","BASE_62_DIGITS","midpoint","digits","zero","digitA","digitB","midDigit","validateInteger","int","getIntegerLength","head","getIntegerPart","key","integerPartLength","validateOrderKey","i","incrementInteger","x","digs","carry","decrementInteger","borrow","generateKeyBetween","ib","fb","res","ia","fa","createStoreImpl","createState","state","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","parseMetaTokens","query","metaFilter","plainText","_full","value","set","get","workspace","labels","features","columns","boards","boardId","dark","settings","open","priority","assignee","filter","columnId","sort","layout","feature","id","updates","status","searchQuery","priorityFilter","assigneeFilter","labelFilter","dueDateFilter","columnSorts","sortOrder","dueDate","path","needle","val","curr","_a","assignees","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","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","DELETED_STATUS_ID","DELETED_COLUMN","LABEL_PRESET_COLORS","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","currentClassPartObject","pathPart","func","classGroupEntries","prefixedClassGroup","createLruCache","maxCacheSize","cacheSize","cache","previousCache","update","IMPORTANT_MODIFIER","createParseClassName","separator","experimentalParseClassName","isSeparatorSingleCharacter","firstSeparatorCharacter","separatorLength","parseClassName","modifiers","bracketDepth","modifierStart","postfixModifierPosition","index","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","label","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","formatRelativeCompact","isoDate","now","then","diff","years","months","weeks","days","hours","minutes","seconds","formatAbsoluteDate","pad","formatVerboseRelative","parts","buildDateTooltip","created","modified","lines","priorityColors","priorityLabels","getDescriptionFromContent","headingIndex","renderDescriptionHtml","text","marked","FeatureCard","onClick","isDragging","isSelected","cardSettings","labelDefs","title","description","fileName","formatDueDate","dateStr","dueInfo","formatCompletedAt","completed","diffMs","diffMins","diffHours","diffDays","completedText","jsxs","jsx","FileText","def","Paperclip","Calendar","Check","Clock","SORT_OPTIONS","KanbanColumn","column","onFeatureClick","onAddFeature","onEditColumn","onRemoveColumn","onCleanupColumn","onDragStart","onDragOver","onDragOverCard","onDrop","onDragEnd","draggedFeature","dropTarget","isDeletedColumn","onPurgeColumn","selectedFeatureId","onSortChange","isVertical","isDropTarget","menuOpen","setMenuOpen","useState","menuRef","useRef","useEffect","handleClickOutside","Trash2","Fragment","Plus","MoreVertical","opt","Pencil","KanbanBoard","onMoveFeature","onPurgeDeletedCards","scrollContainerRef","container","cardEl","containerRect","cardRect","overflow","getFilteredFeaturesByStatus","getFeaturesByStatus","setColumnSort","setDraggedFeature","setDropTarget","handleDragStart","useCallback","handleDragOver","handleDragOverCard","cardIndex","rect","midY","insertIndex","prev","handleDrop","filteredFeatures","filteredInsertIndex","currentIndex","allFeatures","filteredWithoutDragged","unfilteredInsertIndex","lastVisible","anchorFeature","handleDragEnd","DAYS","MONTHS","DatePicker","onChange","placeholder","isOpen","setIsOpen","selected","viewYear","setViewYear","viewMonth","setViewMonth","daysInMonth","firstDay","cells","prevMonth","nextMonth","selectDay","day","formatDisplay","ChevronLeft","ChevronRight","wrapSelection","textarea","action","start","end","before","after","replacement","cursorOffset","lineStart","linePrefix","newValue","newPos","ToolbarButton","icon","commentMarked","Marked","href","tokens","titleAttr","parseCommentMarkdown","processed","AUTHOR_KEY","CommentEditor","initialContent","onSubmit","onCancel","submitLabel","author","setAuthor","setContent","activeTab","setActiveTab","textareaRef","isFirstRender","previewHtml","useMemo","handleFormat","handleSubmit","trimmedAuthor","trimmedContent","handleKeyDown","canSubmit","tab","Bold","Italic","Quote","Code","Link","List","ListOrdered","CommentBody","html","timeAgo","CommentsSection","comments","onAddComment","onUpdateComment","onDeleteComment","editingId","setEditingId","comment","MarkdownEditor","autoFocus","mode","isEditMode","writeLabel","MessageCircle","Heading","ListChecks","priorityConfig","statusConfig","Dropdown","options","current","ChevronDown","option","AssigneeInput","isFocused","setIsFocused","inputRef","containerRef","existingAssignees","suggestions","showSuggestions","initials","LabelInput","newLabel","setNewLabel","existingLabels","labelSet","available","addLabel","ActionInput","actions","newAction","setNewAction","addAction","PropertyRow","children","CreateFeatureDialog","props","CreateFeatureDialogContent","onClose","onCreate","initialStatus","setTitle","setStatus","setPriority","setAssignee","setDueDate","setLabels","setActions","setDescription","timer","desc","heading","handleSaveAndClose","handleCancel","CircleDot","Signal","User","Tag","Zap","target","priorities","priorityDots","aiAgentTabs","agentButtonColors","aiModesByAgent","StatusDropdown","onTransferToBoard","currentBoard","otherBoards","col","board","AIDropdown","onSelect","selectedTab","setSelectedTab","modes","buttonColors","Wand2","RunActionsDropdown","onTriggerAction","MetadataSection","metadata","expanded","setExpanded","keys","MetadataTree","data","depth","LabelEditor","removeLabel","FeatureEditor","featureId","frontmatter","contentVersion","onSave","onDelete","onPermanentDelete","onRestore","onOpenFile","onStartWithAI","onAddAttachment","onOpenAttachment","onRemoveAttachment","currentFrontmatter","setCurrentFrontmatter","currentContent","setCurrentContent","confirmingPermanentDelete","setConfirmingPermanentDelete","isDeleted","debounceRef","currentFrontmatterRef","currentContentRef","save","handleContentChange","handleFrontmatterUpdate","next","attachment","dueDateOptions","selectClassName","Toolbar","onOpenSettings","onAddColumn","onToggleTheme","onSwitchBoard","onCreateBoard","setSearchQuery","setPriorityFilter","setAssigneeFilter","setLabelFilter","setDueDateFilter","clearAllFilters","getUniqueAssignees","getUniqueLabels","hasActiveFilters","toggleLayout","isDarkMode","filtersActive","groupedLabels","groups","boardDropdownOpen","setBoardDropdownOpen","creatingBoard","setCreatingBoard","newBoardName","setNewBoardName","dropdownRef","newBoardInputRef","labelDropdownOpen","setLabelDropdownOpen","labelSearch","setLabelSearch","labelDropdownRef","filteredGroupedLabels","groupLabels","matched","currentBoardName","handleCreateBoard","name","Search","checked","Rows","Columns","Sun","Moon","Settings","UndoToast","message","onUndo","onExpire","duration","progress","setProgress","step","SettingsPanel","onSetLabel","onRenameLabel","onDeleteLabel","SettingsPanelContent","ToggleSwitch","SettingsSection","SettingsToggle","SettingsInfo","SettingsDropdown","SettingsSlider","min","max","unit","pct","ColorPicker","customHex","setCustomHex","LabelsSection","newName","setNewName","newColor","setNewColor","newGroup","setNewGroup","renamingLabel","setRenamingLabel","renameValue","setRenameValue","confirmingDelete","setConfirmingDelete","allLabels","existingGroups","getCardCount","labelName","handleAdd","trimmed","handleRename","oldName","handleDelete","inputStyle","color","local","setLocal","patch","PRESET_COLORS","ColumnDialog","initial","setName","setColor","vscode","App","settingsOpen","setFeatures","setColumns","setBoards","setCurrentBoard","setIsDarkMode","setWorkspace","setCardSettings","setSettingsOpen","setLabelDefs","createFeatureOpen","setCreateFeatureOpen","createFeatureStatus","setCreateFeatureStatus","columnDialogOpen","setColumnDialogOpen","editingColumn","setEditingColumn","contentVersionRef","editingFeature","setEditingFeature","pendingDeletes","setPendingDeletes","pendingDeletesRef","nextIdRef","handleDeleteFeatureFromCard","originalStatus","commitDelete","entryId","entry","handleUndoDelete","handleUndoLatest","stack","altPressedAlone","altDownTimer","delta","newZoom","handleKeyUp","handleMouseDown","updateTheme","isDark","observer","root","handleMessage","event","handleFeatureClick","handleSaveFeature","handleTransferToBoard","toBoard","targetStatus","handleCloseEditor","handleDeleteFeature","handlePermanentDeleteFeature","handleRestoreFeature","handlePurgeDeletedCards","handleOpenFile","handleStartWithAI","agent","permissionMode","handleAddAttachment","handleOpenAttachment","handleRemoveAttachment","handleAddComment","handleUpdateComment","commentId","handleDeleteComment","handleSaveSettings","handleAddColumn","handleEditColumn","handleRemoveColumn","handleCleanupColumn","handleSaveColumn","handleAddFeatureInColumn","handleCreateFeature","handleTriggerAction","callbackKey","handleMoveFeature","newStatus","newOrder","targetColumn","clampedOrder","newOrderKey","updated","definition","StrictMode"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,7,9,10]}