@rolster/react-components 19.9.0 → 19.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/es/index.mjs CHANGED
@@ -1470,6 +1470,132 @@ function RlsAlertComponent({ bordered, children, icon, identifier, rlsTheme }) {
1470
1470
  }
1471
1471
  const RlsAlert = memo(RlsAlertComponent);
1472
1472
 
1473
+ const APP_THEME_ATTRIBUTE = 'app-theme';
1474
+ function getAppTheme() {
1475
+ if (typeof document === 'undefined') {
1476
+ return 'light';
1477
+ }
1478
+ const theme = document.body.getAttribute(APP_THEME_ATTRIBUTE);
1479
+ return theme === 'dark' || theme === 'dim' ? theme : 'light';
1480
+ }
1481
+ function setAppTheme(theme) {
1482
+ if (typeof document === 'undefined') {
1483
+ return;
1484
+ }
1485
+ document.body.setAttribute(APP_THEME_ATTRIBUTE, theme);
1486
+ }
1487
+ function toggleAppTheme() {
1488
+ const theme = getAppTheme() === 'dark' ? 'light' : 'dark';
1489
+ setAppTheme(theme);
1490
+ return theme;
1491
+ }
1492
+
1493
+ const reactI18n = i18n({
1494
+ es: {
1495
+ appThemeDark: 'Oscuro',
1496
+ appThemeDim: 'Intermedio',
1497
+ appThemeLight: 'Claro',
1498
+ confirmationActionApproved: 'Aceptar',
1499
+ dateActionCancel: 'Cancelar',
1500
+ dateActionSelect: 'Establecer',
1501
+ dateActionToday: 'Hoy',
1502
+ chooserImageActionCancel: 'Cancelar',
1503
+ editorImageActionRestore: 'Restaurar',
1504
+ editorImageActionSelect: 'Seleccionar',
1505
+ listEmptyDescription: 'Lo sentimos, en el momento no hay elementos en el listado',
1506
+ listEmptyTitle: 'Selección no disponible',
1507
+ listInputPlaceholder: 'Escriba palabre clave para filtrar...'
1508
+ },
1509
+ en: {
1510
+ appThemeDark: 'Dark',
1511
+ appThemeDim: 'Dim',
1512
+ appThemeLight: 'Light',
1513
+ confirmationActionApproved: 'Approved',
1514
+ dateActionCancel: 'Cancel',
1515
+ dateActionSelect: 'Select',
1516
+ dateActionToday: 'Today',
1517
+ chooserImageActionCancel: 'Cancel',
1518
+ editorImageActionRestore: 'Restore',
1519
+ editorImageActionSelect: 'Select',
1520
+ listEmptyDescription: 'Sorry, there are currently no items in the list',
1521
+ listEmptyTitle: 'Selection not available',
1522
+ listInputPlaceholder: 'Enter keyword to filter...'
1523
+ }
1524
+ });
1525
+
1526
+ function RlsTab({ disabled, onSelect, tab, value }) {
1527
+ const className = renderClassStatus('rls-tabs__children', {
1528
+ active: tab.value === value,
1529
+ disabled: disabled || tab.disabled
1530
+ });
1531
+ const onClick = useCallback(() => {
1532
+ if (!disabled && !tab.disabled) {
1533
+ onSelect(tab.value);
1534
+ }
1535
+ }, [disabled, tab.disabled, onSelect]);
1536
+ return (jsxRuntimeExports.jsx("div", { className: className, onClick: onClick, children: jsxRuntimeExports.jsx("span", { children: tab.label }) }));
1537
+ }
1538
+ function RlsTabsComponent({ tabs, formControl, onValue, value, rlsTheme }) {
1539
+ const [valueInternal, setValueInternal] = useState();
1540
+ const valueSelected = useMemo(() => {
1541
+ return formControl ? formControl.value : valueInternal;
1542
+ }, [formControl?.value, valueInternal]);
1543
+ const onSelect = useCallback((value) => {
1544
+ if (formControl) {
1545
+ formControl?.setValue(value);
1546
+ }
1547
+ else {
1548
+ setValueInternal(value);
1549
+ }
1550
+ onValue?.(value);
1551
+ }, [formControl, onValue]);
1552
+ useEffect(() => {
1553
+ if (formControl?.value !== undefined) {
1554
+ return setValueInternal(formControl.value);
1555
+ }
1556
+ if (value !== undefined) {
1557
+ return setValueInternal(value);
1558
+ }
1559
+ const initial = tabs.find((tab) => tab.defaultActive) ?? tabs[0];
1560
+ if (initial) {
1561
+ onSelect(initial.value);
1562
+ }
1563
+ }, [value, formControl?.value]);
1564
+ return (jsxRuntimeExports.jsx("div", { className: "rls-tabs", "rls-theme": rlsTheme, children: tabs.map((tab, index) => {
1565
+ return (jsxRuntimeExports.jsx(RlsTab, { tab: tab, disabled: formControl?.disabled, value: valueSelected, onSelect: onSelect }, index));
1566
+ }) }));
1567
+ }
1568
+ const RlsTabs = memo(RlsTabsComponent);
1569
+
1570
+ const APP_THEMES = ['light', 'dim', 'dark'];
1571
+ const LABELS = {
1572
+ light: () => reactI18n('appThemeLight'),
1573
+ dim: () => reactI18n('appThemeDim'),
1574
+ dark: () => reactI18n('appThemeDark')
1575
+ };
1576
+ function RlsAppThemeTabsComponent({ labels, onValue, rlsTheme, themes = APP_THEMES, value }) {
1577
+ const [appTheme, setAppThemeValue] = useState(() => value ?? getAppTheme());
1578
+ useEffect(() => {
1579
+ if (value !== undefined) {
1580
+ setAppTheme(value);
1581
+ setAppThemeValue(value);
1582
+ }
1583
+ }, [value]);
1584
+ const tabs = useMemo(() => {
1585
+ return themes.map((theme) => ({
1586
+ label: labels?.[theme] ?? LABELS[theme](),
1587
+ value: theme
1588
+ }));
1589
+ }, [labels, themes]);
1590
+ const onSelect = useCallback((theme) => {
1591
+ setAppTheme(theme);
1592
+ setAppThemeValue(theme);
1593
+ onValue?.(theme);
1594
+ }, [onValue]);
1595
+ return (jsxRuntimeExports.jsx(RlsTabs, { tabs: tabs, value: appTheme, onValue: onSelect, rlsTheme: rlsTheme }));
1596
+ }
1597
+ const RlsAppThemeTabs = memo(RlsAppThemeTabsComponent);
1598
+
1473
1599
  function RlsBallotComponent({ bordered, className, children, img, initials, skeleton, subtitle, rlsTheme }) {
1474
1600
  const classNameBallot = renderClassStatus('rls-ballot', { bordered, skeleton }, className);
1475
1601
  return (jsxRuntimeExports.jsxs("div", { className: classNameBallot, "rls-theme": rlsTheme, children: [(img || initials) && (jsxRuntimeExports.jsxs(RlsAvatar, { skeleton: skeleton, children: [img && jsxRuntimeExports.jsx("img", { src: img }), initials && jsxRuntimeExports.jsx("span", { children: initials })] })), jsxRuntimeExports.jsxs("div", { className: "rls-ballot__component", children: [jsxRuntimeExports.jsx("div", { className: "rls-ballot__title", children: jsxRuntimeExports.jsx(RlsSkeletonText, { active: skeleton, children: children }) }), subtitle && (jsxRuntimeExports.jsx("div", { className: "rls-ballot__subtitle", children: jsxRuntimeExports.jsx(RlsSkeletonText, { active: skeleton, children: subtitle }) }))] })] }));
@@ -1757,33 +1883,6 @@ function RlsFieldFileComponent({ accept, children, disabled: _disabled, formCont
1757
1883
  }
1758
1884
  const RlsFieldFile = memo(RlsFieldFileComponent);
1759
1885
 
1760
- const reactI18n = i18n({
1761
- es: {
1762
- confirmationActionApproved: 'Aceptar',
1763
- dateActionCancel: 'Cancelar',
1764
- dateActionSelect: 'Establecer',
1765
- dateActionToday: 'Hoy',
1766
- chooserImageActionCancel: 'Cancelar',
1767
- editorImageActionRestore: 'Restaurar',
1768
- editorImageActionSelect: 'Seleccionar',
1769
- listEmptyDescription: 'Lo sentimos, en el momento no hay elementos en el listado',
1770
- listEmptyTitle: 'Selección no disponible',
1771
- listInputPlaceholder: 'Escriba palabre clave para filtrar...'
1772
- },
1773
- en: {
1774
- confirmationActionApproved: 'Approved',
1775
- dateActionCancel: 'Cancel',
1776
- dateActionSelect: 'Select',
1777
- dateActionToday: 'Today',
1778
- chooserImageActionCancel: 'Cancel',
1779
- editorImageActionRestore: 'Restore',
1780
- editorImageActionSelect: 'Select',
1781
- listEmptyDescription: 'Sorry, there are currently no items in the list',
1782
- listEmptyTitle: 'Selection not available',
1783
- listInputPlaceholder: 'Enter keyword to filter...'
1784
- }
1785
- });
1786
-
1787
1886
  function useEventCallback(callback) {
1788
1887
  const refCallback = useRef(callback);
1789
1888
  useInsertionEffect(() => {
@@ -2694,50 +2793,6 @@ function RlsSliderComponent({ children, className, disabled, formControl, identi
2694
2793
  }
2695
2794
  const RlsSlider = memo(RlsSliderComponent);
2696
2795
 
2697
- function RlsTab({ disabled, onSelect, tab, value }) {
2698
- const className = renderClassStatus('rls-tabs__children', {
2699
- active: tab.value === value,
2700
- disabled: disabled || tab.disabled
2701
- });
2702
- const onClick = useCallback(() => {
2703
- if (!disabled && !tab.disabled) {
2704
- onSelect(tab.value);
2705
- }
2706
- }, [disabled, tab.disabled, onSelect]);
2707
- return (jsxRuntimeExports.jsx("div", { className: className, onClick: onClick, children: jsxRuntimeExports.jsx("span", { children: tab.label }) }));
2708
- }
2709
- function RlsTabsComponent({ tabs, formControl, onValue, value, rlsTheme }) {
2710
- const [valueInternal, setValueInternal] = useState();
2711
- const valueSelected = useMemo(() => {
2712
- return formControl ? formControl.value : valueInternal;
2713
- }, [formControl?.value, valueInternal]);
2714
- const onSelect = useCallback((value) => {
2715
- if (formControl) {
2716
- formControl?.setValue(value);
2717
- }
2718
- else {
2719
- setValueInternal(value);
2720
- }
2721
- onValue?.(value);
2722
- }, [formControl, onValue]);
2723
- useEffect(() => {
2724
- if (formControl?.value !== undefined) {
2725
- return setValueInternal(formControl.value);
2726
- }
2727
- if (value !== undefined) {
2728
- return setValueInternal(value);
2729
- }
2730
- const initial = tabs.find((tab) => tab.defaultActive) ?? tabs[0];
2731
- if (initial) {
2732
- onSelect(initial.value);
2733
- }
2734
- }, [value, formControl?.value]);
2735
- return (jsxRuntimeExports.jsx("div", { className: "rls-tabs", "rls-theme": rlsTheme, children: tabs.map((tab, index) => {
2736
- return (jsxRuntimeExports.jsx(RlsTab, { tab: tab, disabled: formControl?.disabled, value: valueSelected, onSelect: onSelect }, index));
2737
- }) }));
2738
- }
2739
- const RlsTabs = memo(RlsTabsComponent);
2740
-
2741
2796
  function RlsToolbarComponent({ actions, children, subtitle }) {
2742
2797
  return (jsxRuntimeExports.jsxs("div", { className: "rls-toolbar", children: [jsxRuntimeExports.jsxs("div", { className: "rls-toolbar__description", children: [children && jsxRuntimeExports.jsx("label", { className: "rls-toolbar__title", children: children }), subtitle && (jsxRuntimeExports.jsx("label", { className: "rls-toolbar__subtitle smalltext-semibold", children: subtitle }))] }), actions && (jsxRuntimeExports.jsx("div", { className: "rls-toolbar__actions", children: actions.map((action, index) => (jsxRuntimeExports.jsx("div", { children: action }, index))) }))] }));
2743
2798
  }
@@ -5222,6 +5277,24 @@ function RlsApplication({ children }) {
5222
5277
  return (jsxRuntimeExports.jsxs(RlsContext, { value: state, children: [jsxRuntimeExports.jsxs("div", { className: className, children: [children, jsxRuntimeExports.jsx(RlsSnackbar, {})] }), jsxRuntimeExports.jsx(RlsConfirmation, {}), jsxRuntimeExports.jsx(RlsNotifications, {})] }));
5223
5278
  }
5224
5279
 
5280
+ function useAppThemeController(initialTheme, primaryTheme = 'light', secondaryTheme = 'dark') {
5281
+ const [appTheme, setAppThemeValue] = useState(() => {
5282
+ if (initialTheme) {
5283
+ setAppTheme(initialTheme);
5284
+ return initialTheme;
5285
+ }
5286
+ return getAppTheme();
5287
+ });
5288
+ const setValue = useCallback((value) => {
5289
+ setAppTheme(value);
5290
+ setAppThemeValue(value);
5291
+ }, []);
5292
+ const toggle = useCallback(() => {
5293
+ setValue(appTheme === primaryTheme ? secondaryTheme : primaryTheme);
5294
+ }, [appTheme, primaryTheme, secondaryTheme, setValue]);
5295
+ return { setValue, toggle, value: appTheme };
5296
+ }
5297
+
5225
5298
  const DEFAULT_DESIGN_SYSTEM = 'bordered';
5226
5299
 
5227
5300
  const DESIGN_SYSTEM_PREFIX = 'rls-design-system';
@@ -5355,26 +5428,5 @@ function useTabsController(options) {
5355
5428
  return useMemo(() => ({ Tabs, formControl }), [Tabs, formControl]);
5356
5429
  }
5357
5430
 
5358
- const APP_THEME_ATTRIBUTE = 'app-theme';
5359
- function getAppTheme() {
5360
- if (typeof document === 'undefined') {
5361
- return 'light';
5362
- }
5363
- return document.body.getAttribute(APP_THEME_ATTRIBUTE) === 'dark'
5364
- ? 'dark'
5365
- : 'light';
5366
- }
5367
- function setAppTheme(theme) {
5368
- if (typeof document === 'undefined') {
5369
- return;
5370
- }
5371
- document.body.setAttribute(APP_THEME_ATTRIBUTE, theme);
5372
- }
5373
- function toggleAppTheme() {
5374
- const theme = getAppTheme() === 'dark' ? 'light' : 'dark';
5375
- setAppTheme(theme);
5376
- return theme;
5377
- }
5378
-
5379
- export { ConfirmationResult, DEFAULT_COLOR, RlsAccordion, RlsAlert, RlsAmount, RlsApplication, RlsAreaText, RlsAvatar, RlsBadge, RlsBallot, RlsBody, RlsBottomSheet, RlsBreadcrumb, RlsButton, RlsButtonAction, RlsButtonIcon, RlsButtonOption, RlsButtonProgress, RlsButtonStepper, RlsButtonToggle, RlsCard, RlsCheckBox, RlsCheckBoxControl, RlsChooserAutocomplete, RlsChooserAutocompleteTemplate, RlsChooserList, RlsChooserListTemplate, RlsChooserSelect, RlsChooserSelectTemplate, RlsConfirmation, RlsContent, RlsContext, RlsDatatable, RlsDatatableCell, RlsDatatableData, RlsDatatableFloating, RlsDatatableHeader, RlsDatatableRecord, RlsDatatableSubheader, RlsDatatableTitle, RlsDatatableTotals, RlsDropdown, RlsFieldArea, RlsFieldAutocomplete, RlsFieldAutocompleteTemplate, RlsFieldClock, RlsFieldColor, RlsFieldDate, RlsFieldDateRange, RlsFieldDecimal, RlsFieldFile, RlsFieldList, RlsFieldListSuggestions, RlsFieldListTemplate, RlsFieldMoney, RlsFieldNumber, RlsFieldPassword, RlsFieldPercentage, RlsFieldReadonly, RlsFieldSelect, RlsFieldSelectTemplate, RlsFieldText, RlsFormNavigation, RlsHoverSwap, RlsIcon, RlsImage, RlsImageChooser, RlsImageEditor, RlsInput, RlsInputCounter, RlsInputDecimal, RlsInputMoney, RlsInputNumber, RlsInputPassword, RlsInputPercentage, RlsInputSearch, RlsInputText, RlsLabel, RlsLabelCheckBox, RlsLabelRadioButton, RlsLabelSwitch, RlsLed, RlsMessageEmpty, RlsMessageFormError, RlsMessageIcon, RlsModal, RlsModalClock, RlsModalDate, RlsModalDateRange, RlsModalSheet, RlsNavbar, RlsNavbarMenu, RlsPagination, RlsPickerClock, RlsPickerColor, RlsPickerDate, RlsPickerDateRange, RlsPickerDay, RlsPickerDayRange, RlsPickerMonth, RlsPickerSelectorTitle, RlsPickerYear, RlsPoster, RlsProgressBar, RlsProgressCircular, RlsRadioButton, RlsSkeleton, RlsSkeletonText, RlsSlider, RlsSnackbar, RlsSpinner, RlsSwitch, RlsSwitchControl, RlsTabs, RlsTabularText, RlsToolbar, calculateImgDimension, generateThemePalette, getAppTheme, getRemSize$1 as getRemSize, hexIsValid, hexToHsl, hexToHsv, hexToRgb, hslToHex, hsvToHex, hsvToRgb, normalizeHex, rangeFormatTemplate, renderClassStatus, rgbToHex, rgbToHsl, rgbToHsv, setAppTheme, setDesignSystem, setErrorsI18n, setThemeColor, toggleAppTheme, useConfirmation, useDatatable, useDesingSystemController, useDropdownController, useEventCallback, useFieldAutocomplete, useFieldList, useFieldSelect, useFormSingleSelectionController, useFormToggleController, useImageEditorController, useListController, useNotifications, usePortalController, useRelocationOnComponent, useResize, useRlsContext, useSnackbar, useTabsController };
5431
+ export { APP_THEMES, ConfirmationResult, DEFAULT_COLOR, RlsAccordion, RlsAlert, RlsAmount, RlsAppThemeTabs, RlsApplication, RlsAreaText, RlsAvatar, RlsBadge, RlsBallot, RlsBody, RlsBottomSheet, RlsBreadcrumb, RlsButton, RlsButtonAction, RlsButtonIcon, RlsButtonOption, RlsButtonProgress, RlsButtonStepper, RlsButtonToggle, RlsCard, RlsCheckBox, RlsCheckBoxControl, RlsChooserAutocomplete, RlsChooserAutocompleteTemplate, RlsChooserList, RlsChooserListTemplate, RlsChooserSelect, RlsChooserSelectTemplate, RlsConfirmation, RlsContent, RlsContext, RlsDatatable, RlsDatatableCell, RlsDatatableData, RlsDatatableFloating, RlsDatatableHeader, RlsDatatableRecord, RlsDatatableSubheader, RlsDatatableTitle, RlsDatatableTotals, RlsDropdown, RlsFieldArea, RlsFieldAutocomplete, RlsFieldAutocompleteTemplate, RlsFieldClock, RlsFieldColor, RlsFieldDate, RlsFieldDateRange, RlsFieldDecimal, RlsFieldFile, RlsFieldList, RlsFieldListSuggestions, RlsFieldListTemplate, RlsFieldMoney, RlsFieldNumber, RlsFieldPassword, RlsFieldPercentage, RlsFieldReadonly, RlsFieldSelect, RlsFieldSelectTemplate, RlsFieldText, RlsFormNavigation, RlsHoverSwap, RlsIcon, RlsImage, RlsImageChooser, RlsImageEditor, RlsInput, RlsInputCounter, RlsInputDecimal, RlsInputMoney, RlsInputNumber, RlsInputPassword, RlsInputPercentage, RlsInputSearch, RlsInputText, RlsLabel, RlsLabelCheckBox, RlsLabelRadioButton, RlsLabelSwitch, RlsLed, RlsMessageEmpty, RlsMessageFormError, RlsMessageIcon, RlsModal, RlsModalClock, RlsModalDate, RlsModalDateRange, RlsModalSheet, RlsNavbar, RlsNavbarMenu, RlsPagination, RlsPickerClock, RlsPickerColor, RlsPickerDate, RlsPickerDateRange, RlsPickerDay, RlsPickerDayRange, RlsPickerMonth, RlsPickerSelectorTitle, RlsPickerYear, RlsPoster, RlsProgressBar, RlsProgressCircular, RlsRadioButton, RlsSkeleton, RlsSkeletonText, RlsSlider, RlsSnackbar, RlsSpinner, RlsSwitch, RlsSwitchControl, RlsTabs, RlsTabularText, RlsToolbar, calculateImgDimension, generateThemePalette, getAppTheme, getRemSize$1 as getRemSize, hexIsValid, hexToHsl, hexToHsv, hexToRgb, hslToHex, hsvToHex, hsvToRgb, normalizeHex, rangeFormatTemplate, renderClassStatus, rgbToHex, rgbToHsl, rgbToHsv, setAppTheme, setDesignSystem, setErrorsI18n, setThemeColor, toggleAppTheme, useAppThemeController, useConfirmation, useDatatable, useDesingSystemController, useDropdownController, useEventCallback, useFieldAutocomplete, useFieldList, useFieldSelect, useFormSingleSelectionController, useFormToggleController, useImageEditorController, useListController, useNotifications, usePortalController, useRelocationOnComponent, useResize, useRlsContext, useSnackbar, useTabsController };
5380
5432
  //# sourceMappingURL=index.mjs.map