Okoge-keys commited on
Commit
0fee24a
·
verified ·
1 Parent(s): 97a6924

Delete 軽量Kanban_app_v5

Browse files
Files changed (1) hide show
  1. 軽量Kanban_app_v5/index.html +0 -567
軽量Kanban_app_v5/index.html DELETED
@@ -1,567 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="ja">
3
- <head>
4
- <meta charset="UTF-8" />
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
- <title>トヨタ式カンバンボード</title>
7
- <script src="https://cdn.tailwindcss.com"></script>
8
- <script>
9
- tailwind.config = {
10
- theme: {
11
- extend: {
12
- colors: {
13
- kanban: {
14
- base: '#0f172a',
15
- card: '#1e293b',
16
- accent: '#38bdf8',
17
- caution: '#f97316'
18
- }
19
- }
20
- }
21
- }
22
- };
23
- </script>
24
- <style>
25
- :root {
26
- color-scheme: dark;
27
- }
28
-
29
- .kanban-column-body {
30
- max-height: calc(100vh - 320px);
31
- overflow-y: auto;
32
- }
33
-
34
- @media (min-width: 768px) {
35
- .kanban-column-body {
36
- max-height: calc(100vh - 280px);
37
- }
38
- }
39
-
40
- @media (min-width: 1280px) {
41
- .kanban-column-body {
42
- max-height: calc(100vh - 260px);
43
- }
44
- }
45
-
46
- .kanban-scrollbar {
47
- scrollbar-width: thin;
48
- scrollbar-color: #334155 transparent;
49
- }
50
-
51
- .kanban-scrollbar::-webkit-scrollbar {
52
- width: 8px;
53
- }
54
-
55
- .kanban-scrollbar::-webkit-scrollbar-track {
56
- background: transparent;
57
- }
58
-
59
- .kanban-scrollbar::-webkit-scrollbar-thumb {
60
- background-color: #334155;
61
- border-radius: 9999px;
62
- }
63
-
64
- .kanban-note-clamped {
65
- display: -webkit-box;
66
- -webkit-line-clamp: 3;
67
- -webkit-box-orient: vertical;
68
- overflow: hidden;
69
- }
70
-
71
- [data-panel-body][hidden] {
72
- display: none;
73
- }
74
-
75
- [data-panel].panel-collapsed {
76
- border-color: rgba(148, 163, 184, 0.25);
77
- }
78
-
79
- .panel-toggle {
80
- display: inline-flex;
81
- align-items: center;
82
- gap: 0.5rem;
83
- border-radius: 0.5rem;
84
- border: 1px solid rgba(100, 116, 139, 0.6);
85
- padding: 0.35rem 0.75rem;
86
- font-size: 0.75rem;
87
- font-weight: 600;
88
- color: rgba(226, 232, 240, 0.9);
89
- background-color: transparent;
90
- transition: border-color 0.2s ease, color 0.2s ease;
91
- }
92
-
93
- .panel-toggle:hover {
94
- border-color: rgba(226, 232, 240, 0.85);
95
- color: #f8fafc;
96
- }
97
-
98
- .panel-toggle:focus-visible {
99
- outline: 2px solid rgba(56, 189, 248, 0.6);
100
- outline-offset: 2px;
101
- }
102
-
103
- .kanban-card {
104
- display: flex;
105
- flex-direction: column;
106
- gap: 0.75rem;
107
- transition: border-color 0.2s ease, box-shadow 0.2s ease, transform 0.2s ease;
108
- }
109
-
110
- .kanban-card:hover {
111
- transform: translateY(-2px);
112
- }
113
-
114
- .kanban-card-actions {
115
- transition: opacity 0.2s ease;
116
- }
117
-
118
- .kanban-card-actions:focus-within {
119
- opacity: 1;
120
- pointer-events: auto;
121
- }
122
-
123
- .kanban-card-title {
124
- display: block;
125
- overflow-wrap: anywhere;
126
- word-break: break-word;
127
- line-height: 1.4;
128
- }
129
-
130
- .kanban-card-compact {
131
- padding-top: 1rem;
132
- padding-bottom: 1rem;
133
- }
134
-
135
- .kanban-card-compact .kanban-card-title {
136
- font-size: 0.95rem;
137
- display: -webkit-box;
138
- -webkit-line-clamp: 2;
139
- -webkit-box-orient: vertical;
140
- overflow: hidden;
141
- }
142
-
143
- .kanban-card-compact .kanban-card-actions {
144
- opacity: 0;
145
- pointer-events: none;
146
- }
147
-
148
- .kanban-card-notes {
149
- overflow-wrap: anywhere;
150
- line-height: 1.5;
151
- }
152
-
153
- .kanban-card-compact.kanban-card-expanded .kanban-card-actions,
154
- .kanban-card:hover .kanban-card-actions {
155
- opacity: 1;
156
- pointer-events: auto;
157
- }
158
-
159
- .kanban-card-selected {
160
- border-color: rgba(56, 189, 248, 0.7) !important;
161
- box-shadow: 0 0 0 1px rgba(56, 189, 248, 0.35);
162
- }
163
-
164
- .kanban-card-main {
165
- flex: 1 1 260px;
166
- min-width: 220px;
167
- }
168
-
169
- .kanban-card-aside {
170
- flex: 0 0 180px;
171
- min-width: 160px;
172
- align-items: flex-end;
173
- text-align: right;
174
- gap: 0.5rem;
175
- }
176
-
177
- @media (max-width: 768px) {
178
- .kanban-card-aside {
179
- flex: 1 1 200px;
180
- align-items: flex-start;
181
- text-align: left;
182
- }
183
- }
184
-
185
- .kanban-card-meta {
186
- display: flex;
187
- flex-wrap: wrap;
188
- gap: 0.75rem;
189
- }
190
-
191
- .kanban-card-meta-item {
192
- flex: 1 1 200px;
193
- min-width: 180px;
194
- }
195
- </style>
196
- </head>
197
- <body class="min-h-screen bg-kanban-base text-slate-100">
198
- <div class="mx-auto flex max-w-7xl flex-col gap-10 px-6 py-10">
199
- <header class="space-y-4">
200
- <div class="flex flex-wrap items-center justify-between gap-3">
201
- <span class="inline-flex items-center gap-2 rounded-full bg-kanban-card/70 px-4 py-1 text-xs uppercase tracking-wide text-slate-300">Made by T</span>
202
- <button id="title-edit" type="button" class="rounded-lg border border-slate-600 px-3 py-1 text-xs font-semibold text-slate-200 transition hover:border-slate-400 hover:text-white">タイトル編集</button>
203
- </div>
204
- <h1 id="board-title-heading" class="text-3xl font-bold text-white md:text-4xl">トヨタ式カンバンボード</h1>
205
- <p class="max-w-2xl text-sm text-slate-300 md:text-base">
206
- 現場の「見える化」を支援する軽量なカンバンボード。<br>WIP制限を守りつつ、タスクの流れとボトルネックを素早く把握!
207
- <html lang="en">
208
- <head>
209
- <meta charset="UTF-8">
210
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
211
- <title>Document</title>
212
- </head>
213
- <body>
214
-
215
- </body>
216
- </html>
217
- </p>
218
- </header>
219
-
220
- <section aria-labelledby="analytics-title" class="rounded-2xl bg-kanban-card/70 p-6 shadow-lg shadow-black/20" data-panel="analytics">
221
- <div class="flex flex-wrap items-center justify-between gap-4">
222
- <div>
223
- <h2 id="analytics-title" class="text-lg font-semibold text-white">改善指標</h2>
224
- <p class="text-sm text-slate-400">カードの滞留や流量を把握し、改善サイクルを素早く回すためのヒントとなる指標!</p>
225
- </div>
226
- <button type="button" class="panel-toggle" data-action="toggle-panel" data-target="analytics" aria-expanded="true">折りたたむ</button>
227
- </div>
228
- <div class="mt-6" data-panel-body="analytics">
229
- <div class="grid gap-4 sm:grid-cols-2 xl:grid-cols-4">
230
- <article class="rounded-xl border border-slate-700/60 bg-slate-900/40 p-4 shadow-inner shadow-black/10">
231
- <span class="text-xs uppercase tracking-wide text-slate-400">総カード数</span>
232
- <p class="mt-2 text-3xl font-semibold text-white" data-metric="total">0枚</p>
233
- <p class="mt-2 text-xs text-slate-400">登録済みカードの全体数。</p>
234
- </article>
235
- <article class="rounded-xl border border-slate-700/60 bg-slate-900/40 p-4 shadow-inner shadow-black/10">
236
- <span class="text-xs uppercase tracking-wide text-slate-400">仕掛り中(準備中・仕掛中・停止中)</span>
237
- <p class="mt-2 text-3xl font-semibold text-white" data-metric="active">0枚</p>
238
- <p class="mt-2 text-xs text-slate-400">ボトルネック発見のために観察したい枚数。</p>
239
- </article>
240
- <article class="rounded-xl border border-slate-700/60 bg-slate-900/40 p-4 shadow-inner shadow-black/10">
241
- <span class="text-xs uppercase tracking-wide text-slate-400">直近7日間の完了</span>
242
- <p class="mt-2 text-3xl font-semibold text-white" data-metric="throughput7">0枚</p>
243
- <p class="mt-2 text-xs text-slate-400">完了ペース(スループット)の目安。</p>
244
- </article>
245
- <article class="rounded-xl border border-slate-700/60 bg-slate-900/40 p-4 shadow-inner shadow-black/10">
246
- <span class="text-xs uppercase tracking-wide text-slate-400">平均リードタイム</span>
247
- <p class="mt-2 text-3xl font-semibold text-white" data-metric="leadtime">--</p>
248
- <p class="mt-2 text-xs text-slate-400">完了までの日数。平準化の指標として活用可能。</p>
249
- </article>
250
- </div>
251
- </div>
252
- </section>
253
-
254
- <section aria-labelledby="filter-title" class="rounded-2xl bg-kanban-card/70 p-6 shadow-lg shadow-black/20" data-panel="filters">
255
- <div class="flex flex-wrap items-center justify-between gap-4">
256
- <h2 id="filter-title" class="text-lg font-semibold text-white">フィルタと検索</h2>
257
- <button type="button" class="panel-toggle" data-action="toggle-panel" data-target="filters" aria-expanded="true">折りたたむ</button>
258
- </div>
259
- <div class="mt-6 space-y-6" data-panel-body="filters">
260
- <div class="grid gap-4 md:grid-cols-2 lg:grid-cols-3">
261
- <label class="space-y-2 text-sm">
262
- <span class="text-slate-200">キーワード検索</span>
263
- <input id="filter-keyword" type="search" placeholder="例: 標準作業票" class="w-full rounded-lg border border-transparent bg-slate-800/80 px-3 py-2 text-slate-100 placeholder:text-slate-500 focus:border-kanban-accent focus:outline-none focus:ring-2 focus:ring-kanban-accent/40" />
264
- </label>
265
- <label class="space-y-2 text-sm">
266
- <span class="text-slate-200">期限(開始)</span>
267
- <input id="filter-due-start" type="date" class="w-full rounded-lg border border-transparent bg-slate-800/80 px-3 py-2 text-slate-100 focus:border-kanban-accent focus:outline-none focus:ring-2 focus:ring-kanban-accent/40" />
268
- </label>
269
- <label class="space-y-2 text-sm">
270
- <span class="text-slate-200">期限(終了)</span>
271
- <input id="filter-due-end" type="date" class="w-full rounded-lg border border-transparent bg-slate-800/80 px-3 py-2 text-slate-100 focus:border-kanban-accent focus:outline-none focus:ring-2 focus:ring-kanban-accent/40" />
272
- </label>
273
- </div>
274
- <div class="flex flex-wrap gap-2">
275
- <button id="filter-clear" type="button" class="rounded-lg border border-slate-600 px-4 py-2 text-sm font-medium text-slate-200 transition hover:border-slate-400 hover:text-white">
276
- 条件クリア
277
- </button>
278
- </div>
279
- <div class="space-y-3">
280
- <div class="flex items-center justify-between">
281
- <span class="text-sm font-semibold text-white">タグで絞り込み</span>
282
- </div>
283
- <div id="filter-tag-list" class="flex flex-wrap gap-2"></div>
284
- <p class="text-xs text-slate-500">タグをクリックしてON/OFFを切り替え。複数選択でAND条件。</p>
285
- </div>
286
- </div>
287
- </section>
288
-
289
- <section aria-labelledby="form-title" class="rounded-2xl bg-kanban-card/70 p-6 shadow-lg shadow-black/20" data-panel="form">
290
- <div class="flex flex-wrap items-center justify-between gap-4">
291
- <div>
292
- <h2 id="form-title" class="text-lg font-semibold text-white">タスク登録</h2>
293
- <p class="text-sm text-slate-400">ポイントは小さく、進捗はこまめに。日々の改善に役立てよう!</p>
294
- </div>
295
- <div class="flex flex-wrap gap-2">
296
- <!-- <button id="seed-demo" type="button" class="rounded-lg border border-slate-600 px-3 py-1.5 text-xs font-medium text-slate-200 transition hover:border-slate-400 hover:text-white">
297
- デモデータを配置
298
- </button> -->
299
- <button type="button" class="panel-toggle" data-action="toggle-panel" data-target="form" aria-expanded="true">折りたたむ</button>
300
- </div>
301
- </div>
302
- <div class="mt-6" data-panel-body="form">
303
- <form id="task-form" class="grid gap-4 md:grid-cols-12 md:items-end">
304
- <label class="space-y-2 text-sm md:col-span-4">
305
- <span class="text-slate-200">タイトル</span>
306
- <input id="task-title" name="title" type="text" required placeholder="例: 毎朝の現場ミーティング準備" class="w-full rounded-lg border border-transparent bg-slate-800/80 px-3 py-2 text-slate-100 placeholder:text-slate-500 focus:border-kanban-accent focus:outline-none focus:ring-2 focus:ring-kanban-accent/40" />
307
- </label>
308
- <label class="space-y-2 text-sm md:col-span-3">
309
- <span class="text-slate-200">担当</span>
310
- <input id="task-owner" name="owner" type="text" placeholder="例: 佐藤" class="w-full rounded-lg border border-transparent bg-slate-800/80 px-3 py-2 text-slate-100 placeholder:text-slate-500 focus:border-kanban-accent focus:outline-none focus:ring-2 focus:ring-kanban-accent/40" />
311
- </label>
312
- <label class="space-y-2 text-sm md:col-span-3">
313
- <span class="text-slate-200">期限</span>
314
- <input id="task-due" name="due" type="date" class="w-full rounded-lg border border-transparent bg-slate-800/80 px-3 py-2 text-slate-100 placeholder:text-slate-500 focus:border-kanban-accent focus:outline-none focus:ring-2 focus:ring-kanban-accent/40" />
315
- </label>
316
- <label class="space-y-2 text-sm md:col-span-2">
317
- <span class="text-slate-200">工程</span>
318
- <select id="task-status" name="status" class="w-full rounded-lg border border-transparent bg-slate-800/80 px-3 py-2 text-slate-100 focus:border-kanban-accent focus:outline-none focus:ring-2 focus:ring-kanban-accent/40">
319
- <option value="backlog">バックログ</option>
320
- <option value="ready">準備中</option>
321
- <option value="inProgress">仕掛中</option>
322
- <option value="waiting">停止中</option>
323
- <option value="done">完了</option>
324
- </select>
325
- </label>
326
- <label class="space-y-2 text-sm md:col-span-4 md:col-start-1 md:row-start-2">
327
- <span class="text-slate-200">タグ(カンマ区切り)</span>
328
- <input id="task-tags" name="tags" type="text" placeholder="例: 改善,品質" class="w-full rounded-lg border border-transparent bg-slate-800/80 px-3 py-2 text-slate-100 placeholder:text-slate-500 focus:border-kanban-accent focus:outline-none focus:ring-2 focus:ring-kanban-accent/40" />
329
- </label>
330
- <label class="space-y-2 text-sm md:col-span-4 md:row-start-2">
331
- <span class="text-slate-200">参考リンク(URL)</span>
332
- <input id="task-link" name="link" type="text" placeholder="例: https://example.com" class="w-full rounded-lg border border-transparent bg-slate-800/80 px-3 py-2 text-slate-100 placeholder:text-slate-500 focus:border-kanban-accent focus:outline-none focus:ring-2 focus:ring-kanban-accent/40" />
333
- </label>
334
- <label class="space-y-2 text-sm md:col-span-12 md:row-start-3">
335
- <span class="text-slate-200">メモ</span>
336
- <textarea id="task-notes" name="notes" rows="2" placeholder="作業手順や注意点などを記入" class="w-full rounded-lg border border-transparent bg-slate-800/80 px-3 py-2 text-slate-100 placeholder:text-slate-500 focus:border-kanban-accent focus:outline-none focus:ring-2 focus:ring-kanban-accent/40"></textarea>
337
- </label>
338
- <div class="md:col-span-4 md:col-start-9 md:row-start-4 md:flex md:justify-end md:space-x-3">
339
- <button type="reset" class="mt-2 w-full rounded-lg border border-slate-600 px-4 py-2 text-sm font-medium text-slate-200 transition hover:border-slate-400 hover:text-white md:mt-0 md:w-auto">
340
- クリア
341
- </button>
342
- <button type="submit" class="mt-2 w-full rounded-lg bg-kanban-accent px-4 py-2 text-sm font-semibold text-slate-900 transition hover:bg-sky-400 md:mt-0 md:w-auto">
343
- 登録
344
- </button>
345
- </div>
346
- </form>
347
- <p id="message-area" class="mt-4 text-sm font-medium text-kanban-caution opacity-0 transition-opacity duration-300" aria-live="assertive"></p>
348
- </div>
349
- </section>
350
-
351
- <section aria-labelledby="board-title" class="space-y-4">
352
- <div class="flex flex-wrap items-center justify-between gap-3">
353
- <div>
354
- <h2 id="board-title" class="text-lg font-semibold text-white">フローの見える化</h2>
355
- <p class="text-sm text-slate-400">カードはドラッグ&ドロップで工程移動が可能。仕掛り中の制限数を超えないように管理。</p>
356
- </div>
357
- <div class="flex gap-2 text-xs text-slate-300">
358
- <span class="rounded-full bg-slate-800/60 px-3 py-1">準備中 WIP 5</span>
359
- <span class="rounded-full bg-slate-800/60 px-3 py-1">仕掛中 WIP 3</span>
360
- <span class="rounded-full bg-slate-800/60 px-3 py-1">停止中 WIP 2</span>
361
- </div>
362
- </div>
363
-
364
- <div class="flex flex-wrap items-center justify-between gap-4 rounded-2xl bg-kanban-card/70 px-4 py-3 text-sm text-slate-300">
365
- <div class="flex flex-wrap items-center gap-3">
366
- <span id="selection-counter">選択中: 0枚</span>
367
- <span class="text-xs text-slate-500" id="selection-hint">カード左端のチェックで選択、ツールで一括操作可能。</span>
368
- </div>
369
- <div class="flex flex-wrap gap-2">
370
- <button id="view-toggle" type="button" class="rounded-lg border border-slate-600 px-3 py-1 text-xs font-medium text-slate-200 transition hover:border-slate-400 hover:text-white">
371
- コンパクト表示
372
- </button>
373
- <button id="selection-selectall" type="button" class="rounded-lg border border-slate-600 px-3 py-1 text-xs font-medium text-slate-200 transition hover:border-slate-400 hover:text-white">
374
- 全選択
375
- </button>
376
- <button id="selection-clear" type="button" class="rounded-lg border border-slate-600 px-3 py-1 text-xs font-medium text-slate-200 transition hover:border-slate-400 hover:text-white" disabled>
377
- 選択解除
378
- </button>
379
- <button id="selection-delete" type="button" class="rounded-lg bg-rose-500/80 px-3 py-1 text-xs font-semibold text-rose-50 transition hover:bg-rose-500 disabled:cursor-not-allowed disabled:bg-rose-900/40" disabled>
380
- 選択削除
381
- </button>
382
- </div>
383
- </div>
384
-
385
- <div class="grid gap-6 md:grid-cols-2 xl:grid-cols-5">
386
- <article class="flex min-h-[240px] flex-col rounded-2xl bg-kanban-card/70 p-4 shadow-lg shadow-black/10" data-column="backlog">
387
- <header class="mb-3 flex items-center justify-between text-sm text-slate-300">
388
- <h3 class="text-base font-semibold text-white">バックログ</h3>
389
- <span class="rounded-full bg-slate-800/70 px-2 py-0.5 text-xs font-medium" data-counter="backlog">0</span>
390
- </header>
391
- <div class="kanban-column-body kanban-scrollbar flex flex-1 flex-col gap-3" data-dropzone="backlog"></div>
392
- </article>
393
-
394
- <article class="flex min-h-[240px] flex-col rounded-2xl bg-kanban-card/70 p-4 shadow-lg shadow-black/10" data-column="ready" data-wip="5">
395
- <header class="mb-3 flex items-center justify-between text-sm text-slate-300">
396
- <h3 class="text-base font-semibold text-white">準備中</h3>
397
- <span class="rounded-full bg-slate-800/70 px-2 py-0.5 text-xs font-medium" data-counter="ready">0</span>
398
- </header>
399
- <div class="kanban-column-body kanban-scrollbar flex flex-1 flex-col gap-3" data-dropzone="ready"></div>
400
- </article>
401
-
402
- <article class="flex min-h-[240px] flex-col rounded-2xl bg-kanban-card/70 p-4 shadow-lg shadow-black/10" data-column="inProgress" data-wip="3">
403
- <header class="mb-3 flex items-center justify-between text-sm text-slate-300">
404
- <h3 class="text-base font-semibold text-white">仕掛中</h3>
405
- <span class="rounded-full bg-slate-800/70 px-2 py-0.5 text-xs font-medium" data-counter="inProgress">0</span>
406
- </header>
407
- <div class="kanban-column-body kanban-scrollbar flex flex-1 flex-col gap-3" data-dropzone="inProgress"></div>
408
- </article>
409
-
410
- <article class="flex min-h-[240px] flex-col rounded-2xl bg-kanban-card/70 p-4 shadow-lg shadow-black/10" data-column="waiting" data-wip="2">
411
- <header class="mb-3 flex items-center justify-between text-sm text-slate-300">
412
- <h3 class="text-base font-semibold text-white">停止中</h3>
413
- <span class="rounded-full bg-slate-800/70 px-2 py-0.5 text-xs font-medium" data-counter="waiting">0</span>
414
- </header>
415
- <div class="kanban-column-body kanban-scrollbar flex flex-1 flex-col gap-3" data-dropzone="waiting"></div>
416
- </article>
417
-
418
- <article class="flex min-h-[240px] flex-col rounded-2xl bg-kanban-card/70 p-4 shadow-lg shadow-black/10" data-column="done">
419
- <header class="mb-3 flex items-center justify-between text-sm text-slate-300">
420
- <h3 class="text-base font-semibold text-white">完了</h3>
421
- <span class="rounded-full bg-slate-800/70 px-2 py-0.5 text-xs font-medium" data-counter="done">0</span>
422
- </header>
423
- <div class="kanban-column-body kanban-scrollbar flex flex-1 flex-col gap-3" data-dropzone="done"></div>
424
- </article>
425
- </div>
426
- </section>
427
- </div>
428
-
429
- <template id="task-template">
430
- <div class="kanban-card group rounded-xl border border-slate-700 bg-slate-800/80 p-4 shadow-sm shadow-black/20 transition hover:border-kanban-accent/60" draggable="true" data-task-id="">
431
- <div class="kanban-card-header flex flex-wrap items-start justify-between gap-3">
432
- <div class="kanban-card-main flex min-w-0 flex-1 flex-col gap-2">
433
- <div class="flex flex-wrap items-start gap-3">
434
- <label class="mt-1 inline-flex shrink-0 items-center">
435
- <input type="checkbox" data-action="select-task" class="h-4 w-4 rounded border-slate-600 bg-slate-900 text-kanban-accent focus:ring-2 focus:ring-kanban-accent/40" />
436
- <span class="sr-only">カードを選択</span>
437
- </label>
438
- <div class="flex-1 min-w-0 space-y-1">
439
- <h3 data-field="title" class="kanban-card-title text-base font-semibold text-white leading-tight"></h3>
440
- <div class="hidden flex flex-wrap gap-2 text-xs text-slate-300" data-section="tags" aria-hidden="true">
441
- <span class="sr-only">タグ</span>
442
- <div data-field="tags" class="flex flex-wrap gap-2"></div>
443
- </div>
444
- </div>
445
- </div>
446
- </div>
447
- <div class="kanban-card-aside flex flex-col items-end gap-2 text-xs text-slate-300">
448
- <div class="hidden flex flex-wrap items-center gap-2" data-section="link">
449
- <svg aria-hidden="true" class="h-3.5 w-3.5 text-sky-300" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round">
450
- <path d="M9.91 13.91a3 3 0 0 1 0-4.24l2.83-2.83a3 3 0 0 1 4.24 4.24l-.7.7"/>
451
- <path d="M14.09 10.09a3 3 0 0 1 0 4.24l-2.83 2.83a3 3 0 0 1-4.24-4.24l.7-.7"/>
452
- </svg>
453
- <a data-field="link" class="block break-words text-sky-300 underline-offset-2 hover:underline" href="#" target="_blank" rel="noreferrer noopener">リンクを開く</a>
454
- </div>
455
- </div>
456
- </div>
457
- <div class="kanban-card-actions mt-3 flex flex-wrap justify-end gap-2">
458
- <button class="rounded-md border border-slate-500 px-2 py-1 text-xs font-semibold text-slate-200 transition hover:border-slate-300 hover:text-white" type="button" data-action="toggle-details" aria-expanded="false">
459
- 詳細
460
- </button>
461
- <button class="hidden rounded-md bg-kanban-accent px-2 py-1 text-xs font-semibold text-slate-900 transition hover:bg-sky-400 group-hover:inline-flex" type="button" data-action="mark-done">
462
- 完了へ
463
- </button>
464
- <button class="hidden rounded-md border border-slate-500 px-2 py-1 text-xs font-semibold text-slate-200 transition hover:border-slate-300 hover:text-white group-hover:inline-flex" type="button" data-action="edit-task">
465
- 編集
466
- </button>
467
- <button class="hidden rounded-md border border-rose-600 px-2 py-1 text-xs font-semibold text-rose-200 transition hover:border-rose-400 hover:text-rose-50 group-hover:inline-flex" type="button" data-action="delete-task">
468
- 削除
469
- </button>
470
- </div>
471
- <dl class="kanban-card-meta mt-3 text-xs text-slate-300" data-section="meta">
472
- <div class="kanban-card-meta-item space-y-1">
473
- <dt class="uppercase tracking-wide text-slate-500">担当</dt>
474
- <dd class="font-medium text-white" data-field="owner"></dd>
475
- </div>
476
- <div class="kanban-card-meta-item space-y-1">
477
- <dt class="uppercase tracking-wide text-slate-500">期限</dt>
478
- <dd class="font-medium text-white" data-field="due"></dd>
479
- </div>
480
- </dl>
481
- <p class="kanban-card-notes mt-3 whitespace-pre-line text-sm text-slate-200" data-section="notes" data-field="notes"></p>
482
- </div>
483
- </template>
484
-
485
- <dialog id="edit-dialog" class="w-full max-w-xl rounded-2xl border border-slate-600/60 bg-slate-900/95 p-0 text-slate-100 backdrop:bg-slate-900/60">
486
- <form id="edit-form" class="grid gap-4 p-6" method="dialog">
487
- <header class="space-y-1">
488
- <h2 class="text-lg font-semibold text-white">タスクの編集</h2>
489
- <p class="text-sm text-slate-400">内容の更新や振り返りを反映できます。</p>
490
- </header>
491
- <label class="space-y-2 text-sm">
492
- <span class="text-slate-200">タイトル</span>
493
- <input id="edit-title" name="title" type="text" required class="w-full rounded-lg border border-transparent bg-slate-800/80 px-3 py-2 text-slate-100 focus:border-kanban-accent focus:outline-none focus:ring-2 focus:ring-kanban-accent/40" />
494
- </label>
495
- <div class="grid gap-4 md:grid-cols-2">
496
- <label class="space-y-2 text-sm">
497
- <span class="text-slate-200">担当</span>
498
- <input id="edit-owner" name="owner" type="text" class="w-full rounded-lg border border-transparent bg-slate-800/80 px-3 py-2 text-slate-100 focus:border-kanban-accent focus:outline-none focus:ring-2 focus:ring-kanban-accent/40" />
499
- </label>
500
- <label class="space-y-2 text-sm">
501
- <span class="text-slate-200">期限</span>
502
- <input id="edit-due" name="due" type="date" class="w-full rounded-lg border border-transparent bg-slate-800/80 px-3 py-2 text-slate-100 focus:border-kanban-accent focus:outline-none focus:ring-2 focus:ring-kanban-accent/40" />
503
- </label>
504
- </div>
505
- <label class="space-y-2 text-sm">
506
- <span class="text-slate-200">メモ</span>
507
- <textarea id="edit-notes" name="notes" rows="3" class="w-full rounded-lg border border-transparent bg-slate-800/80 px-3 py-2 text-slate-100 focus:border-kanban-accent focus:outline-none focus:ring-2 focus:ring-kanban-accent/40"></textarea>
508
- </label>
509
-
510
- <label class="space-y-2 text-sm">
511
- <span class="text-slate-200">タグ(カンマ区切り)</span>
512
- <input id="edit-tags" name="tags" type="text" placeholder="例: デザイン, レビュー" class="w-full rounded-lg border border-transparent bg-slate-800/80 px-3 py-2 text-slate-100 focus:border-kanban-accent focus:outline-none focus:ring-2 focus:ring-kanban-accent/40" />
513
- </label>
514
-
515
- <label class="space-y-2 text-sm">
516
- <span class="text-slate-200">参考リンク(URL)</span>
517
- <input id="edit-link" name="link" type="text" class="w-full rounded-lg border border-transparent bg-slate-800/80 px-3 py-2 text-slate-100 focus:border-kanban-accent focus:outline-none focus:ring-2 focus:ring-kanban-accent/40" />
518
- </label>
519
- <div class="flex justify-end gap-3 pt-2">
520
- <button type="button" data-action="cancel-edit" class="rounded-lg border border-slate-600 px-4 py-2 text-sm font-medium text-slate-200 transition hover:border-slate-400 hover:text-white">キャンセル</button>
521
- <button type="submit" class="rounded-lg bg-kanban-accent px-4 py-2 text-sm font-semibold text-slate-900 transition hover:bg-sky-400">保存</button>
522
- </div>
523
- </form>
524
- </dialog>
525
-
526
- <script src="./app.js"></script>
527
- </body>
528
- </html>
529
-
530
-
531
-
532
-
533
-
534
-
535
-
536
-
537
-
538
-
539
-
540
-
541
-
542
-
543
-
544
-
545
-
546
-
547
-
548
-
549
-
550
-
551
-
552
-
553
-
554
-
555
-
556
-
557
-
558
-
559
-
560
-
561
-
562
-
563
-
564
-
565
-
566
-
567
-