@dimasbaguspm/versaur 0.0.15 → 0.0.17

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/js/bottom-sheet-CHRSxXRE.js +501 -0
  2. package/dist/js/{switch-input-Bx6_2zG9.js → email-input-CVyrFzqL.js} +592 -807
  3. package/dist/js/enforce-subpath-import.js +5 -2
  4. package/dist/js/feedbacks/index.js +1 -1
  5. package/dist/js/{form-layout-4ASWdXn8.js → form-layout-Dhlv-FZL.js} +1 -1
  6. package/dist/js/forms/index.js +17 -14
  7. package/dist/js/{index-DOdDlCoL.js → index-C1uJQB34.js} +2 -2
  8. package/dist/js/index.js +40 -37
  9. package/dist/js/layouts/index.js +1 -1
  10. package/dist/js/modal-FqewbVts.js +150 -0
  11. package/dist/js/navigation/index.js +1 -1
  12. package/dist/js/overlays/index.js +4 -4
  13. package/dist/js/primitive/index.js +11 -11
  14. package/dist/js/{skeleton-BNZyaRjo.js → skeleton-QEyPZAuF.js} +1 -1
  15. package/dist/js/{tabs-BbOkYchB.js → tabs-DYcTvVao.js} +1 -1
  16. package/dist/js/tile-B9bt2AY6.js +1776 -0
  17. package/dist/types/forms/chip-multiple-input/chip-multiple-input.atoms.d.ts +10 -0
  18. package/dist/types/forms/chip-multiple-input/chip-multiple-input.d.ts +5 -0
  19. package/dist/types/forms/chip-multiple-input/index.d.ts +2 -0
  20. package/dist/types/forms/{chip-input → chip-multiple-input}/types.d.ts +16 -4
  21. package/dist/types/forms/chip-single-input/chip-single-input.atoms.d.ts +10 -0
  22. package/dist/types/forms/chip-single-input/chip-single-input.d.ts +5 -0
  23. package/dist/types/forms/chip-single-input/index.d.ts +1 -0
  24. package/dist/types/forms/chip-single-input/types.d.ts +67 -0
  25. package/dist/types/forms/date-single-picker-input/date-single-picker-input.d.ts +1 -8
  26. package/dist/types/forms/date-single-picker-input/index.d.ts +1 -1
  27. package/dist/types/forms/date-single-picker-input/types.d.ts +12 -66
  28. package/dist/types/forms/email-input/email-input.d.ts +8 -0
  29. package/dist/types/forms/email-input/index.d.ts +2 -0
  30. package/dist/types/forms/email-input/types.d.ts +6 -0
  31. package/dist/types/forms/index.d.ts +5 -1
  32. package/dist/types/forms/price-input/index.d.ts +2 -0
  33. package/dist/types/forms/price-input/price-input.d.ts +6 -0
  34. package/dist/types/forms/price-input/types.d.ts +15 -0
  35. package/dist/types/forms/price-input/use-price-input.d.ts +6 -0
  36. package/dist/types/forms/search-input/index.d.ts +2 -0
  37. package/dist/types/forms/search-input/search-input.d.ts +8 -0
  38. package/dist/types/forms/search-input/types.d.ts +35 -0
  39. package/dist/types/forms/segment-multiple-input/types.d.ts +1 -5
  40. package/dist/types/forms/segment-single-input/types.d.ts +1 -5
  41. package/dist/types/overlays/modal/types.d.ts +1 -1
  42. package/dist/types/primitive/anchor/types.d.ts +8 -2
  43. package/dist/types/primitive/index.d.ts +1 -0
  44. package/package.json +1 -1
  45. package/dist/js/bottom-sheet-Difan0U1.js +0 -340
  46. package/dist/js/calendar-CUjVZ7Ap.js +0 -811
  47. package/dist/js/menu-Bm-yPIMN.js +0 -310
  48. package/dist/js/tile-DLmZbkgG.js +0 -891
  49. package/dist/types/forms/chip-input/chip-input.atoms.d.ts +0 -10
  50. package/dist/types/forms/chip-input/chip-input.d.ts +0 -5
  51. package/dist/types/forms/chip-input/index.d.ts +0 -2
  52. package/dist/types/forms/date-range-picker-input/date-range-picker-input.d.ts +0 -10
  53. package/dist/types/forms/date-range-picker-input/index.d.ts +0 -2
  54. package/dist/types/forms/date-range-picker-input/types.d.ts +0 -64
  55. package/dist/types/forms/date-range-picker-input/use-date-range-picker.d.ts +0 -13
  56. package/dist/types/forms/date-single-picker-input/date-single-picker-input.atoms.d.ts +0 -13
  57. package/dist/types/forms/date-single-picker-input/date-single-picker-input.docked.d.ts +0 -14
  58. package/dist/types/forms/date-single-picker-input/date-single-picker-input.modal.d.ts +0 -15
  59. package/dist/types/forms/date-single-picker-input/use-date-single-picker.d.ts +0 -10
@@ -0,0 +1,10 @@
1
+ import { default as React } from 'react';
2
+ import { ChipMultipleInputOptionProps } from './types';
3
+ /**
4
+ * ChipMultipleInput.Option atom component
5
+ *
6
+ * Individual chip option for ChipMultipleInput
7
+ * Uses checkbox input pattern for multiple selection
8
+ * Supports leading icon and animated tick/check
9
+ */
10
+ export declare const ChipMultipleOption: React.ForwardRefExoticComponent<ChipMultipleInputOptionProps & React.RefAttributes<HTMLInputElement>>;
@@ -0,0 +1,5 @@
1
+ import { default as React } from 'react';
2
+ import { ChipMultipleInputProps } from './types';
3
+ export declare const ChipMultipleInput: React.ForwardRefExoticComponent<ChipMultipleInputProps & React.RefAttributes<HTMLDivElement>> & {
4
+ Option: React.ForwardRefExoticComponent<import('./types').ChipMultipleInputOptionProps & React.RefAttributes<HTMLInputElement>>;
5
+ };
@@ -0,0 +1,2 @@
1
+ export { ChipMultipleInput } from './chip-multiple-input';
2
+ export type { ChipMultipleInputProps, ChipMultipleInputOptionProps, } from './types';
@@ -1,8 +1,8 @@
1
1
  import { InputHTMLAttributes, ReactNode } from 'react';
2
2
  /**
3
- * Props for the ChipInput component
3
+ * Props for the ChipMultipleInput component
4
4
  */
5
- export interface ChipInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'size' | 'onChange' | 'value'> {
5
+ export interface ChipMultipleInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'size' | 'onChange' | 'value'> {
6
6
  /**
7
7
  * The shape of the chip: 'circle' (default) or 'rounded'
8
8
  */
@@ -45,9 +45,9 @@ export interface ChipInputProps extends Omit<InputHTMLAttributes<HTMLInputElemen
45
45
  onChange?: (value: string[]) => void;
46
46
  }
47
47
  /**
48
- * Props for the ChipInput.Option component
48
+ * Props for the ChipMultipleInput.Option component
49
49
  */
50
- export interface ChipInputOptionProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'name'> {
50
+ export interface ChipMultipleInputOptionProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'name'> {
51
51
  /**
52
52
  * The option label content
53
53
  */
@@ -64,4 +64,16 @@ export interface ChipInputOptionProps extends Omit<InputHTMLAttributes<HTMLInput
64
64
  * Show the default check icon if true (default: false). If both check and defaultCheck are provided, check takes precedence
65
65
  */
66
66
  defaultCheck?: boolean;
67
+ /**
68
+ * Disabled state for this option
69
+ */
70
+ disabled?: boolean;
71
+ /**
72
+ * Optional id for the input
73
+ */
74
+ id?: string;
75
+ /**
76
+ * Additional className for styling
77
+ */
78
+ className?: string;
67
79
  }
@@ -0,0 +1,10 @@
1
+ import { default as React } from 'react';
2
+ import { ChipSingleInputOptionProps } from './types';
3
+ /**
4
+ * ChipSingleInput.Option atom component
5
+ *
6
+ * Individual chip option for ChipSingleInput
7
+ * Uses radio input pattern for single selection
8
+ * Supports leading icon and animated tick/check
9
+ */
10
+ export declare const ChipSingleInputOption: React.ForwardRefExoticComponent<ChipSingleInputOptionProps & React.RefAttributes<HTMLInputElement>>;
@@ -0,0 +1,5 @@
1
+ import { default as React } from 'react';
2
+ import { ChipSingleInputProps } from './types';
3
+ export declare const ChipSingleInput: React.ForwardRefExoticComponent<ChipSingleInputProps & React.RefAttributes<HTMLDivElement>> & {
4
+ Option: React.ForwardRefExoticComponent<import('./types').ChipSingleInputOptionProps & React.RefAttributes<HTMLInputElement>>;
5
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,67 @@
1
+ import { InputHTMLAttributes, ReactNode } from 'react';
2
+ /**
3
+ * Props for the ChipSingleInput component
4
+ */
5
+ export interface ChipSingleInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'size' | 'onChange' | 'value'> {
6
+ /**
7
+ * The shape of the chip: 'circle' (default) or 'rounded'
8
+ */
9
+ shape?: 'circle' | 'rounded';
10
+ /**
11
+ * The size of the chip: 'sm' (default), 'md', or 'lg'
12
+ */
13
+ size?: 'sm' | 'md' | 'lg';
14
+ /**
15
+ * Visual style variant supporting Versaur color system
16
+ * Core variants: primary (coral), secondary (sage), tertiary (mist), ghost (slate), neutral (light gray)
17
+ * Semantic variants: success, info, warning, danger
18
+ * Each variant supports outline form for flexible design expression
19
+ */
20
+ variant?: 'primary' | 'secondary' | 'tertiary' | 'ghost' | 'neutral' | 'success' | 'info' | 'warning' | 'danger';
21
+ /**
22
+ * Label text to display above the chip group
23
+ */
24
+ label?: ReactNode;
25
+ /**
26
+ * Helper text to display below the chip group
27
+ */
28
+ helperText?: ReactNode;
29
+ /**
30
+ * Error message for invalid state
31
+ */
32
+ error?: ReactNode;
33
+ /**
34
+ * The name attribute for the radio group - required for radio functionality
35
+ */
36
+ name: string;
37
+ /**
38
+ * Current selected value (controlled component)
39
+ * String representing selected option value
40
+ */
41
+ value?: string;
42
+ /**
43
+ * Callback when value changes
44
+ */
45
+ onChange?: (value: string) => void;
46
+ }
47
+ /**
48
+ * Props for the ChipSingleInput.Option component
49
+ */
50
+ export interface ChipSingleInputOptionProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'name'> {
51
+ /**
52
+ * The option label content
53
+ */
54
+ children: ReactNode;
55
+ /**
56
+ * The value for this chip option
57
+ */
58
+ value: string;
59
+ /**
60
+ * Custom check icon or element. If not provided, no check is rendered unless defaultCheck is true
61
+ */
62
+ check?: React.ReactNode;
63
+ /**
64
+ * Show the default check icon if true (default: false). If both check and defaultCheck are provided, check takes precedence
65
+ */
66
+ defaultCheck?: boolean;
67
+ }
@@ -1,10 +1,3 @@
1
1
  import { default as React } from 'react';
2
2
  import { DateSinglePickerInputProps } from './types';
3
- /**
4
- * DateSinglePickerInput component for Versaur UI
5
- *
6
- * Styled like TextInput, but acts as a button to pick a single date
7
- * Clicking opens a docked Calendar below the input
8
- * Strictly typed, accessible, and visually consistent with TextInput
9
- */
10
- export declare const DateSinglePickerInput: React.ForwardRefExoticComponent<DateSinglePickerInputProps & React.RefAttributes<HTMLButtonElement>>;
3
+ export declare const DateSinglePickerInput: React.ForwardRefExoticComponent<DateSinglePickerInputProps & React.RefAttributes<HTMLInputElement>>;
@@ -1,2 +1,2 @@
1
1
  export { DateSinglePickerInput } from './date-single-picker-input';
2
- export type * from './types';
2
+ export * from './types';
@@ -1,75 +1,21 @@
1
- import { ReactNode } from 'react';
1
+ import { TextInputProps } from '../text-input/types';
2
2
  /**
3
- * Props for the DateSinglePickerInput component
3
+ * Props for DateSinglePickerInput
4
+ * Extends TextInputProps, but restricts type to 'date' and value to string
4
5
  */
5
- /**
6
- * Props for the DateSinglePickerInput component
7
- */
8
- export interface DateSinglePickerInputProps {
9
- /**
10
- * Picker display type: 'docked' (default) or 'modal'.
11
- * 'docked' shows calendar below input, 'modal' opens a modal at top.
12
- */
13
- type?: 'docked' | 'modal';
14
- /**
15
- * The selected date value
16
- */
17
- value?: Date;
18
- /**
19
- * Callback when a date is selected
20
- */
21
- onChange?: (date: Date) => void;
22
- /**
23
- * Label text to display above the input
24
- */
25
- label?: ReactNode;
26
- /**
27
- * Optional content to display inside the input (left)
28
- */
29
- leftContent?: ReactNode;
30
- /**
31
- * Optional content to display inside the input (right)
32
- */
33
- rightContent?: ReactNode;
34
- /**
35
- * Helper text to display below the input
36
- */
37
- helperText?: ReactNode;
38
- /**
39
- * Error message for invalid state
40
- */
41
- error?: ReactNode;
42
- /**
43
- * Visual style variant supporting Versaur color system
44
- */
45
- variant?: 'primary' | 'primary-outline' | 'secondary' | 'secondary-outline' | 'tertiary' | 'tertiary-outline' | 'ghost' | 'ghost-outline' | 'neutral' | 'neutral-outline' | 'success' | 'success-outline' | 'info' | 'info-outline' | 'warning' | 'warning-outline' | 'danger' | 'danger-outline';
6
+ export interface DateSinglePickerInputProps extends Omit<TextInputProps, 'type' | 'value' | 'onChange'> {
46
7
  /**
47
- * Disabled state
8
+ * The value of the input (ISO date string: YYYY-MM-DD)
48
9
  */
49
- disabled?: boolean;
10
+ value: string;
50
11
  /**
51
- * Placeholder text when no date is selected
12
+ * Called when the value changes
52
13
  */
53
- placeholder?: ReactNode;
14
+ onChange: (value: string) => void;
54
15
  /**
55
- * Optional id for the input element
16
+ * Optional custom formatter for displaying the date value
17
+ * @param value ISO date string
18
+ * @returns formatted string for display
56
19
  */
57
- id?: string;
58
- /**
59
- * Optional custom date formatter. If not provided, uses default format.
60
- * @param date Date to format
61
- * @returns Formatted date string
62
- */
63
- formatDate?: (date?: Date) => string;
64
- }
65
- /**
66
- * Atoms for DateSinglePickerInput modal type
67
- */
68
- export interface DateSinglePickerModalContentProps {
69
- children: ReactNode;
70
- }
71
- export interface DateSinglePickerModalFooterProps {
72
- onCancel: () => void;
73
- onConfirm: () => void;
74
- confirmDisabled?: boolean;
20
+ formatter?: (value: string) => string;
75
21
  }
@@ -0,0 +1,8 @@
1
+ import { EmailInputProps } from './types';
2
+ /**
3
+ * EmailInput component for Versaur UI
4
+ *
5
+ * A wrapper around TextInput that enforces type="email" and follows HTML input standards
6
+ * Supports all TextInput props except type, which is always "email"
7
+ */
8
+ export declare const EmailInput: import('react').ForwardRefExoticComponent<EmailInputProps & import('react').RefAttributes<HTMLInputElement>>;
@@ -0,0 +1,2 @@
1
+ export { EmailInput } from './email-input';
2
+ export type { EmailInputProps } from './types';
@@ -0,0 +1,6 @@
1
+ import { TextInputProps } from '../text-input/types';
2
+ /**
3
+ * Props for the EmailInput component
4
+ * Extends TextInputProps and enforces type="email" for HTML input standards
5
+ */
6
+ export type EmailInputProps = Omit<TextInputProps, 'type'>;
@@ -1,12 +1,16 @@
1
1
  export * from './calculator-input';
2
2
  export * from './checkbox-input';
3
- export * from './chip-input';
3
+ export * from './chip-single-input';
4
+ export * from './chip-multiple-input';
4
5
  export * from './date-single-picker-input';
5
6
  export * from './radio-input';
6
7
  export * from './segment-single-input';
7
8
  export * from './segment-multiple-input';
9
+ export * from './search-input';
8
10
  export * from './select-input';
9
11
  export * from './text-input';
10
12
  export * from './textarea-input';
11
13
  export * from './time-picker-input';
12
14
  export * from './switch-input';
15
+ export * from './price-input';
16
+ export * from './email-input';
@@ -0,0 +1,2 @@
1
+ export * from './price-input';
2
+ export type { PriceInputProps } from './types';
@@ -0,0 +1,6 @@
1
+ import { FC } from 'react';
2
+ import { PriceInputProps } from './types';
3
+ /**
4
+ * PriceInput is a styled input for IDR currency, handling comma formatting and standard input attributes
5
+ */
6
+ export declare const PriceInput: FC<PriceInputProps>;
@@ -0,0 +1,15 @@
1
+ import { InputHTMLAttributes } from 'react';
2
+ import { TextInputProps } from '../text-input/types';
3
+ /**
4
+ * Props for PriceInput component
5
+ * @property value - The price value as a string (raw, unformatted)
6
+ * @property onChange - Called when the value changes (returns raw string)
7
+ * @property allowNegative - Optional: allow negative values (default: false)
8
+ * @property inputProps - Optional: custom input attributes
9
+ */
10
+ export interface PriceInputProps extends Omit<TextInputProps, 'type' | 'value' | 'onChange'> {
11
+ value: string;
12
+ onChange: (value: string) => void;
13
+ allowNegative?: boolean;
14
+ inputProps?: InputHTMLAttributes<HTMLInputElement>;
15
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * usePriceInputSync synchronizes the local input value with the parent value
3
+ * @param value - The parent value (string or number)
4
+ * @param setRawValue - Setter for local raw value
5
+ */
6
+ export declare function usePriceInputSync(value: string | number, setRawValue: (val: string) => void): void;
@@ -0,0 +1,2 @@
1
+ export { SearchInput } from './search-input';
2
+ export type { SearchInputProps } from './types';
@@ -0,0 +1,8 @@
1
+ import { SearchInputProps } from './types';
2
+ /**
3
+ * SearchInput component for Versaur UI
4
+ *
5
+ * A styled input field for search, extending TextInput and enforcing HTML search input standards
6
+ * Follows browser standards and accessibility best practices
7
+ */
8
+ export declare const SearchInput: import('react').ForwardRefExoticComponent<SearchInputProps & import('react').RefAttributes<HTMLInputElement>>;
@@ -0,0 +1,35 @@
1
+ import { TextInputProps } from '../text-input/types';
2
+ /**
3
+ * Props for the SearchInput component
4
+ * Extends TextInputProps and enforces type='search' with proper HTML search attributes
5
+ */
6
+ export interface SearchInputProps extends Omit<TextInputProps, 'type'> {
7
+ /**
8
+ * The value of the input
9
+ */
10
+ value?: string;
11
+ /**
12
+ * Callback when the value changes
13
+ */
14
+ onChange?: React.ChangeEventHandler<HTMLInputElement>;
15
+ /**
16
+ * Placeholder text for the search input
17
+ */
18
+ placeholder?: string;
19
+ /**
20
+ * Whether the input is disabled
21
+ */
22
+ disabled?: boolean;
23
+ /**
24
+ * Whether to show the clear button (native search input feature)
25
+ */
26
+ allowClear?: boolean;
27
+ /**
28
+ * Autocomplete behavior for the search input
29
+ */
30
+ autoComplete?: string;
31
+ /**
32
+ * Spellcheck for the search input
33
+ */
34
+ spellCheck?: boolean;
35
+ }
@@ -9,15 +9,11 @@ export interface SegmentMultipleInputProps extends Omit<InputHTMLAttributes<HTML
9
9
  * Semantic variants: success, info, warning, danger
10
10
  * Each variant supports outline form for flexible design expression
11
11
  */
12
- variant?: 'primary' | 'primary-outline' | 'secondary' | 'secondary-outline' | 'tertiary' | 'tertiary-outline' | 'ghost' | 'ghost-outline' | 'neutral' | 'neutral-outline' | 'success' | 'success-outline' | 'info' | 'info-outline' | 'warning' | 'warning-outline' | 'danger' | 'danger-outline';
12
+ variant?: 'primary' | 'secondary' | 'tertiary' | 'ghost' | 'neutral' | 'success' | 'info' | 'warning' | 'danger';
13
13
  /**
14
14
  * Size variant for the segment inputs
15
15
  */
16
16
  size?: 'sm' | 'md' | 'lg';
17
- /**
18
- * If true, options will fill the parent width equally
19
- */
20
- fullWidth?: boolean;
21
17
  /**
22
18
  * Label text to display above the segment group
23
19
  */
@@ -9,15 +9,11 @@ export interface SegmentSingleInputProps extends Omit<InputHTMLAttributes<HTMLIn
9
9
  * Semantic variants: success, info, warning, danger
10
10
  * Each variant supports outline form for flexible design expression
11
11
  */
12
- variant?: 'primary' | 'primary-outline' | 'secondary' | 'secondary-outline' | 'tertiary' | 'tertiary-outline' | 'ghost' | 'ghost-outline' | 'neutral' | 'neutral-outline' | 'success' | 'success-outline' | 'info' | 'info-outline' | 'warning' | 'warning-outline' | 'danger' | 'danger-outline';
12
+ variant?: 'primary' | 'secondary' | 'tertiary' | 'ghost' | 'neutral' | 'success' | 'info' | 'warning' | 'danger';
13
13
  /**
14
14
  * Size variant for the segment inputs
15
15
  */
16
16
  size?: 'sm' | 'md' | 'lg';
17
- /**
18
- * If true, the segment group and its options will fill the parent width
19
- */
20
- fullWidth?: boolean;
21
17
  /**
22
18
  * Label text to display above the segment group
23
19
  */
@@ -2,7 +2,7 @@ import { HTMLAttributes } from 'react';
2
2
  /**
3
3
  * Modal component prop types
4
4
  */
5
- export type ModalSize = 'sm' | 'md' | 'lg';
5
+ export type ModalSize = 'sm' | 'md' | 'lg' | 'fit-content';
6
6
  export type ModalPlacement = 'top' | 'center';
7
7
  /**
8
8
  * Modal compound root
@@ -10,10 +10,16 @@ export interface AnchorProps extends AnchorHTMLAttributes<HTMLAnchorElement> {
10
10
  color?: 'primary' | 'secondary' | 'ghost' | 'danger' | 'neutral';
11
11
  /**
12
12
  * Font size utility (default: 'base')
13
+ * See: https://tailwindcss.com/docs/font-size
13
14
  */
14
- fontSize?: string;
15
+ fontSize?: 'xs' | 'sm' | 'base' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl' | '5xl' | '6xl' | '7xl' | '8xl' | '9xl' | 'inherit' | undefined;
15
16
  /**
16
17
  * Font weight utility (default: 'medium')
18
+ * See: https://tailwindcss.com/docs/font-weight
17
19
  */
18
- fontWeight?: string;
20
+ fontWeight?: 'thin' | 'extralight' | 'light' | 'normal' | 'medium' | 'semibold' | 'bold' | 'extrabold' | 'black' | 'inherit' | undefined;
21
+ /**
22
+ * If true, removes underline style from anchor
23
+ */
24
+ quiet?: boolean;
19
25
  }
@@ -1,4 +1,5 @@
1
1
  export * from './alert';
2
+ export * from './anchor';
2
3
  export * from './avatar';
3
4
  export * from './badge';
4
5
  export * from './brand';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dimasbaguspm/versaur",
3
- "version": "0.0.15",
3
+ "version": "0.0.17",
4
4
  "description": "React UI library with Tailwind CSS",
5
5
  "author": "Dimas Bagus Prayogo Mukti<dimas.bagus.pm@gmail.com>",
6
6
  "license": "MIT",