@portosaur/theme 0.2.0 → 0.4.0

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.
@@ -2,7 +2,8 @@ import { useState } from "react";
2
2
  import Layout from "@theme/Layout";
3
3
  import Head from "@docusaurus/Head";
4
4
  import useDocusaurusContext from "@docusaurus/useDocusaurusContext";
5
- import "../css/tasks.css";
5
+ import styles from "../css/tasks.module.css";
6
+ import clsx from "clsx";
6
7
  import {
7
8
  FaClipboardList,
8
9
  FaSyncAlt,
@@ -20,8 +21,8 @@ import {
20
21
  function TaskList({ filterStatus, taskList }) {
21
22
  if (!taskList || !Array.isArray(taskList)) {
22
23
  return (
23
- <div className="task-empty-state">
24
- <FaTasks className="task-empty-icon" />
24
+ <div className={styles["task-empty-state"]}>
25
+ <FaTasks className={styles["task-empty-icon"]} />
25
26
  <p>No tasks available</p>
26
27
  </div>
27
28
  );
@@ -33,8 +34,8 @@ function TaskList({ filterStatus, taskList }) {
33
34
 
34
35
  if (filteredTasks.length === 0) {
35
36
  return (
36
- <div className="task-empty-state">
37
- <FaTasks className="task-empty-icon" />
37
+ <div className={styles["task-empty-state"]}>
38
+ <FaTasks className={styles["task-empty-icon"]} />
38
39
  <p>No tasks in this category</p>
39
40
  </div>
40
41
  );
@@ -49,67 +50,111 @@ function TaskList({ filterStatus, taskList }) {
49
50
  });
50
51
 
51
52
  return (
52
- <div className="task-list-container">
53
- <div className="task-list-table">
53
+ <div className={styles["task-list-container"]}>
54
+ <div className={styles["task-list-table"]}>
54
55
  {/* Table header */}
55
- <div className="task-list-header">
56
- <div className="task-cell task-cell-status">Status</div>
57
- <div className="task-cell task-cell-title">Task Details</div>
58
- <div className="task-cell task-cell-priority">Priority</div>
56
+ <div className={styles["task-list-header"]}>
57
+ <div
58
+ className={clsx(styles["task-cell"], styles["task-cell-status"])}
59
+ >
60
+ Status
61
+ </div>
62
+ <div className={clsx(styles["task-cell"], styles["task-cell-title"])}>
63
+ Task Details
64
+ </div>
65
+ <div
66
+ className={clsx(styles["task-cell"], styles["task-cell-priority"])}
67
+ >
68
+ Priority
69
+ </div>
59
70
  </div>
60
71
 
61
72
  {/* Task rows */}
62
- <div className="task-rows">
73
+ <div className={styles["task-rows"]}>
63
74
  {sortedTasks.map((task, index) => (
64
75
  <div
65
76
  key={index}
66
- className={`task-row ${task.status === "completed" ? "task-row-completed" : ""} ${index % 2 === 1 ? "task-row-striped" : ""}`}
77
+ className={clsx(
78
+ styles["task-row"],
79
+ task.status === "completed"
80
+ ? "task-row-completed"
81
+ : "" && styles["task-row-completed"],
82
+ index % 2 === 1
83
+ ? "task-row-striped"
84
+ : "" && styles["task-row-striped"],
85
+ )}
67
86
  >
68
87
  {/* Status cell */}
69
- <div className="task-cell task-cell-status">
70
- <span className={`badge badge-status-${task.status}`}>
88
+ <div
89
+ className={clsx(
90
+ styles["task-cell"],
91
+ styles["task-cell-status"],
92
+ )}
93
+ >
94
+ <span
95
+ className={clsx(
96
+ styles["badge"],
97
+ styles[`badge-status-${task.status}`],
98
+ )}
99
+ >
71
100
  {task.status === "completed" && (
72
101
  <>
73
- <FaCheckCircle className="badge-icon" /> Done
102
+ <FaCheckCircle className={styles["badge-icon"]} /> Done
74
103
  </>
75
104
  )}
76
105
  {task.status === "active" && (
77
106
  <>
78
- <FaSyncAlt className="badge-icon spin" /> In Progress
107
+ <FaSyncAlt
108
+ className={clsx(styles["badge-icon"], styles["spin"])}
109
+ />{" "}
110
+ In Progress
79
111
  </>
80
112
  )}
81
113
  {task.status === "pending" && (
82
114
  <>
83
- <FaClock className="badge-icon" /> Planned
115
+ <FaClock className={styles["badge-icon"]} /> Planned
84
116
  </>
85
117
  )}
86
118
  </span>
87
119
  </div>
88
120
 
89
121
  {/* Title cell */}
90
- <div className="task-cell task-cell-title">
91
- <div className="task-title">{task.title}</div>
122
+ <div
123
+ className={clsx(styles["task-cell"], styles["task-cell-title"])}
124
+ >
125
+ <div className={styles["task-title"]}>{task.title}</div>
92
126
  {task.desc && (
93
- <div className="task-description">{task.desc}</div>
127
+ <div className={styles["task-description"]}>{task.desc}</div>
94
128
  )}
95
129
  </div>
96
130
 
97
131
  {/* Priority cell */}
98
- <div className="task-cell task-cell-priority">
99
- <span className={`badge badge-priority-${task.priority}`}>
132
+ <div
133
+ className={clsx(
134
+ styles["task-cell"],
135
+ styles["task-cell-priority"],
136
+ )}
137
+ >
138
+ <span
139
+ className={clsx(
140
+ styles["badge"],
141
+ styles[`badge-priority-${task.priority}`],
142
+ )}
143
+ >
100
144
  {task.priority === "high" && (
101
145
  <>
102
- <FaFire className="badge-icon" /> High
146
+ <FaFire className={styles["badge-icon"]} /> High
103
147
  </>
104
148
  )}
105
149
  {task.priority === "medium" && (
106
150
  <>
107
- <FaThermometerHalf className="badge-icon" /> Medium
151
+ <FaThermometerHalf className={styles["badge-icon"]} />{" "}
152
+ Medium
108
153
  </>
109
154
  )}
110
155
  {task.priority === "low" && (
111
156
  <>
112
- <FaSnowflake className="badge-icon" /> Low
157
+ <FaSnowflake className={styles["badge-icon"]} /> Low
113
158
  </>
114
159
  )}
115
160
  </span>
@@ -138,29 +183,41 @@ function TaskStats({ taskList }) {
138
183
  const percentComplete = total > 0 ? Math.round((completed / total) * 100) : 0;
139
184
 
140
185
  return (
141
- <div className="stats-container">
142
- <div className="stat-box">
143
- <div className="stat-label">Total Tasks</div>
144
- <div className="stat-value">{total}</div>
186
+ <div className={styles["stats-container"]}>
187
+ <div className={styles["stat-box"]}>
188
+ <div className={styles["stat-label"]}>Total Tasks</div>
189
+ <div className={styles["stat-value"]}>{total}</div>
145
190
  </div>
146
- <div className="stat-box">
147
- <div className="stat-label">Completed</div>
148
- <div className="stat-value stat-value-completed">{completed}</div>
191
+ <div className={styles["stat-box"]}>
192
+ <div className={styles["stat-label"]}>Completed</div>
193
+ <div
194
+ className={clsx(styles["stat-value"], styles["stat-value-completed"])}
195
+ >
196
+ {completed}
197
+ </div>
149
198
  </div>
150
- <div className="stat-box">
151
- <div className="stat-label">In Progress</div>
152
- <div className="stat-value stat-value-active">{active}</div>
199
+ <div className={styles["stat-box"]}>
200
+ <div className={styles["stat-label"]}>In Progress</div>
201
+ <div
202
+ className={clsx(styles["stat-value"], styles["stat-value-active"])}
203
+ >
204
+ {active}
205
+ </div>
153
206
  </div>
154
- <div className="stat-box">
155
- <div className="stat-label">Planned</div>
156
- <div className="stat-value stat-value-pending">{pending}</div>
207
+ <div className={styles["stat-box"]}>
208
+ <div className={styles["stat-label"]}>Planned</div>
209
+ <div
210
+ className={clsx(styles["stat-value"], styles["stat-value-pending"])}
211
+ >
212
+ {pending}
213
+ </div>
157
214
  </div>
158
- <div className="stat-box">
159
- <div className="stat-label">Progress</div>
160
- <div className="stat-value">{percentComplete}%</div>
161
- <div className="progress-bar-container">
215
+ <div className={styles["stat-box"]}>
216
+ <div className={styles["stat-label"]}>Progress</div>
217
+ <div className={styles["stat-value"]}>{percentComplete}%</div>
218
+ <div className={styles["progress-bar-container"]}>
162
219
  <div
163
- className="progress-bar"
220
+ className={styles["progress-bar"]}
164
221
  style={{ width: `${percentComplete}%` }}
165
222
  />
166
223
  </div>
@@ -188,7 +245,7 @@ function TaskTabs({ taskList }) {
188
245
  {
189
246
  id: "active",
190
247
  label: "In Progress",
191
- icon: <FaSyncAlt className="spin" />,
248
+ icon: <FaSyncAlt className={styles["spin"]} />,
192
249
  count: taskList.filter((t) => t.status === "active").length,
193
250
  },
194
251
  {
@@ -206,29 +263,40 @@ function TaskTabs({ taskList }) {
206
263
  ];
207
264
 
208
265
  return (
209
- <div className="task-tabs-container">
210
- <div className="task-tabs" role="tablist" aria-label="Task categories">
266
+ <div className={styles["task-tabs-container"]}>
267
+ <div
268
+ className={styles["task-tabs"]}
269
+ role="tablist"
270
+ aria-label="Task categories"
271
+ >
211
272
  {tabData.map((tab) => (
212
273
  <button
213
274
  key={tab.id}
214
- className={`task-tab ${activeTab === tab.id ? "task-tab-active" : ""}`}
275
+ className={clsx(
276
+ styles["task-tab"],
277
+ activeTab === tab.id
278
+ ? "task-tab-active"
279
+ : ""
280
+ ? styles["task-tab-active"]
281
+ : "",
282
+ )}
215
283
  onClick={() => setActiveTab(tab.id)}
216
284
  role="tab"
217
285
  aria-selected={activeTab === tab.id}
218
286
  aria-controls={`tab-content-${tab.id}`}
219
287
  id={`tab-${tab.id}`}
220
288
  >
221
- <span className="task-tab-icon" aria-hidden="true">
289
+ <span className={styles["task-tab-icon"]} aria-hidden="true">
222
290
  {tab.icon}
223
291
  </span>
224
- <span className="task-tab-label">{tab.label}</span>
225
- <span className="task-tab-count">{tab.count}</span>
292
+ <span className={styles["task-tab-label"]}>{tab.label}</span>
293
+ <span className={styles["task-tab-count"]}>{tab.count}</span>
226
294
  </button>
227
295
  ))}
228
296
  </div>
229
297
 
230
298
  <div
231
- className="task-tab-content"
299
+ className={styles["task-tab-content"]}
232
300
  role="tabpanel"
233
301
  id={`tab-content-${activeTab}`}
234
302
  aria-labelledby={`tab-${activeTab}`}
@@ -261,14 +329,16 @@ export default function TasksPage() {
261
329
  title="Tasks are Disabled"
262
330
  description="Tasks are currently disabled"
263
331
  >
264
- <div className="tasks-container">
265
- <div className="tasks-content">
266
- <div className="tasks-disabled-notice">
267
- <div className="disabled-icon">
332
+ <div className={styles["tasks-container"]}>
333
+ <div className={styles["tasks-content"]}>
334
+ <div className={styles["tasks-disabled-notice"]}>
335
+ <div className={styles["disabled-icon"]}>
268
336
  <FaExclamationTriangle aria-hidden="true" />
269
337
  </div>
270
- <h2 className="disabled-title">Tasks are currently disabled</h2>
271
- <p className="disabled-help">
338
+ <h2 className={styles["disabled-title"]}>
339
+ Tasks are currently disabled
340
+ </h2>
341
+ <p className={styles["disabled-help"]}>
272
342
  To enable tasks, set <code>tasks.enable</code> to{" "}
273
343
  <code>true</code>
274
344
  </p>
@@ -291,12 +361,14 @@ export default function TasksPage() {
291
361
  <meta name="twitter:title" content={heading} />
292
362
  <meta name="twitter:description" content={subheading} />
293
363
  </Head>
294
- <div className="tasks-container">
295
- <div className="tasks-header">
296
- <h1 className="tasks-heading">{heading}</h1>
297
- {subheading && <p className="tasks-subheading">{subheading}</p>}
364
+ <div className={styles["tasks-container"]}>
365
+ <div className={styles["tasks-header"]}>
366
+ <h1 className={styles["tasks-heading"]}>{heading}</h1>
367
+ {subheading && (
368
+ <p className={styles["tasks-subheading"]}>{subheading}</p>
369
+ )}
298
370
  </div>
299
- <div className="tasks-content">
371
+ <div className={styles["tasks-content"]}>
300
372
  <TaskStats taskList={taskList} />
301
373
  <TaskTabs taskList={taskList} />
302
374
  </div>
@@ -1,5 +0,0 @@
1
- .center {
2
- display: flex;
3
- justify-content: center;
4
- align-items: center;
5
- }
File without changes