@tribepad/themis 1.0.5 → 1.0.7

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 (59) hide show
  1. package/dist/elements/MatrixGrid/MatrixGrid.d.ts +31 -0
  2. package/dist/elements/MatrixGrid/MatrixGrid.d.ts.map +1 -0
  3. package/dist/elements/MatrixGrid/MatrixGrid.styles.d.ts +48 -0
  4. package/dist/elements/MatrixGrid/MatrixGrid.styles.d.ts.map +1 -0
  5. package/dist/elements/MatrixGrid/MatrixGrid.types.d.ts +75 -0
  6. package/dist/elements/MatrixGrid/MatrixGrid.types.d.ts.map +1 -0
  7. package/dist/elements/MatrixGrid/index.d.ts +5 -0
  8. package/dist/elements/MatrixGrid/index.d.ts.map +1 -0
  9. package/dist/elements/MatrixGrid/index.js +3 -0
  10. package/dist/elements/MatrixGrid/index.js.map +1 -0
  11. package/dist/elements/MatrixGrid/index.mjs +3 -0
  12. package/dist/elements/MatrixGrid/index.mjs.map +1 -0
  13. package/dist/elements/RatingScale/RatingScale.d.ts +32 -0
  14. package/dist/elements/RatingScale/RatingScale.d.ts.map +1 -0
  15. package/dist/elements/RatingScale/RatingScale.styles.d.ts +52 -0
  16. package/dist/elements/RatingScale/RatingScale.styles.d.ts.map +1 -0
  17. package/dist/elements/RatingScale/RatingScale.types.d.ts +73 -0
  18. package/dist/elements/RatingScale/RatingScale.types.d.ts.map +1 -0
  19. package/dist/elements/RatingScale/index.d.ts +5 -0
  20. package/dist/elements/RatingScale/index.d.ts.map +1 -0
  21. package/dist/elements/RatingScale/index.js +3 -0
  22. package/dist/elements/RatingScale/index.js.map +1 -0
  23. package/dist/elements/RatingScale/index.mjs +3 -0
  24. package/dist/elements/RatingScale/index.mjs.map +1 -0
  25. package/dist/elements/SituationalJudgement/SituationalJudgement.d.ts +36 -0
  26. package/dist/elements/SituationalJudgement/SituationalJudgement.d.ts.map +1 -0
  27. package/dist/elements/SituationalJudgement/SituationalJudgement.styles.d.ts +19 -0
  28. package/dist/elements/SituationalJudgement/SituationalJudgement.styles.d.ts.map +1 -0
  29. package/dist/elements/SituationalJudgement/SituationalJudgement.types.d.ts +67 -0
  30. package/dist/elements/SituationalJudgement/SituationalJudgement.types.d.ts.map +1 -0
  31. package/dist/elements/SituationalJudgement/index.d.ts +5 -0
  32. package/dist/elements/SituationalJudgement/index.d.ts.map +1 -0
  33. package/dist/elements/SituationalJudgement/index.js +3 -0
  34. package/dist/elements/SituationalJudgement/index.js.map +1 -0
  35. package/dist/elements/SituationalJudgement/index.mjs +3 -0
  36. package/dist/elements/SituationalJudgement/index.mjs.map +1 -0
  37. package/dist/elements/Tabs/Tabs.d.ts +2 -2
  38. package/dist/elements/Tabs/Tabs.d.ts.map +1 -1
  39. package/dist/elements/Tabs/Tabs.types.d.ts +3 -0
  40. package/dist/elements/Tabs/Tabs.types.d.ts.map +1 -1
  41. package/dist/elements/Tabs/index.js +1 -1
  42. package/dist/elements/Tabs/index.js.map +1 -1
  43. package/dist/elements/Tabs/index.mjs +1 -1
  44. package/dist/elements/Tabs/index.mjs.map +1 -1
  45. package/dist/elements/index.d.ts +6 -0
  46. package/dist/elements/index.d.ts.map +1 -1
  47. package/dist/elements/index.js +1 -1
  48. package/dist/elements/index.js.map +1 -1
  49. package/dist/elements/index.mjs +1 -1
  50. package/dist/elements/index.mjs.map +1 -1
  51. package/dist/index.js +2 -2
  52. package/dist/index.js.map +1 -1
  53. package/dist/index.mjs +2 -2
  54. package/dist/index.mjs.map +1 -1
  55. package/package.json +15 -15
  56. package/src/elements/MatrixGrid/MatrixGrid.stories.tsx +292 -0
  57. package/src/elements/RatingScale/RatingScale.stories.tsx +379 -0
  58. package/src/elements/SituationalJudgement/SituationalJudgement.stories.tsx +305 -0
  59. package/src/elements/Tabs/Tabs.stories.tsx +231 -2
@@ -26,8 +26,8 @@ const meta = {
26
26
  argTypes: {
27
27
  variant: {
28
28
  control: 'select',
29
- options: ['default', 'block'],
30
- description: 'Visual variant: underline (default) or block/pill',
29
+ options: ['default', 'block', 'stepper'],
30
+ description: 'Visual variant: underline (default), block/pill, or stepper (numbered steps)',
31
31
  },
32
32
  orientation: {
33
33
  control: 'select',
@@ -131,6 +131,235 @@ export const Block: Story = {
131
131
  ),
132
132
  };
133
133
 
134
+ // ============================================================================
135
+ // Stepper Variant Stories
136
+ // ============================================================================
137
+
138
+ /**
139
+ * Stepper: Numbered step circles with connecting lines.
140
+ * Completed steps show a checkmark, the active step is highlighted.
141
+ */
142
+ export const Stepper: Story = {
143
+ render: () => (
144
+ <Tabs variant="stepper" defaultSelectedKey="form" className="w-[600px]">
145
+ <TabList aria-label="Blueprint setup steps">
146
+ <Tab id="details">Job Details</Tab>
147
+ <Tab id="form">Application Form</Tab>
148
+ <Tab id="statuses">Statuses</Tab>
149
+ <Tab id="journeys">Journeys</Tab>
150
+ </TabList>
151
+ <TabPanel id="details">
152
+ <div className="p-4">
153
+ <h3 className="text-lg font-semibold mb-2">Job Details</h3>
154
+ <p className="text-sm text-[var(--muted-foreground)]">
155
+ Configure the basic job information and requirements.
156
+ </p>
157
+ </div>
158
+ </TabPanel>
159
+ <TabPanel id="form">
160
+ <div className="p-4">
161
+ <h3 className="text-lg font-semibold mb-2">Application Form</h3>
162
+ <p className="text-sm text-[var(--muted-foreground)]">
163
+ Build the candidate application form with fields and sections.
164
+ </p>
165
+ </div>
166
+ </TabPanel>
167
+ <TabPanel id="statuses">
168
+ <div className="p-4">
169
+ <h3 className="text-lg font-semibold mb-2">Statuses</h3>
170
+ <p className="text-sm text-[var(--muted-foreground)]">
171
+ Define the status workflow for applications.
172
+ </p>
173
+ </div>
174
+ </TabPanel>
175
+ <TabPanel id="journeys">
176
+ <div className="p-4">
177
+ <h3 className="text-lg font-semibold mb-2">Journeys</h3>
178
+ <p className="text-sm text-[var(--muted-foreground)]">
179
+ Configure candidate journeys for each status.
180
+ </p>
181
+ </div>
182
+ </TabPanel>
183
+ </Tabs>
184
+ ),
185
+ };
186
+
187
+ /**
188
+ * StepperFirstStep: Stepper with the first step active (no completed steps).
189
+ */
190
+ export const StepperFirstStep: Story = {
191
+ render: () => (
192
+ <Tabs variant="stepper" defaultSelectedKey="details" className="w-[600px]">
193
+ <TabList aria-label="Setup wizard">
194
+ <Tab id="details">Details</Tab>
195
+ <Tab id="form">Form</Tab>
196
+ <Tab id="statuses">Statuses</Tab>
197
+ <Tab id="journeys">Journeys</Tab>
198
+ </TabList>
199
+ <TabPanel id="details">
200
+ <div className="p-4">
201
+ <h3 className="text-lg font-semibold mb-2">Step 1: Details</h3>
202
+ <p className="text-sm text-[var(--muted-foreground)]">
203
+ First step is active. No completed steps yet.
204
+ </p>
205
+ </div>
206
+ </TabPanel>
207
+ <TabPanel id="form">
208
+ <div className="p-4">Step 2 content</div>
209
+ </TabPanel>
210
+ <TabPanel id="statuses">
211
+ <div className="p-4">Step 3 content</div>
212
+ </TabPanel>
213
+ <TabPanel id="journeys">
214
+ <div className="p-4">Step 4 content</div>
215
+ </TabPanel>
216
+ </Tabs>
217
+ ),
218
+ };
219
+
220
+ /**
221
+ * StepperLastStep: Stepper with the last step active (all previous completed).
222
+ */
223
+ export const StepperLastStep: Story = {
224
+ render: () => (
225
+ <Tabs variant="stepper" defaultSelectedKey="journeys" className="w-[600px]">
226
+ <TabList aria-label="Setup wizard">
227
+ <Tab id="details">Details</Tab>
228
+ <Tab id="form">Form</Tab>
229
+ <Tab id="statuses">Statuses</Tab>
230
+ <Tab id="journeys">Journeys</Tab>
231
+ </TabList>
232
+ <TabPanel id="details">
233
+ <div className="p-4">Step 1 content</div>
234
+ </TabPanel>
235
+ <TabPanel id="form">
236
+ <div className="p-4">Step 2 content</div>
237
+ </TabPanel>
238
+ <TabPanel id="statuses">
239
+ <div className="p-4">Step 3 content</div>
240
+ </TabPanel>
241
+ <TabPanel id="journeys">
242
+ <div className="p-4">
243
+ <h3 className="text-lg font-semibold mb-2">Step 4: Journeys</h3>
244
+ <p className="text-sm text-[var(--muted-foreground)]">
245
+ All previous steps show checkmarks as completed.
246
+ </p>
247
+ </div>
248
+ </TabPanel>
249
+ </Tabs>
250
+ ),
251
+ };
252
+
253
+ /**
254
+ * StepperControlled: Stepper with external step navigation controls.
255
+ */
256
+ export const StepperControlled: Story = {
257
+ render: function StepperControlledDemo() {
258
+ const steps = ['details', 'form', 'statuses', 'journeys'] as const;
259
+ const [selected, setSelected] = useState<Key>('details');
260
+ const currentIndex = steps.indexOf(selected as typeof steps[number]);
261
+
262
+ return (
263
+ <div className="w-[600px]">
264
+ <Tabs variant="stepper" selectedKey={selected} onSelectionChange={setSelected}>
265
+ <TabList aria-label="Controlled stepper">
266
+ <Tab id="details">Details</Tab>
267
+ <Tab id="form">Form</Tab>
268
+ <Tab id="statuses">Statuses</Tab>
269
+ <Tab id="journeys">Journeys</Tab>
270
+ </TabList>
271
+ <TabPanel id="details">
272
+ <div className="p-4">Step 1: Configure details</div>
273
+ </TabPanel>
274
+ <TabPanel id="form">
275
+ <div className="p-4">Step 2: Build the form</div>
276
+ </TabPanel>
277
+ <TabPanel id="statuses">
278
+ <div className="p-4">Step 3: Define statuses</div>
279
+ </TabPanel>
280
+ <TabPanel id="journeys">
281
+ <div className="p-4">Step 4: Set up journeys</div>
282
+ </TabPanel>
283
+ </Tabs>
284
+ <div className="flex justify-between mt-4 px-4">
285
+ <button
286
+ onClick={() => currentIndex > 0 && setSelected(steps[currentIndex - 1])}
287
+ disabled={currentIndex === 0}
288
+ className="px-4 py-2 text-sm rounded-md bg-[var(--secondary)] text-[var(--secondary-foreground)] disabled:opacity-50"
289
+ >
290
+ Previous
291
+ </button>
292
+ <button
293
+ onClick={() => currentIndex < steps.length - 1 && setSelected(steps[currentIndex + 1])}
294
+ disabled={currentIndex === steps.length - 1}
295
+ className="px-4 py-2 text-sm rounded-md bg-[var(--primary)] text-[var(--primary-foreground)] disabled:opacity-50"
296
+ >
297
+ Next
298
+ </button>
299
+ </div>
300
+ </div>
301
+ );
302
+ },
303
+ };
304
+
305
+ /**
306
+ * StepperWithDisabledTabs: Stepper with some tabs disabled.
307
+ */
308
+ export const StepperWithDisabledTabs: Story = {
309
+ render: () => (
310
+ <Tabs variant="stepper" defaultSelectedKey="form" disabledKeys={['journeys']} className="w-[600px]">
311
+ <TabList aria-label="Steps with disabled">
312
+ <Tab id="details">Details</Tab>
313
+ <Tab id="form">Form</Tab>
314
+ <Tab id="statuses">Statuses</Tab>
315
+ <Tab id="journeys">Journeys</Tab>
316
+ </TabList>
317
+ <TabPanel id="details">
318
+ <div className="p-4">Step 1 content</div>
319
+ </TabPanel>
320
+ <TabPanel id="form">
321
+ <div className="p-4">
322
+ <h3 className="text-lg font-semibold mb-2">Step 2: Form</h3>
323
+ <p className="text-sm text-[var(--muted-foreground)]">
324
+ The &quot;Journeys&quot; step is disabled and cannot be selected.
325
+ </p>
326
+ </div>
327
+ </TabPanel>
328
+ <TabPanel id="statuses">
329
+ <div className="p-4">Step 3 content</div>
330
+ </TabPanel>
331
+ <TabPanel id="journeys">
332
+ <div className="p-4">Step 4 content (disabled)</div>
333
+ </TabPanel>
334
+ </Tabs>
335
+ ),
336
+ };
337
+
338
+ /**
339
+ * StepperTwoSteps: Minimal stepper with only 2 steps.
340
+ */
341
+ export const StepperTwoSteps: Story = {
342
+ render: () => (
343
+ <Tabs variant="stepper" defaultSelectedKey="review" className="w-[400px]">
344
+ <TabList aria-label="Two-step process">
345
+ <Tab id="configure">Configure</Tab>
346
+ <Tab id="review">Review</Tab>
347
+ </TabList>
348
+ <TabPanel id="configure">
349
+ <div className="p-4">Configuration step content</div>
350
+ </TabPanel>
351
+ <TabPanel id="review">
352
+ <div className="p-4">
353
+ <h3 className="text-lg font-semibold mb-2">Review</h3>
354
+ <p className="text-sm text-[var(--muted-foreground)]">
355
+ The first step shows a checkmark. This is the active step.
356
+ </p>
357
+ </div>
358
+ </TabPanel>
359
+ </Tabs>
360
+ ),
361
+ };
362
+
134
363
  // ============================================================================
135
364
  // Orientation Stories
136
365
  // ============================================================================