@sqrzro/ui 4.0.0-alpha.13 → 4.0.0-alpha.14

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 (124) hide show
  1. package/dist/components/buttons/Button/index.d.ts +1 -1
  2. package/dist/components/buttons/Button/index.js +4 -14
  3. package/dist/components/collections/DataTable/index.d.ts +1 -1
  4. package/dist/components/collections/DataTable/index.js +3 -3
  5. package/dist/components/collections/EmptyMessage/index.d.ts +1 -1
  6. package/dist/components/collections/EmptyMessage/index.js +3 -4
  7. package/dist/components/collections/ListItem/index.d.ts +1 -1
  8. package/dist/components/collections/ListItem/index.js +5 -5
  9. package/dist/components/collections/ListItemMeta/index.d.ts +1 -1
  10. package/dist/components/collections/ListItemMeta/index.js +3 -4
  11. package/dist/components/collections/ListItemSecondary/index.d.ts +1 -1
  12. package/dist/components/collections/ListItemSecondary/index.js +3 -4
  13. package/dist/components/collections/Pagination/index.d.ts +1 -1
  14. package/dist/components/collections/Pagination/index.js +5 -6
  15. package/dist/components/collections/PaginationLink/index.d.ts +9 -0
  16. package/dist/components/collections/PaginationLink/index.js +8 -0
  17. package/dist/components/collections/TableClientComponent/index.d.ts +1 -1
  18. package/dist/components/collections/TableClientComponent/index.js +4 -7
  19. package/dist/components/collections/TableRow/index.d.ts +12 -0
  20. package/dist/components/collections/TableRow/index.js +9 -0
  21. package/dist/components/errors/AppError/index.d.ts +19 -0
  22. package/dist/components/errors/AppError/index.js +8 -0
  23. package/dist/components/errors/AppForbiddenError/index.d.ts +7 -0
  24. package/dist/components/errors/AppForbiddenError/index.js +6 -0
  25. package/dist/components/errors/AppNotFoundError/index.d.ts +7 -0
  26. package/dist/components/errors/AppNotFoundError/index.js +6 -0
  27. package/dist/components/errors/AppServerError/index.d.ts +8 -0
  28. package/dist/components/errors/AppServerError/index.js +17 -0
  29. package/dist/components/index.d.ts +6 -0
  30. package/dist/components/index.js +3 -0
  31. package/dist/components/modals/Modal/index.d.ts +1 -1
  32. package/dist/components/modals/Modal/index.js +3 -3
  33. package/dist/components/modals/ModalActions/index.d.ts +1 -1
  34. package/dist/components/modals/ModalActions/index.js +3 -3
  35. package/dist/components/utility/ActionList/index.d.ts +1 -1
  36. package/dist/components/utility/ActionList/index.js +2 -2
  37. package/dist/components/utility/ClassNamesClientComponent/index.d.ts +6 -0
  38. package/dist/components/utility/ClassNamesClientComponent/index.js +7 -0
  39. package/dist/components/utility/Container/index.d.ts +1 -1
  40. package/dist/components/utility/Container/index.js +2 -2
  41. package/dist/components/utility/Link/index.d.ts +1 -1
  42. package/dist/components/utility/Link/index.js +3 -3
  43. package/dist/components/utility/Loader/index.d.ts +1 -1
  44. package/dist/components/utility/Loader/index.js +4 -4
  45. package/dist/components/utility/Popover/index.d.ts +1 -1
  46. package/dist/components/utility/Popover/index.js +4 -4
  47. package/dist/components/utility/RootLayout/index.d.ts +2 -2
  48. package/dist/components/utility/RootLayout/index.js +6 -5
  49. package/dist/components/utility/Toast/index.d.ts +1 -1
  50. package/dist/components/utility/Toast/index.js +2 -2
  51. package/dist/filters/components/FilterBarClientComponent/index.d.ts +1 -1
  52. package/dist/filters/components/FilterBarClientComponent/index.js +2 -2
  53. package/dist/filters/components/FilterControl/index.d.ts +1 -1
  54. package/dist/filters/components/FilterControl/index.js +7 -4
  55. package/dist/filters/components/FilterItem/index.d.ts +1 -1
  56. package/dist/filters/components/FilterItem/index.js +2 -2
  57. package/dist/filters/components/FilterPanel/index.d.ts +1 -1
  58. package/dist/filters/filters/Filter/index.d.ts +1 -1
  59. package/dist/filters/filters/Filter/index.js +3 -4
  60. package/dist/filters/filters/SearchFilter/index.js +1 -1
  61. package/dist/forms/components/Autocomplete/index.d.ts +1 -1
  62. package/dist/forms/components/Dropdown/index.d.ts +1 -1
  63. package/dist/forms/components/Dropdown/index.js +7 -4
  64. package/dist/forms/components/DropdownItem/index.d.ts +9 -0
  65. package/dist/forms/components/DropdownItem/index.js +8 -0
  66. package/dist/forms/components/DropdownList/index.d.ts +1 -1
  67. package/dist/forms/components/DropdownList/index.js +5 -10
  68. package/dist/forms/components/EditableForm/index.d.ts +1 -1
  69. package/dist/forms/components/EditableForm/index.js +3 -4
  70. package/dist/forms/components/EditableFormField/index.d.ts +1 -1
  71. package/dist/forms/components/EditableFormField/index.js +2 -2
  72. package/dist/forms/components/Form/index.d.ts +1 -1
  73. package/dist/forms/components/Form/index.js +3 -3
  74. package/dist/forms/components/FormError/index.d.ts +1 -1
  75. package/dist/forms/components/FormError/index.js +3 -3
  76. package/dist/forms/components/FormField/index.d.ts +2 -2
  77. package/dist/forms/components/FormField/index.js +7 -6
  78. package/dist/forms/components/FormLabel/index.d.ts +1 -1
  79. package/dist/forms/components/FormLabel/index.js +3 -3
  80. package/dist/forms/components/NumberInput/index.d.ts +1 -1
  81. package/dist/forms/components/PasswordComplexity/index.d.ts +9 -0
  82. package/dist/forms/components/PasswordComplexity/index.js +10 -0
  83. package/dist/forms/components/PasswordInput/index.d.ts +1 -1
  84. package/dist/forms/components/PasswordInput/index.js +4 -5
  85. package/dist/forms/components/StaticTextInput/index.d.ts +1 -1
  86. package/dist/forms/components/StaticTextInput/index.js +4 -7
  87. package/dist/forms/components/Switch/index.d.ts +1 -1
  88. package/dist/forms/components/Switch/index.js +4 -4
  89. package/dist/forms/components/TextInput/index.d.ts +1 -1
  90. package/dist/forms/components/TextInput/index.js +4 -4
  91. package/dist/forms/hooks/useForm.js +1 -1
  92. package/dist/forms/index.d.ts +4 -2
  93. package/dist/forms/index.js +2 -1
  94. package/dist/navigation/components/AppNavigation/index.d.ts +1 -1
  95. package/dist/navigation/components/AppNavigation/index.js +2 -2
  96. package/dist/navigation/components/AppNavigationItem/index.d.ts +1 -1
  97. package/dist/navigation/components/AppNavigationItem/index.js +3 -4
  98. package/dist/navigation/components/Tabs/index.js +2 -2
  99. package/dist/navigation/hooks/useNavigation.js +5 -5
  100. package/dist/styles/classnames/config.d.ts +65 -0
  101. package/dist/styles/classnames/index.d.ts +7 -0
  102. package/dist/styles/classnames/index.js +37 -0
  103. package/dist/styles/classnames/interfaces.d.ts +47 -0
  104. package/dist/styles/classnames/interfaces.js +1 -0
  105. package/dist/styles/classnames/utility/is-classname-object.d.ts +3 -0
  106. package/dist/styles/classnames/utility/is-classname-object.js +7 -0
  107. package/dist/styles/icons/config.d.ts +9 -0
  108. package/dist/styles/icons/config.js +1 -0
  109. package/dist/styles/icons/index.d.ts +4 -0
  110. package/dist/styles/icons/interfaces.d.ts +4 -0
  111. package/dist/styles/icons/interfaces.js +1 -0
  112. package/dist/styles/index.d.ts +2 -2
  113. package/dist/styles/index.js +1 -1
  114. package/package.json +2 -2
  115. package/dist/components/utility/ClassNames/index.d.ts +0 -6
  116. package/dist/components/utility/ClassNames/index.js +0 -7
  117. package/dist/styles/config.d.ts +0 -66
  118. package/dist/styles/config.js +0 -43
  119. package/dist/styles/icons.d.ts +0 -15
  120. package/dist/styles/interfaces.d.ts +0 -41
  121. /package/dist/styles/{interfaces.js → classnames/config.js} +0 -0
  122. /package/dist/styles/{tw.d.ts → classnames/tw.d.ts} +0 -0
  123. /package/dist/styles/{tw.js → classnames/tw.js} +0 -0
  124. /package/dist/styles/{icons.js → icons/index.js} +0 -0
@@ -1,8 +1,8 @@
1
1
  'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import { useEffect, useRef, useState } from 'react';
4
- import { getClassNames } from '../../../styles/config';
5
- import tw from '../../../styles/tw';
4
+ import { getClassNames } from '../../../styles/classnames';
5
+ import tw from '../../../styles/classnames/tw';
6
6
  const HORIZONTAL_THRESHOLD = 40;
7
7
  const VERTICAL_THRESHOLD = 40;
8
8
  function getPositionStyles(align = 'left', vAlign = 'top') {
@@ -22,7 +22,7 @@ function getPositionStyles(align = 'left', vAlign = 'top') {
22
22
  : 'left-1/2 -translate-x-1/2 origin-top top-full';
23
23
  }
24
24
  function Popover({ align: initialAlign = 'left', children, classNames, classNameProps, isOpen, isScrollable, vAlign: initialVAlign = 'bottom', }) {
25
- const componentClassNames = classNames || getClassNames('popover')?.(classNameProps);
25
+ const componentClassNames = getClassNames('popover', { props: classNameProps, states: { isFocused: isOpen ?? false } }, classNames);
26
26
  const [align, setAlign] = useState(initialAlign);
27
27
  const [vAlign, setVAlign] = useState(initialVAlign);
28
28
  const ref = useRef(null);
@@ -66,6 +66,6 @@ function Popover({ align: initialAlign = 'left', children, classNames, className
66
66
  window.removeEventListener('scroll', handleResize);
67
67
  };
68
68
  }, []);
69
- return (_jsx("div", { ref: ref, className: tw('absolute', getPositionStyles(align, vAlign), componentClassNames?.root?.default, isOpen ? componentClassNames?.root?.focused : null), style: { display: isOpen ? 'block' : 'none' }, children: isScrollable ? (_jsx("div", { className: componentClassNames?.scroll, children: children })) : (children) }));
69
+ return (_jsx("div", { ref: ref, className: tw('absolute', getPositionStyles(align, vAlign), componentClassNames?.root), style: { display: isOpen ? 'block' : 'none' }, children: isScrollable ? (_jsx("div", { className: componentClassNames?.scroll, children: children })) : (children) }));
70
70
  }
71
71
  export default Popover;
@@ -1,5 +1,5 @@
1
- import { type RegisteredClassNames } from '../../../styles/config';
2
- import type { ClassNameProps } from '../../../styles/interfaces';
1
+ import type { RegisteredClassNames } from '../../../styles/classnames/config';
2
+ import type { ClassNameProps } from '../../../styles/classnames/interfaces';
3
3
  export interface RootLayoutClassNames {
4
4
  root: string;
5
5
  content: string;
@@ -1,14 +1,15 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { getClassNames, registerClassNames } from '../../../styles/config';
3
- import ClassNames from '../ClassNames';
2
+ import { getClassNames, registerClassNames } from '../../../styles/classnames';
3
+ import ClassNamesClientComponent from '../ClassNamesClientComponent';
4
4
  import Toaster from '../Toaster';
5
+ import tw from '../../../styles/classnames/tw';
5
6
  function RootLayout({ children, classNameConfig, classNameProps, classNames, font, }) {
6
7
  if (classNameConfig) {
7
8
  registerClassNames(classNameConfig);
8
9
  }
9
- const componentClassNames = classNames || getClassNames('rootLayout')?.(classNameProps);
10
- return (_jsxs("html", { lang: "en", className: font?.variable, children: [_jsx("head", { children: _jsx("link", { href: "/images/favicon.svg", rel: "icon" }) }), _jsxs("body", { className: componentClassNames?.root, children: [_jsx("script", { dangerouslySetInnerHTML: {
10
+ const componentClassNames = getClassNames('rootLayout', { props: classNameProps }, classNames);
11
+ return (_jsxs("html", { lang: "en", className: font?.variable, children: [_jsx("head", { children: _jsx("link", { href: "/images/favicon.svg", rel: "icon" }) }), _jsxs("body", { className: tw('overflow-x-hidden overflow-y-scroll has-[[data-modal][open]]:overflow-hidden', componentClassNames?.root), children: [_jsx("script", { dangerouslySetInnerHTML: {
11
12
  __html: "(function(d){var v=d.createElement('div'),t=d.createElement('style'),s=v.style;s.overflowY='scroll';s.width='50';s.height='50';d.body.append(v);t.innerHTML='body:has([data-modal][open]){padding-right:'+(v.offsetWidth-v.clientWidth)+'px}';d.body.append(t);v.remove()}(document))",
12
- } }), classNameConfig ? _jsx(ClassNames, { data: classNameConfig }) : null, _jsx("div", { className: componentClassNames?.content, children: children }), _jsx(Toaster, {})] })] }));
13
+ } }), classNameConfig ? _jsx(ClassNamesClientComponent, { data: classNameConfig }) : null, _jsx("div", { className: tw('flex min-h-screen flex-col', componentClassNames?.content), children: children }), _jsx(Toaster, {})] })] }));
13
14
  }
14
15
  export default RootLayout;
@@ -1,4 +1,4 @@
1
- import type { ClassNameProps, StylableClassName } from '../../../styles/interfaces';
1
+ import type { ClassNameProps, StylableClassName } from '../../../styles/classnames/interfaces';
2
2
  import type { StyleVariant } from '../../../utility/interfaces';
3
3
  export interface ToastClassNames {
4
4
  root: StylableClassName;
@@ -1,8 +1,8 @@
1
1
  'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
- import { getClassNames } from '../../../styles/config';
3
+ import { getClassNames } from '../../../styles/classnames';
4
4
  function Toast({ children, classNames, classNameProps, }) {
5
- const componentClassNames = classNames || getClassNames('toast')?.(classNameProps);
5
+ const componentClassNames = getClassNames('toast', { props: classNameProps }, classNames);
6
6
  if (!children) {
7
7
  return null;
8
8
  }
@@ -1,5 +1,5 @@
1
1
  import type { TableColumnObject } from '../../../components/collections/interfaces';
2
- import type { ClassNameProps } from '../../../styles/interfaces';
2
+ import type { ClassNameProps } from '../../../styles/classnames/interfaces';
3
3
  import type { ClientFilterMap } from '../../interfaces';
4
4
  export interface FilterBarClassNames {
5
5
  root: string;
@@ -10,12 +10,12 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
10
10
  // import type { ClassNameProps } from '../../../utility/interfaces';
11
11
  import { getEntries } from '@sqrzro/utility';
12
12
  import useFilters from '../../../filters/hooks/useFilters';
13
- import { getClassNames } from '../../../styles/config';
13
+ import { getClassNames } from '../../../styles/classnames';
14
14
  import SearchFilter from '../../filters/SearchFilter';
15
15
  import FilterItem from '../FilterItem';
16
16
  const FILTERED_TYPES = ['assistive', 'search'];
17
17
  function FilterBarClientComponent({ classNames, classNameProps, columns, map, }) {
18
- const componentClassNames = classNames || getClassNames('filterBar')?.(classNameProps);
18
+ const componentClassNames = getClassNames('filterBar', { props: classNameProps }, classNames);
19
19
  const [filters, setFilter] = useFilters();
20
20
  const mapArray = map ? getEntries(map) : [];
21
21
  const hasSearch = mapArray.some(([, item]) => item?.type === 'search');
@@ -1,4 +1,4 @@
1
- import { ClassNameProps } from '../../../styles/interfaces';
1
+ import { ClassNameProps } from '../../../styles/classnames/interfaces';
2
2
  import type { FilterItemClassNames } from '../FilterItem';
3
3
  interface FilterControlProps extends ClassNameProps<FilterItemClassNames> {
4
4
  children: React.ReactNode;
@@ -1,10 +1,13 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  // import FilterClearButton from '../FilterClearButton';
3
- import { getClassNames } from '../../../styles/config';
4
- import tw from '../../../styles/tw';
3
+ import { getClassNames } from '../../../styles/classnames';
4
+ import tw from '../../../styles/classnames/tw';
5
5
  import FilterClearButton from '../FilterClearButton';
6
6
  function FilterControl({ classNameProps, classNames, children, isDisabled, isFocused, isHighlighted, onClear, onClick, }) {
7
- const componentClassNames = classNames || getClassNames('filterItem')?.(classNameProps);
8
- return (_jsxs("div", { className: tw(componentClassNames?.root?.default, isDisabled ? 'pointer-events-none opacity-30' : null, isFocused ? componentClassNames?.root?.focused : null, isHighlighted ? componentClassNames?.root?.highlighted : null), children: [children, isFocused && onClear ? _jsx(FilterClearButton, { onClick: onClear }) : null, onClick ? (_jsx("button", { className: tw('absolute -inset-1 z-10 select-none text-transparent'), disabled: isDisabled, onClick: onClick, type: "button", children: "Edit" })) : null] }));
7
+ const componentClassNames = getClassNames('filterItem', {
8
+ props: classNameProps,
9
+ states: { isFocused: isFocused ?? false, isHighlighted: isHighlighted ?? false },
10
+ }, classNames);
11
+ return (_jsxs("div", { className: tw(componentClassNames?.root, isDisabled ? 'pointer-events-none opacity-30' : null), children: [children, isFocused && onClear ? _jsx(FilterClearButton, { onClick: onClear }) : null, onClick ? (_jsx("button", { className: "absolute -inset-1 z-10 select-none text-transparent", disabled: isDisabled, onClick: onClick, type: "button", children: "Edit" })) : null] }));
9
12
  }
10
13
  export default FilterControl;
@@ -1,5 +1,5 @@
1
1
  import { InputProps } from '../../../forms/interfaces';
2
- import { ClassNameProps, FocusableClassName, HighlightableClassName } from '../../../styles/interfaces';
2
+ import { ClassNameProps, FocusableClassName, HighlightableClassName } from '../../../styles/classnames/interfaces';
3
3
  import { ClientFilterObject, FilterType } from '../../interfaces';
4
4
  export interface FilterItemClassNames {
5
5
  root: FocusableClassName & HighlightableClassName;
@@ -2,12 +2,12 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useEffect, useState } from 'react';
4
4
  import useClickOutside from '../../../hooks/useClickOutside';
5
- import { getClassNames } from '../../../styles/config';
5
+ import { getClassNames } from '../../../styles/classnames';
6
6
  import renderValue from '../../utility/render-value';
7
7
  import FilterControl from '../FilterControl';
8
8
  import FilterPanel from '../FilterPanel';
9
9
  function FilterItem({ align, classNameProps, classNames, config, icon, isDisabled, label, name, onChange, title, type, value, }) {
10
- const componentClassNames = classNames || getClassNames('filterItem')?.(classNameProps);
10
+ const componentClassNames = getClassNames('filterItem', { props: classNameProps }, classNames);
11
11
  const [isOpen, setIsOpen, node] = useClickOutside();
12
12
  // const { dynamicConfig } = useDynamicData(config);
13
13
  const [pendingValue, setPendingValue] = useState(value);
@@ -1,5 +1,5 @@
1
1
  import { InputProps } from '../../../forms/interfaces';
2
- import { SizableClassName } from '../../../styles/interfaces';
2
+ import { SizableClassName } from '../../../styles/classnames/interfaces';
3
3
  import type { ClientFilterObject, FilterType } from '../../interfaces';
4
4
  export interface FilterPanelClassNames {
5
5
  content: string;
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { ClientFilterObject, FilterType } from '../../../filters/interfaces';
3
- import { ClassNameProps } from '../../../styles/interfaces';
3
+ import type { ClassNameProps } from '../../../styles/classnames/interfaces';
4
4
  import { FilterPanelClassNames } from '../../components/FilterPanel';
5
5
  import { FilterComponentSize } from '../interfaces';
6
6
  interface FilterProps<F extends FilterType> extends ClassNameProps<FilterPanelClassNames>, ClientFilterObject<F> {
@@ -2,12 +2,11 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import Button from '../../../components/buttons/Button';
4
4
  import Popover from '../../../components/utility/Popover';
5
- import { getClassNames } from '../../../styles/config';
5
+ import { getClassNames } from '../../../styles/classnames';
6
6
  import { getIcon } from '../../../styles/icons';
7
- import tw from '../../../styles/tw';
8
7
  function Filter({ align, children, classNameProps, classNames, icon, isOpen, label, onApply, size, title, }) {
9
- const componentClassNames = classNames || getClassNames('filterPanel')?.(classNameProps);
8
+ const componentClassNames = getClassNames('filterPanel', { props: classNameProps }, classNames);
10
9
  const DefaultIcon = getIcon('filter.panel');
11
- return (_jsx(Popover, { align: align, isOpen: isOpen, children: _jsxs("div", { className: tw(componentClassNames?.root?.default, size ? componentClassNames?.root?.[size] : null), children: [_jsxs("p", { className: componentClassNames?.title, children: [icon === false ? null : (_jsx("span", { className: componentClassNames?.icon, children: icon || (DefaultIcon ? _jsx(DefaultIcon, {}) : null) })), title || (label ? `Filter by ${label}` : 'Filter')] }), _jsx("div", { className: componentClassNames?.content, children: children }), _jsx("div", { className: componentClassNames?.footer, children: _jsx(Button, { isFullWidth: true, onClick: onApply, variant: "primary", children: "Apply" }) })] }) }));
10
+ return (_jsx(Popover, { align: align, isOpen: isOpen, children: _jsxs("div", { className: componentClassNames?.root, children: [_jsxs("p", { className: componentClassNames?.title, children: [icon === false ? null : (_jsx("span", { className: componentClassNames?.icon, children: icon || (DefaultIcon ? _jsx(DefaultIcon, {}) : null) })), title || (label ? `Filter by ${label}` : 'Filter')] }), _jsx("div", { className: componentClassNames?.content, children: children }), _jsx("div", { className: componentClassNames?.footer, children: _jsx(Button, { isFullWidth: true, onClick: onApply, variant: "primary", children: "Apply" }) })] }) }));
12
11
  }
13
12
  export default Filter;
@@ -2,8 +2,8 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Fragment, useState } from 'react';
3
3
  import FilterClearButton from '../../../filters/components/FilterClearButton';
4
4
  import TextInput from '../../../forms/components/TextInput';
5
+ import tw from '../../../styles/classnames/tw';
5
6
  import { getIcon } from '../../../styles/icons';
6
- import tw from '../../../styles/tw';
7
7
  function SearchFilter({ onChange, value }) {
8
8
  const Icon = getIcon('filter.search');
9
9
  const [pendingValue, setPendingValue] = useState(value);
@@ -1,4 +1,4 @@
1
- import { ClassNameProps } from '../../../styles/interfaces';
1
+ import { ClassNameProps } from '../../../styles/classnames/interfaces';
2
2
  import type { DropdownObject, InputProps } from '../../interfaces';
3
3
  import { DropdownClassNames, DropdownComponentProps } from '../Dropdown';
4
4
  export interface AutocompleteComponentProps<T> extends DropdownComponentProps<T> {
@@ -1,4 +1,4 @@
1
- import type { ClassNameProps, ErrorableClassName, FocusableClassName, SelectableClassName } from '../../../styles/interfaces';
1
+ import type { ClassNameProps, ErrorableClassName, FocusableClassName, SelectableClassName } from '../../../styles/classnames/interfaces';
2
2
  import type { DropdownObject, InputProps } from '../../interfaces';
3
3
  export interface DropdownClassNames {
4
4
  root: ErrorableClassName & FocusableClassName;
@@ -2,8 +2,8 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import Popover from '../../../components/utility/Popover';
4
4
  import useClickOutside from '../../../hooks/useClickOutside';
5
- import tw from '../../../styles/tw';
6
- import { getClassNames } from '../../../styles/config';
5
+ import tw from '../../../styles/classnames/tw';
6
+ import { getClassNames } from '../../../styles/classnames';
7
7
  import DropdownList from '../DropdownList';
8
8
  import StaticTextInput from '../StaticTextInput';
9
9
  function findByValue(options, value) {
@@ -16,8 +16,11 @@ export function renderDetails(options, value) {
16
16
  return findByValue(options, value)?.details || '';
17
17
  }
18
18
  function Dropdown({ classNames, classNameProps, hasError, isDisabled, isOptional, isPanelOnly, name, onChange, options = [], placeholder, value, }) {
19
- const componentClassNames = classNames || getClassNames('dropdown')?.(classNameProps);
20
19
  const [isOpen, setIsOpen, node] = useClickOutside({ shouldHandleEnterKey: true });
20
+ const componentClassNames = getClassNames('dropdown', {
21
+ props: classNameProps,
22
+ states: { isError: hasError ?? false, isFocused: isOpen && !isDisabled },
23
+ }, classNames);
21
24
  function toggleIsOpen() {
22
25
  setIsOpen(!isOpen);
23
26
  }
@@ -33,7 +36,7 @@ function Dropdown({ classNames, classNameProps, hasError, isDisabled, isOptional
33
36
  if (isPanelOnly) {
34
37
  return _jsx(DropdownList, { name: name, onChange: handleChange, options: options, value: value });
35
38
  }
36
- return (_jsxs("div", { ref: node, className: tw('relative', componentClassNames?.root?.default, hasError ? componentClassNames?.root?.error : null, isOpen && !isDisabled ? componentClassNames?.root?.focused : null), children: [_jsx(StaticTextInput, { classNames: {
39
+ return (_jsxs("div", { ref: node, className: tw('relative', componentClassNames?.root), children: [_jsx(StaticTextInput, { classNames: {
37
40
  clear: componentClassNames?.clear,
38
41
  icon: componentClassNames?.icon,
39
42
  }, details: renderDetails(options, value), hasError: hasError, isDisabled: isDisabled || !options?.length, isOptional: isOptional, label: renderLabel(options, value), name: name, onClear: handleClear, onClick: toggleIsOpen, placeholder: placeholder || 'Select...', value: value ? String(value) : '' }), _jsx(Popover, { align: "center", isOpen: isOpen ? !isDisabled : false, isScrollable: true, children: _jsx(DropdownList, { name: name, onChange: handleChange, options: options, value: value }) })] }));
@@ -0,0 +1,9 @@
1
+ import type { DropdownObject } from '../../../forms/interfaces';
2
+ import type { ClassNameProps } from '../../../styles/classnames/interfaces';
3
+ import type { DropdownClassNames } from '../Dropdown';
4
+ interface DropdownItemProps<T> extends ClassNameProps<DropdownClassNames>, DropdownObject<T> {
5
+ isSelected: boolean;
6
+ onChange: (item: Pick<DropdownObject<T>, '$data' | 'value'>) => () => void;
7
+ }
8
+ declare function DropdownItem<T>({ $data, classNameProps, classNames, details, isDisabled, isSelected, label, onChange, value, }: DropdownItemProps<T>): React.ReactElement;
9
+ export default DropdownItem;
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { getClassNames } from '../../../styles/classnames';
3
+ import tw from '../../../styles/classnames/tw';
4
+ function DropdownItem({ $data, classNameProps, classNames, details, isDisabled, isSelected, label, onChange, value, }) {
5
+ const componentClassNames = getClassNames('dropdown', { props: classNameProps, states: { isSelected } }, classNames);
6
+ return (_jsx("li", { "aria-selected": isSelected, role: "option", children: _jsxs("button", { className: tw('relative w-full text-left', componentClassNames?.item, isDisabled ? 'pointer-events-none opacity-30' : null), onClick: onChange({ $data, value }), tabIndex: -1, type: "button", children: [_jsx("span", { className: tw('whitespace-nowrap', componentClassNames?.title), children: label }), details ? (_jsx("small", { className: tw(componentClassNames?.details), children: details })) : null] }) }));
7
+ }
8
+ export default DropdownItem;
@@ -1,5 +1,5 @@
1
1
  import type { DropdownObject, InputProps } from '../../../forms/interfaces';
2
- import type { ClassNameProps } from '../../../styles/interfaces';
2
+ import type { ClassNameProps } from '../../../styles/classnames/interfaces';
3
3
  import type { DropdownClassNames } from '../Dropdown';
4
4
  export interface DropdownListProps<T> extends ClassNameProps<DropdownClassNames>, InputProps<T | null> {
5
5
  options: DropdownObject<T>[];
@@ -1,11 +1,8 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { getClassNames } from '../../../styles/config';
3
- import tw from '../../../styles/tw';
4
- function isSelected(id, value) {
5
- return Boolean(value) && value === id;
6
- }
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { getClassNames } from '../../../styles/classnames';
3
+ import DropdownItem from '../DropdownItem';
7
4
  function DropdownList({ classNames, classNameProps, name, onChange, options, value, }) {
8
- const componentClassNames = classNames || getClassNames('dropdown')?.(classNameProps);
5
+ const componentClassNames = getClassNames('dropdown', { props: classNameProps }, classNames);
9
6
  // const checkboxClassNames = getClassNames('checkboxInput')?.(classNameProps);
10
7
  function handleChange(item) {
11
8
  return () => {
@@ -15,8 +12,6 @@ function DropdownList({ classNames, classNameProps, name, onChange, options, val
15
12
  });
16
13
  };
17
14
  }
18
- return (_jsx("ul", { className: componentClassNames?.list, role: "listbox", children: options.map((item, index) => (_jsx("li", { "aria-selected": isSelected(item.value, value), role: "option", children: _jsxs("button", { className: tw('relative w-full text-left', item.isDisabled ? 'pointer-events-none opacity-30' : null, componentClassNames?.item?.default, isSelected(item.value, value)
19
- ? componentClassNames?.item?.selected
20
- : null), onClick: handleChange(item), tabIndex: -1, type: "button", children: [_jsx("span", { className: tw('whitespace-nowrap' /*componentClassNames?.label*/), children: item.label }), item.details ? (_jsx("small", { className: tw(componentClassNames?.details), children: item.details })) : null] }) }, index))) }));
15
+ return (_jsx("ul", { className: componentClassNames?.list, role: "listbox", children: options.map((item, index) => (_jsx(DropdownItem, { ...item, isSelected: Boolean(value) && value === item.value, onChange: handleChange }, index))) }));
21
16
  }
22
17
  export default DropdownList;
@@ -1,4 +1,4 @@
1
- import type { ClassNameProps } from '../../../styles/interfaces';
1
+ import type { ClassNameProps } from '../../../styles/classnames/interfaces';
2
2
  import type { Action } from '../../../utility/interfaces';
3
3
  import type { EditingStatus } from '../../interfaces';
4
4
  import type { FormProps } from '../Form';
@@ -1,10 +1,9 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import ActionList from '../../../components/utility/ActionList';
3
- import { getClassNames } from '../../../styles/config';
4
- import tw from '../../../styles/tw';
3
+ import { getClassNames } from '../../../styles/classnames';
5
4
  import Form from '../Form';
6
5
  function EditableForm({ classNameProps, classNames, children, formProps, onCancel, onEdit, setStatus, status, title, }) {
7
- const componentClassNames = classNames || getClassNames('editableForm')?.(classNameProps);
6
+ const componentClassNames = getClassNames('editableForm', { props: classNameProps }, classNames);
8
7
  function setCancelled() {
9
8
  onCancel?.();
10
9
  setStatus?.('CANCELLED');
@@ -13,7 +12,7 @@ function EditableForm({ classNameProps, classNames, children, formProps, onCance
13
12
  onEdit?.();
14
13
  setStatus?.('EDITING');
15
14
  }
16
- return (_jsx(Form, { ...formProps, children: _jsxs("fieldset", { className: componentClassNames?.root, children: [title ? _jsx("header", { className: tw(componentClassNames?.header), children: _jsx("legend", { className: componentClassNames?.title, children: title }) }) : null, _jsxs("div", { className: tw(componentClassNames?.content), children: [children, _jsx("footer", { className: componentClassNames?.actions, children: _jsx(ActionList, { actions: status === 'EDITING'
15
+ return (_jsx(Form, { ...formProps, children: _jsxs("fieldset", { className: componentClassNames?.root, children: [title ? (_jsx("header", { className: componentClassNames?.header, children: _jsx("legend", { className: componentClassNames?.title, children: title }) })) : null, _jsxs("div", { className: componentClassNames?.content, children: [children, _jsx("footer", { className: componentClassNames?.actions, children: _jsx(ActionList, { actions: status === 'EDITING'
17
16
  ? [
18
17
  { label: 'Cancel', onClick: setCancelled },
19
18
  { isSubmittable: true, label: 'Save' },
@@ -1,4 +1,4 @@
1
- import type { ClassNameProps } from '../../../styles/interfaces';
1
+ import type { ClassNameProps } from '../../../styles/classnames/interfaces';
2
2
  import { FormFieldProps } from '../FormField';
3
3
  import { EditingStatus } from '../../interfaces';
4
4
  export interface EditableFormFieldClassNames {
@@ -2,7 +2,7 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { isValidElement, useEffect, useRef } from 'react';
4
4
  import FormField from '../FormField';
5
- import { getClassNames } from '../../../styles/config';
5
+ import { getClassNames } from '../../../styles/classnames';
6
6
  function getRenderedValue(value, renderValue) {
7
7
  if (renderValue) {
8
8
  if (typeof renderValue === 'function') {
@@ -19,7 +19,7 @@ function getRenderedValue(value, renderValue) {
19
19
  return value ? String(value) : '-';
20
20
  }
21
21
  function EditableFormField({ classNameProps, classNames, renderValue, status, ...props }) {
22
- const componentClassNames = classNames || getClassNames('editableFormField')(classNameProps);
22
+ const componentClassNames = getClassNames('editableFormField', { props: classNameProps }, classNames);
23
23
  const cachedValue = useRef(props.value);
24
24
  useEffect(() => {
25
25
  if (status === 'CANCELLED') {
@@ -1,4 +1,4 @@
1
- import type { ClassNameProps } from '../../../styles/interfaces';
1
+ import type { ClassNameProps } from '../../../styles/classnames/interfaces';
2
2
  export interface FormClassNames {
3
3
  root: string;
4
4
  }
@@ -1,9 +1,9 @@
1
1
  'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
- import { getClassNames } from '../../../styles/config';
4
- import tw from '../../../styles/tw';
3
+ import { getClassNames } from '../../../styles/classnames';
4
+ import tw from '../../../styles/classnames/tw';
5
5
  function Form({ action, children, classNames, classNameProps, id, onSubmit, ref, }) {
6
- const componentClassNames = classNames || getClassNames('form')?.(classNameProps);
6
+ const componentClassNames = getClassNames('form', { props: classNameProps }, classNames);
7
7
  return (_jsx("form", { ref: ref, action: action, className: tw(componentClassNames?.root), id: id, onSubmit: onSubmit, children: children }));
8
8
  }
9
9
  export default Form;
@@ -1,4 +1,4 @@
1
- import type { ClassNameProps } from '../../../styles/interfaces';
1
+ import type { ClassNameProps } from '../../../styles/classnames/interfaces';
2
2
  import type { FormFieldClassNames } from '../FormField';
3
3
  interface FormErrorProps extends ClassNameProps<FormFieldClassNames> {
4
4
  children: React.ReactNode;
@@ -1,8 +1,8 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { getClassNames } from '../../../styles/config';
3
- import tw from '../../../styles/tw';
2
+ import { getClassNames } from '../../../styles/classnames';
3
+ import tw from '../../../styles/classnames/tw';
4
4
  function FormError({ children, classNames, classNameProps, id, isAssistive, }) {
5
- const componentClassNames = classNames || getClassNames('formField')?.(classNameProps);
5
+ const componentClassNames = getClassNames('formField', { props: classNameProps }, classNames);
6
6
  return (_jsx("div", { className: tw(componentClassNames?.error, isAssistive ? 'sr-only' : null), id: `${id}_err`, children: children }));
7
7
  }
8
8
  export default FormError;
@@ -1,5 +1,5 @@
1
1
  import type { InputEvent, InputProps } from '../../../forms/interfaces';
2
- import type { ClassNameProps, ErrorableClassName } from '../../../styles/interfaces';
2
+ import type { ClassNameProps, ErrorableClassName } from '../../../styles/classnames/interfaces';
3
3
  import { Action } from '../../../utility/interfaces';
4
4
  export interface FormFieldClassNames {
5
5
  root: ErrorableClassName;
@@ -21,5 +21,5 @@ export interface FormFieldProps<T, V extends T> extends ClassNameProps<FormField
21
21
  onChange?: (event: InputEvent<T>) => void;
22
22
  render: (props: InputProps<T>) => React.ReactElement | null;
23
23
  }
24
- declare function FormField<T, V extends T>({ action, classNameProps, details, error, hasAssistiveError, hasAssistiveLabel, id, isContentOnly, isDisabled, isOptional, label, name, onChange, onKeyDown, render, value, }: Readonly<FormFieldProps<T, V>>): React.ReactElement | null;
24
+ declare function FormField<T, V extends T>({ action, classNameProps, classNames, details, error, hasAssistiveError, hasAssistiveLabel, id, isContentOnly, isDisabled, isOptional, label, name, onChange, onKeyDown, render, value, }: Readonly<FormFieldProps<T, V>>): React.ReactElement | null;
25
25
  export default FormField;
@@ -1,16 +1,17 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useState } from 'react';
4
- import { getClassNames } from '../../../styles/config';
5
- import tw from '../../../styles/tw';
4
+ import { getClassNames } from '../../../styles/classnames';
6
5
  import FormError from '../FormError';
7
6
  import FormLabel from '../FormLabel';
8
7
  import ActionButton from '../../../components/buttons/ActionButton';
9
8
  function checkHasError(error) {
10
- return Boolean(error && Object.keys(error).length > 0 && Object.values(error).some(Boolean));
9
+ return Boolean(error &&
10
+ Object.keys(error).length > 0 &&
11
+ Object.values(error).some((item) => typeof item === 'string'));
11
12
  }
12
- function FormField({ action, classNameProps, details, error, hasAssistiveError, hasAssistiveLabel, id, isContentOnly, isDisabled, isOptional, label, name, onChange, onKeyDown, render, value, }) {
13
- const classNames = getClassNames('formField')?.(classNameProps);
13
+ function FormField({ action, classNameProps, classNames, details, error, hasAssistiveError, hasAssistiveLabel, id, isContentOnly, isDisabled, isOptional, label, name, onChange, onKeyDown, render, value, }) {
14
+ const componentClassNames = getClassNames('formField', { props: classNameProps, states: { isError: checkHasError(error) } }, classNames);
14
15
  const inputId = id || `ff_${name}`;
15
16
  const [inputError, setInputError] = useState(null);
16
17
  function handleError(message) {
@@ -32,6 +33,6 @@ function FormField({ action, classNameProps, details, error, hasAssistiveError,
32
33
  if (isContentOnly) {
33
34
  return render(renderProps);
34
35
  }
35
- return (_jsxs("div", { className: tw(classNames?.root?.default, error ? classNames?.root?.error : null), children: [label ? (_jsx(FormLabel, { classNameProps: classNameProps, htmlFor: inputId, isAssistive: hasAssistiveLabel, isOptional: isOptional, children: label })) : null, details && label ? _jsx("div", { className: classNames?.details, children: details }) : null, _jsx("div", { className: classNames?.field, children: render(renderProps) }), action ? (_jsx("div", { children: _jsx(ActionButton, { ...action, isDisabled: Boolean(isDisabled || action.isDisabled) }) })) : null, inputError || error?.[name] ? (_jsx(FormError, { classNameProps: classNameProps, id: inputId, isAssistive: hasAssistiveError, children: inputError || error?.[name] })) : null] }));
36
+ return (_jsxs("div", { className: componentClassNames?.root, children: [label ? (_jsx(FormLabel, { classNameProps: classNameProps, htmlFor: inputId, isAssistive: hasAssistiveLabel, isOptional: isOptional, children: label })) : null, details && label ? (_jsx("div", { className: componentClassNames?.details, children: details })) : null, _jsx("div", { className: componentClassNames?.field, children: render(renderProps) }), action ? (_jsx("div", { children: _jsx(ActionButton, { ...action, isDisabled: Boolean(isDisabled || action.isDisabled) }) })) : null, inputError || error?.[name] ? (_jsx(FormError, { classNameProps: classNameProps, id: inputId, isAssistive: hasAssistiveError, children: inputError || error?.[name] })) : null] }));
36
37
  }
37
38
  export default FormField;
@@ -1,4 +1,4 @@
1
- import type { ClassNameProps } from '../../../styles/interfaces';
1
+ import type { ClassNameProps } from '../../../styles/classnames/interfaces';
2
2
  import type { FormFieldClassNames } from '../FormField';
3
3
  interface FormLabelProps extends ClassNameProps<FormFieldClassNames> {
4
4
  children: React.ReactNode;
@@ -1,8 +1,8 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { getClassNames } from '../../../styles/config';
3
- import tw from '../../../styles/tw';
2
+ import { getClassNames } from '../../../styles/classnames';
3
+ import tw from '../../../styles/classnames/tw';
4
4
  function FormLabel({ children, classNames, classNameProps, htmlFor, isAssistive, isOptional, }) {
5
- const componentClassNames = classNames || getClassNames('formField')?.(classNameProps);
5
+ const componentClassNames = getClassNames('formField', { props: classNameProps }, classNames);
6
6
  return (_jsxs("label", { className: tw(componentClassNames?.label, isAssistive ? 'sr-only' : null), htmlFor: htmlFor, children: [children, isOptional ? _jsx("small", { className: componentClassNames?.optional, children: "Optional" }) : null] }));
7
7
  }
8
8
  export default FormLabel;
@@ -1,4 +1,4 @@
1
- import { ClassNameProps } from '../../../styles/interfaces';
1
+ import { ClassNameProps } from '../../../styles/classnames/interfaces';
2
2
  import type { InputProps } from '../../interfaces';
3
3
  import type { TextInputClassNames, TextInputComponentProps } from '../TextInput';
4
4
  export type NumberInputComponentProps = TextInputComponentProps;
@@ -0,0 +1,9 @@
1
+ export interface PasswordComplexityProps {
2
+ data: {
3
+ status: boolean;
4
+ value: string;
5
+ }[];
6
+ onComplexity?: (isValid: boolean) => void;
7
+ }
8
+ declare function PasswordComplexity({ data, onComplexity }: PasswordComplexityProps): React.ReactElement;
9
+ export default PasswordComplexity;
@@ -0,0 +1,10 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import useDeepCompareEffect from 'use-deep-compare-effect';
4
+ function PasswordComplexity({ data, onComplexity }) {
5
+ useDeepCompareEffect(() => {
6
+ onComplexity?.(data.every((item) => item.status));
7
+ }, [data]);
8
+ return (_jsx("aside", { children: _jsx("ul", { children: data.map((item) => (_jsx("li", { style: { color: item.status ? 'green' : 'red' }, children: item.value }, item.value))) }) }));
9
+ }
10
+ export default PasswordComplexity;
@@ -1,5 +1,5 @@
1
1
  import { InputProps } from '../../../forms/interfaces';
2
- import type { ClassNameProps, SelectableClassName } from '../../../styles/interfaces';
2
+ import type { ClassNameProps, SelectableClassName } from '../../../styles/classnames/interfaces';
3
3
  import type { TextInputComponentProps } from '../TextInput';
4
4
  export interface PasswordInputClassNames {
5
5
  action: string;
@@ -1,17 +1,16 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useState } from 'react';
4
- import { getClassNames } from '../../../styles/config';
4
+ import { getClassNames } from '../../../styles/classnames';
5
5
  import { getIcon } from '../../../styles/icons';
6
- import tw from '../../../styles/tw';
7
6
  import TextInput from '../TextInput';
8
7
  function PasswordInput({ classNameProps, classNames, ...props }) {
9
- const componentClassNames = classNames || getClassNames('passwordInput')?.(classNameProps);
10
- const Icon = getIcon('password');
11
8
  const [isVisible, setIsVisible] = useState(false);
9
+ const componentClassNames = getClassNames('passwordInput', { props: classNameProps, states: { isSelected: isVisible } }, classNames);
10
+ const Icon = getIcon('password');
12
11
  function toggleVisible() {
13
12
  setIsVisible(!isVisible);
14
13
  }
15
- return (_jsxs("div", { className: "relative", children: [_jsx(TextInput, { type: isVisible ? 'text' : 'password', ...props }), _jsx("div", { className: componentClassNames?.action, children: _jsxs("button", { className: tw(componentClassNames?.icon?.default, isVisible ? componentClassNames?.icon?.selected : null), onClick: toggleVisible, type: "button", children: [Icon ? _jsx(Icon, {}) : null, isVisible ? 'Hide' : 'Show'] }) })] }));
14
+ return (_jsxs("div", { className: "relative", children: [_jsx(TextInput, { type: isVisible ? 'text' : 'password', ...props }), _jsx("div", { className: componentClassNames?.action, children: _jsxs("button", { className: componentClassNames?.icon, onClick: toggleVisible, type: "button", children: [Icon ? _jsx(Icon, {}) : null, isVisible ? 'Hide' : 'Show'] }) })] }));
16
15
  }
17
16
  export default PasswordInput;
@@ -1,5 +1,5 @@
1
1
  import type { InputProps } from '../../../forms/interfaces';
2
- import type { ClassNameProps, ErrorableClassName } from '../../../styles/interfaces';
2
+ import type { ClassNameProps, ErrorableClassName } from '../../../styles/classnames/interfaces';
3
3
  export interface StaticTextInputClassNames {
4
4
  root: ErrorableClassName;
5
5
  placeholder: string;
@@ -1,8 +1,8 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Fragment } from 'react';
3
3
  import Assistive from '../../../components/utility/Assistive';
4
- import { getClassNames } from '../../../styles/config';
5
- import tw from '../../../styles/tw';
4
+ import { getClassNames } from '../../../styles/classnames';
5
+ import tw from '../../../styles/classnames/tw';
6
6
  function hasValue(value) {
7
7
  if (Array.isArray(value)) {
8
8
  return Boolean(value.filter((item) => Boolean(item)).length);
@@ -10,13 +10,10 @@ function hasValue(value) {
10
10
  return Boolean(value);
11
11
  }
12
12
  function StaticTextInput({ classNames, classNameProps, details, hasError, icon, isDisabled, isOptional, label, name, onClear, onClick, onKeyDown, placeholder = 'Select...', value, }) {
13
- const componentClassNames = {
14
- ...getClassNames('staticTextInput')?.(classNameProps),
15
- ...classNames,
16
- };
13
+ const componentClassNames = getClassNames('staticTextInput', { props: classNameProps, states: { isError: hasError ?? false } }, classNames);
17
14
  function handleClear() {
18
15
  onClear?.();
19
16
  }
20
- return (_jsxs("div", { className: tw('relative', isDisabled ? 'pointer-events-none opacity-30' : null, componentClassNames.root?.default, hasError ? componentClassNames.root?.error : null), children: [_jsx("input", { name: name, type: "hidden", value: value ? value.toString() : '' }), label ? (_jsxs(Fragment, { children: [_jsx("span", { className: tw(componentClassNames.label), children: label }), details ? (_jsx("small", { className: tw(componentClassNames.details), children: details })) : null] })) : (_jsx("span", { className: tw(componentClassNames.placeholder), children: placeholder })), onClick ? (_jsx("button", { className: "absolute -bottom-px -left-px -right-px -top-px", disabled: isDisabled, onClick: onClick, onKeyDown: onKeyDown, tabIndex: 0, type: "button", children: _jsx(Assistive, { children: "Toggle" }) })) : null, _jsxs("div", { className: "absolute bottom-0 right-0 top-0 flex w-0 items-center justify-end", children: [isOptional && hasValue(value) ? (_jsx("button", { className: tw('flex-none', componentClassNames.clear), onClick: handleClear, type: "button", children: _jsx(Assistive, { children: "Clear" }) })) : null, icon && !isDisabled ? (_jsx("i", { className: tw('pointer-events-none flex-none', componentClassNames.icon) })) : null] })] }));
17
+ return (_jsxs("div", { className: tw('relative', componentClassNames?.root, isDisabled ? 'pointer-events-none opacity-30' : null), children: [_jsx("input", { name: name, type: "hidden", value: value ? value.toString() : '' }), label ? (_jsxs(Fragment, { children: [_jsx("span", { className: componentClassNames?.label, children: label }), details ? (_jsx("small", { className: componentClassNames?.details, children: details })) : null] })) : (_jsx("span", { className: componentClassNames?.placeholder, children: placeholder })), onClick ? (_jsx("button", { className: "absolute -bottom-px -left-px -right-px -top-px", disabled: isDisabled, onClick: onClick, onKeyDown: onKeyDown, tabIndex: 0, type: "button", children: _jsx(Assistive, { children: "Toggle" }) })) : null, _jsxs("div", { className: "absolute bottom-0 right-0 top-0 flex w-0 items-center justify-end", children: [isOptional && hasValue(value) ? (_jsx("button", { className: tw('flex-none', componentClassNames?.clear), onClick: handleClear, type: "button", children: _jsx(Assistive, { children: "Clear" }) })) : null, icon && !isDisabled ? (_jsx("i", { className: tw('pointer-events-none flex-none', componentClassNames?.icon) })) : null] })] }));
21
18
  }
22
19
  export default StaticTextInput;
@@ -1,5 +1,5 @@
1
1
  import type { InputProps } from '../../../forms/interfaces';
2
- import { CheckableClassName, ClassNameProps } from '../../../styles/interfaces';
2
+ import { CheckableClassName, ClassNameProps } from '../../../styles/classnames/interfaces';
3
3
  export interface SwitchClassNames {
4
4
  root: string;
5
5
  control: string;