@dnotrever2/super-kit 0.1.16 → 0.1.18

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.
package/README.md CHANGED
@@ -203,6 +203,7 @@ import { Button, Spinner } from "@dnotrever2/super-kit";
203
203
  <Button variant="danger">Delete</Button>
204
204
  <Button variant="danger" coloredText>Delete</Button>
205
205
  <Button variant="primary" outline>Configure</Button>
206
+ <Button variant="primary" transparent>Deploy</Button>
206
207
  <Button variant="primary" rounded>Deploy</Button>
207
208
  <Button variant="ghost" icon={<SettingsIcon />} aria-label="Settings" />
208
209
  <Button variant="primary" disabled icon={<Spinner size="sm" onAccent />}>
@@ -218,9 +219,10 @@ import { Button, Spinner } from "@dnotrever2/super-kit";
218
219
  | `outline` | `boolean` | `false` |
219
220
  | `rounded` | `boolean` | `false` |
220
221
  | `coloredText` | `boolean` | `false` |
222
+ | `transparent` | `boolean` | `false` |
221
223
  | `disabled` | `boolean` | `false` |
222
224
 
223
- Normal semantic buttons use a stronger background with white text. Use `coloredText` when the text should follow the button variant color. Outline buttons always use the variant color for the text.
225
+ Normal semantic buttons use a stronger background with white text. Use `coloredText` when the text should follow the button variant color. Use `transparent` when the button should start without a background and reveal the variant background on hover. Outline buttons always use the variant color for the text.
224
226
  To create a loading button, pass a `Spinner` as `icon`, use text such as `"Loading..."`, and set `disabled` to block interaction.
225
227
  To create an icon button, pass only `icon` and no text. Provide an accessible label with `aria-label`.
226
228
 
@@ -286,6 +288,9 @@ import { Input } from "@dnotrever2/super-kit";
286
288
  // With icon
287
289
  <Input label="search" icon={<SearchIcon />} placeholder="Search services" />
288
290
 
291
+ // Rounded
292
+ <Input label="search" rounded placeholder="Search services" />
293
+
289
294
  // With mask — only digits allowed, formatted as 000-0000
290
295
  <Input
291
296
  label="code"
@@ -314,6 +319,7 @@ import { Input } from "@dnotrever2/super-kit";
314
319
  | `maskAllowedPattern` | `RegExp` | — |
315
320
  | `maskPlaceholder` | `string` | — |
316
321
  | `clearable` | `boolean` | `false` |
322
+ | `rounded` | `boolean` | `false` |
317
323
  | `selectOnFocus` | `boolean` | `false` |
318
324
  | `textAlign` | `"left" \| "center" \| "right"` | — |
319
325
  | `value` / `defaultValue` | `string` | `""` |
@@ -327,6 +333,83 @@ Forwards a `ref` to the underlying `<input>`.
327
333
 
328
334
  ---
329
335
 
336
+ ### DateTimeInput
337
+
338
+ Date and time input with custom date, month, and time pickers using Super Kit styling.
339
+
340
+ ```tsx
341
+ import { DateTimeInput } from "@dnotrever2/super-kit";
342
+
343
+ <DateTimeInput label="Date" mode="date" clearable />
344
+ <DateTimeInput label="Time" mode="time" />
345
+ <DateTimeInput label="Date and time" mode="datetime" />
346
+ <DateTimeInput label="Month and year" mode="month" />
347
+
348
+ <DateTimeInput
349
+ label="Release date"
350
+ mode="date"
351
+ min="2026-05-01"
352
+ max="2026-05-31"
353
+ onValueChange={(value) => setDate(value)}
354
+ />
355
+ ```
356
+
357
+ | Prop | Type | Default |
358
+ | ------------------- | ------------------------------------------------ | -------- |
359
+ | `mode` | `"date" \| "time" \| "datetime" \| "month"` | `"date"` |
360
+ | `label` | `string` | — |
361
+ | `value` / `defaultValue` | `string` | `""` |
362
+ | `clearable` | `boolean` | `false` |
363
+ | `clearLabel` | `string` | `"Clear"` |
364
+ | `showIcon` | `boolean` | `true` |
365
+ | `openPickerOnClick` | `boolean` | `true` |
366
+ | `disabled` | `boolean` | `false` |
367
+ | `onChange` | `ChangeEvent<HTMLInputElement>` | — |
368
+ | `onValueChange` | `(value: string) => void` | — |
369
+ | `inputProps` | `InputHTMLAttributes<HTMLInputElement>` | — |
370
+ | `wrapperProps` | `HTMLAttributes<HTMLSpanElement>` | — |
371
+ | `fieldProps` | `HTMLAttributes<HTMLDivElement>` | — |
372
+
373
+ Native `min`, `max`, `step`, `required`, and other input attributes are supported. Values follow browser-native formats: `YYYY-MM-DD` for date, `HH:mm` for time, `YYYY-MM-DDTHH:mm` for datetime, and `YYYY-MM` for month.
374
+
375
+ Forwards a `ref` to the underlying `<input>`.
376
+
377
+ ---
378
+
379
+ ### Link
380
+
381
+ Text link with variants aligned to Button and Badge colors.
382
+
383
+ ```tsx
384
+ import { Link } from "@dnotrever2/super-kit";
385
+
386
+ <Link href="/docs" variant="primary">Documentation</Link>
387
+ <Link href="/status" variant="success" underlined>Status</Link>
388
+ <Link href="https://example.com" target="_blank" noreferrer>
389
+ External docs
390
+ </Link>
391
+ <Link href="/danger-zone" variant="danger" opacity={0.72}>
392
+ Danger zone
393
+ </Link>
394
+ <Link href="/settings" disabled>Settings</Link>
395
+ ```
396
+
397
+ | Prop | Type | Default |
398
+ | ------------- | --------------------------------------------------------------------------- | ----------- |
399
+ | `variant` | `"primary" \| "secondary" \| "ghost" \| "danger" \| "success" \| "warning"` | `"primary"` |
400
+ | `href` | `string` | — |
401
+ | `target` | `HTMLAttributeAnchorTarget` | — |
402
+ | `underlined` | `boolean` | `false` |
403
+ | `opacity` | `number` | `1` |
404
+ | `disabled` | `boolean` | `false` |
405
+ | `noreferrer` | `boolean` | `false` |
406
+ | `noopener` | `boolean` | `true` for `target="_blank"` |
407
+ | `icon` | `ReactNode` | — |
408
+
409
+ Forwards a `ref` to the underlying `<a>`. Accepts native anchor attributes such as `download`, `rel`, `referrerPolicy`, and `aria-*`. When `disabled`, navigation is blocked and the link is removed from the tab order.
410
+
411
+ ---
412
+
330
413
  ### Markers
331
414
 
332
415
  Form selection primitives: Checkbox, Radio, and Switch.
@@ -712,6 +795,55 @@ import { Spinner } from "@dnotrever2/super-kit";
712
795
 
713
796
  ---
714
797
 
798
+ ### Steps
799
+
800
+ Step progress indicator with circular or arrow styles.
801
+
802
+ ```tsx
803
+ import { Steps } from "@dnotrever2/super-kit";
804
+
805
+ const items = [
806
+ { label: "Step 1", description: "Configure the workspace" },
807
+ { label: "Step 2", description: "Review the changes" },
808
+ { label: "Step 3", description: "Publish the release" }
809
+ ];
810
+
811
+ <Steps items={items} currentStep={2} />
812
+
813
+ <Steps
814
+ items={items}
815
+ variant="arrow"
816
+ currentStep={2}
817
+ showNumbers={false}
818
+ />
819
+ ```
820
+
821
+ | Prop | Type | Default |
822
+ | --------------- | ---------------------------- | ------------ |
823
+ | `items` | `StepItem[]` | required |
824
+ | `currentStep` | `number` | `1` |
825
+ | `variant` | `"line" \| "arrow"` | `"line"` |
826
+ | `size` | `"sm" \| "md" \| "lg"` | `"md"` |
827
+ | `clickable` | `boolean` | `false` |
828
+ | `showNumbers` | `boolean` | `true` |
829
+ | `onStepChange` | `(step: number) => void` | — |
830
+ | `stepClassName` | `string` | — |
831
+
832
+ **StepItem fields**
833
+
834
+ | Field | Type |
835
+ | ------------- | ----------------------------------------- |
836
+ | `label` | `ReactNode` |
837
+ | `description` | `ReactNode` |
838
+ | `icon` | `ReactNode` |
839
+ | `disabled` | `boolean` |
840
+ | `className` | `string` |
841
+ | `stepProps` | `ButtonHTMLAttributes<HTMLButtonElement>` |
842
+
843
+ `currentStep` is 1-based. Completed steps are the steps before `currentStep`; the current step is highlighted.
844
+
845
+ ---
846
+
715
847
  ### Textarea
716
848
 
717
849
  Multi-line text input with custom scrollbar, character count, and clear button.
@@ -823,6 +955,10 @@ import { Tooltip } from "@dnotrever2/super-kit";
823
955
  <Tooltip content="No delay" delay={0}>
824
956
  <Button variant="primary">Deploy</Button>
825
957
  </Tooltip>
958
+
959
+ <Tooltip content="Fixed top" side="top" dynamic={false}>
960
+ <Button variant="primary">Deploy</Button>
961
+ </Tooltip>
826
962
  ```
827
963
 
828
964
  | Prop | Type | Default |
@@ -830,9 +966,13 @@ import { Tooltip } from "@dnotrever2/super-kit";
830
966
  | `content` | `ReactNode` | required |
831
967
  | `side` | `"top" \| "bottom" \| "left" \| "right"` | `"top"` |
832
968
  | `delay` | `number` (ms) | `800` |
969
+ | `dynamic` | `boolean` | `true` |
970
+ | `viewportPadding` | `number` | `8` |
833
971
  | `disabled` | `boolean` | `false` |
834
972
  | `wrapperProps` | `HTMLAttributes<HTMLSpanElement>` | — |
835
973
 
974
+ By default, the tooltip flips to the opposite side when the requested side would be clipped by the viewport.
975
+
836
976
  ---
837
977
 
838
978
  ## Design tokens
@@ -862,10 +1002,10 @@ All tokens are CSS custom properties defined in `src/styles/index.css` and avail
862
1002
 
863
1003
  | Token | |
864
1004
  | ------------------------------ | ---------------------- |
865
- | `--accent` | Blue `#3d7eff` |
866
- | `--accent-hover` | `#5b95ff` |
867
- | `--accent-soft` | `rgba(61,126,255,.14)` |
868
- | `--accent-ring` | `rgba(61,126,255,.35)` |
1005
+ | `--accent` | Blue `#416fa8` |
1006
+ | `--accent-hover` | `#507fb9` |
1007
+ | `--accent-soft` | `rgba(65,111,168,.14)` |
1008
+ | `--accent-ring` | `rgba(65,111,168,.35)` |
869
1009
  | `--success` / `--success-soft` | Green `#3ecf8e` |
870
1010
  | `--warning` / `--warning-soft` | Yellow `#facc15` |
871
1011
  | `--danger` / `--danger-soft` | Red `#f0556a` |
@@ -8,6 +8,7 @@ export type ButtonProps = ButtonHTMLAttributes<HTMLButtonElement> & {
8
8
  outline?: boolean;
9
9
  rounded?: boolean;
10
10
  coloredText?: boolean;
11
+ transparent?: boolean;
11
12
  children?: ReactNode;
12
13
  };
13
14
  export declare const Button: import('react').ForwardRefExoticComponent<ButtonHTMLAttributes<HTMLButtonElement> & {
@@ -17,5 +18,6 @@ export declare const Button: import('react').ForwardRefExoticComponent<ButtonHTM
17
18
  outline?: boolean;
18
19
  rounded?: boolean;
19
20
  coloredText?: boolean;
21
+ transparent?: boolean;
20
22
  children?: ReactNode;
21
23
  } & import('react').RefAttributes<HTMLButtonElement>>;
@@ -0,0 +1,34 @@
1
+ import { default as React, ButtonHTMLAttributes, ChangeEvent, HTMLAttributes, InputHTMLAttributes } from 'react';
2
+ export type DateTimeInputMode = "date" | "time" | "datetime" | "month";
3
+ export type DateTimeInputProps = Omit<InputHTMLAttributes<HTMLInputElement>, "defaultValue" | "onChange" | "type" | "value"> & {
4
+ mode?: DateTimeInputMode;
5
+ label?: string;
6
+ value?: string;
7
+ defaultValue?: string;
8
+ clearable?: boolean;
9
+ clearLabel?: string;
10
+ showIcon?: boolean;
11
+ openPickerOnClick?: boolean;
12
+ inputProps?: InputHTMLAttributes<HTMLInputElement>;
13
+ wrapperProps?: HTMLAttributes<HTMLSpanElement>;
14
+ fieldProps?: HTMLAttributes<HTMLDivElement>;
15
+ clearButtonProps?: ButtonHTMLAttributes<HTMLButtonElement>;
16
+ onChange?: (event: ChangeEvent<HTMLInputElement>) => void;
17
+ onValueChange?: (value: string) => void;
18
+ };
19
+ export declare const DateTimeInput: React.ForwardRefExoticComponent<Omit<React.InputHTMLAttributes<HTMLInputElement>, "defaultValue" | "onChange" | "value" | "type"> & {
20
+ mode?: DateTimeInputMode;
21
+ label?: string;
22
+ value?: string;
23
+ defaultValue?: string;
24
+ clearable?: boolean;
25
+ clearLabel?: string;
26
+ showIcon?: boolean;
27
+ openPickerOnClick?: boolean;
28
+ inputProps?: InputHTMLAttributes<HTMLInputElement>;
29
+ wrapperProps?: HTMLAttributes<HTMLSpanElement>;
30
+ fieldProps?: HTMLAttributes<HTMLDivElement>;
31
+ clearButtonProps?: ButtonHTMLAttributes<HTMLButtonElement>;
32
+ onChange?: (event: ChangeEvent<HTMLInputElement>) => void;
33
+ onValueChange?: (value: string) => void;
34
+ } & React.RefAttributes<HTMLInputElement>>;
@@ -0,0 +1 @@
1
+ export * from './DateTimeInput';
@@ -14,6 +14,7 @@ export type InputProps = Omit<InputHTMLAttributes<HTMLInputElement>, "defaultVal
14
14
  maskAllowedPattern?: RegExp;
15
15
  clearable?: boolean;
16
16
  clearLabel?: string;
17
+ rounded?: boolean;
17
18
  selectOnFocus?: boolean;
18
19
  textAlign?: "left" | "center" | "right";
19
20
  inputProps?: InputHTMLAttributes<HTMLInputElement>;
@@ -34,6 +35,7 @@ export declare const Input: React.ForwardRefExoticComponent<Omit<React.InputHTML
34
35
  maskAllowedPattern?: RegExp;
35
36
  clearable?: boolean;
36
37
  clearLabel?: string;
38
+ rounded?: boolean;
37
39
  selectOnFocus?: boolean;
38
40
  textAlign?: "left" | "center" | "right";
39
41
  inputProps?: InputHTMLAttributes<HTMLInputElement>;
@@ -0,0 +1,22 @@
1
+ import { AnchorHTMLAttributes, ReactNode } from 'react';
2
+ export type LinkVariant = "primary" | "secondary" | "ghost" | "danger" | "success" | "warning";
3
+ export type LinkProps = Omit<AnchorHTMLAttributes<HTMLAnchorElement>, "aria-disabled"> & {
4
+ variant?: LinkVariant;
5
+ underlined?: boolean;
6
+ opacity?: number;
7
+ disabled?: boolean;
8
+ noreferrer?: boolean;
9
+ noopener?: boolean;
10
+ icon?: ReactNode;
11
+ children?: ReactNode;
12
+ };
13
+ export declare const Link: import('react').ForwardRefExoticComponent<Omit<AnchorHTMLAttributes<HTMLAnchorElement>, "aria-disabled"> & {
14
+ variant?: LinkVariant;
15
+ underlined?: boolean;
16
+ opacity?: number;
17
+ disabled?: boolean;
18
+ noreferrer?: boolean;
19
+ noopener?: boolean;
20
+ icon?: ReactNode;
21
+ children?: ReactNode;
22
+ } & import('react').RefAttributes<HTMLAnchorElement>>;
@@ -0,0 +1 @@
1
+ export * from './Link';
@@ -0,0 +1,25 @@
1
+ import { ButtonHTMLAttributes, HTMLAttributes, ReactNode } from 'react';
2
+ export type StepsVariant = "line" | "arrow";
3
+ export type StepsSize = "sm" | "md" | "lg";
4
+ export type StepItem = {
5
+ label: ReactNode;
6
+ description?: ReactNode;
7
+ icon?: ReactNode;
8
+ disabled?: boolean;
9
+ className?: string;
10
+ stepProps?: ButtonHTMLAttributes<HTMLButtonElement>;
11
+ };
12
+ export type StepsProps = Omit<HTMLAttributes<HTMLOListElement>, "onChange"> & {
13
+ items: StepItem[];
14
+ currentStep?: number;
15
+ variant?: StepsVariant;
16
+ size?: StepsSize;
17
+ clickable?: boolean;
18
+ showNumbers?: boolean;
19
+ onStepChange?: (step: number) => void;
20
+ stepClassName?: string;
21
+ };
22
+ export declare function Steps({ items, currentStep, variant, size, clickable, showNumbers, onStepChange, stepClassName, className, ...props }: StepsProps): import("react/jsx-runtime").JSX.Element;
23
+ export declare namespace Steps {
24
+ var displayName: string;
25
+ }
@@ -0,0 +1 @@
1
+ export * from './Steps';
@@ -4,11 +4,13 @@ export type TooltipProps = {
4
4
  content: ReactNode;
5
5
  side?: TooltipSide;
6
6
  delay?: number;
7
+ dynamic?: boolean;
8
+ viewportPadding?: number;
7
9
  children: ReactNode;
8
10
  wrapperProps?: HTMLAttributes<HTMLSpanElement>;
9
11
  disabled?: boolean;
10
12
  };
11
- export declare function Tooltip({ content, side, delay, children, wrapperProps, disabled }: TooltipProps): import("react/jsx-runtime").JSX.Element;
13
+ export declare function Tooltip({ content, side, delay, dynamic, viewportPadding, children, wrapperProps, disabled }: TooltipProps): import("react/jsx-runtime").JSX.Element;
12
14
  export declare namespace Tooltip {
13
15
  var displayName: string;
14
16
  }
package/dist/index.d.ts CHANGED
@@ -4,7 +4,9 @@ export * from './Breadcrumb';
4
4
  export * from './Scrollable';
5
5
  export * from './Button';
6
6
  export * from './Card';
7
+ export * from './DateTimeInput';
7
8
  export * from './Input';
9
+ export * from './Link';
8
10
  export * from './Markers';
9
11
  export * from './Menu';
10
12
  export * from './Modal';
@@ -13,6 +15,7 @@ export * from './Progress';
13
15
  export * from './PushButton';
14
16
  export * from './Select';
15
17
  export * from './Spinner';
18
+ export * from './Steps';
16
19
  export * from './Tabs';
17
20
  export * from './Textarea';
18
21
  export * from './Toast';