@uselets/ui 1.18.3 → 1.18.5

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 (142) hide show
  1. package/README.md +1 -1
  2. package/dist/{combobox-oMHLoLqV.js → combobox-ITDBYTtM.js} +2 -2
  3. package/dist/{combobox-oMHLoLqV.js.map → combobox-ITDBYTtM.js.map} +1 -1
  4. package/dist/{command-Ce8Ojl-B.js → command-BxkAy8PP.js} +2 -2
  5. package/dist/{command-Ce8Ojl-B.js.map → command-BxkAy8PP.js.map} +1 -1
  6. package/dist/components/accordion.spec.js +1 -1
  7. package/dist/components/alert-dialog.spec.js +1 -1
  8. package/dist/components/alert.spec.js +1 -1
  9. package/dist/components/anchor.spec.js +1 -1
  10. package/dist/components/area-chart.spec.js +1 -1
  11. package/dist/components/avatar.spec.js +1 -1
  12. package/dist/components/badge.spec.js +1 -1
  13. package/dist/components/bar-chart.spec.js +1 -1
  14. package/dist/components/breadcrumb.spec.js +1 -1
  15. package/dist/components/button-group.spec.js +1 -1
  16. package/dist/components/button.spec.js +1 -1
  17. package/dist/components/calendar.spec.js +1 -1
  18. package/dist/components/card.spec.js +1 -1
  19. package/dist/components/carousel.spec.js +1 -1
  20. package/dist/components/center.spec.js +1 -1
  21. package/dist/components/chart.spec.js +1 -1
  22. package/dist/components/checkbox.spec.js +1 -1
  23. package/dist/components/code.spec.js +1 -1
  24. package/dist/components/collapsible.spec.js +1 -1
  25. package/dist/components/combobox.js +1 -1
  26. package/dist/components/combobox.spec.js +1 -1
  27. package/dist/components/command.js +1 -1
  28. package/dist/components/command.spec.js +1 -1
  29. package/dist/components/container.spec.js +1 -1
  30. package/dist/components/data-table.js +1 -1
  31. package/dist/components/data-table.spec.js +1 -1
  32. package/dist/components/date-range-picker.js +1 -1
  33. package/dist/components/date-range-picker.spec.js +1 -1
  34. package/dist/components/dialog.spec.js +1 -1
  35. package/dist/components/donut-chart.spec.js +1 -1
  36. package/dist/components/drawer.spec.js +1 -1
  37. package/dist/components/dropdown-menu.spec.js +1 -1
  38. package/dist/components/dropzone.spec.js +1 -1
  39. package/dist/components/empty.spec.js +1 -1
  40. package/dist/components/field.spec.js +1 -1
  41. package/dist/components/flex.spec.js +1 -1
  42. package/dist/components/grid.spec.js +1 -1
  43. package/dist/components/group.spec.js +1 -1
  44. package/dist/components/heading.spec.js +1 -1
  45. package/dist/components/hover-card.spec.js +1 -1
  46. package/dist/components/input-group.js +1 -1
  47. package/dist/components/input-group.spec.js +1 -1
  48. package/dist/components/input-otp.spec.js +1 -1
  49. package/dist/components/input.js +1 -1
  50. package/dist/components/input.spec.js +1 -1
  51. package/dist/components/input.spec.js.map +1 -1
  52. package/dist/components/kbd.spec.js +1 -1
  53. package/dist/components/label.spec.js +1 -1
  54. package/dist/components/list.spec.js +1 -1
  55. package/dist/components/logo.spec.js +1 -1
  56. package/dist/components/marker.spec.js +1 -1
  57. package/dist/components/mask-input.js +1 -1
  58. package/dist/components/mask-input.spec.js +1 -1
  59. package/dist/components/native-select.js +1 -1
  60. package/dist/components/native-select.spec.js +1 -1
  61. package/dist/components/navigation-menu.spec.js +1 -1
  62. package/dist/components/number-field.spec.js +1 -1
  63. package/dist/components/pagination.spec.js +1 -1
  64. package/dist/components/phone-input.js +1 -1
  65. package/dist/components/phone-input.spec.js +1 -1
  66. package/dist/components/pie-chart.spec.js +1 -1
  67. package/dist/components/popover.spec.js +1 -1
  68. package/dist/components/progress.spec.js +1 -1
  69. package/dist/components/radio-group.spec.js +1 -1
  70. package/dist/components/resizable.spec.js +1 -1
  71. package/dist/components/ring-progress.spec.js +1 -1
  72. package/dist/components/scroll-area.spec.js +1 -1
  73. package/dist/components/select.js +1 -1
  74. package/dist/components/select.spec.js +1 -1
  75. package/dist/components/separator.spec.js +1 -1
  76. package/dist/components/sidebar.js +1 -1
  77. package/dist/components/sidebar.spec.js +1 -1
  78. package/dist/components/simple-grid.spec.js +1 -1
  79. package/dist/components/skeleton.spec.js +1 -1
  80. package/dist/components/slider.spec.js +1 -1
  81. package/dist/components/sonner.spec.js +1 -1
  82. package/dist/components/spinner.spec.js +1 -1
  83. package/dist/components/stack.spec.js +1 -1
  84. package/dist/components/stepper.spec.js +1 -1
  85. package/dist/components/switch.spec.js +1 -1
  86. package/dist/components/table.spec.js +1 -1
  87. package/dist/components/tabs.spec.js +1 -1
  88. package/dist/components/text.spec.js +1 -1
  89. package/dist/components/textarea.js +1 -1
  90. package/dist/components/textarea.spec.js +1 -1
  91. package/dist/components/theme.spec.js +1 -1
  92. package/dist/components/timeline.spec.js +1 -1
  93. package/dist/components/toggle-group.spec.js +1 -1
  94. package/dist/components/toggle.spec.js +1 -1
  95. package/dist/components/tooltip.spec.js +1 -1
  96. package/dist/components/unstyled-button.spec.js +1 -1
  97. package/dist/components/visibility.spec.js +1 -1
  98. package/dist/{data-table-tnfPcXqc.js → data-table-BGfSiHDT.js} +2 -2
  99. package/dist/{data-table-tnfPcXqc.js.map → data-table-BGfSiHDT.js.map} +1 -1
  100. package/dist/{date-range-picker-w3ZVRIII.js → date-range-picker-BjkVzFWQ.js} +2 -2
  101. package/dist/{date-range-picker-w3ZVRIII.js.map → date-range-picker-BjkVzFWQ.js.map} +1 -1
  102. package/dist/hooks/use-breakpoint-value.spec.js +1 -1
  103. package/dist/hooks/use-breakpoint-value.spec.js.map +1 -1
  104. package/dist/hooks/use-breakpoint.spec.js +1 -1
  105. package/dist/hooks/use-disclosure.spec.js +1 -1
  106. package/dist/hooks/use-document-visibility.spec.js +1 -1
  107. package/dist/hooks/use-hotkeys.spec.js +1 -1
  108. package/dist/hooks/use-idle.spec.js +1 -1
  109. package/dist/hooks/use-interval.spec.js +1 -1
  110. package/dist/hooks/use-local-storage.spec.js +1 -1
  111. package/dist/hooks/use-mask.spec.js +1 -1
  112. package/dist/hooks/use-mobile.spec.js +1 -1
  113. package/dist/index.js +1 -1
  114. package/dist/{input-BhEEV_nn.js → input-CJLsPlXh.js} +2 -2
  115. package/dist/{input-BhEEV_nn.js.map → input-CJLsPlXh.js.map} +1 -1
  116. package/dist/{input-group-BUTp8vYe.js → input-group-mcar-tED.js} +2 -2
  117. package/dist/{input-group-BUTp8vYe.js.map → input-group-mcar-tED.js.map} +1 -1
  118. package/dist/{mask-input-BnifHAsJ.js → mask-input-cCmVKrHj.js} +2 -2
  119. package/dist/{mask-input-BnifHAsJ.js.map → mask-input-cCmVKrHj.js.map} +1 -1
  120. package/dist/{native-select-DZW3Y7nq.js → native-select-Iq25QUH-.js} +2 -2
  121. package/dist/native-select-Iq25QUH-.js.map +1 -0
  122. package/dist/{phone-input-ambhiSLO.js → phone-input-DqgYa1un.js} +2 -2
  123. package/dist/{phone-input-ambhiSLO.js.map → phone-input-DqgYa1un.js.map} +1 -1
  124. package/dist/{react.esm-BkhVXJ8s.js → react.esm-dE9nuHcL.js} +2 -2
  125. package/dist/{react.esm-BkhVXJ8s.js.map → react.esm-dE9nuHcL.js.map} +1 -1
  126. package/dist/select-CVwVLyWt.js +2 -0
  127. package/dist/select-CVwVLyWt.js.map +1 -0
  128. package/dist/{sidebar-f9maf3VF.js → sidebar-CJriMotD.js} +2 -2
  129. package/dist/{sidebar-f9maf3VF.js.map → sidebar-CJriMotD.js.map} +1 -1
  130. package/dist/skills/uselets-ui/references/package-guide.md +1 -1
  131. package/dist/styles/gomax.css +2 -0
  132. package/dist/styles/max.css +2 -0
  133. package/dist/styles/theme.css +1 -0
  134. package/dist/textarea-eJQTMC_d.js +2 -0
  135. package/dist/textarea-eJQTMC_d.js.map +1 -0
  136. package/package.json +13 -13
  137. package/skills/uselets-ui/references/package-guide.md +1 -1
  138. package/dist/native-select-DZW3Y7nq.js.map +0 -1
  139. package/dist/select-C3QYNv4t.js +0 -2
  140. package/dist/select-C3QYNv4t.js.map +0 -1
  141. package/dist/textarea-C8zrf9Rz.js +0 -2
  142. package/dist/textarea-C8zrf9Rz.js.map +0 -1
@@ -1,2 +1,2 @@
1
- import"../rolldown-runtime-Bdj-bS2b.js";import{o as e,t}from"../field-DzR-XrO7.js";import{t as n}from"../textarea-C8zrf9Rz.js";import{a as r,n as i,r as a}from"../react.esm-BkhVXJ8s.js";import{jsx as o,jsxs as s}from"react/jsx-runtime";describe(`Textarea`,()=>{it(`renders a textarea with data-slot and the default classes`,()=>{let{container:e}=a(o(n,{placeholder:`Write something`})),t=e.querySelector(`[data-slot="textarea"]`);expect(t).not.toBeNull(),expect(t?.tagName).toBe(`TEXTAREA`),expect(t?.className).toContain(`min-h-16`),expect(t?.getAttribute(`placeholder`)).toBe(`Write something`)}),it(`preserves an explicit id without requiring Field context`,()=>{let{container:e}=a(o(n,{id:`bio`}));expect(e.querySelector(`[data-slot="textarea"]`)?.getAttribute(`id`)).toBe(`bio`)}),it(`does not assign an id outside Field when none is provided`,()=>{let{container:e}=a(o(n,{}));expect(e.querySelector(`[data-slot="textarea"]`)?.getAttribute(`id`)).toBeNull()}),it(`wires the field control id when rendered inside Field`,()=>{a(s(t,{children:[o(e,{children:`Message`}),o(n,{})]}));let i=r.getByLabelText(`Message`);expect(i.getAttribute(`id`)).toBeTruthy()}),it(`updates its value when the user types`,()=>{a(o(n,{"aria-label":`Comment`}));let e=r.getByLabelText(`Comment`);i.change(e,{target:{value:`Hello world`}}),expect(e.value).toBe(`Hello world`)}),it(`forwards ref to the underlying textarea element`,()=>{let e={current:null};a(o(n,{ref:e})),expect(e.current).toBeInstanceOf(HTMLTextAreaElement)})});
1
+ import"../rolldown-runtime-Bdj-bS2b.js";import{o as e,t}from"../field-DzR-XrO7.js";import{t as n}from"../textarea-eJQTMC_d.js";import{a as r,n as i,r as a}from"../react.esm-dE9nuHcL.js";import{jsx as o,jsxs as s}from"react/jsx-runtime";describe(`Textarea`,()=>{it(`renders a textarea with data-slot and the default classes`,()=>{let{container:e}=a(o(n,{placeholder:`Write something`})),t=e.querySelector(`[data-slot="textarea"]`);expect(t).not.toBeNull(),expect(t?.tagName).toBe(`TEXTAREA`),expect(t?.className).toContain(`min-h-16`),expect(t?.getAttribute(`placeholder`)).toBe(`Write something`)}),it(`preserves an explicit id without requiring Field context`,()=>{let{container:e}=a(o(n,{id:`bio`}));expect(e.querySelector(`[data-slot="textarea"]`)?.getAttribute(`id`)).toBe(`bio`)}),it(`does not assign an id outside Field when none is provided`,()=>{let{container:e}=a(o(n,{}));expect(e.querySelector(`[data-slot="textarea"]`)?.getAttribute(`id`)).toBeNull()}),it(`wires the field control id when rendered inside Field`,()=>{a(s(t,{children:[o(e,{children:`Message`}),o(n,{})]}));let i=r.getByLabelText(`Message`);expect(i.getAttribute(`id`)).toBeTruthy()}),it(`updates its value when the user types`,()=>{a(o(n,{"aria-label":`Comment`}));let e=r.getByLabelText(`Comment`);i.change(e,{target:{value:`Hello world`}}),expect(e.value).toBe(`Hello world`)}),it(`forwards ref to the underlying textarea element`,()=>{let e={current:null};a(o(n,{ref:e})),expect(e.current).toBeInstanceOf(HTMLTextAreaElement)})});
2
2
  //# sourceMappingURL=textarea.spec.js.map
@@ -1,2 +1,2 @@
1
- import"../rolldown-runtime-Bdj-bS2b.js";import{n as e,r as t,t as n}from"../theme-DZJ_cJYp.js";import{a as r,i,n as a,r as o,t as s}from"../react.esm-BkhVXJ8s.js";import{jsx as c,jsxs as l}from"react/jsx-runtime";function ThemeConsumer(){let{theme:e,setTheme:n}=t();return l(`div`,{children:[c(`span`,{"data-testid":`theme-value`,children:e}),c(`button`,{type:`button`,onClick:()=>n(`dark`),children:`set-dark`}),c(`button`,{type:`button`,onClick:()=>n(`light`),children:`set-light`}),c(`button`,{type:`button`,onClick:()=>n(`system`),children:`set-system`})]})}function openModeToggleMenu(){let e=r.getByRole(`button`,{name:`Toggle theme`});return a.pointerDown(e,{button:0}),e}describe(`ThemeProvider`,()=>{it(`renders its children`,()=>{o(c(e,{children:c(`span`,{children:`Hello world`})})),expect(r.getByText(`Hello world`)).not.toBeNull()}),it(`defaults to the "system" theme when no defaultTheme or persisted value is provided`,()=>{o(c(e,{children:c(ThemeConsumer,{})})),expect(r.getByTestId(`theme-value`).textContent).toBe(`system`)}),it(`uses the provided defaultTheme when nothing is persisted`,()=>{o(c(e,{defaultTheme:`dark`,children:c(ThemeConsumer,{})})),expect(r.getByTestId(`theme-value`).textContent).toBe(`dark`)}),it(`reads a previously persisted theme from localStorage under the default storage key`,()=>{window.localStorage.setItem(`vite-ui-theme`,`light`),o(c(e,{children:c(ThemeConsumer,{})})),expect(r.getByTestId(`theme-value`).textContent).toBe(`light`)}),it(`reads a previously persisted theme from a custom storageKey`,()=>{window.localStorage.setItem(`acme-theme`,`dark`),o(c(e,{storageKey:`acme-theme`,children:c(ThemeConsumer,{})})),expect(r.getByTestId(`theme-value`).textContent).toBe(`dark`)}),it(`applies the resolved theme as a class on the document element`,()=>{o(c(e,{defaultTheme:`dark`,children:c(ThemeConsumer,{})})),expect(document.documentElement.classList.contains(`dark`)).toBe(!0),expect(document.documentElement.classList.contains(`light`)).toBe(!1)}),it(`resolves the "system" theme to light when the OS preference does not match dark`,()=>{o(c(e,{defaultTheme:`system`,children:c(ThemeConsumer,{})})),expect(document.documentElement.classList.contains(`light`)).toBe(!0),expect(document.documentElement.classList.contains(`dark`)).toBe(!1)}),it(`resolves the "system" theme to dark when the OS reports a dark color scheme preference`,()=>{vi.spyOn(window,`matchMedia`).mockReturnValue({matches:!0,media:`(prefers-color-scheme: dark)`,onchange:null,addEventListener:vi.fn(),removeEventListener:vi.fn(),addListener:vi.fn(),removeListener:vi.fn(),dispatchEvent:vi.fn()}),o(c(e,{defaultTheme:`system`,children:c(ThemeConsumer,{})})),expect(document.documentElement.classList.contains(`dark`)).toBe(!0)}),it(`replaces the previous theme class instead of stacking classes when the theme changes`,()=>{o(c(e,{defaultTheme:`dark`,children:c(ThemeConsumer,{})})),a.click(r.getByText(`set-light`)),expect(document.documentElement.classList.contains(`light`)).toBe(!0),expect(document.documentElement.classList.contains(`dark`)).toBe(!1)}),it(`temporarily inserts a style tag that disables transitions when disableTransitionOnChange is true`,()=>{o(c(e,{disableTransitionOnChange:!0,children:c(ThemeConsumer,{})})),expect(document.head.querySelector(`style`)).not.toBeNull()}),describe(`useTheme`,()=>{it(`throws when called outside of a ThemeProvider`,()=>{expect(()=>i(()=>t())).toThrow(`useTheme must be used within a ThemeProvider`)}),it(`returns the current theme and a setTheme updater`,()=>{let{result:n}=i(()=>t(),{wrapper:({children:t})=>c(e,{defaultTheme:`light`,children:t})});expect(n.current.theme).toBe(`light`),expect(typeof n.current.setTheme).toBe(`function`)}),it(`updates the theme and persists the choice to localStorage under the default storage key`,()=>{let{result:n}=i(()=>t(),{wrapper:({children:t})=>c(e,{children:t})});s(()=>n.current.setTheme(`dark`)),expect(n.current.theme).toBe(`dark`),expect(window.localStorage.getItem(`vite-ui-theme`)).toBe(`dark`)}),it(`persists the choice under a custom storageKey`,()=>{let{result:n}=i(()=>t(),{wrapper:({children:t})=>c(e,{storageKey:`acme-theme`,children:t})});s(()=>n.current.setTheme(`light`)),expect(window.localStorage.getItem(`acme-theme`)).toBe(`light`)}),it(`keeps the persisted theme across a remount of the provider`,()=>{let{result:n,unmount:r}=i(()=>t(),{wrapper:({children:t})=>c(e,{children:t})});s(()=>n.current.setTheme(`dark`)),r();let{result:a}=i(()=>t(),{wrapper:({children:t})=>c(e,{children:t})});expect(a.current.theme).toBe(`dark`)})}),describe(`ModeToggle`,()=>{it(`renders a trigger button with an accessible "Toggle theme" label`,()=>{o(c(e,{children:c(n,{})})),expect(r.getByRole(`button`,{name:`Toggle theme`})).not.toBeNull()}),it(`opens the menu and lists the Light, Dark, and System options`,()=>{o(c(e,{children:c(n,{})})),openModeToggleMenu(),expect(r.getByRole(`menuitem`,{name:`Light`})).not.toBeNull(),expect(r.getByRole(`menuitem`,{name:`Dark`})).not.toBeNull(),expect(r.getByRole(`menuitem`,{name:`System`})).not.toBeNull()}),it(`switches to the dark theme when the Dark option is clicked`,()=>{o(l(e,{children:[c(n,{}),c(ThemeConsumer,{})]})),openModeToggleMenu(),a.click(r.getByRole(`menuitem`,{name:`Dark`})),expect(r.getByTestId(`theme-value`).textContent).toBe(`dark`),expect(document.documentElement.classList.contains(`dark`)).toBe(!0),expect(window.localStorage.getItem(`vite-ui-theme`)).toBe(`dark`)}),it(`switches to the light theme when the Light option is clicked`,()=>{o(l(e,{defaultTheme:`dark`,children:[c(n,{}),c(ThemeConsumer,{})]})),openModeToggleMenu(),a.click(r.getByRole(`menuitem`,{name:`Light`})),expect(r.getByTestId(`theme-value`).textContent).toBe(`light`),expect(document.documentElement.classList.contains(`light`)).toBe(!0),expect(window.localStorage.getItem(`vite-ui-theme`)).toBe(`light`)}),it(`switches to the system theme when the System option is clicked`,()=>{o(l(e,{defaultTheme:`dark`,children:[c(n,{}),c(ThemeConsumer,{})]})),openModeToggleMenu(),a.click(r.getByRole(`menuitem`,{name:`System`})),expect(r.getByTestId(`theme-value`).textContent).toBe(`system`),expect(window.localStorage.getItem(`vite-ui-theme`)).toBe(`system`)}),it(`persists the theme selected through the menu across a remount of the provider`,()=>{let{unmount:t}=o(c(e,{children:c(n,{})}));openModeToggleMenu(),a.click(r.getByRole(`menuitem`,{name:`Dark`})),t(),o(c(e,{children:c(ThemeConsumer,{})})),expect(r.getByTestId(`theme-value`).textContent).toBe(`dark`)})})});
1
+ import"../rolldown-runtime-Bdj-bS2b.js";import{n as e,r as t,t as n}from"../theme-DZJ_cJYp.js";import{a as r,i,n as a,r as o,t as s}from"../react.esm-dE9nuHcL.js";import{jsx as c,jsxs as l}from"react/jsx-runtime";function ThemeConsumer(){let{theme:e,setTheme:n}=t();return l(`div`,{children:[c(`span`,{"data-testid":`theme-value`,children:e}),c(`button`,{type:`button`,onClick:()=>n(`dark`),children:`set-dark`}),c(`button`,{type:`button`,onClick:()=>n(`light`),children:`set-light`}),c(`button`,{type:`button`,onClick:()=>n(`system`),children:`set-system`})]})}function openModeToggleMenu(){let e=r.getByRole(`button`,{name:`Toggle theme`});return a.pointerDown(e,{button:0}),e}describe(`ThemeProvider`,()=>{it(`renders its children`,()=>{o(c(e,{children:c(`span`,{children:`Hello world`})})),expect(r.getByText(`Hello world`)).not.toBeNull()}),it(`defaults to the "system" theme when no defaultTheme or persisted value is provided`,()=>{o(c(e,{children:c(ThemeConsumer,{})})),expect(r.getByTestId(`theme-value`).textContent).toBe(`system`)}),it(`uses the provided defaultTheme when nothing is persisted`,()=>{o(c(e,{defaultTheme:`dark`,children:c(ThemeConsumer,{})})),expect(r.getByTestId(`theme-value`).textContent).toBe(`dark`)}),it(`reads a previously persisted theme from localStorage under the default storage key`,()=>{window.localStorage.setItem(`vite-ui-theme`,`light`),o(c(e,{children:c(ThemeConsumer,{})})),expect(r.getByTestId(`theme-value`).textContent).toBe(`light`)}),it(`reads a previously persisted theme from a custom storageKey`,()=>{window.localStorage.setItem(`acme-theme`,`dark`),o(c(e,{storageKey:`acme-theme`,children:c(ThemeConsumer,{})})),expect(r.getByTestId(`theme-value`).textContent).toBe(`dark`)}),it(`applies the resolved theme as a class on the document element`,()=>{o(c(e,{defaultTheme:`dark`,children:c(ThemeConsumer,{})})),expect(document.documentElement.classList.contains(`dark`)).toBe(!0),expect(document.documentElement.classList.contains(`light`)).toBe(!1)}),it(`resolves the "system" theme to light when the OS preference does not match dark`,()=>{o(c(e,{defaultTheme:`system`,children:c(ThemeConsumer,{})})),expect(document.documentElement.classList.contains(`light`)).toBe(!0),expect(document.documentElement.classList.contains(`dark`)).toBe(!1)}),it(`resolves the "system" theme to dark when the OS reports a dark color scheme preference`,()=>{vi.spyOn(window,`matchMedia`).mockReturnValue({matches:!0,media:`(prefers-color-scheme: dark)`,onchange:null,addEventListener:vi.fn(),removeEventListener:vi.fn(),addListener:vi.fn(),removeListener:vi.fn(),dispatchEvent:vi.fn()}),o(c(e,{defaultTheme:`system`,children:c(ThemeConsumer,{})})),expect(document.documentElement.classList.contains(`dark`)).toBe(!0)}),it(`replaces the previous theme class instead of stacking classes when the theme changes`,()=>{o(c(e,{defaultTheme:`dark`,children:c(ThemeConsumer,{})})),a.click(r.getByText(`set-light`)),expect(document.documentElement.classList.contains(`light`)).toBe(!0),expect(document.documentElement.classList.contains(`dark`)).toBe(!1)}),it(`temporarily inserts a style tag that disables transitions when disableTransitionOnChange is true`,()=>{o(c(e,{disableTransitionOnChange:!0,children:c(ThemeConsumer,{})})),expect(document.head.querySelector(`style`)).not.toBeNull()}),describe(`useTheme`,()=>{it(`throws when called outside of a ThemeProvider`,()=>{expect(()=>i(()=>t())).toThrow(`useTheme must be used within a ThemeProvider`)}),it(`returns the current theme and a setTheme updater`,()=>{let{result:n}=i(()=>t(),{wrapper:({children:t})=>c(e,{defaultTheme:`light`,children:t})});expect(n.current.theme).toBe(`light`),expect(typeof n.current.setTheme).toBe(`function`)}),it(`updates the theme and persists the choice to localStorage under the default storage key`,()=>{let{result:n}=i(()=>t(),{wrapper:({children:t})=>c(e,{children:t})});s(()=>n.current.setTheme(`dark`)),expect(n.current.theme).toBe(`dark`),expect(window.localStorage.getItem(`vite-ui-theme`)).toBe(`dark`)}),it(`persists the choice under a custom storageKey`,()=>{let{result:n}=i(()=>t(),{wrapper:({children:t})=>c(e,{storageKey:`acme-theme`,children:t})});s(()=>n.current.setTheme(`light`)),expect(window.localStorage.getItem(`acme-theme`)).toBe(`light`)}),it(`keeps the persisted theme across a remount of the provider`,()=>{let{result:n,unmount:r}=i(()=>t(),{wrapper:({children:t})=>c(e,{children:t})});s(()=>n.current.setTheme(`dark`)),r();let{result:a}=i(()=>t(),{wrapper:({children:t})=>c(e,{children:t})});expect(a.current.theme).toBe(`dark`)})}),describe(`ModeToggle`,()=>{it(`renders a trigger button with an accessible "Toggle theme" label`,()=>{o(c(e,{children:c(n,{})})),expect(r.getByRole(`button`,{name:`Toggle theme`})).not.toBeNull()}),it(`opens the menu and lists the Light, Dark, and System options`,()=>{o(c(e,{children:c(n,{})})),openModeToggleMenu(),expect(r.getByRole(`menuitem`,{name:`Light`})).not.toBeNull(),expect(r.getByRole(`menuitem`,{name:`Dark`})).not.toBeNull(),expect(r.getByRole(`menuitem`,{name:`System`})).not.toBeNull()}),it(`switches to the dark theme when the Dark option is clicked`,()=>{o(l(e,{children:[c(n,{}),c(ThemeConsumer,{})]})),openModeToggleMenu(),a.click(r.getByRole(`menuitem`,{name:`Dark`})),expect(r.getByTestId(`theme-value`).textContent).toBe(`dark`),expect(document.documentElement.classList.contains(`dark`)).toBe(!0),expect(window.localStorage.getItem(`vite-ui-theme`)).toBe(`dark`)}),it(`switches to the light theme when the Light option is clicked`,()=>{o(l(e,{defaultTheme:`dark`,children:[c(n,{}),c(ThemeConsumer,{})]})),openModeToggleMenu(),a.click(r.getByRole(`menuitem`,{name:`Light`})),expect(r.getByTestId(`theme-value`).textContent).toBe(`light`),expect(document.documentElement.classList.contains(`light`)).toBe(!0),expect(window.localStorage.getItem(`vite-ui-theme`)).toBe(`light`)}),it(`switches to the system theme when the System option is clicked`,()=>{o(l(e,{defaultTheme:`dark`,children:[c(n,{}),c(ThemeConsumer,{})]})),openModeToggleMenu(),a.click(r.getByRole(`menuitem`,{name:`System`})),expect(r.getByTestId(`theme-value`).textContent).toBe(`system`),expect(window.localStorage.getItem(`vite-ui-theme`)).toBe(`system`)}),it(`persists the theme selected through the menu across a remount of the provider`,()=>{let{unmount:t}=o(c(e,{children:c(n,{})}));openModeToggleMenu(),a.click(r.getByRole(`menuitem`,{name:`Dark`})),t(),o(c(e,{children:c(ThemeConsumer,{})})),expect(r.getByTestId(`theme-value`).textContent).toBe(`dark`)})})});
2
2
  //# sourceMappingURL=theme.spec.js.map
@@ -1,2 +1,2 @@
1
- import"../rolldown-runtime-Bdj-bS2b.js";import{a as e,c as t,i as n,l as r,n as i,o as a,r as o,s,t as c,u as l}from"../timeline-pBm0t1tb.js";import{a as u,r as d}from"../react.esm-BkhVXJ8s.js";import{jsx as f,jsxs as p}from"react/jsx-runtime";import{createRef as m}from"react";describe(`Timeline`,()=>{it(`forwards the ref to the underlying ol element`,()=>{let e=m();d(f(c,{ref:e,children:f(t,{title:`Order placed`,date:`2024-01-01`})})),expect(e.current).not.toBeNull(),expect(e.current?.tagName).toBe(`OL`),expect(e.current?.getAttribute(`data-slot`)).toBe(`timeline`)}),it(`renders the empty state when there are no TimelineItem children`,()=>{let{container:e}=d(f(c,{children:f(`div`,{children:`Not a timeline item`})}));expect(u.queryByText(`Not a timeline item`)).toBeNull(),expect(u.getByText(`No timeline items to display`)).not.toBeNull(),expect(e.querySelector(`[data-slot="timeline-empty"]`)).not.toBeNull()}),it(`renders a custom message when TimelineEmpty is used on its own with children`,()=>{d(f(e,{children:`Nothing here yet`})),expect(u.getByText(`Nothing here yet`)).not.toBeNull(),expect(u.queryByText(`No timeline items to display`)).toBeNull()}),it(`applies the requested size to the root`,()=>{let{container:e}=d(f(c,{size:`lg`,children:f(t,{title:`Step`})})),n=e.querySelector(`[data-slot="timeline"]`);expect(n?.getAttribute(`data-size`)).toBe(`lg`),expect(n?.className).toContain(`gap-8`)}),it(`shows a connector on every item except the last one by default`,()=>{let{container:e}=d(p(c,{children:[f(t,{title:`First`}),f(t,{title:`Second`})]})),n=e.querySelectorAll(`[data-slot="timeline-item"]`);expect(n).toHaveLength(2),expect(n[0]?.querySelector(`[data-slot="timeline-connector"]`)).not.toBeNull(),expect(n[1]?.querySelector(`[data-slot="timeline-connector"]`)).toBeNull()}),it(`lets an item opt out of the connector explicitly`,()=>{let{container:e}=d(p(c,{children:[f(t,{title:`First`,showConnector:!1}),f(t,{title:`Second`})]})),n=e.querySelectorAll(`[data-slot="timeline-item"]`);expect(n[0]?.querySelector(`[data-slot="timeline-connector"]`)).toBeNull()}),it(`propagates the Timeline iconSize down to each item icon`,()=>{let{container:e}=d(f(c,{iconSize:`lg`,children:f(t,{title:`First`})}));expect(e.querySelector(`[data-slot="timeline-icon"]`)?.getAttribute(`data-size`)).toBe(`lg`)}),it(`renders custom children instead of the default layout when provided`,()=>{let{container:e}=d(f(c,{children:f(t,{children:f(`span`,{children:`Custom body`})})}));expect(u.getByText(`Custom body`)).not.toBeNull(),expect(e.querySelector(`[data-slot="timeline-title"]`)).toBeNull()}),it(`renders the loading state with aria-busy and a connector placeholder`,()=>{let{container:e}=d(p(c,{children:[f(t,{loading:!0}),f(t,{title:`Done`})]})),n=e.querySelectorAll(`[data-slot="timeline-item"]`);expect(n[0]?.getAttribute(`aria-busy`)).toBe(`true`)}),it(`renders the error state with role alert and the provided message`,()=>{d(f(c,{children:f(t,{error:`Payment failed`,title:`Charge card`,date:`2024-02-01`})}));let e=u.getByRole(`alert`);expect(e.getAttribute(`data-status`)).toBe(`error`),expect(u.getByText(`Payment failed`)).not.toBeNull(),expect(u.getByText(`Charge card`)).not.toBeNull()}),it(`falls back to the "Error" title when the error item has no title`,()=>{d(f(c,{children:f(t,{error:`Something went wrong`})})),expect(u.getByText(`Error`)).not.toBeNull()}),it(`marks the in-progress item with aria-current="step"`,()=>{let{container:e}=d(f(c,{children:f(t,{title:`Working on it`,status:`in-progress`})}));expect(e.querySelector(`[data-slot="timeline-item"]`)?.getAttribute(`aria-current`)).toBe(`step`)}),it(`forwards refs on the standalone subcomponents`,()=>{let e=m(),c=m(),u=m(),h=m(),g=m(),_=m(),v=m(),y=m();d(p(`ul`,{children:[f(t,{ref:e,title:`Item`}),f(r,{ref:c,date:`2024-01-01`}),f(i,{ref:u}),f(a,{ref:h,children:`Header`}),f(l,{ref:g,children:`Title`}),f(o,{ref:_,children:`Content`}),f(s,{ref:v}),f(n,{ref:y,children:`Description`})]})),expect(e.current?.tagName).toBe(`LI`),expect(c.current?.tagName).toBe(`TIME`),expect(u.current?.tagName).toBe(`DIV`),expect(h.current?.tagName).toBe(`DIV`),expect(g.current?.tagName).toBe(`H3`),expect(_.current?.tagName).toBe(`DIV`),expect(v.current?.tagName).toBe(`DIV`),expect(y.current?.tagName).toBe(`P`)})}),describe(`TimelineTime`,()=>{it(`formats a given date using the default format`,()=>{d(f(r,{date:new Date(2024,2,15)})),expect(u.getByText(`Mar 15, 2024`)).not.toBeNull()}),it(`prefers explicit children over the formatted date`,()=>{d(f(r,{date:new Date(2024,2,15),children:`Custom label`})),expect(u.getByText(`Custom label`)).not.toBeNull()}),it(`renders nothing for an invalid date and omits the dateTime attribute`,()=>{let{container:e}=d(f(r,{date:`not-a-date`})),t=e.querySelector(`[data-slot="timeline-time"]`);expect(t?.textContent).toBe(``),expect(t?.hasAttribute(`datetime`)).toBe(!1)}),it(`applies a custom Intl.DateTimeFormat`,()=>{d(f(r,{date:new Date(2024,2,15),format:{year:`numeric`,month:`long`,day:`numeric`}})),expect(u.getByText(`March 15, 2024`)).not.toBeNull()})});
1
+ import"../rolldown-runtime-Bdj-bS2b.js";import{a as e,c as t,i as n,l as r,n as i,o as a,r as o,s,t as c,u as l}from"../timeline-pBm0t1tb.js";import{a as u,r as d}from"../react.esm-dE9nuHcL.js";import{jsx as f,jsxs as p}from"react/jsx-runtime";import{createRef as m}from"react";describe(`Timeline`,()=>{it(`forwards the ref to the underlying ol element`,()=>{let e=m();d(f(c,{ref:e,children:f(t,{title:`Order placed`,date:`2024-01-01`})})),expect(e.current).not.toBeNull(),expect(e.current?.tagName).toBe(`OL`),expect(e.current?.getAttribute(`data-slot`)).toBe(`timeline`)}),it(`renders the empty state when there are no TimelineItem children`,()=>{let{container:e}=d(f(c,{children:f(`div`,{children:`Not a timeline item`})}));expect(u.queryByText(`Not a timeline item`)).toBeNull(),expect(u.getByText(`No timeline items to display`)).not.toBeNull(),expect(e.querySelector(`[data-slot="timeline-empty"]`)).not.toBeNull()}),it(`renders a custom message when TimelineEmpty is used on its own with children`,()=>{d(f(e,{children:`Nothing here yet`})),expect(u.getByText(`Nothing here yet`)).not.toBeNull(),expect(u.queryByText(`No timeline items to display`)).toBeNull()}),it(`applies the requested size to the root`,()=>{let{container:e}=d(f(c,{size:`lg`,children:f(t,{title:`Step`})})),n=e.querySelector(`[data-slot="timeline"]`);expect(n?.getAttribute(`data-size`)).toBe(`lg`),expect(n?.className).toContain(`gap-8`)}),it(`shows a connector on every item except the last one by default`,()=>{let{container:e}=d(p(c,{children:[f(t,{title:`First`}),f(t,{title:`Second`})]})),n=e.querySelectorAll(`[data-slot="timeline-item"]`);expect(n).toHaveLength(2),expect(n[0]?.querySelector(`[data-slot="timeline-connector"]`)).not.toBeNull(),expect(n[1]?.querySelector(`[data-slot="timeline-connector"]`)).toBeNull()}),it(`lets an item opt out of the connector explicitly`,()=>{let{container:e}=d(p(c,{children:[f(t,{title:`First`,showConnector:!1}),f(t,{title:`Second`})]})),n=e.querySelectorAll(`[data-slot="timeline-item"]`);expect(n[0]?.querySelector(`[data-slot="timeline-connector"]`)).toBeNull()}),it(`propagates the Timeline iconSize down to each item icon`,()=>{let{container:e}=d(f(c,{iconSize:`lg`,children:f(t,{title:`First`})}));expect(e.querySelector(`[data-slot="timeline-icon"]`)?.getAttribute(`data-size`)).toBe(`lg`)}),it(`renders custom children instead of the default layout when provided`,()=>{let{container:e}=d(f(c,{children:f(t,{children:f(`span`,{children:`Custom body`})})}));expect(u.getByText(`Custom body`)).not.toBeNull(),expect(e.querySelector(`[data-slot="timeline-title"]`)).toBeNull()}),it(`renders the loading state with aria-busy and a connector placeholder`,()=>{let{container:e}=d(p(c,{children:[f(t,{loading:!0}),f(t,{title:`Done`})]})),n=e.querySelectorAll(`[data-slot="timeline-item"]`);expect(n[0]?.getAttribute(`aria-busy`)).toBe(`true`)}),it(`renders the error state with role alert and the provided message`,()=>{d(f(c,{children:f(t,{error:`Payment failed`,title:`Charge card`,date:`2024-02-01`})}));let e=u.getByRole(`alert`);expect(e.getAttribute(`data-status`)).toBe(`error`),expect(u.getByText(`Payment failed`)).not.toBeNull(),expect(u.getByText(`Charge card`)).not.toBeNull()}),it(`falls back to the "Error" title when the error item has no title`,()=>{d(f(c,{children:f(t,{error:`Something went wrong`})})),expect(u.getByText(`Error`)).not.toBeNull()}),it(`marks the in-progress item with aria-current="step"`,()=>{let{container:e}=d(f(c,{children:f(t,{title:`Working on it`,status:`in-progress`})}));expect(e.querySelector(`[data-slot="timeline-item"]`)?.getAttribute(`aria-current`)).toBe(`step`)}),it(`forwards refs on the standalone subcomponents`,()=>{let e=m(),c=m(),u=m(),h=m(),g=m(),_=m(),v=m(),y=m();d(p(`ul`,{children:[f(t,{ref:e,title:`Item`}),f(r,{ref:c,date:`2024-01-01`}),f(i,{ref:u}),f(a,{ref:h,children:`Header`}),f(l,{ref:g,children:`Title`}),f(o,{ref:_,children:`Content`}),f(s,{ref:v}),f(n,{ref:y,children:`Description`})]})),expect(e.current?.tagName).toBe(`LI`),expect(c.current?.tagName).toBe(`TIME`),expect(u.current?.tagName).toBe(`DIV`),expect(h.current?.tagName).toBe(`DIV`),expect(g.current?.tagName).toBe(`H3`),expect(_.current?.tagName).toBe(`DIV`),expect(v.current?.tagName).toBe(`DIV`),expect(y.current?.tagName).toBe(`P`)})}),describe(`TimelineTime`,()=>{it(`formats a given date using the default format`,()=>{d(f(r,{date:new Date(2024,2,15)})),expect(u.getByText(`Mar 15, 2024`)).not.toBeNull()}),it(`prefers explicit children over the formatted date`,()=>{d(f(r,{date:new Date(2024,2,15),children:`Custom label`})),expect(u.getByText(`Custom label`)).not.toBeNull()}),it(`renders nothing for an invalid date and omits the dateTime attribute`,()=>{let{container:e}=d(f(r,{date:`not-a-date`})),t=e.querySelector(`[data-slot="timeline-time"]`);expect(t?.textContent).toBe(``),expect(t?.hasAttribute(`datetime`)).toBe(!1)}),it(`applies a custom Intl.DateTimeFormat`,()=>{d(f(r,{date:new Date(2024,2,15),format:{year:`numeric`,month:`long`,day:`numeric`}})),expect(u.getByText(`March 15, 2024`)).not.toBeNull()})});
2
2
  //# sourceMappingURL=timeline.spec.js.map
@@ -1,2 +1,2 @@
1
- import"../rolldown-runtime-Bdj-bS2b.js";import{n as e,t}from"../toggle-group-D0OIpZN-.js";import{a as n,n as r,r as i}from"../react.esm-BkhVXJ8s.js";import{jsx as a,jsxs as o}from"react/jsx-runtime";describe(`ToggleGroup`,()=>{it(`renders the root with default data attributes and applies them to items`,()=>{let{container:r}=i(o(t,{type:`single`,children:[a(e,{value:`bold`,children:`Bold`}),a(e,{value:`italic`,children:`Italic`})]})),s=r.querySelector(`[data-slot="toggle-group"]`),c=n.getByText(`Bold`);expect(s?.getAttribute(`data-variant`)).toBe(`ghost`),expect(s?.getAttribute(`data-color`)).toBe(`primary`),expect(s?.getAttribute(`data-size`)).toBe(`md`),expect(s?.getAttribute(`data-orientation`)).toBe(`horizontal`),expect(c.getAttribute(`data-slot`)).toBe(`toggle-group-item`),expect(c.getAttribute(`data-variant`)).toBe(`ghost`),expect(c.getAttribute(`data-color`)).toBe(`primary`),expect(c.getAttribute(`data-size`)).toBe(`md`)}),it(`toggles a single item as pressed and unpresses the previous item`,()=>{i(o(t,{type:`single`,children:[a(e,{value:`bold`,children:`Bold`}),a(e,{value:`italic`,children:`Italic`})]}));let s=n.getByText(`Bold`),c=n.getByText(`Italic`);r.click(s),expect(s.getAttribute(`data-state`)).toBe(`on`),expect(s.getAttribute(`role`)).toBe(`radio`),expect(s.getAttribute(`aria-checked`)).toBe(`true`),r.click(c),expect(c.getAttribute(`data-state`)).toBe(`on`),expect(s.getAttribute(`data-state`)).toBe(`off`)}),it(`allows multiple items to stay pressed when type is multiple`,()=>{i(o(t,{type:`multiple`,children:[a(e,{value:`bold`,children:`Bold`}),a(e,{value:`italic`,children:`Italic`})]}));let s=n.getByText(`Bold`),c=n.getByText(`Italic`);r.click(s),r.click(c),expect(s.getAttribute(`data-state`)).toBe(`on`),expect(c.getAttribute(`data-state`)).toBe(`on`)}),it(`calls onValueChange with the updated selection`,()=>{let s=vi.fn();i(o(t,{type:`single`,onValueChange:s,children:[a(e,{value:`bold`,children:`Bold`}),a(e,{value:`italic`,children:`Italic`})]})),r.click(n.getByText(`Italic`)),expect(s).toHaveBeenCalledWith(`italic`)}),it(`applies the vertical orientation attribute and class to the root`,()=>{let{container:n}=i(a(t,{type:`single`,orientation:`vertical`,children:a(e,{value:`bold`,children:`Bold`})})),r=n.querySelector(`[data-slot="toggle-group"]`);expect(r?.getAttribute(`data-orientation`)).toBe(`vertical`),expect(r?.className).toContain(`data-vertical:flex-col`)}),it(`exposes the spacing value as a data attribute and CSS variable`,()=>{let{container:n}=i(a(t,{type:`single`,spacing:2,children:a(e,{value:`bold`,children:`Bold`})})),r=n.querySelector(`[data-slot="toggle-group"]`);expect(r.getAttribute(`data-spacing`)).toBe(`2`),expect(r.style.getPropertyValue(`--gap`)).toBe(`2`)}),it(`lets root-level color and variant take precedence over an item-level override`,()=>{i(a(t,{type:`single`,variant:`outline`,color:`red`,children:a(e,{value:`bold`,variant:`secondary`,color:`blue`,children:`Bold`})}));let r=n.getByText(`Bold`);expect(r.getAttribute(`data-variant`)).toBe(`outline`),expect(r.getAttribute(`data-color`)).toBe(`red`)}),it(`disables an item and prevents it from toggling on`,()=>{let o=vi.fn();i(a(t,{type:`single`,onValueChange:o,children:a(e,{value:`bold`,disabled:!0,children:`Bold`})}));let s=n.getByText(`Bold`);expect(s.disabled).toBe(!0),r.click(s),expect(o).not.toHaveBeenCalled()})});
1
+ import"../rolldown-runtime-Bdj-bS2b.js";import{n as e,t}from"../toggle-group-D0OIpZN-.js";import{a as n,n as r,r as i}from"../react.esm-dE9nuHcL.js";import{jsx as a,jsxs as o}from"react/jsx-runtime";describe(`ToggleGroup`,()=>{it(`renders the root with default data attributes and applies them to items`,()=>{let{container:r}=i(o(t,{type:`single`,children:[a(e,{value:`bold`,children:`Bold`}),a(e,{value:`italic`,children:`Italic`})]})),s=r.querySelector(`[data-slot="toggle-group"]`),c=n.getByText(`Bold`);expect(s?.getAttribute(`data-variant`)).toBe(`ghost`),expect(s?.getAttribute(`data-color`)).toBe(`primary`),expect(s?.getAttribute(`data-size`)).toBe(`md`),expect(s?.getAttribute(`data-orientation`)).toBe(`horizontal`),expect(c.getAttribute(`data-slot`)).toBe(`toggle-group-item`),expect(c.getAttribute(`data-variant`)).toBe(`ghost`),expect(c.getAttribute(`data-color`)).toBe(`primary`),expect(c.getAttribute(`data-size`)).toBe(`md`)}),it(`toggles a single item as pressed and unpresses the previous item`,()=>{i(o(t,{type:`single`,children:[a(e,{value:`bold`,children:`Bold`}),a(e,{value:`italic`,children:`Italic`})]}));let s=n.getByText(`Bold`),c=n.getByText(`Italic`);r.click(s),expect(s.getAttribute(`data-state`)).toBe(`on`),expect(s.getAttribute(`role`)).toBe(`radio`),expect(s.getAttribute(`aria-checked`)).toBe(`true`),r.click(c),expect(c.getAttribute(`data-state`)).toBe(`on`),expect(s.getAttribute(`data-state`)).toBe(`off`)}),it(`allows multiple items to stay pressed when type is multiple`,()=>{i(o(t,{type:`multiple`,children:[a(e,{value:`bold`,children:`Bold`}),a(e,{value:`italic`,children:`Italic`})]}));let s=n.getByText(`Bold`),c=n.getByText(`Italic`);r.click(s),r.click(c),expect(s.getAttribute(`data-state`)).toBe(`on`),expect(c.getAttribute(`data-state`)).toBe(`on`)}),it(`calls onValueChange with the updated selection`,()=>{let s=vi.fn();i(o(t,{type:`single`,onValueChange:s,children:[a(e,{value:`bold`,children:`Bold`}),a(e,{value:`italic`,children:`Italic`})]})),r.click(n.getByText(`Italic`)),expect(s).toHaveBeenCalledWith(`italic`)}),it(`applies the vertical orientation attribute and class to the root`,()=>{let{container:n}=i(a(t,{type:`single`,orientation:`vertical`,children:a(e,{value:`bold`,children:`Bold`})})),r=n.querySelector(`[data-slot="toggle-group"]`);expect(r?.getAttribute(`data-orientation`)).toBe(`vertical`),expect(r?.className).toContain(`data-vertical:flex-col`)}),it(`exposes the spacing value as a data attribute and CSS variable`,()=>{let{container:n}=i(a(t,{type:`single`,spacing:2,children:a(e,{value:`bold`,children:`Bold`})})),r=n.querySelector(`[data-slot="toggle-group"]`);expect(r.getAttribute(`data-spacing`)).toBe(`2`),expect(r.style.getPropertyValue(`--gap`)).toBe(`2`)}),it(`lets root-level color and variant take precedence over an item-level override`,()=>{i(a(t,{type:`single`,variant:`outline`,color:`red`,children:a(e,{value:`bold`,variant:`secondary`,color:`blue`,children:`Bold`})}));let r=n.getByText(`Bold`);expect(r.getAttribute(`data-variant`)).toBe(`outline`),expect(r.getAttribute(`data-color`)).toBe(`red`)}),it(`disables an item and prevents it from toggling on`,()=>{let o=vi.fn();i(a(t,{type:`single`,onValueChange:o,children:a(e,{value:`bold`,disabled:!0,children:`Bold`})}));let s=n.getByText(`Bold`);expect(s.disabled).toBe(!0),r.click(s),expect(o).not.toHaveBeenCalled()})});
2
2
  //# sourceMappingURL=toggle-group.spec.js.map
@@ -1,2 +1,2 @@
1
- import"../rolldown-runtime-Bdj-bS2b.js";import{t as e}from"../toggle-DJJkcqDy.js";import{a as t,n,r}from"../react.esm-BkhVXJ8s.js";import{jsx as i}from"react/jsx-runtime";describe(`Toggle`,()=>{it(`renders with the default ghost variant, primary color and md size`,()=>{let{container:t}=r(i(e,{"aria-label":`Bold`})),n=t.querySelector(`[data-slot="toggle"]`);expect(n).not.toBeNull(),expect(n?.getAttribute(`data-variant`)).toBe(`ghost`),expect(n?.getAttribute(`data-color`)).toBe(`primary`),expect(n?.getAttribute(`data-size`)).toBe(`md`),expect(n?.getAttribute(`aria-pressed`)).toBe(`false`)}),it(`toggles the pressed state when clicked`,()=>{r(i(e,{"aria-label":`Bold`}));let a=t.getByRole(`button`,{name:`Bold`});n.click(a),expect(a.getAttribute(`aria-pressed`)).toBe(`true`),expect(a.getAttribute(`data-state`)).toBe(`on`)}),it(`applies the requested variant and size classes`,()=>{let{container:t}=r(i(e,{variant:`outline`,size:`lg`,"aria-label":`Italic`})),n=t.querySelector(`[data-slot="toggle"]`);expect(n?.getAttribute(`data-variant`)).toBe(`outline`),expect(n?.getAttribute(`data-size`)).toBe(`lg`),expect(n?.className).toContain(`h-10`)}),it(`applies the color variant css variables`,()=>{let{container:t}=r(i(e,{color:`red`,"aria-label":`Danger`})),n=t.querySelector(`[data-slot="toggle"]`);expect(n?.getAttribute(`data-color`)).toBe(`red`),expect(n?.className).toContain(`[--button-solid:var(--red)]`)}),it(`does not respond to clicks when disabled`,()=>{r(i(e,{disabled:!0,"aria-label":`Disabled toggle`}));let a=t.getByRole(`button`,{name:`Disabled toggle`});n.click(a),expect(a.getAttribute(`aria-pressed`)).toBe(`false`),expect(a.hasAttribute(`disabled`)).toBe(!0)}),it(`forwards ref to the underlying button element`,()=>{let t={current:null};r(i(e,{ref:t,"aria-label":`Ref toggle`})),expect(t.current).toBeInstanceOf(HTMLButtonElement)})});
1
+ import"../rolldown-runtime-Bdj-bS2b.js";import{t as e}from"../toggle-DJJkcqDy.js";import{a as t,n,r}from"../react.esm-dE9nuHcL.js";import{jsx as i}from"react/jsx-runtime";describe(`Toggle`,()=>{it(`renders with the default ghost variant, primary color and md size`,()=>{let{container:t}=r(i(e,{"aria-label":`Bold`})),n=t.querySelector(`[data-slot="toggle"]`);expect(n).not.toBeNull(),expect(n?.getAttribute(`data-variant`)).toBe(`ghost`),expect(n?.getAttribute(`data-color`)).toBe(`primary`),expect(n?.getAttribute(`data-size`)).toBe(`md`),expect(n?.getAttribute(`aria-pressed`)).toBe(`false`)}),it(`toggles the pressed state when clicked`,()=>{r(i(e,{"aria-label":`Bold`}));let a=t.getByRole(`button`,{name:`Bold`});n.click(a),expect(a.getAttribute(`aria-pressed`)).toBe(`true`),expect(a.getAttribute(`data-state`)).toBe(`on`)}),it(`applies the requested variant and size classes`,()=>{let{container:t}=r(i(e,{variant:`outline`,size:`lg`,"aria-label":`Italic`})),n=t.querySelector(`[data-slot="toggle"]`);expect(n?.getAttribute(`data-variant`)).toBe(`outline`),expect(n?.getAttribute(`data-size`)).toBe(`lg`),expect(n?.className).toContain(`h-10`)}),it(`applies the color variant css variables`,()=>{let{container:t}=r(i(e,{color:`red`,"aria-label":`Danger`})),n=t.querySelector(`[data-slot="toggle"]`);expect(n?.getAttribute(`data-color`)).toBe(`red`),expect(n?.className).toContain(`[--button-solid:var(--red)]`)}),it(`does not respond to clicks when disabled`,()=>{r(i(e,{disabled:!0,"aria-label":`Disabled toggle`}));let a=t.getByRole(`button`,{name:`Disabled toggle`});n.click(a),expect(a.getAttribute(`aria-pressed`)).toBe(`false`),expect(a.hasAttribute(`disabled`)).toBe(!0)}),it(`forwards ref to the underlying button element`,()=>{let t={current:null};r(i(e,{ref:t,"aria-label":`Ref toggle`})),expect(t.current).toBeInstanceOf(HTMLButtonElement)})});
2
2
  //# sourceMappingURL=toggle.spec.js.map
@@ -1,2 +1,2 @@
1
- import"../rolldown-runtime-Bdj-bS2b.js";import{a as e,i as t,n,r,t as i}from"../tooltip-CNUNWZvs.js";import{a,n as o,o as s,r as c}from"../react.esm-BkhVXJ8s.js";import{jsx as l,jsxs as u}from"react/jsx-runtime";var ResizeObserverStub=class{observe(){}unobserve(){}disconnect(){}};beforeAll(()=>{window.ResizeObserver=ResizeObserverStub});function renderTooltip(){return c(l(r,{children:l(i,{label:`Save changes`,children:l(`button`,{type:`button`,children:`Save`})})}))}describe(`Tooltip`,()=>{it(`renders the trigger and keeps the tooltip content hidden until shown`,()=>{renderTooltip(),expect(a.getByRole(`button`,{name:`Save`})).not.toBeNull(),expect(a.queryByRole(`tooltip`)).toBeNull()}),it(`shows the tooltip content with the label when the trigger receives focus`,async()=>{renderTooltip(),o.focus(a.getByRole(`button`,{name:`Save`}));let e=await a.findByRole(`tooltip`);expect(e.textContent).toBe(`Save changes`),expect(e.getAttribute(`data-slot`)).toBe(`tooltip-content`),expect(e.className).toContain(`bg-foreground`)}),it(`hides the tooltip content when the trigger loses focus`,async()=>{renderTooltip();let e=a.getByRole(`button`,{name:`Save`});o.focus(e),await a.findByRole(`tooltip`),o.blur(e),await s(()=>expect(a.queryByRole(`tooltip`)).toBeNull())}),it(`marks the trigger with the tooltip data-slot`,()=>{let{container:e}=renderTooltip();expect(e.querySelector(`[data-slot="tooltip-trigger"]`)).not.toBeNull()}),it(`renders an arrow element inside the open content`,async()=>{renderTooltip(),o.focus(a.getByRole(`button`,{name:`Save`}));let e=await a.findByRole(`tooltip`);expect(e.querySelector(`svg`)).not.toBeNull()}),it(`does not render tooltip primitives and requires no provider when disabled`,()=>{c(l(i,{label:`Never shown`,disabled:!0,children:l(`button`,{type:`button`,children:`Plain trigger`})}));let e=a.getByRole(`button`,{name:`Plain trigger`});o.focus(e),expect(a.queryByRole(`tooltip`)).toBeNull(),expect(a.queryByText(`Never shown`)).toBeNull()}),it(`supports manual composition via TooltipRoot, TooltipTrigger and TooltipContent`,async()=>{c(l(r,{children:u(t,{defaultOpen:!0,children:[l(e,{children:`Trigger text`}),l(n,{children:`Composed content`})]})}));let i=await a.findByRole(`tooltip`);expect(i.textContent).toBe(`Composed content`),expect(a.getByText(`Trigger text`).getAttribute(`data-slot`)).toBe(`tooltip-trigger`)})});
1
+ import"../rolldown-runtime-Bdj-bS2b.js";import{a as e,i as t,n,r,t as i}from"../tooltip-CNUNWZvs.js";import{a,n as o,o as s,r as c}from"../react.esm-dE9nuHcL.js";import{jsx as l,jsxs as u}from"react/jsx-runtime";var ResizeObserverStub=class{observe(){}unobserve(){}disconnect(){}};beforeAll(()=>{window.ResizeObserver=ResizeObserverStub});function renderTooltip(){return c(l(r,{children:l(i,{label:`Save changes`,children:l(`button`,{type:`button`,children:`Save`})})}))}describe(`Tooltip`,()=>{it(`renders the trigger and keeps the tooltip content hidden until shown`,()=>{renderTooltip(),expect(a.getByRole(`button`,{name:`Save`})).not.toBeNull(),expect(a.queryByRole(`tooltip`)).toBeNull()}),it(`shows the tooltip content with the label when the trigger receives focus`,async()=>{renderTooltip(),o.focus(a.getByRole(`button`,{name:`Save`}));let e=await a.findByRole(`tooltip`);expect(e.textContent).toBe(`Save changes`),expect(e.getAttribute(`data-slot`)).toBe(`tooltip-content`),expect(e.className).toContain(`bg-foreground`)}),it(`hides the tooltip content when the trigger loses focus`,async()=>{renderTooltip();let e=a.getByRole(`button`,{name:`Save`});o.focus(e),await a.findByRole(`tooltip`),o.blur(e),await s(()=>expect(a.queryByRole(`tooltip`)).toBeNull())}),it(`marks the trigger with the tooltip data-slot`,()=>{let{container:e}=renderTooltip();expect(e.querySelector(`[data-slot="tooltip-trigger"]`)).not.toBeNull()}),it(`renders an arrow element inside the open content`,async()=>{renderTooltip(),o.focus(a.getByRole(`button`,{name:`Save`}));let e=await a.findByRole(`tooltip`);expect(e.querySelector(`svg`)).not.toBeNull()}),it(`does not render tooltip primitives and requires no provider when disabled`,()=>{c(l(i,{label:`Never shown`,disabled:!0,children:l(`button`,{type:`button`,children:`Plain trigger`})}));let e=a.getByRole(`button`,{name:`Plain trigger`});o.focus(e),expect(a.queryByRole(`tooltip`)).toBeNull(),expect(a.queryByText(`Never shown`)).toBeNull()}),it(`supports manual composition via TooltipRoot, TooltipTrigger and TooltipContent`,async()=>{c(l(r,{children:u(t,{defaultOpen:!0,children:[l(e,{children:`Trigger text`}),l(n,{children:`Composed content`})]})}));let i=await a.findByRole(`tooltip`);expect(i.textContent).toBe(`Composed content`),expect(a.getByText(`Trigger text`).getAttribute(`data-slot`)).toBe(`tooltip-trigger`)})});
2
2
  //# sourceMappingURL=tooltip.spec.js.map
@@ -1,2 +1,2 @@
1
- import"../rolldown-runtime-Bdj-bS2b.js";import{t as e}from"../unstyled-button-lGbDJA55.js";import{a as t,n,r}from"../react.esm-BkhVXJ8s.js";import{jsx as i}from"react/jsx-runtime";describe(`UnstyledButton`,()=>{it(`renders a button with type="button" and data-slot by default`,()=>{let{container:t}=r(i(e,{children:`Click me`})),n=t.querySelector(`[data-slot="unstyled-button"]`);expect(n?.tagName).toBe(`BUTTON`),expect(n?.getAttribute(`type`)).toBe(`button`),expect(n?.className).toContain(`cursor-pointer`)}),it(`respects an explicit type prop`,()=>{let{container:t}=r(i(e,{type:`submit`,children:`Submit`}));expect(t.querySelector(`[data-slot="unstyled-button"]`)?.getAttribute(`type`)).toBe(`submit`)}),it(`renders the child element without a type attribute when asChild is true`,()=>{let{container:t}=r(i(e,{asChild:!0,children:i(`a`,{href:`/somewhere`,children:`Link button`})})),n=t.querySelector(`[data-slot="unstyled-button"]`);expect(n?.tagName).toBe(`A`),expect(n?.getAttribute(`type`)).toBeNull(),expect(n?.getAttribute(`href`)).toBe(`/somewhere`)}),it(`fires onClick when clicked`,()=>{let a=vi.fn();r(i(e,{onClick:a,children:`Click me`})),n.click(t.getByText(`Click me`)),expect(a).toHaveBeenCalledTimes(1)}),it(`merges a custom className with the base classes`,()=>{let{container:t}=r(i(e,{className:`custom-btn`,children:`Styled`}));expect(t.querySelector(`[data-slot="unstyled-button"]`)?.className).toContain(`custom-btn`)}),it(`forwards ref to the underlying button element`,()=>{let t={current:null};r(i(e,{ref:t,children:`Ref target`})),expect(t.current).toBeInstanceOf(HTMLButtonElement)})});
1
+ import"../rolldown-runtime-Bdj-bS2b.js";import{t as e}from"../unstyled-button-lGbDJA55.js";import{a as t,n,r}from"../react.esm-dE9nuHcL.js";import{jsx as i}from"react/jsx-runtime";describe(`UnstyledButton`,()=>{it(`renders a button with type="button" and data-slot by default`,()=>{let{container:t}=r(i(e,{children:`Click me`})),n=t.querySelector(`[data-slot="unstyled-button"]`);expect(n?.tagName).toBe(`BUTTON`),expect(n?.getAttribute(`type`)).toBe(`button`),expect(n?.className).toContain(`cursor-pointer`)}),it(`respects an explicit type prop`,()=>{let{container:t}=r(i(e,{type:`submit`,children:`Submit`}));expect(t.querySelector(`[data-slot="unstyled-button"]`)?.getAttribute(`type`)).toBe(`submit`)}),it(`renders the child element without a type attribute when asChild is true`,()=>{let{container:t}=r(i(e,{asChild:!0,children:i(`a`,{href:`/somewhere`,children:`Link button`})})),n=t.querySelector(`[data-slot="unstyled-button"]`);expect(n?.tagName).toBe(`A`),expect(n?.getAttribute(`type`)).toBeNull(),expect(n?.getAttribute(`href`)).toBe(`/somewhere`)}),it(`fires onClick when clicked`,()=>{let a=vi.fn();r(i(e,{onClick:a,children:`Click me`})),n.click(t.getByText(`Click me`)),expect(a).toHaveBeenCalledTimes(1)}),it(`merges a custom className with the base classes`,()=>{let{container:t}=r(i(e,{className:`custom-btn`,children:`Styled`}));expect(t.querySelector(`[data-slot="unstyled-button"]`)?.className).toContain(`custom-btn`)}),it(`forwards ref to the underlying button element`,()=>{let t={current:null};r(i(e,{ref:t,children:`Ref target`})),expect(t.current).toBeInstanceOf(HTMLButtonElement)})});
2
2
  //# sourceMappingURL=unstyled-button.spec.js.map
@@ -1,2 +1,2 @@
1
- import"../rolldown-runtime-Bdj-bS2b.js";import{n as e,t}from"../visibility-twHwe9Xp.js";import{a as n,r,t as i}from"../react.esm-BkhVXJ8s.js";import{jsx as a}from"react/jsx-runtime";describe(`Visibility`,()=>{it(`keeps HiddenFrom children visible below the given breakpoint`,()=>{globalThis.setTestViewportWidth(320),r(a(t,{breakpoint:`md`,children:a(`button`,{type:`button`,children:`Mobile only`})}));let e=n.getByText(`Mobile only`);expect(e.getAttribute(`style`)??``).not.toContain(`display: none`)}),it(`hides HiddenFrom children at or above the given breakpoint`,()=>{globalThis.setTestViewportWidth(1024),r(a(t,{breakpoint:`md`,children:a(`button`,{type:`button`,children:`Mobile only`})}));let e=n.getByText(`Mobile only`);expect(e.getAttribute(`style`)).toContain(`display: none`)}),it(`keeps VisibleFrom children visible at or above the given breakpoint`,()=>{globalThis.setTestViewportWidth(1024),r(a(e,{breakpoint:`md`,children:a(`button`,{type:`button`,children:`Desktop only`})}));let t=n.getByText(`Desktop only`);expect(t.getAttribute(`style`)??``).not.toContain(`display: none`)}),it(`hides VisibleFrom children below the given breakpoint`,()=>{globalThis.setTestViewportWidth(320),r(a(e,{breakpoint:`md`,children:a(`button`,{type:`button`,children:`Desktop only`})}));let t=n.getByText(`Desktop only`);expect(t.getAttribute(`style`)).toContain(`display: none`)}),it(`toggles HiddenFrom visibility as the viewport crosses the breakpoint`,()=>{globalThis.setTestViewportWidth(320),r(a(t,{breakpoint:`md`,children:a(`button`,{type:`button`,children:`Responsive`})}));let e=n.getByText(`Responsive`);expect(e.getAttribute(`style`)??``).not.toContain(`display: none`),i(()=>{globalThis.setTestViewportWidth(1024)}),expect(e.getAttribute(`style`)).toContain(`display: none`)}),it(`renders nothing extra when there are no children`,()=>{globalThis.setTestViewportWidth(1024);let{container:e}=r(a(t,{breakpoint:`md`}));expect(e.innerHTML).toBe(``)})});
1
+ import"../rolldown-runtime-Bdj-bS2b.js";import{n as e,t}from"../visibility-twHwe9Xp.js";import{a as n,r,t as i}from"../react.esm-dE9nuHcL.js";import{jsx as a}from"react/jsx-runtime";describe(`Visibility`,()=>{it(`keeps HiddenFrom children visible below the given breakpoint`,()=>{globalThis.setTestViewportWidth(320),r(a(t,{breakpoint:`md`,children:a(`button`,{type:`button`,children:`Mobile only`})}));let e=n.getByText(`Mobile only`);expect(e.getAttribute(`style`)??``).not.toContain(`display: none`)}),it(`hides HiddenFrom children at or above the given breakpoint`,()=>{globalThis.setTestViewportWidth(1024),r(a(t,{breakpoint:`md`,children:a(`button`,{type:`button`,children:`Mobile only`})}));let e=n.getByText(`Mobile only`);expect(e.getAttribute(`style`)).toContain(`display: none`)}),it(`keeps VisibleFrom children visible at or above the given breakpoint`,()=>{globalThis.setTestViewportWidth(1024),r(a(e,{breakpoint:`md`,children:a(`button`,{type:`button`,children:`Desktop only`})}));let t=n.getByText(`Desktop only`);expect(t.getAttribute(`style`)??``).not.toContain(`display: none`)}),it(`hides VisibleFrom children below the given breakpoint`,()=>{globalThis.setTestViewportWidth(320),r(a(e,{breakpoint:`md`,children:a(`button`,{type:`button`,children:`Desktop only`})}));let t=n.getByText(`Desktop only`);expect(t.getAttribute(`style`)).toContain(`display: none`)}),it(`toggles HiddenFrom visibility as the viewport crosses the breakpoint`,()=>{globalThis.setTestViewportWidth(320),r(a(t,{breakpoint:`md`,children:a(`button`,{type:`button`,children:`Responsive`})}));let e=n.getByText(`Responsive`);expect(e.getAttribute(`style`)??``).not.toContain(`display: none`),i(()=>{globalThis.setTestViewportWidth(1024)}),expect(e.getAttribute(`style`)).toContain(`display: none`)}),it(`renders nothing extra when there are no children`,()=>{globalThis.setTestViewportWidth(1024);let{container:e}=r(a(t,{breakpoint:`md`}));expect(e.innerHTML).toBe(``)})});
2
2
  //# sourceMappingURL=visibility.spec.js.map
@@ -1,2 +1,2 @@
1
- import"./rolldown-runtime-Bdj-bS2b.js";import{t as e}from"./utils-DP9KtG7I.js";import{t}from"./button-oI3hbOgp.js";import{t as n}from"./checkbox-DPvW_m7k.js";import{t as r}from"./input-BhEEV_nn.js";import{i,n as a,t as o}from"./input-group-BUTp8vYe.js";import{h as s,i as c,n as l,r as u,t as d}from"./dropdown-menu-zRuQQS5S.js";import{i as f,l as p,n as m,r as h,t as g,u as _}from"./select-C3QYNv4t.js";import{a as v,c as y,i as b,l as x,n as S,s as C,t as w}from"./table-CuE0Aenj.js";import{IconArrowsSort as T,IconChevronLeft as E,IconChevronRight as ee,IconChevronsLeft as te,IconChevronsRight as D,IconColumns3 as O,IconSortAscending as k,IconSortDescending as A}from"@tabler/icons-react";import{jsx as j,jsxs as M}from"react/jsx-runtime";import*as N from"react";import{columnFilteringFeature as P,columnVisibilityFeature as F,createFilteredRowModel as I,createPaginatedRowModel as L,createSortedRowModel as R,filterFn_arrIncludes as z,filterFn_equals as B,filterFn_inDateRange as V,filterFn_inNumberRange as H,filterFn_includesString as U,filterFn_weakEquals as W,flexRender as G,rowPaginationFeature as K,rowSelectionFeature as q,rowSortingFeature as J,sortFn_alphanumeric as Y,sortFn_basic as X,sortFn_datetime as Z,sortFn_text as ne,tableFeatures as re,useTable as ie}from"@tanstack/react-table";const ae=re({columnFilteringFeature:P,rowSortingFeature:J,rowPaginationFeature:K,rowSelectionFeature:q,columnVisibilityFeature:F,filteredRowModel:I(),sortedRowModel:R(),paginatedRowModel:L(),filterFns:{includesString:U,inNumberRange:H,equals:B,arrIncludes:z,inDateRange:V,weakEquals:W},sortFns:{alphanumeric:Y,text:ne,datetime:Z,basic:X}}),Q={filterPlaceholder:`Filtrar linhas...`,filterColumnSelectorLabel:`Coluna para filtrar`,emptyMessage:`Nenhum resultado.`,columnsButton:`Colunas`,rowsPerPage:`Linhas por página`,pageOf:(e,t)=>`Página ${e} de ${t}`,goToFirstPage:`Ir para a primeira página`,goToPreviousPage:`Ir para a página anterior`,goToNextPage:`Ir para a próxima página`,goToLastPage:`Ir para a última página`,selectAllRows:`Selecionar todas as linhas`,selectRow:`Selecionar linha`},$=N.createContext(null);function useDataTableContext(){let e=N.useContext($);if(!e)throw Error(`useDataTableContext must be used within <DataTableRoot>`);return e}function useOptionalDataTableContext(){return N.useContext($)}function renderToolbarActions(e,t){return typeof e==`function`?e(t):e}function getColumnLabel(e){return e?e.columnDef.meta?.label??e.id:``}function useDataTable({columns:e,data:t,getRowId:n,pageSize:r=10,enableRowSelection:i=!1,enableSorting:a=!1,enablePagination:o=!1,labels:s}){let[c,l]=N.useState([]),[u,d]=N.useState([]),[f,p]=N.useState({}),[m,h]=N.useState({pageIndex:0,pageSize:r}),[g,_]=N.useState({}),v=N.useMemo(()=>({...Q,...s}),[s]),y=N.useMemo(()=>!i||e.some(e=>e.id===`select`)?e:[createDataTableSelectColumn({labels:{selectAllRows:v.selectAllRows,selectRow:v.selectRow}}),...e],[e,i,v.selectAllRows,v.selectRow]);return ie({features:ae,data:t,columns:y,getRowId:n,enableRowSelection:i,enableSorting:a,manualPagination:!o,state:{sorting:c,columnFilters:u,columnVisibility:f,rowSelection:g,pagination:m},onSortingChange:l,onColumnFiltersChange:d,onColumnVisibilityChange:p,onPaginationChange:h,onRowSelectionChange:_})}function DataTableRootControlled({table:t,labels:n,className:r,children:i}){let a={table:t,labels:N.useMemo(()=>({...Q,...n}),[n])};return j($.Provider,{value:a,children:j(`div`,{className:e(`flex w-full flex-col gap-4`,r),children:i})})}function DataTableRootUncontrolled({columns:e,data:t,getRowId:n,pageSize:r,enableRowSelection:i,enableSorting:a,enablePagination:o,labels:s,className:c,children:l}){return j(DataTableRootControlled,{table:useDataTable({columns:e,data:t,getRowId:n,pageSize:r,enableRowSelection:i,enableSorting:a,enablePagination:o,labels:s}),labels:s,className:c,children:l})}function DataTableRoot(e){if(`table`in e&&e.table!==void 0){let{table:t,labels:n,className:r,children:i}=e;return j(DataTableRootControlled,{table:t,labels:n,className:r,children:i})}let{columns:t,data:n,getRowId:r,pageSize:i,enableRowSelection:a,enableSorting:o,enablePagination:s,labels:c,className:l,children:u}=e;return j(DataTableRootUncontrolled,{columns:t,data:n,getRowId:r,pageSize:i,enableRowSelection:a,enableSorting:o,enablePagination:s,labels:c,className:l,children:u})}function DataTableColumnHeader({column:n,title:r,className:i,...a}){if(!n.getCanSort())return j(`div`,{className:e(`inline-flex items-center gap-1`,i),...a,children:r});let o=n.getIsSorted();return M(`div`,{className:e(`inline-flex items-center gap-1`,i),...a,children:[r,j(t,{variant:`ghost`,color:`zinc`,size:`icon-xs`,onClick:()=>{if(o===`desc`)return n.clearSorting();n.toggleSorting(o===`asc`)},children:j(o===`desc`?A:o===`asc`?k:T,{className:`size-4`,"data-icon":`inline-end`})})]})}function DataTableViewOptions({table:n,label:r,className:i,...a}){let o=useOptionalDataTableContext(),f=n??o?.table;if(!f)throw Error("DataTableViewOptions requires a `table` prop or to be rendered within <DataTableRoot>");let p=r??o?.labels.columnsButton??Q.columnsButton,m=f.getAllColumns().filter(e=>e.accessorFn!==void 0&&e.getCanHide());return m.length===0?null:M(d,{children:[j(s,{asChild:!0,children:M(t,{type:`button`,variant:`outline`,color:`zinc`,size:`sm`,className:e(`ml-auto`,i),...a,children:[j(O,{"data-icon":`inline-start`}),p]})}),j(u,{align:`end`,className:`w-44`,children:j(c,{children:m.map(e=>j(l,{checked:e.getIsVisible(),onCheckedChange:t=>e.toggleVisibility(!!t),children:e.id},e.id))})})]})}function DataTableToolbar({filterColumns:t,showColumnVisibility:n,toolbarActions:s,labels:c,className:l}){let{table:u,labels:d}=useDataTableContext(),f=N.useMemo(()=>c?{...d,...c}:d,[d,c]),p=N.useMemo(()=>t?Array.isArray(t)?t:[t]:[],[t]),m=renderToolbarActions(s,u),h=p.length>0,[g,_]=N.useState(p[0]);if(N.useEffect(()=>{if(p.length===0){_(void 0);return}_(e=>e&&p.includes(e)?e:p[0])},[p]),!h&&!n&&!m)return null;let v=g?u.getColumn(g):void 0,y=v?.getFilterValue()??``,handleColumnChange=e=>{e!==g&&(g&&u.getColumn(g)?.setFilterValue(void 0),_(e))};return M(`div`,{className:e(`flex flex-col gap-2 sm:flex-row sm:items-center`,l),children:[h&&v?p.length>1?M(o,{className:`h-8 w-full sm:max-w-md`,children:[j(a,{align:`inline-start`,className:`pr-0`,children:j(`select`,{"aria-label":f.filterColumnSelectorLabel,value:g,onChange:e=>handleColumnChange(e.target.value),className:`cursor-pointer appearance-none border-0 bg-transparent pr-1 text-sm font-medium text-foreground outline-none focus:outline-none`,children:p.map(e=>j(`option`,{value:e,children:getColumnLabel(u.getColumn(e))},e))})}),j(i,{placeholder:f.filterPlaceholder,value:y,onChange:e=>v.setFilterValue(e.target.value)})]}):j(r,{placeholder:f.filterPlaceholder,value:y,onChange:e=>v.setFilterValue(e.target.value),className:`h-8 w-full sm:max-w-xs`}):null,M(`div`,{className:`flex flex-1 items-center justify-end gap-2`,children:[m,n?j(DataTableViewOptions,{table:u,label:f.columnsButton}):null]})]})}function DataTableHeader({className:e}={}){let{table:t}=useDataTableContext();return j(y,{className:e,children:t.getHeaderGroups().map(e=>j(x,{children:e.headers.map(e=>j(C,{colSpan:e.colSpan,children:e.isPlaceholder?null:G(e.column.columnDef.header,e.getContext())},e.id))},e.id))})}function DataTableBody({emptyMessage:e,className:t}={}){let{table:n,labels:r}=useDataTableContext(),i=n.getRowModel().rows,a=n.getVisibleLeafColumns().length,o=e??r.emptyMessage;return j(S,{className:t,children:i.length===0?j(x,{children:j(b,{colSpan:a,className:`h-24 text-center`,children:o})}):i.map(e=>j(x,{"data-state":e.getIsSelected()?`selected`:void 0,children:e.getVisibleCells().map(e=>j(b,{children:G(e.column.columnDef.cell,e.getContext())},e.id))},e.id))})}function DataTablePagination({table:n,pageSizeOptions:r=[10,20,30,40,50],labels:i,className:a,...o}){let s=useOptionalDataTableContext(),c=n??s?.table;if(!c)throw Error("DataTablePagination requires a `table` prop or to be rendered within <DataTableRoot>");let l=N.useMemo(()=>({...Q,...s?.labels,...i}),[s?.labels,i]),u=c.getPageCount(),d=Math.max(u,1),v=c.state.pagination.pageIndex;return j(`div`,{className:e(`flex items-center justify-end gap-4 px-2`,a),...o,children:M(`div`,{className:`flex items-center gap-6 lg:gap-8`,children:[M(`div`,{className:`hidden items-center gap-2 sm:flex`,children:[j(`p`,{className:`text-sm font-medium`,children:l.rowsPerPage}),M(g,{value:`${c.state.pagination.pageSize}`,onValueChange:e=>c.setPageSize(Number(e)),children:[j(p,{size:`sm`,className:`h-8 w-20`,children:j(_,{})}),j(m,{side:`top`,children:j(h,{children:r.map(e=>j(f,{value:`${e}`,children:e},e))})})]})]}),j(`div`,{className:`text-sm font-medium`,children:l.pageOf(v+1,d)}),M(`div`,{className:`flex items-center gap-1`,children:[j(t,{type:`button`,variant:`secondary`,size:`icon-sm`,className:`hidden lg:inline-flex`,onClick:()=>c.setPageIndex(0),disabled:!c.getCanPreviousPage(),"aria-label":l.goToFirstPage,children:j(te,{})}),j(t,{type:`button`,variant:`secondary`,size:`icon-sm`,onClick:()=>c.previousPage(),disabled:!c.getCanPreviousPage(),"aria-label":l.goToPreviousPage,children:j(E,{})}),j(t,{type:`button`,variant:`secondary`,size:`icon-sm`,onClick:()=>c.nextPage(),disabled:!c.getCanNextPage(),"aria-label":l.goToNextPage,children:j(ee,{})}),j(t,{type:`button`,variant:`secondary`,size:`icon-sm`,className:`hidden lg:inline-flex`,onClick:()=>c.setPageIndex(u-1),disabled:!c.getCanNextPage(),"aria-label":l.goToLastPage,children:j(D,{})})]})]})})}function createDataTableSelectColumn(e){let t=e?.labels?.selectAllRows??Q.selectAllRows,r=e?.labels?.selectRow??Q.selectRow;return{id:`select`,enableSorting:!1,enableHiding:!1,header:({table:e})=>j(n,{"aria-label":t,checked:e.getIsAllPageRowsSelected()||e.getIsSomePageRowsSelected()&&`indeterminate`,onCheckedChange:t=>e.toggleAllPageRowsSelected(!!t)}),cell:({row:e})=>j(n,{"aria-label":r,checked:e.getIsSelected()||e.getIsSomeSelected()&&`indeterminate`,disabled:!e.getCanSelect(),onCheckedChange:t=>e.toggleSelected(!!t)})}}function DataTable({columns:e,data:t,getRowId:n,filterColumns:r,pageSize:i=10,pageSizeOptions:a,enableRowSelection:o=!1,enableSorting:s=!1,showPagination:c=!1,showColumnVisibility:l=!1,toolbarActions:u,labels:d,className:f,tableClassName:p,variant:m}){return M(DataTableRoot,{columns:e,data:t,getRowId:n,pageSize:i,enableRowSelection:o,enableSorting:s,enablePagination:c,labels:d,className:f,children:[j(DataTableToolbar,{filterColumns:r,showColumnVisibility:l,toolbarActions:u}),j(v,{children:M(w,{className:p,variant:m,children:[j(DataTableHeader,{}),j(DataTableBody,{})]})}),c?j(DataTablePagination,{pageSizeOptions:a}):null]})}export{DataTablePagination as a,DataTableViewOptions as c,useDataTable as d,useDataTableContext as f,DataTableHeader as i,createDataTableSelectColumn as l,DataTableBody as n,DataTableRoot as o,DataTableColumnHeader as r,DataTableToolbar as s,DataTable as t,Q as u};
2
- //# sourceMappingURL=data-table-tnfPcXqc.js.map
1
+ import"./rolldown-runtime-Bdj-bS2b.js";import{t as e}from"./utils-DP9KtG7I.js";import{t}from"./button-oI3hbOgp.js";import{t as n}from"./checkbox-DPvW_m7k.js";import{t as r}from"./input-CJLsPlXh.js";import{i,n as a,t as o}from"./input-group-mcar-tED.js";import{h as s,i as c,n as l,r as u,t as d}from"./dropdown-menu-zRuQQS5S.js";import{i as f,l as p,n as m,r as h,t as g,u as _}from"./select-CVwVLyWt.js";import{a as v,c as y,i as b,l as x,n as S,s as C,t as w}from"./table-CuE0Aenj.js";import{IconArrowsSort as T,IconChevronLeft as E,IconChevronRight as ee,IconChevronsLeft as te,IconChevronsRight as D,IconColumns3 as O,IconSortAscending as k,IconSortDescending as A}from"@tabler/icons-react";import{jsx as j,jsxs as M}from"react/jsx-runtime";import*as N from"react";import{columnFilteringFeature as P,columnVisibilityFeature as F,createFilteredRowModel as I,createPaginatedRowModel as L,createSortedRowModel as R,filterFn_arrIncludes as z,filterFn_equals as B,filterFn_inDateRange as V,filterFn_inNumberRange as H,filterFn_includesString as U,filterFn_weakEquals as W,flexRender as G,rowPaginationFeature as K,rowSelectionFeature as q,rowSortingFeature as J,sortFn_alphanumeric as Y,sortFn_basic as X,sortFn_datetime as Z,sortFn_text as ne,tableFeatures as re,useTable as ie}from"@tanstack/react-table";const ae=re({columnFilteringFeature:P,rowSortingFeature:J,rowPaginationFeature:K,rowSelectionFeature:q,columnVisibilityFeature:F,filteredRowModel:I(),sortedRowModel:R(),paginatedRowModel:L(),filterFns:{includesString:U,inNumberRange:H,equals:B,arrIncludes:z,inDateRange:V,weakEquals:W},sortFns:{alphanumeric:Y,text:ne,datetime:Z,basic:X}}),Q={filterPlaceholder:`Filtrar linhas...`,filterColumnSelectorLabel:`Coluna para filtrar`,emptyMessage:`Nenhum resultado.`,columnsButton:`Colunas`,rowsPerPage:`Linhas por página`,pageOf:(e,t)=>`Página ${e} de ${t}`,goToFirstPage:`Ir para a primeira página`,goToPreviousPage:`Ir para a página anterior`,goToNextPage:`Ir para a próxima página`,goToLastPage:`Ir para a última página`,selectAllRows:`Selecionar todas as linhas`,selectRow:`Selecionar linha`},$=N.createContext(null);function useDataTableContext(){let e=N.useContext($);if(!e)throw Error(`useDataTableContext must be used within <DataTableRoot>`);return e}function useOptionalDataTableContext(){return N.useContext($)}function renderToolbarActions(e,t){return typeof e==`function`?e(t):e}function getColumnLabel(e){return e?e.columnDef.meta?.label??e.id:``}function useDataTable({columns:e,data:t,getRowId:n,pageSize:r=10,enableRowSelection:i=!1,enableSorting:a=!1,enablePagination:o=!1,labels:s}){let[c,l]=N.useState([]),[u,d]=N.useState([]),[f,p]=N.useState({}),[m,h]=N.useState({pageIndex:0,pageSize:r}),[g,_]=N.useState({}),v=N.useMemo(()=>({...Q,...s}),[s]),y=N.useMemo(()=>!i||e.some(e=>e.id===`select`)?e:[createDataTableSelectColumn({labels:{selectAllRows:v.selectAllRows,selectRow:v.selectRow}}),...e],[e,i,v.selectAllRows,v.selectRow]);return ie({features:ae,data:t,columns:y,getRowId:n,enableRowSelection:i,enableSorting:a,manualPagination:!o,state:{sorting:c,columnFilters:u,columnVisibility:f,rowSelection:g,pagination:m},onSortingChange:l,onColumnFiltersChange:d,onColumnVisibilityChange:p,onPaginationChange:h,onRowSelectionChange:_})}function DataTableRootControlled({table:t,labels:n,className:r,children:i}){let a={table:t,labels:N.useMemo(()=>({...Q,...n}),[n])};return j($.Provider,{value:a,children:j(`div`,{className:e(`flex w-full flex-col gap-4`,r),children:i})})}function DataTableRootUncontrolled({columns:e,data:t,getRowId:n,pageSize:r,enableRowSelection:i,enableSorting:a,enablePagination:o,labels:s,className:c,children:l}){return j(DataTableRootControlled,{table:useDataTable({columns:e,data:t,getRowId:n,pageSize:r,enableRowSelection:i,enableSorting:a,enablePagination:o,labels:s}),labels:s,className:c,children:l})}function DataTableRoot(e){if(`table`in e&&e.table!==void 0){let{table:t,labels:n,className:r,children:i}=e;return j(DataTableRootControlled,{table:t,labels:n,className:r,children:i})}let{columns:t,data:n,getRowId:r,pageSize:i,enableRowSelection:a,enableSorting:o,enablePagination:s,labels:c,className:l,children:u}=e;return j(DataTableRootUncontrolled,{columns:t,data:n,getRowId:r,pageSize:i,enableRowSelection:a,enableSorting:o,enablePagination:s,labels:c,className:l,children:u})}function DataTableColumnHeader({column:n,title:r,className:i,...a}){if(!n.getCanSort())return j(`div`,{className:e(`inline-flex items-center gap-1`,i),...a,children:r});let o=n.getIsSorted();return M(`div`,{className:e(`inline-flex items-center gap-1`,i),...a,children:[r,j(t,{variant:`ghost`,color:`zinc`,size:`icon-xs`,onClick:()=>{if(o===`desc`)return n.clearSorting();n.toggleSorting(o===`asc`)},children:j(o===`desc`?A:o===`asc`?k:T,{className:`size-4`,"data-icon":`inline-end`})})]})}function DataTableViewOptions({table:n,label:r,className:i,...a}){let o=useOptionalDataTableContext(),f=n??o?.table;if(!f)throw Error("DataTableViewOptions requires a `table` prop or to be rendered within <DataTableRoot>");let p=r??o?.labels.columnsButton??Q.columnsButton,m=f.getAllColumns().filter(e=>e.accessorFn!==void 0&&e.getCanHide());return m.length===0?null:M(d,{children:[j(s,{asChild:!0,children:M(t,{type:`button`,variant:`outline`,color:`zinc`,size:`sm`,className:e(`ml-auto`,i),...a,children:[j(O,{"data-icon":`inline-start`}),p]})}),j(u,{align:`end`,className:`w-44`,children:j(c,{children:m.map(e=>j(l,{checked:e.getIsVisible(),onCheckedChange:t=>e.toggleVisibility(!!t),children:e.id},e.id))})})]})}function DataTableToolbar({filterColumns:t,showColumnVisibility:n,toolbarActions:s,labels:c,className:l}){let{table:u,labels:d}=useDataTableContext(),f=N.useMemo(()=>c?{...d,...c}:d,[d,c]),p=N.useMemo(()=>t?Array.isArray(t)?t:[t]:[],[t]),m=renderToolbarActions(s,u),h=p.length>0,[g,_]=N.useState(p[0]);if(N.useEffect(()=>{if(p.length===0){_(void 0);return}_(e=>e&&p.includes(e)?e:p[0])},[p]),!h&&!n&&!m)return null;let v=g?u.getColumn(g):void 0,y=v?.getFilterValue()??``,handleColumnChange=e=>{e!==g&&(g&&u.getColumn(g)?.setFilterValue(void 0),_(e))};return M(`div`,{className:e(`flex flex-col gap-2 sm:flex-row sm:items-center`,l),children:[h&&v?p.length>1?M(o,{className:`h-8 w-full sm:max-w-md`,children:[j(a,{align:`inline-start`,className:`pr-0`,children:j(`select`,{"aria-label":f.filterColumnSelectorLabel,value:g,onChange:e=>handleColumnChange(e.target.value),className:`cursor-pointer appearance-none border-0 bg-transparent pr-1 text-sm font-medium text-foreground outline-none focus:outline-none`,children:p.map(e=>j(`option`,{value:e,children:getColumnLabel(u.getColumn(e))},e))})}),j(i,{placeholder:f.filterPlaceholder,value:y,onChange:e=>v.setFilterValue(e.target.value)})]}):j(r,{placeholder:f.filterPlaceholder,value:y,onChange:e=>v.setFilterValue(e.target.value),className:`h-8 w-full sm:max-w-xs`}):null,M(`div`,{className:`flex flex-1 items-center justify-end gap-2`,children:[m,n?j(DataTableViewOptions,{table:u,label:f.columnsButton}):null]})]})}function DataTableHeader({className:e}={}){let{table:t}=useDataTableContext();return j(y,{className:e,children:t.getHeaderGroups().map(e=>j(x,{children:e.headers.map(e=>j(C,{colSpan:e.colSpan,children:e.isPlaceholder?null:G(e.column.columnDef.header,e.getContext())},e.id))},e.id))})}function DataTableBody({emptyMessage:e,className:t}={}){let{table:n,labels:r}=useDataTableContext(),i=n.getRowModel().rows,a=n.getVisibleLeafColumns().length,o=e??r.emptyMessage;return j(S,{className:t,children:i.length===0?j(x,{children:j(b,{colSpan:a,className:`h-24 text-center`,children:o})}):i.map(e=>j(x,{"data-state":e.getIsSelected()?`selected`:void 0,children:e.getVisibleCells().map(e=>j(b,{children:G(e.column.columnDef.cell,e.getContext())},e.id))},e.id))})}function DataTablePagination({table:n,pageSizeOptions:r=[10,20,30,40,50],labels:i,className:a,...o}){let s=useOptionalDataTableContext(),c=n??s?.table;if(!c)throw Error("DataTablePagination requires a `table` prop or to be rendered within <DataTableRoot>");let l=N.useMemo(()=>({...Q,...s?.labels,...i}),[s?.labels,i]),u=c.getPageCount(),d=Math.max(u,1),v=c.state.pagination.pageIndex;return j(`div`,{className:e(`flex items-center justify-end gap-4 px-2`,a),...o,children:M(`div`,{className:`flex items-center gap-6 lg:gap-8`,children:[M(`div`,{className:`hidden items-center gap-2 sm:flex`,children:[j(`p`,{className:`text-sm font-medium`,children:l.rowsPerPage}),M(g,{value:`${c.state.pagination.pageSize}`,onValueChange:e=>c.setPageSize(Number(e)),children:[j(p,{size:`sm`,className:`h-8 w-20`,children:j(_,{})}),j(m,{side:`top`,children:j(h,{children:r.map(e=>j(f,{value:`${e}`,children:e},e))})})]})]}),j(`div`,{className:`text-sm font-medium`,children:l.pageOf(v+1,d)}),M(`div`,{className:`flex items-center gap-1`,children:[j(t,{type:`button`,variant:`secondary`,size:`icon-sm`,className:`hidden lg:inline-flex`,onClick:()=>c.setPageIndex(0),disabled:!c.getCanPreviousPage(),"aria-label":l.goToFirstPage,children:j(te,{})}),j(t,{type:`button`,variant:`secondary`,size:`icon-sm`,onClick:()=>c.previousPage(),disabled:!c.getCanPreviousPage(),"aria-label":l.goToPreviousPage,children:j(E,{})}),j(t,{type:`button`,variant:`secondary`,size:`icon-sm`,onClick:()=>c.nextPage(),disabled:!c.getCanNextPage(),"aria-label":l.goToNextPage,children:j(ee,{})}),j(t,{type:`button`,variant:`secondary`,size:`icon-sm`,className:`hidden lg:inline-flex`,onClick:()=>c.setPageIndex(u-1),disabled:!c.getCanNextPage(),"aria-label":l.goToLastPage,children:j(D,{})})]})]})})}function createDataTableSelectColumn(e){let t=e?.labels?.selectAllRows??Q.selectAllRows,r=e?.labels?.selectRow??Q.selectRow;return{id:`select`,enableSorting:!1,enableHiding:!1,header:({table:e})=>j(n,{"aria-label":t,checked:e.getIsAllPageRowsSelected()||e.getIsSomePageRowsSelected()&&`indeterminate`,onCheckedChange:t=>e.toggleAllPageRowsSelected(!!t)}),cell:({row:e})=>j(n,{"aria-label":r,checked:e.getIsSelected()||e.getIsSomeSelected()&&`indeterminate`,disabled:!e.getCanSelect(),onCheckedChange:t=>e.toggleSelected(!!t)})}}function DataTable({columns:e,data:t,getRowId:n,filterColumns:r,pageSize:i=10,pageSizeOptions:a,enableRowSelection:o=!1,enableSorting:s=!1,showPagination:c=!1,showColumnVisibility:l=!1,toolbarActions:u,labels:d,className:f,tableClassName:p,variant:m}){return M(DataTableRoot,{columns:e,data:t,getRowId:n,pageSize:i,enableRowSelection:o,enableSorting:s,enablePagination:c,labels:d,className:f,children:[j(DataTableToolbar,{filterColumns:r,showColumnVisibility:l,toolbarActions:u}),j(v,{children:M(w,{className:p,variant:m,children:[j(DataTableHeader,{}),j(DataTableBody,{})]})}),c?j(DataTablePagination,{pageSizeOptions:a}):null]})}export{DataTablePagination as a,DataTableViewOptions as c,useDataTable as d,useDataTableContext as f,DataTableHeader as i,createDataTableSelectColumn as l,DataTableBody as n,DataTableRoot as o,DataTableColumnHeader as r,DataTableToolbar as s,DataTable as t,Q as u};
2
+ //# sourceMappingURL=data-table-BGfSiHDT.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"data-table-tnfPcXqc.js","names":[],"sources":["../src/components/data-table.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport {\n IconArrowsSort,\n IconChevronLeft,\n IconChevronRight,\n IconChevronsLeft,\n IconChevronsRight,\n IconColumns3,\n IconSortAscending,\n IconSortDescending\n} from '@tabler/icons-react'\nimport type {\n ColumnFiltersState,\n ColumnVisibilityState,\n PaginationState,\n ReactTable,\n RowData,\n RowSelectionState,\n SortingState,\n Column as TSColumn,\n ColumnDef as TSColumnDef\n} from '@tanstack/react-table'\nimport {\n columnFilteringFeature,\n columnVisibilityFeature,\n createFilteredRowModel,\n createPaginatedRowModel,\n createSortedRowModel,\n filterFn_arrIncludes,\n filterFn_equals,\n filterFn_includesString,\n filterFn_inDateRange,\n filterFn_inNumberRange,\n filterFn_weakEquals,\n flexRender,\n rowPaginationFeature,\n rowSelectionFeature,\n rowSortingFeature,\n sortFn_alphanumeric,\n sortFn_basic,\n sortFn_datetime,\n sortFn_text,\n tableFeatures,\n useTable\n} from '@tanstack/react-table'\n\nimport { cn } from '../lib/utils'\nimport { Button } from './button'\nimport { Checkbox } from './checkbox'\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuTrigger\n} from './dropdown-menu'\nimport { Input } from './input'\nimport { InputGroup, InputGroupAddon, InputGroupInput } from './input-group'\nimport { Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue } from './select'\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableHeader, type TableProps, TableRow } from './table'\n\nconst features = tableFeatures({\n columnFilteringFeature,\n rowSortingFeature,\n rowPaginationFeature,\n rowSelectionFeature,\n columnVisibilityFeature,\n filteredRowModel: createFilteredRowModel(),\n sortedRowModel: createSortedRowModel(),\n paginatedRowModel: createPaginatedRowModel(),\n filterFns: {\n includesString: filterFn_includesString,\n inNumberRange: filterFn_inNumberRange,\n equals: filterFn_equals,\n arrIncludes: filterFn_arrIncludes,\n inDateRange: filterFn_inDateRange,\n weakEquals: filterFn_weakEquals\n },\n sortFns: {\n alphanumeric: sortFn_alphanumeric,\n text: sortFn_text,\n datetime: sortFn_datetime,\n basic: sortFn_basic\n }\n})\n\nexport type ColumnDef<TData extends RowData, TValue = unknown> = TSColumnDef<typeof features, TData, TValue>\nexport type Column<TData extends RowData, TValue = unknown> = TSColumn<typeof features, TData, TValue>\nexport type TanStackTable<TData extends RowData> = ReactTable<typeof features, TData>\nexport type { RowData } from '@tanstack/react-table'\n\ntype DataTableToolbarActions<TData extends RowData> =\n | React.ReactNode\n | ((table: TanStackTable<TData>) => React.ReactNode)\n\nexport type DataTableLabels = {\n filterPlaceholder: string\n filterColumnSelectorLabel: string\n emptyMessage: React.ReactNode\n columnsButton: string\n rowsPerPage: string\n pageOf: (current: number, total: number) => React.ReactNode\n goToFirstPage: string\n goToPreviousPage: string\n goToNextPage: string\n goToLastPage: string\n selectAllRows: string\n selectRow: string\n}\n\nexport const defaultDataTableLabels: DataTableLabels = {\n filterPlaceholder: 'Filtrar linhas...',\n filterColumnSelectorLabel: 'Coluna para filtrar',\n emptyMessage: 'Nenhum resultado.',\n columnsButton: 'Colunas',\n rowsPerPage: 'Linhas por página',\n pageOf: (current, total) => `Página ${current} de ${total}`,\n goToFirstPage: 'Ir para a primeira página',\n goToPreviousPage: 'Ir para a página anterior',\n goToNextPage: 'Ir para a próxima página',\n goToLastPage: 'Ir para a última página',\n selectAllRows: 'Selecionar todas as linhas',\n selectRow: 'Selecionar linha'\n}\n\nexport type DataTableProps<TData extends RowData, TValue = unknown> = {\n columns: ColumnDef<TData, TValue>[]\n data: TData[]\n getRowId?: (originalRow: TData, index: number, parent?: { id: string }) => string\n filterColumns?: string | string[]\n pageSize?: number\n pageSizeOptions?: number[]\n enableRowSelection?: boolean\n enableSorting?: boolean\n showPagination?: boolean\n showColumnVisibility?: boolean\n toolbarActions?: DataTableToolbarActions<TData>\n labels?: Partial<DataTableLabels>\n className?: string\n tableClassName?: string\n variant?: TableProps['variant']\n}\n\nexport type DataTableColumnHeaderProps<TData extends RowData, TValue> = React.ComponentProps<'div'> & {\n column: Column<TData, TValue>\n title: React.ReactNode\n}\n\nexport type DataTablePaginationProps<TData extends RowData> = React.ComponentProps<'div'> & {\n table?: TanStackTable<TData>\n pageSizeOptions?: number[]\n labels?: Partial<DataTableLabels>\n}\n\nexport type DataTableViewOptionsProps<TData extends RowData> = React.ComponentProps<typeof Button> & {\n table?: TanStackTable<TData>\n label?: React.ReactNode\n}\n\nexport type UseDataTableOptions<TData extends RowData, TValue = unknown> = {\n columns: ColumnDef<TData, TValue>[]\n data: TData[]\n getRowId?: (originalRow: TData, index: number, parent?: { id: string }) => string\n pageSize?: number\n enableRowSelection?: boolean\n enableSorting?: boolean\n enablePagination?: boolean\n labels?: Partial<DataTableLabels>\n}\n\nexport type DataTableRootProps<TData extends RowData, TValue = unknown> = {\n labels?: Partial<DataTableLabels>\n className?: string\n children: React.ReactNode\n} & (\n | { table: TanStackTable<TData>; columns?: never; data?: never }\n | (Omit<UseDataTableOptions<TData, TValue>, 'labels'> & { table?: never })\n)\n\nexport type DataTableToolbarProps<TData extends RowData> = {\n filterColumns?: string | string[]\n showColumnVisibility?: boolean\n toolbarActions?: DataTableToolbarActions<TData>\n labels?: Partial<DataTableLabels>\n className?: string\n}\n\nexport type DataTableHeaderProps = {\n className?: string\n}\n\nexport type DataTableBodyProps = {\n emptyMessage?: React.ReactNode\n className?: string\n}\n\ntype DataTableContextValue<TData extends RowData> = {\n table: TanStackTable<TData>\n labels: DataTableLabels\n}\n\nconst DataTableContext = React.createContext<DataTableContextValue<RowData> | null>(null)\n\nexport function useDataTableContext<TData extends RowData>(): DataTableContextValue<TData> {\n const ctx = React.useContext(DataTableContext)\n if (!ctx) {\n throw new Error('useDataTableContext must be used within <DataTableRoot>')\n }\n return ctx as unknown as DataTableContextValue<TData>\n}\n\nfunction useOptionalDataTableContext<TData extends RowData>(): DataTableContextValue<TData> | null {\n const ctx = React.useContext(DataTableContext)\n return ctx as unknown as DataTableContextValue<TData> | null\n}\n\nfunction renderToolbarActions<TData extends RowData>(\n actions: DataTableToolbarActions<TData> | undefined,\n table: TanStackTable<TData>\n) {\n return typeof actions === 'function' ? actions(table) : actions\n}\n\nfunction getColumnLabel<TData extends RowData>(column: ReturnType<TanStackTable<TData>['getColumn']>): string {\n if (!column) {\n return ''\n }\n const meta = column.columnDef.meta as { label?: string } | undefined\n return meta?.label ?? column.id\n}\n\nexport function useDataTable<TData extends RowData, TValue = unknown>({\n columns,\n data,\n getRowId,\n pageSize = 10,\n enableRowSelection = false,\n enableSorting = false,\n enablePagination = false,\n labels\n}: UseDataTableOptions<TData, TValue>): TanStackTable<TData> {\n const [sorting, setSorting] = React.useState<SortingState>([])\n const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>([])\n const [columnVisibility, setColumnVisibility] = React.useState<ColumnVisibilityState>({})\n const [pagination, setPagination] = React.useState<PaginationState>({\n pageIndex: 0,\n pageSize\n })\n const [rowSelection, setRowSelection] = React.useState<RowSelectionState>({})\n\n const mergedLabels = React.useMemo(() => ({ ...defaultDataTableLabels, ...labels }), [labels])\n const resolvedColumns = React.useMemo<ColumnDef<TData, TValue>[]>(() => {\n if (!enableRowSelection) {\n return columns\n }\n if (columns.some((column) => column.id === 'select')) {\n return columns\n }\n return [\n createDataTableSelectColumn<TData>({\n labels: { selectAllRows: mergedLabels.selectAllRows, selectRow: mergedLabels.selectRow }\n }) as ColumnDef<TData, TValue>,\n ...columns\n ]\n }, [columns, enableRowSelection, mergedLabels.selectAllRows, mergedLabels.selectRow])\n\n return useTable({\n features,\n data,\n columns: resolvedColumns as ColumnDef<TData>[],\n getRowId,\n enableRowSelection,\n enableSorting,\n manualPagination: !enablePagination,\n state: {\n sorting,\n columnFilters,\n columnVisibility,\n rowSelection,\n pagination\n },\n onSortingChange: setSorting,\n onColumnFiltersChange: setColumnFilters,\n onColumnVisibilityChange: setColumnVisibility,\n onPaginationChange: setPagination,\n onRowSelectionChange: setRowSelection\n })\n}\n\nfunction DataTableRootControlled<TData extends RowData>({\n table,\n labels,\n className,\n children\n}: {\n table: TanStackTable<TData>\n labels?: Partial<DataTableLabels>\n className?: string\n children: React.ReactNode\n}) {\n const mergedLabels = React.useMemo(() => ({ ...defaultDataTableLabels, ...labels }), [labels])\n const value: DataTableContextValue<TData> = { table, labels: mergedLabels }\n return (\n <DataTableContext.Provider value={value as unknown as DataTableContextValue<RowData>}>\n <div className={cn('flex w-full flex-col gap-4', className)}>{children}</div>\n </DataTableContext.Provider>\n )\n}\n\nfunction DataTableRootUncontrolled<TData extends RowData, TValue = unknown>({\n columns,\n data,\n getRowId,\n pageSize,\n enableRowSelection,\n enableSorting,\n enablePagination,\n labels,\n className,\n children\n}: Omit<UseDataTableOptions<TData, TValue>, 'labels'> & {\n labels?: Partial<DataTableLabels>\n className?: string\n children: React.ReactNode\n}) {\n const table = useDataTable<TData, TValue>({\n columns,\n data,\n getRowId,\n pageSize,\n enableRowSelection,\n enableSorting,\n enablePagination,\n labels\n })\n return (\n <DataTableRootControlled table={table} labels={labels} className={className}>\n {children}\n </DataTableRootControlled>\n )\n}\n\nfunction DataTableRoot<TData extends RowData, TValue = unknown>(props: DataTableRootProps<TData, TValue>) {\n if ('table' in props && props.table !== undefined) {\n const { table, labels, className, children } = props\n return (\n <DataTableRootControlled table={table} labels={labels} className={className}>\n {children}\n </DataTableRootControlled>\n )\n }\n const {\n columns,\n data,\n getRowId,\n pageSize,\n enableRowSelection,\n enableSorting,\n enablePagination,\n labels,\n className,\n children\n } = props\n return (\n <DataTableRootUncontrolled<TData, TValue>\n columns={columns!}\n data={data!}\n getRowId={getRowId}\n pageSize={pageSize}\n enableRowSelection={enableRowSelection}\n enableSorting={enableSorting}\n enablePagination={enablePagination}\n labels={labels}\n className={className}\n >\n {children}\n </DataTableRootUncontrolled>\n )\n}\n\nfunction DataTableColumnHeader<TData extends RowData, TValue>({\n column,\n title,\n className,\n ...props\n}: DataTableColumnHeaderProps<TData, TValue>) {\n if (!column.getCanSort()) {\n return (\n <div className={cn('inline-flex items-center gap-1', className)} {...props}>\n {title}\n </div>\n )\n }\n\n const sorted = column.getIsSorted()\n\n return (\n <div className={cn('inline-flex items-center gap-1', className)} {...props}>\n {title}\n <Button\n variant=\"ghost\"\n color=\"zinc\"\n size=\"icon-xs\"\n onClick={() => {\n if (sorted === 'desc') return column.clearSorting()\n column.toggleSorting(sorted === 'asc')\n }}\n >\n {sorted === 'desc' ? (\n <IconSortDescending className=\"size-4\" data-icon=\"inline-end\" />\n ) : sorted === 'asc' ? (\n <IconSortAscending className=\"size-4\" data-icon=\"inline-end\" />\n ) : (\n <IconArrowsSort className=\"size-4\" data-icon=\"inline-end\" />\n )}\n </Button>\n </div>\n )\n}\n\nfunction DataTableViewOptions<TData extends RowData>({\n table: tableProp,\n label,\n className,\n ...props\n}: DataTableViewOptionsProps<TData>) {\n const ctx = useOptionalDataTableContext<TData>()\n const table = tableProp ?? ctx?.table\n if (!table) {\n throw new Error('DataTableViewOptions requires a `table` prop or to be rendered within <DataTableRoot>')\n }\n const resolvedLabel = label ?? ctx?.labels.columnsButton ?? defaultDataTableLabels.columnsButton\n const columns = table\n .getAllColumns()\n .filter((column) => typeof column.accessorFn !== 'undefined' && column.getCanHide())\n\n if (columns.length === 0) {\n return null\n }\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button type=\"button\" variant=\"outline\" color=\"zinc\" size=\"sm\" className={cn('ml-auto', className)} {...props}>\n <IconColumns3 data-icon=\"inline-start\" />\n {resolvedLabel}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-44\">\n <DropdownMenuGroup>\n {columns.map((column) => (\n <DropdownMenuCheckboxItem\n key={column.id}\n checked={column.getIsVisible()}\n onCheckedChange={(value) => column.toggleVisibility(Boolean(value))}\n >\n {column.id}\n </DropdownMenuCheckboxItem>\n ))}\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n\nfunction DataTableToolbar<TData extends RowData>({\n filterColumns,\n showColumnVisibility,\n toolbarActions,\n labels: labelsOverride,\n className\n}: DataTableToolbarProps<TData>) {\n const { table, labels: contextLabels } = useDataTableContext<TData>()\n const labels = React.useMemo(\n () => (labelsOverride ? { ...contextLabels, ...labelsOverride } : contextLabels),\n [contextLabels, labelsOverride]\n )\n const filterColumnIds = React.useMemo<string[]>(() => {\n if (!filterColumns) {\n return []\n }\n return Array.isArray(filterColumns) ? filterColumns : [filterColumns]\n }, [filterColumns])\n\n const actions = renderToolbarActions(toolbarActions, table)\n const hasFilter = filterColumnIds.length > 0\n const [activeFilterColumn, setActiveFilterColumn] = React.useState<string | undefined>(filterColumnIds[0])\n\n React.useEffect(() => {\n if (filterColumnIds.length === 0) {\n setActiveFilterColumn(undefined)\n return\n }\n setActiveFilterColumn((current) => (current && filterColumnIds.includes(current) ? current : filterColumnIds[0]))\n }, [filterColumnIds])\n\n if (!hasFilter && !showColumnVisibility && !actions) {\n return null\n }\n\n const activeColumn = activeFilterColumn ? table.getColumn(activeFilterColumn) : undefined\n const filterValue = (activeColumn?.getFilterValue() as string | undefined) ?? ''\n\n const handleColumnChange = (nextId: string) => {\n if (nextId === activeFilterColumn) {\n return\n }\n if (activeFilterColumn) {\n table.getColumn(activeFilterColumn)?.setFilterValue(undefined)\n }\n setActiveFilterColumn(nextId)\n }\n\n return (\n <div className={cn('flex flex-col gap-2 sm:flex-row sm:items-center', className)}>\n {hasFilter && activeColumn ? (\n filterColumnIds.length > 1 ? (\n <InputGroup className=\"h-8 w-full sm:max-w-md\">\n <InputGroupAddon align=\"inline-start\" className=\"pr-0\">\n <select\n aria-label={labels.filterColumnSelectorLabel}\n value={activeFilterColumn}\n onChange={(event) => handleColumnChange(event.target.value)}\n className=\"cursor-pointer appearance-none border-0 bg-transparent pr-1 text-sm font-medium text-foreground outline-none focus:outline-none\"\n >\n {filterColumnIds.map((id) => (\n <option key={id} value={id}>\n {getColumnLabel(table.getColumn(id))}\n </option>\n ))}\n </select>\n </InputGroupAddon>\n <InputGroupInput\n placeholder={labels.filterPlaceholder}\n value={filterValue}\n onChange={(event) => activeColumn.setFilterValue(event.target.value)}\n />\n </InputGroup>\n ) : (\n <Input\n placeholder={labels.filterPlaceholder}\n value={filterValue}\n onChange={(event) => activeColumn.setFilterValue(event.target.value)}\n className=\"h-8 w-full sm:max-w-xs\"\n />\n )\n ) : null}\n <div className=\"flex flex-1 items-center justify-end gap-2\">\n {actions}\n {showColumnVisibility ? <DataTableViewOptions table={table} label={labels.columnsButton} /> : null}\n </div>\n </div>\n )\n}\n\nfunction DataTableHeader<TData extends RowData>({ className }: DataTableHeaderProps = {}) {\n const { table } = useDataTableContext<TData>()\n return (\n <TableHeader className={className}>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => (\n <TableHead key={header.id} colSpan={header.colSpan}>\n {header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())}\n </TableHead>\n ))}\n </TableRow>\n ))}\n </TableHeader>\n )\n}\n\nfunction DataTableBody<TData extends RowData>({ emptyMessage, className }: DataTableBodyProps = {}) {\n const { table, labels } = useDataTableContext<TData>()\n const rows = table.getRowModel().rows\n const visibleColumnCount = table.getVisibleLeafColumns().length\n const resolvedEmptyMessage = emptyMessage ?? labels.emptyMessage\n\n return (\n <TableBody className={className}>\n {rows.length === 0 ? (\n <TableRow>\n <TableCell colSpan={visibleColumnCount} className=\"h-24 text-center\">\n {resolvedEmptyMessage}\n </TableCell>\n </TableRow>\n ) : (\n rows.map((row) => (\n <TableRow key={row.id} data-state={row.getIsSelected() ? 'selected' : undefined}>\n {row.getVisibleCells().map((cell) => (\n <TableCell key={cell.id}>{flexRender(cell.column.columnDef.cell, cell.getContext())}</TableCell>\n ))}\n </TableRow>\n ))\n )}\n </TableBody>\n )\n}\n\nfunction DataTablePagination<TData extends RowData>({\n table: tableProp,\n pageSizeOptions = [10, 20, 30, 40, 50],\n labels: labelsOverride,\n className,\n ...props\n}: DataTablePaginationProps<TData>) {\n const ctx = useOptionalDataTableContext<TData>()\n const table = tableProp ?? ctx?.table\n if (!table) {\n throw new Error('DataTablePagination requires a `table` prop or to be rendered within <DataTableRoot>')\n }\n const mergedLabels = React.useMemo(\n () => ({ ...defaultDataTableLabels, ...ctx?.labels, ...labelsOverride }),\n [ctx?.labels, labelsOverride]\n )\n const pageCount = table.getPageCount()\n const safePageCount = Math.max(pageCount, 1)\n const pageIndex = table.state.pagination.pageIndex\n\n return (\n <div className={cn('flex items-center justify-end gap-4 px-2', className)} {...props}>\n <div className=\"flex items-center gap-6 lg:gap-8\">\n <div className=\"hidden items-center gap-2 sm:flex\">\n <p className=\"text-sm font-medium\">{mergedLabels.rowsPerPage}</p>\n <Select\n value={`${table.state.pagination.pageSize}`}\n onValueChange={(value) => table.setPageSize(Number(value))}\n >\n <SelectTrigger size=\"sm\" className=\"h-8 w-20\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent side=\"top\">\n <SelectGroup>\n {pageSizeOptions.map((pageSize) => (\n <SelectItem key={pageSize} value={`${pageSize}`}>\n {pageSize}\n </SelectItem>\n ))}\n </SelectGroup>\n </SelectContent>\n </Select>\n </div>\n <div className=\"text-sm font-medium\">{mergedLabels.pageOf(pageIndex + 1, safePageCount)}</div>\n <div className=\"flex items-center gap-1\">\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"icon-sm\"\n className=\"hidden lg:inline-flex\"\n onClick={() => table.setPageIndex(0)}\n disabled={!table.getCanPreviousPage()}\n aria-label={mergedLabels.goToFirstPage}\n >\n <IconChevronsLeft />\n </Button>\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"icon-sm\"\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n aria-label={mergedLabels.goToPreviousPage}\n >\n <IconChevronLeft />\n </Button>\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"icon-sm\"\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n aria-label={mergedLabels.goToNextPage}\n >\n <IconChevronRight />\n </Button>\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"icon-sm\"\n className=\"hidden lg:inline-flex\"\n onClick={() => table.setPageIndex(pageCount - 1)}\n disabled={!table.getCanNextPage()}\n aria-label={mergedLabels.goToLastPage}\n >\n <IconChevronsRight />\n </Button>\n </div>\n </div>\n </div>\n )\n}\n\nfunction createDataTableSelectColumn<TData extends RowData>(options?: {\n labels?: Pick<Partial<DataTableLabels>, 'selectAllRows' | 'selectRow'>\n}): ColumnDef<TData> {\n const selectAllRows = options?.labels?.selectAllRows ?? defaultDataTableLabels.selectAllRows\n const selectRow = options?.labels?.selectRow ?? defaultDataTableLabels.selectRow\n\n return {\n id: 'select',\n enableSorting: false,\n enableHiding: false,\n header: ({ table }) => (\n <Checkbox\n aria-label={selectAllRows}\n checked={table.getIsAllPageRowsSelected() || (table.getIsSomePageRowsSelected() && 'indeterminate')}\n onCheckedChange={(value) => table.toggleAllPageRowsSelected(Boolean(value))}\n />\n ),\n cell: ({ row }) => (\n <Checkbox\n aria-label={selectRow}\n checked={row.getIsSelected() || (row.getIsSomeSelected() && 'indeterminate')}\n disabled={!row.getCanSelect()}\n onCheckedChange={(value) => row.toggleSelected(Boolean(value))}\n />\n )\n }\n}\n\nfunction DataTable<TData extends RowData, TValue = unknown>({\n columns,\n data,\n getRowId,\n filterColumns,\n pageSize = 10,\n pageSizeOptions,\n enableRowSelection = false,\n enableSorting = false,\n showPagination = false,\n showColumnVisibility = false,\n toolbarActions,\n labels,\n className,\n tableClassName,\n variant\n}: DataTableProps<TData, TValue>) {\n return (\n <DataTableRoot<TData, TValue>\n columns={columns}\n data={data}\n getRowId={getRowId}\n pageSize={pageSize}\n enableRowSelection={enableRowSelection}\n enableSorting={enableSorting}\n enablePagination={showPagination}\n labels={labels}\n className={className}\n >\n <DataTableToolbar\n filterColumns={filterColumns}\n showColumnVisibility={showColumnVisibility}\n toolbarActions={toolbarActions}\n />\n <TableContainer>\n <Table className={tableClassName} variant={variant}>\n <DataTableHeader />\n <DataTableBody />\n </Table>\n </TableContainer>\n {showPagination ? <DataTablePagination pageSizeOptions={pageSizeOptions} /> : null}\n </DataTableRoot>\n )\n}\n\nexport {\n createDataTableSelectColumn,\n DataTable,\n DataTableBody,\n DataTableColumnHeader,\n DataTableHeader,\n DataTablePagination,\n DataTableRoot,\n DataTableToolbar,\n DataTableViewOptions\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"data-table-BGfSiHDT.js","names":[],"sources":["../src/components/data-table.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport {\n IconArrowsSort,\n IconChevronLeft,\n IconChevronRight,\n IconChevronsLeft,\n IconChevronsRight,\n IconColumns3,\n IconSortAscending,\n IconSortDescending\n} from '@tabler/icons-react'\nimport type {\n ColumnFiltersState,\n ColumnVisibilityState,\n PaginationState,\n ReactTable,\n RowData,\n RowSelectionState,\n SortingState,\n Column as TSColumn,\n ColumnDef as TSColumnDef\n} from '@tanstack/react-table'\nimport {\n columnFilteringFeature,\n columnVisibilityFeature,\n createFilteredRowModel,\n createPaginatedRowModel,\n createSortedRowModel,\n filterFn_arrIncludes,\n filterFn_equals,\n filterFn_includesString,\n filterFn_inDateRange,\n filterFn_inNumberRange,\n filterFn_weakEquals,\n flexRender,\n rowPaginationFeature,\n rowSelectionFeature,\n rowSortingFeature,\n sortFn_alphanumeric,\n sortFn_basic,\n sortFn_datetime,\n sortFn_text,\n tableFeatures,\n useTable\n} from '@tanstack/react-table'\n\nimport { cn } from '../lib/utils'\nimport { Button } from './button'\nimport { Checkbox } from './checkbox'\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuTrigger\n} from './dropdown-menu'\nimport { Input } from './input'\nimport { InputGroup, InputGroupAddon, InputGroupInput } from './input-group'\nimport { Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue } from './select'\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableHeader, type TableProps, TableRow } from './table'\n\nconst features = tableFeatures({\n columnFilteringFeature,\n rowSortingFeature,\n rowPaginationFeature,\n rowSelectionFeature,\n columnVisibilityFeature,\n filteredRowModel: createFilteredRowModel(),\n sortedRowModel: createSortedRowModel(),\n paginatedRowModel: createPaginatedRowModel(),\n filterFns: {\n includesString: filterFn_includesString,\n inNumberRange: filterFn_inNumberRange,\n equals: filterFn_equals,\n arrIncludes: filterFn_arrIncludes,\n inDateRange: filterFn_inDateRange,\n weakEquals: filterFn_weakEquals\n },\n sortFns: {\n alphanumeric: sortFn_alphanumeric,\n text: sortFn_text,\n datetime: sortFn_datetime,\n basic: sortFn_basic\n }\n})\n\nexport type ColumnDef<TData extends RowData, TValue = unknown> = TSColumnDef<typeof features, TData, TValue>\nexport type Column<TData extends RowData, TValue = unknown> = TSColumn<typeof features, TData, TValue>\nexport type TanStackTable<TData extends RowData> = ReactTable<typeof features, TData>\nexport type { RowData } from '@tanstack/react-table'\n\ntype DataTableToolbarActions<TData extends RowData> =\n | React.ReactNode\n | ((table: TanStackTable<TData>) => React.ReactNode)\n\nexport type DataTableLabels = {\n filterPlaceholder: string\n filterColumnSelectorLabel: string\n emptyMessage: React.ReactNode\n columnsButton: string\n rowsPerPage: string\n pageOf: (current: number, total: number) => React.ReactNode\n goToFirstPage: string\n goToPreviousPage: string\n goToNextPage: string\n goToLastPage: string\n selectAllRows: string\n selectRow: string\n}\n\nexport const defaultDataTableLabels: DataTableLabels = {\n filterPlaceholder: 'Filtrar linhas...',\n filterColumnSelectorLabel: 'Coluna para filtrar',\n emptyMessage: 'Nenhum resultado.',\n columnsButton: 'Colunas',\n rowsPerPage: 'Linhas por página',\n pageOf: (current, total) => `Página ${current} de ${total}`,\n goToFirstPage: 'Ir para a primeira página',\n goToPreviousPage: 'Ir para a página anterior',\n goToNextPage: 'Ir para a próxima página',\n goToLastPage: 'Ir para a última página',\n selectAllRows: 'Selecionar todas as linhas',\n selectRow: 'Selecionar linha'\n}\n\nexport type DataTableProps<TData extends RowData, TValue = unknown> = {\n columns: ColumnDef<TData, TValue>[]\n data: TData[]\n getRowId?: (originalRow: TData, index: number, parent?: { id: string }) => string\n filterColumns?: string | string[]\n pageSize?: number\n pageSizeOptions?: number[]\n enableRowSelection?: boolean\n enableSorting?: boolean\n showPagination?: boolean\n showColumnVisibility?: boolean\n toolbarActions?: DataTableToolbarActions<TData>\n labels?: Partial<DataTableLabels>\n className?: string\n tableClassName?: string\n variant?: TableProps['variant']\n}\n\nexport type DataTableColumnHeaderProps<TData extends RowData, TValue> = React.ComponentProps<'div'> & {\n column: Column<TData, TValue>\n title: React.ReactNode\n}\n\nexport type DataTablePaginationProps<TData extends RowData> = React.ComponentProps<'div'> & {\n table?: TanStackTable<TData>\n pageSizeOptions?: number[]\n labels?: Partial<DataTableLabels>\n}\n\nexport type DataTableViewOptionsProps<TData extends RowData> = React.ComponentProps<typeof Button> & {\n table?: TanStackTable<TData>\n label?: React.ReactNode\n}\n\nexport type UseDataTableOptions<TData extends RowData, TValue = unknown> = {\n columns: ColumnDef<TData, TValue>[]\n data: TData[]\n getRowId?: (originalRow: TData, index: number, parent?: { id: string }) => string\n pageSize?: number\n enableRowSelection?: boolean\n enableSorting?: boolean\n enablePagination?: boolean\n labels?: Partial<DataTableLabels>\n}\n\nexport type DataTableRootProps<TData extends RowData, TValue = unknown> = {\n labels?: Partial<DataTableLabels>\n className?: string\n children: React.ReactNode\n} & (\n | { table: TanStackTable<TData>; columns?: never; data?: never }\n | (Omit<UseDataTableOptions<TData, TValue>, 'labels'> & { table?: never })\n)\n\nexport type DataTableToolbarProps<TData extends RowData> = {\n filterColumns?: string | string[]\n showColumnVisibility?: boolean\n toolbarActions?: DataTableToolbarActions<TData>\n labels?: Partial<DataTableLabels>\n className?: string\n}\n\nexport type DataTableHeaderProps = {\n className?: string\n}\n\nexport type DataTableBodyProps = {\n emptyMessage?: React.ReactNode\n className?: string\n}\n\ntype DataTableContextValue<TData extends RowData> = {\n table: TanStackTable<TData>\n labels: DataTableLabels\n}\n\nconst DataTableContext = React.createContext<DataTableContextValue<RowData> | null>(null)\n\nexport function useDataTableContext<TData extends RowData>(): DataTableContextValue<TData> {\n const ctx = React.useContext(DataTableContext)\n if (!ctx) {\n throw new Error('useDataTableContext must be used within <DataTableRoot>')\n }\n return ctx as unknown as DataTableContextValue<TData>\n}\n\nfunction useOptionalDataTableContext<TData extends RowData>(): DataTableContextValue<TData> | null {\n const ctx = React.useContext(DataTableContext)\n return ctx as unknown as DataTableContextValue<TData> | null\n}\n\nfunction renderToolbarActions<TData extends RowData>(\n actions: DataTableToolbarActions<TData> | undefined,\n table: TanStackTable<TData>\n) {\n return typeof actions === 'function' ? actions(table) : actions\n}\n\nfunction getColumnLabel<TData extends RowData>(column: ReturnType<TanStackTable<TData>['getColumn']>): string {\n if (!column) {\n return ''\n }\n const meta = column.columnDef.meta as { label?: string } | undefined\n return meta?.label ?? column.id\n}\n\nexport function useDataTable<TData extends RowData, TValue = unknown>({\n columns,\n data,\n getRowId,\n pageSize = 10,\n enableRowSelection = false,\n enableSorting = false,\n enablePagination = false,\n labels\n}: UseDataTableOptions<TData, TValue>): TanStackTable<TData> {\n const [sorting, setSorting] = React.useState<SortingState>([])\n const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>([])\n const [columnVisibility, setColumnVisibility] = React.useState<ColumnVisibilityState>({})\n const [pagination, setPagination] = React.useState<PaginationState>({\n pageIndex: 0,\n pageSize\n })\n const [rowSelection, setRowSelection] = React.useState<RowSelectionState>({})\n\n const mergedLabels = React.useMemo(() => ({ ...defaultDataTableLabels, ...labels }), [labels])\n const resolvedColumns = React.useMemo<ColumnDef<TData, TValue>[]>(() => {\n if (!enableRowSelection) {\n return columns\n }\n if (columns.some((column) => column.id === 'select')) {\n return columns\n }\n return [\n createDataTableSelectColumn<TData>({\n labels: { selectAllRows: mergedLabels.selectAllRows, selectRow: mergedLabels.selectRow }\n }) as ColumnDef<TData, TValue>,\n ...columns\n ]\n }, [columns, enableRowSelection, mergedLabels.selectAllRows, mergedLabels.selectRow])\n\n return useTable({\n features,\n data,\n columns: resolvedColumns as ColumnDef<TData>[],\n getRowId,\n enableRowSelection,\n enableSorting,\n manualPagination: !enablePagination,\n state: {\n sorting,\n columnFilters,\n columnVisibility,\n rowSelection,\n pagination\n },\n onSortingChange: setSorting,\n onColumnFiltersChange: setColumnFilters,\n onColumnVisibilityChange: setColumnVisibility,\n onPaginationChange: setPagination,\n onRowSelectionChange: setRowSelection\n })\n}\n\nfunction DataTableRootControlled<TData extends RowData>({\n table,\n labels,\n className,\n children\n}: {\n table: TanStackTable<TData>\n labels?: Partial<DataTableLabels>\n className?: string\n children: React.ReactNode\n}) {\n const mergedLabels = React.useMemo(() => ({ ...defaultDataTableLabels, ...labels }), [labels])\n const value: DataTableContextValue<TData> = { table, labels: mergedLabels }\n return (\n <DataTableContext.Provider value={value as unknown as DataTableContextValue<RowData>}>\n <div className={cn('flex w-full flex-col gap-4', className)}>{children}</div>\n </DataTableContext.Provider>\n )\n}\n\nfunction DataTableRootUncontrolled<TData extends RowData, TValue = unknown>({\n columns,\n data,\n getRowId,\n pageSize,\n enableRowSelection,\n enableSorting,\n enablePagination,\n labels,\n className,\n children\n}: Omit<UseDataTableOptions<TData, TValue>, 'labels'> & {\n labels?: Partial<DataTableLabels>\n className?: string\n children: React.ReactNode\n}) {\n const table = useDataTable<TData, TValue>({\n columns,\n data,\n getRowId,\n pageSize,\n enableRowSelection,\n enableSorting,\n enablePagination,\n labels\n })\n return (\n <DataTableRootControlled table={table} labels={labels} className={className}>\n {children}\n </DataTableRootControlled>\n )\n}\n\nfunction DataTableRoot<TData extends RowData, TValue = unknown>(props: DataTableRootProps<TData, TValue>) {\n if ('table' in props && props.table !== undefined) {\n const { table, labels, className, children } = props\n return (\n <DataTableRootControlled table={table} labels={labels} className={className}>\n {children}\n </DataTableRootControlled>\n )\n }\n const {\n columns,\n data,\n getRowId,\n pageSize,\n enableRowSelection,\n enableSorting,\n enablePagination,\n labels,\n className,\n children\n } = props\n return (\n <DataTableRootUncontrolled<TData, TValue>\n columns={columns!}\n data={data!}\n getRowId={getRowId}\n pageSize={pageSize}\n enableRowSelection={enableRowSelection}\n enableSorting={enableSorting}\n enablePagination={enablePagination}\n labels={labels}\n className={className}\n >\n {children}\n </DataTableRootUncontrolled>\n )\n}\n\nfunction DataTableColumnHeader<TData extends RowData, TValue>({\n column,\n title,\n className,\n ...props\n}: DataTableColumnHeaderProps<TData, TValue>) {\n if (!column.getCanSort()) {\n return (\n <div className={cn('inline-flex items-center gap-1', className)} {...props}>\n {title}\n </div>\n )\n }\n\n const sorted = column.getIsSorted()\n\n return (\n <div className={cn('inline-flex items-center gap-1', className)} {...props}>\n {title}\n <Button\n variant=\"ghost\"\n color=\"zinc\"\n size=\"icon-xs\"\n onClick={() => {\n if (sorted === 'desc') return column.clearSorting()\n column.toggleSorting(sorted === 'asc')\n }}\n >\n {sorted === 'desc' ? (\n <IconSortDescending className=\"size-4\" data-icon=\"inline-end\" />\n ) : sorted === 'asc' ? (\n <IconSortAscending className=\"size-4\" data-icon=\"inline-end\" />\n ) : (\n <IconArrowsSort className=\"size-4\" data-icon=\"inline-end\" />\n )}\n </Button>\n </div>\n )\n}\n\nfunction DataTableViewOptions<TData extends RowData>({\n table: tableProp,\n label,\n className,\n ...props\n}: DataTableViewOptionsProps<TData>) {\n const ctx = useOptionalDataTableContext<TData>()\n const table = tableProp ?? ctx?.table\n if (!table) {\n throw new Error('DataTableViewOptions requires a `table` prop or to be rendered within <DataTableRoot>')\n }\n const resolvedLabel = label ?? ctx?.labels.columnsButton ?? defaultDataTableLabels.columnsButton\n const columns = table\n .getAllColumns()\n .filter((column) => typeof column.accessorFn !== 'undefined' && column.getCanHide())\n\n if (columns.length === 0) {\n return null\n }\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button type=\"button\" variant=\"outline\" color=\"zinc\" size=\"sm\" className={cn('ml-auto', className)} {...props}>\n <IconColumns3 data-icon=\"inline-start\" />\n {resolvedLabel}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-44\">\n <DropdownMenuGroup>\n {columns.map((column) => (\n <DropdownMenuCheckboxItem\n key={column.id}\n checked={column.getIsVisible()}\n onCheckedChange={(value) => column.toggleVisibility(Boolean(value))}\n >\n {column.id}\n </DropdownMenuCheckboxItem>\n ))}\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n\nfunction DataTableToolbar<TData extends RowData>({\n filterColumns,\n showColumnVisibility,\n toolbarActions,\n labels: labelsOverride,\n className\n}: DataTableToolbarProps<TData>) {\n const { table, labels: contextLabels } = useDataTableContext<TData>()\n const labels = React.useMemo(\n () => (labelsOverride ? { ...contextLabels, ...labelsOverride } : contextLabels),\n [contextLabels, labelsOverride]\n )\n const filterColumnIds = React.useMemo<string[]>(() => {\n if (!filterColumns) {\n return []\n }\n return Array.isArray(filterColumns) ? filterColumns : [filterColumns]\n }, [filterColumns])\n\n const actions = renderToolbarActions(toolbarActions, table)\n const hasFilter = filterColumnIds.length > 0\n const [activeFilterColumn, setActiveFilterColumn] = React.useState<string | undefined>(filterColumnIds[0])\n\n React.useEffect(() => {\n if (filterColumnIds.length === 0) {\n setActiveFilterColumn(undefined)\n return\n }\n setActiveFilterColumn((current) => (current && filterColumnIds.includes(current) ? current : filterColumnIds[0]))\n }, [filterColumnIds])\n\n if (!hasFilter && !showColumnVisibility && !actions) {\n return null\n }\n\n const activeColumn = activeFilterColumn ? table.getColumn(activeFilterColumn) : undefined\n const filterValue = (activeColumn?.getFilterValue() as string | undefined) ?? ''\n\n const handleColumnChange = (nextId: string) => {\n if (nextId === activeFilterColumn) {\n return\n }\n if (activeFilterColumn) {\n table.getColumn(activeFilterColumn)?.setFilterValue(undefined)\n }\n setActiveFilterColumn(nextId)\n }\n\n return (\n <div className={cn('flex flex-col gap-2 sm:flex-row sm:items-center', className)}>\n {hasFilter && activeColumn ? (\n filterColumnIds.length > 1 ? (\n <InputGroup className=\"h-8 w-full sm:max-w-md\">\n <InputGroupAddon align=\"inline-start\" className=\"pr-0\">\n <select\n aria-label={labels.filterColumnSelectorLabel}\n value={activeFilterColumn}\n onChange={(event) => handleColumnChange(event.target.value)}\n className=\"cursor-pointer appearance-none border-0 bg-transparent pr-1 text-sm font-medium text-foreground outline-none focus:outline-none\"\n >\n {filterColumnIds.map((id) => (\n <option key={id} value={id}>\n {getColumnLabel(table.getColumn(id))}\n </option>\n ))}\n </select>\n </InputGroupAddon>\n <InputGroupInput\n placeholder={labels.filterPlaceholder}\n value={filterValue}\n onChange={(event) => activeColumn.setFilterValue(event.target.value)}\n />\n </InputGroup>\n ) : (\n <Input\n placeholder={labels.filterPlaceholder}\n value={filterValue}\n onChange={(event) => activeColumn.setFilterValue(event.target.value)}\n className=\"h-8 w-full sm:max-w-xs\"\n />\n )\n ) : null}\n <div className=\"flex flex-1 items-center justify-end gap-2\">\n {actions}\n {showColumnVisibility ? <DataTableViewOptions table={table} label={labels.columnsButton} /> : null}\n </div>\n </div>\n )\n}\n\nfunction DataTableHeader<TData extends RowData>({ className }: DataTableHeaderProps = {}) {\n const { table } = useDataTableContext<TData>()\n return (\n <TableHeader className={className}>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => (\n <TableHead key={header.id} colSpan={header.colSpan}>\n {header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())}\n </TableHead>\n ))}\n </TableRow>\n ))}\n </TableHeader>\n )\n}\n\nfunction DataTableBody<TData extends RowData>({ emptyMessage, className }: DataTableBodyProps = {}) {\n const { table, labels } = useDataTableContext<TData>()\n const rows = table.getRowModel().rows\n const visibleColumnCount = table.getVisibleLeafColumns().length\n const resolvedEmptyMessage = emptyMessage ?? labels.emptyMessage\n\n return (\n <TableBody className={className}>\n {rows.length === 0 ? (\n <TableRow>\n <TableCell colSpan={visibleColumnCount} className=\"h-24 text-center\">\n {resolvedEmptyMessage}\n </TableCell>\n </TableRow>\n ) : (\n rows.map((row) => (\n <TableRow key={row.id} data-state={row.getIsSelected() ? 'selected' : undefined}>\n {row.getVisibleCells().map((cell) => (\n <TableCell key={cell.id}>{flexRender(cell.column.columnDef.cell, cell.getContext())}</TableCell>\n ))}\n </TableRow>\n ))\n )}\n </TableBody>\n )\n}\n\nfunction DataTablePagination<TData extends RowData>({\n table: tableProp,\n pageSizeOptions = [10, 20, 30, 40, 50],\n labels: labelsOverride,\n className,\n ...props\n}: DataTablePaginationProps<TData>) {\n const ctx = useOptionalDataTableContext<TData>()\n const table = tableProp ?? ctx?.table\n if (!table) {\n throw new Error('DataTablePagination requires a `table` prop or to be rendered within <DataTableRoot>')\n }\n const mergedLabels = React.useMemo(\n () => ({ ...defaultDataTableLabels, ...ctx?.labels, ...labelsOverride }),\n [ctx?.labels, labelsOverride]\n )\n const pageCount = table.getPageCount()\n const safePageCount = Math.max(pageCount, 1)\n const pageIndex = table.state.pagination.pageIndex\n\n return (\n <div className={cn('flex items-center justify-end gap-4 px-2', className)} {...props}>\n <div className=\"flex items-center gap-6 lg:gap-8\">\n <div className=\"hidden items-center gap-2 sm:flex\">\n <p className=\"text-sm font-medium\">{mergedLabels.rowsPerPage}</p>\n <Select\n value={`${table.state.pagination.pageSize}`}\n onValueChange={(value) => table.setPageSize(Number(value))}\n >\n <SelectTrigger size=\"sm\" className=\"h-8 w-20\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent side=\"top\">\n <SelectGroup>\n {pageSizeOptions.map((pageSize) => (\n <SelectItem key={pageSize} value={`${pageSize}`}>\n {pageSize}\n </SelectItem>\n ))}\n </SelectGroup>\n </SelectContent>\n </Select>\n </div>\n <div className=\"text-sm font-medium\">{mergedLabels.pageOf(pageIndex + 1, safePageCount)}</div>\n <div className=\"flex items-center gap-1\">\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"icon-sm\"\n className=\"hidden lg:inline-flex\"\n onClick={() => table.setPageIndex(0)}\n disabled={!table.getCanPreviousPage()}\n aria-label={mergedLabels.goToFirstPage}\n >\n <IconChevronsLeft />\n </Button>\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"icon-sm\"\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n aria-label={mergedLabels.goToPreviousPage}\n >\n <IconChevronLeft />\n </Button>\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"icon-sm\"\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n aria-label={mergedLabels.goToNextPage}\n >\n <IconChevronRight />\n </Button>\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"icon-sm\"\n className=\"hidden lg:inline-flex\"\n onClick={() => table.setPageIndex(pageCount - 1)}\n disabled={!table.getCanNextPage()}\n aria-label={mergedLabels.goToLastPage}\n >\n <IconChevronsRight />\n </Button>\n </div>\n </div>\n </div>\n )\n}\n\nfunction createDataTableSelectColumn<TData extends RowData>(options?: {\n labels?: Pick<Partial<DataTableLabels>, 'selectAllRows' | 'selectRow'>\n}): ColumnDef<TData> {\n const selectAllRows = options?.labels?.selectAllRows ?? defaultDataTableLabels.selectAllRows\n const selectRow = options?.labels?.selectRow ?? defaultDataTableLabels.selectRow\n\n return {\n id: 'select',\n enableSorting: false,\n enableHiding: false,\n header: ({ table }) => (\n <Checkbox\n aria-label={selectAllRows}\n checked={table.getIsAllPageRowsSelected() || (table.getIsSomePageRowsSelected() && 'indeterminate')}\n onCheckedChange={(value) => table.toggleAllPageRowsSelected(Boolean(value))}\n />\n ),\n cell: ({ row }) => (\n <Checkbox\n aria-label={selectRow}\n checked={row.getIsSelected() || (row.getIsSomeSelected() && 'indeterminate')}\n disabled={!row.getCanSelect()}\n onCheckedChange={(value) => row.toggleSelected(Boolean(value))}\n />\n )\n }\n}\n\nfunction DataTable<TData extends RowData, TValue = unknown>({\n columns,\n data,\n getRowId,\n filterColumns,\n pageSize = 10,\n pageSizeOptions,\n enableRowSelection = false,\n enableSorting = false,\n showPagination = false,\n showColumnVisibility = false,\n toolbarActions,\n labels,\n className,\n tableClassName,\n variant\n}: DataTableProps<TData, TValue>) {\n return (\n <DataTableRoot<TData, TValue>\n columns={columns}\n data={data}\n getRowId={getRowId}\n pageSize={pageSize}\n enableRowSelection={enableRowSelection}\n enableSorting={enableSorting}\n enablePagination={showPagination}\n labels={labels}\n className={className}\n >\n <DataTableToolbar\n filterColumns={filterColumns}\n showColumnVisibility={showColumnVisibility}\n toolbarActions={toolbarActions}\n />\n <TableContainer>\n <Table className={tableClassName} variant={variant}>\n <DataTableHeader />\n <DataTableBody />\n </Table>\n </TableContainer>\n {showPagination ? <DataTablePagination pageSizeOptions={pageSizeOptions} /> : null}\n </DataTableRoot>\n )\n}\n\nexport {\n createDataTableSelectColumn,\n DataTable,\n DataTableBody,\n DataTableColumnHeader,\n DataTableHeader,\n DataTablePagination,\n DataTableRoot,\n DataTableToolbar,\n DataTableViewOptions\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import"./rolldown-runtime-Bdj-bS2b.js";import{t as e}from"./utils-DP9KtG7I.js";import{t}from"./button-oI3hbOgp.js";import{t as n}from"./calendar-CW1kGXom.js";import{t as r}from"./input-BhEEV_nn.js";import{r as i,s as a,t as o}from"./popover-BtX3tX8M.js";import{IconArrowRight as s,IconCalendar as c,IconChevronDown as l}from"@tabler/icons-react";import{Fragment as u,jsx as d,jsxs as f}from"react/jsx-runtime";import*as p from"react";const m=p.createContext(null),h=[{label:`Hoje`,getRange:()=>{let e=startOfDay(new Date);return{from:e,to:e}}},{label:`Ontem`,getRange:()=>{let e=addDays(startOfDay(new Date),-1);return{from:e,to:e}}},{label:`Últimos 7 dias`,getRange:()=>{let e=startOfDay(new Date);return{from:addDays(e,-7),to:e}}},{label:`Últimos 15 dias`,getRange:()=>{let e=startOfDay(new Date);return{from:addDays(e,-15),to:e}}},{label:`Últimos 30 dias`,getRange:()=>{let e=startOfDay(new Date);return{from:addDays(e,-30),to:e}}},{label:`Últimos 60 dias`,getRange:()=>{let e=startOfDay(new Date);return{from:addDays(e,-60),to:e}}},{label:`Últimos 90 dias`,getRange:()=>{let e=startOfDay(new Date);return{from:addDays(e,-90),to:e}}},{label:`Semana passada`,getRange:()=>{let e=addDays(startOfWeek(new Date),-7);return{from:e,to:addDays(e,6)}}},{label:`Este mês`,getRange:()=>{let e=startOfDay(new Date);return{from:startOfMonth(e),to:e}}},{label:`Mês passado`,getRange:()=>{let e=new Date(new Date().getFullYear(),new Date().getMonth()-1,1);return{from:startOfMonth(e),to:endOfMonth(e)}}}];function DateRangePicker({value:e,defaultValue:t=null,onValueChange:n,onApply:r,onReset:i,open:a,defaultOpen:s=!1,onOpenChange:c,locale:l,placeholder:h=`Selecione um período`,children:g,..._}){let[v,y]=p.useState(t),[b,x]=p.useState(s),S=e!==void 0,C=a!==void 0,w=S?e??null:v,T=C?a:b,[E,D]=p.useState(()=>toDraft(w)),[O,k]=p.useState(()=>getRangeMonth(toDraft(w))),A=p.useCallback(e=>{let t=normalizeDraft(e);D(t);let n=getRangeMonth(t);n&&k(n)},[]),j=p.useCallback(e=>{S||y(e),n?.(e)},[S,n]),M=p.useCallback(e=>{if(e){let e=toDraft(w);D(e),k(getRangeMonth(e))}C||x(e),c?.(e)},[C,c,w]),N=p.useCallback(()=>{let e=toValue(E);j(e),r?.(e),M(!1)},[j,E,r,M]),P=p.useCallback(()=>{D(void 0),j(null),i?.(),M(!1)},[j,i,M]),F=p.useMemo(()=>({value:w,draft:E,month:O,locale:l,placeholder:h,setDraft:A,setMonth:k,apply:N,reset:P}),[N,E,l,O,h,P,A,w]);return d(m.Provider,{value:F,children:d(o,{open:T,onOpenChange:M,..._,children:g??f(u,{children:[d(DateRangePickerTrigger,{}),f(DateRangePickerContent,{children:[d(DateRangePickerPresets,{}),d(DateRangePickerDateFields,{}),d(DateRangePickerCalendar,{}),d(DateRangePickerActions,{})]})]})})})}function DateRangePickerTrigger({className:n,children:r,asChild:i=!1,variant:o=`outline`,color:s=`zinc`,type:p=`button`,...m}){return i?d(a,{asChild:!0,children:r}):d(a,{asChild:!0,children:d(t,{type:p,variant:o,color:s,className:e(`min-w-64 justify-between font-normal`,n),...m,children:r??f(u,{children:[d(c,{"data-icon":`inline-start`,className:`size-4 text-muted-foreground`}),d(DateRangePickerValue,{className:`flex-1 text-left`}),d(l,{"data-icon":`inline-end`,className:`size-4 text-muted-foreground`})]})})})}function DateRangePickerValue({className:t,placeholder:n,...r}){let{value:i,locale:a,placeholder:o}=useDateRangePicker();return d(`span`,{"data-slot":`date-range-picker-value`,className:e(`truncate`,t),...r,children:formatRange(i,a,n??o)})}function DateRangePickerContent({className:t,align:n=`start`,sideOffset:r=8,children:a,...o}){let s=p.Children.toArray(a),c=s.filter(isDateRangePickerPresetsElement),l=s.filter(e=>!isDateRangePickerPresetsElement(e));return d(i,{align:n,sideOffset:r,className:e(`w-[calc(100vw-(--spacing(4)))] max-w-2xl p-2`,t),...o,children:f(`div`,{"data-slot":`date-range-picker-content`,className:`grid gap-3 md:grid-cols-[10rem_minmax(0,1fr)]`,children:[c,d(`div`,{className:`flex min-w-0 flex-col gap-3`,children:l})]})})}function DateRangePickerPresets({className:t,presets:n=h,...r}){let{draft:i,setDraft:a}=useDateRangePicker(),o=getRelativeDaysValue(i,`today`),s=getRelativeDaysValue(i,`yesterday`);return f(`div`,{"data-slot":`date-range-picker-presets`,className:e(`hidden flex-col border-border pr-3 md:flex md:border-r`,t),...r,children:[n.map(e=>{let t=e.getRange();return d(DateRangePickerPreset,{type:`button`,selected:isSameRange(i,t),onClick:()=>a(t),children:e.label},e.label)}),f(`div`,{className:`my-3 flex flex-col gap-2`,children:[d(DateRangePickerRelativeField,{label:`Dias até hoje`,value:o,onValueChange:e=>a(getRelativeDaysRange(e,`today`))}),d(DateRangePickerRelativeField,{label:`Dias até ontem`,value:s,onValueChange:e=>a(getRelativeDaysRange(e,`yesterday`))})]})]})}function DateRangePickerPreset({className:t,selected:n=!1,...r}){return d(`button`,{"data-slot":`date-range-picker-preset`,"data-selected":n,className:e(`flex h-8.5 w-full items-center border-l-3 border-border bg-transparent px-2 text-left text-sm text-foreground transition-colors outline-none`,`hover:border-primary hover:bg-primary-50 hover:text-primary-700 dark:hover:bg-primary-950 dark:hover:text-primary-300`,`focus-visible:border-primary focus-visible:ring-3 focus-visible:ring-ring/50`,`data-[selected=true]:border-primary data-[selected=true]:bg-primary-50 data-[selected=true]:text-primary-700 dark:data-[selected=true]:bg-primary-950 dark:data-[selected=true]:text-primary-300`,t),"aria-pressed":n,...r})}function DateRangePickerRelativeField({label:e,value:t,onValueChange:n}){let i=p.useId(),[a,o]=p.useState(()=>formatRelativeInputValue(t));return p.useEffect(()=>{o(formatRelativeInputValue(t))},[t]),f(`div`,{className:`flex items-center gap-2 text-sm text-foreground`,children:[d(r,{id:i,type:`number`,name:e,min:1,step:1,value:a,className:`h-7 w-9 rounded-md px-1 text-center [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none`,"aria-label":e,onChange:e=>{let t=e.target.value;if(o(t),t===``)return;let r=parsePositiveInteger(t);r&&n(r)}}),d(`label`,{htmlFor:i,children:e})]})}function DateRangePickerCalendar({className:t,showOutsideDays:r=!1,onMonthChange:i,...a}){let{draft:o,locale:s,month:c,setDraft:l,setMonth:u}=useDateRangePicker();return d(n,{mode:`range`,numberOfMonths:2,showOutsideDays:r,month:c,onMonthChange:e=>{u(e),i?.(e)},selected:o,onSelect:l,locale:s,className:e(`mx-auto bg-transparent p-0`,t),...a})}function DateRangePickerDateFields({className:t,...n}){let{draft:i,setDraft:a}=useDateRangePicker();return f(`div`,{"data-slot":`date-range-picker-date-fields`,className:e(`pb-2 border-b flex justify-between gap-2 flex-wrap flex-col sm:flex-row sm:items-center`,t),...n,children:[d(r,{type:`date`,value:formatInputDate(i?.from),className:`sm:w-max`,onChange:e=>{if(e.target.value===``){a(void 0);return}let t=parseInputDate(e.target.value);t&&a(normalizeDraft({from:t,to:i?.to}))}}),d(s,{className:`size-4 text-primary hidden sm:block`}),d(r,{type:`date`,value:formatInputDate(i?.to),className:`sm:w-max`,onChange:e=>{if(e.target.value===``){a(void 0);return}let t=parseInputDate(e.target.value);t&&a(normalizeDraft({from:i?.from,to:t}))}})]})}function DateRangePickerActions({className:t,children:n,...r}){return d(`div`,{"data-slot":`date-range-picker-actions`,className:e(`flex items-center gap-2 mt-auto`,t),...r,children:n??f(u,{children:[d(DateRangePickerReset,{}),d(DateRangePickerApply,{})]})})}function DateRangePickerApply({children:n=`Aplicar`,onClick:r,className:i,...a}){let{apply:o}=useDateRangePicker();return d(t,{size:`sm`,className:e(`flex-1`,i),onClick:e=>{r?.(e),e.defaultPrevented||o()},...a,children:n})}function DateRangePickerReset({children:n=`Resetar`,onClick:r,variant:i=`outline`,color:a=`zinc`,className:o,...s}){let{reset:c}=useDateRangePicker();return d(t,{size:`sm`,className:e(`flex-1`,o),variant:i,color:a,onClick:e=>{r?.(e),e.defaultPrevented||c()},...s,children:n})}function useDateRangePicker(){let e=p.useContext(m);if(!e)throw Error(`DateRangePicker components must be used within DateRangePicker.`);return e}function isDateRangePickerPresetsElement(e){return p.isValidElement(e)&&e.type===DateRangePickerPresets}function toDraft(e){return normalizeDraft(e??void 0)}function toValue(e){return normalizeDraft(e)??null}function getRangeMonth(e){return startOfDay(e?.from??e?.to??new Date)}function normalizeDraft(e){if(!(!e?.from&&!e?.to))return e.from&&e.to&&e.from>e.to?{from:startOfDay(e.to),to:startOfDay(e.from)}:{from:e.from?startOfDay(e.from):void 0,to:e.to?startOfDay(e.to):void 0}}function formatRange(e,t,n){return!e?.from&&!e?.to?n:e.from&&e.to?`${formatDisplayDate(e.from,t)} - ${formatDisplayDate(e.to,t)}`:formatDisplayDate(e.from??e.to,t)}function formatDisplayDate(e,t){return e?new Intl.DateTimeFormat(t?.code??`pt-BR`,{day:`2-digit`,month:`2-digit`,year:`numeric`}).format(e):``}function formatInputDate(e){return e?`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-${String(e.getDate()).padStart(2,`0`)}`:``}function parseInputDate(e){if(!e)return;let t=/^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})$/.exec(e);if(!t?.groups)return;let n=Number(t.groups.year),r=Number(t.groups.month),i=Number(t.groups.day),a=new Date(n,r-1,i);if(a.getFullYear()===n&&a.getMonth()===r-1&&a.getDate()===i)return a}function parsePositiveInteger(e){if(!e)return;let t=Number(e);if(!(!Number.isInteger(t)||t<1))return t}function formatRelativeInputValue(e){return e?String(e):``}function getRelativeDaysRange(e,t){let n=startOfDay(new Date),r=t===`today`?addDays(n,-1):addDays(n,-2);return{from:addDays(r,-e+1),to:r}}function getRelativeDaysValue(e,t){if(!e?.from||!e.to)return;let n=startOfDay(new Date),r=t===`today`?addDays(n,-1):addDays(n,-2);if(!isSameDay(e.to,r))return;let i=differenceInCalendarDays(r,startOfDay(e.from))+1;return i>0?i:void 0}function isSameRange(e,t){return isSameDay(e?.from,t?.from)&&isSameDay(e?.to,t?.to)}function isSameDay(e,t){return!e||!t?e===t:e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate()}function startOfDay(e){return new Date(e.getFullYear(),e.getMonth(),e.getDate())}function startOfWeek(e){let t=startOfDay(e);return addDays(t,-t.getDay())}function startOfMonth(e){return new Date(e.getFullYear(),e.getMonth(),1)}function endOfMonth(e){return new Date(e.getFullYear(),e.getMonth()+1,0)}function differenceInCalendarDays(e,t){return Math.round((startOfDay(e).getTime()-startOfDay(t).getTime())/(1440*60*1e3))}function addDays(e,t){let n=startOfDay(e);return n.setDate(n.getDate()+t),n}export{DateRangePickerContent as a,DateRangePickerPresets as c,DateRangePickerValue as d,DateRangePickerCalendar as i,DateRangePickerReset as l,DateRangePickerActions as n,DateRangePickerDateFields as o,DateRangePickerApply as r,DateRangePickerPreset as s,DateRangePicker as t,DateRangePickerTrigger as u};
2
- //# sourceMappingURL=date-range-picker-w3ZVRIII.js.map
1
+ import"./rolldown-runtime-Bdj-bS2b.js";import{t as e}from"./utils-DP9KtG7I.js";import{t}from"./button-oI3hbOgp.js";import{t as n}from"./calendar-CW1kGXom.js";import{t as r}from"./input-CJLsPlXh.js";import{r as i,s as a,t as o}from"./popover-BtX3tX8M.js";import{IconArrowRight as s,IconCalendar as c,IconChevronDown as l}from"@tabler/icons-react";import{Fragment as u,jsx as d,jsxs as f}from"react/jsx-runtime";import*as p from"react";const m=p.createContext(null),h=[{label:`Hoje`,getRange:()=>{let e=startOfDay(new Date);return{from:e,to:e}}},{label:`Ontem`,getRange:()=>{let e=addDays(startOfDay(new Date),-1);return{from:e,to:e}}},{label:`Últimos 7 dias`,getRange:()=>{let e=startOfDay(new Date);return{from:addDays(e,-7),to:e}}},{label:`Últimos 15 dias`,getRange:()=>{let e=startOfDay(new Date);return{from:addDays(e,-15),to:e}}},{label:`Últimos 30 dias`,getRange:()=>{let e=startOfDay(new Date);return{from:addDays(e,-30),to:e}}},{label:`Últimos 60 dias`,getRange:()=>{let e=startOfDay(new Date);return{from:addDays(e,-60),to:e}}},{label:`Últimos 90 dias`,getRange:()=>{let e=startOfDay(new Date);return{from:addDays(e,-90),to:e}}},{label:`Semana passada`,getRange:()=>{let e=addDays(startOfWeek(new Date),-7);return{from:e,to:addDays(e,6)}}},{label:`Este mês`,getRange:()=>{let e=startOfDay(new Date);return{from:startOfMonth(e),to:e}}},{label:`Mês passado`,getRange:()=>{let e=new Date(new Date().getFullYear(),new Date().getMonth()-1,1);return{from:startOfMonth(e),to:endOfMonth(e)}}}];function DateRangePicker({value:e,defaultValue:t=null,onValueChange:n,onApply:r,onReset:i,open:a,defaultOpen:s=!1,onOpenChange:c,locale:l,placeholder:h=`Selecione um período`,children:g,..._}){let[v,y]=p.useState(t),[b,x]=p.useState(s),S=e!==void 0,C=a!==void 0,w=S?e??null:v,T=C?a:b,[E,D]=p.useState(()=>toDraft(w)),[O,k]=p.useState(()=>getRangeMonth(toDraft(w))),A=p.useCallback(e=>{let t=normalizeDraft(e);D(t);let n=getRangeMonth(t);n&&k(n)},[]),j=p.useCallback(e=>{S||y(e),n?.(e)},[S,n]),M=p.useCallback(e=>{if(e){let e=toDraft(w);D(e),k(getRangeMonth(e))}C||x(e),c?.(e)},[C,c,w]),N=p.useCallback(()=>{let e=toValue(E);j(e),r?.(e),M(!1)},[j,E,r,M]),P=p.useCallback(()=>{D(void 0),j(null),i?.(),M(!1)},[j,i,M]),F=p.useMemo(()=>({value:w,draft:E,month:O,locale:l,placeholder:h,setDraft:A,setMonth:k,apply:N,reset:P}),[N,E,l,O,h,P,A,w]);return d(m.Provider,{value:F,children:d(o,{open:T,onOpenChange:M,..._,children:g??f(u,{children:[d(DateRangePickerTrigger,{}),f(DateRangePickerContent,{children:[d(DateRangePickerPresets,{}),d(DateRangePickerDateFields,{}),d(DateRangePickerCalendar,{}),d(DateRangePickerActions,{})]})]})})})}function DateRangePickerTrigger({className:n,children:r,asChild:i=!1,variant:o=`outline`,color:s=`zinc`,type:p=`button`,...m}){return i?d(a,{asChild:!0,children:r}):d(a,{asChild:!0,children:d(t,{type:p,variant:o,color:s,className:e(`min-w-64 justify-between font-normal`,n),...m,children:r??f(u,{children:[d(c,{"data-icon":`inline-start`,className:`size-4 text-muted-foreground`}),d(DateRangePickerValue,{className:`flex-1 text-left`}),d(l,{"data-icon":`inline-end`,className:`size-4 text-muted-foreground`})]})})})}function DateRangePickerValue({className:t,placeholder:n,...r}){let{value:i,locale:a,placeholder:o}=useDateRangePicker();return d(`span`,{"data-slot":`date-range-picker-value`,className:e(`truncate`,t),...r,children:formatRange(i,a,n??o)})}function DateRangePickerContent({className:t,align:n=`start`,sideOffset:r=8,children:a,...o}){let s=p.Children.toArray(a),c=s.filter(isDateRangePickerPresetsElement),l=s.filter(e=>!isDateRangePickerPresetsElement(e));return d(i,{align:n,sideOffset:r,className:e(`w-[calc(100vw-(--spacing(4)))] max-w-2xl p-2`,t),...o,children:f(`div`,{"data-slot":`date-range-picker-content`,className:`grid gap-3 md:grid-cols-[10rem_minmax(0,1fr)]`,children:[c,d(`div`,{className:`flex min-w-0 flex-col gap-3`,children:l})]})})}function DateRangePickerPresets({className:t,presets:n=h,...r}){let{draft:i,setDraft:a}=useDateRangePicker(),o=getRelativeDaysValue(i,`today`),s=getRelativeDaysValue(i,`yesterday`);return f(`div`,{"data-slot":`date-range-picker-presets`,className:e(`hidden flex-col border-border pr-3 md:flex md:border-r`,t),...r,children:[n.map(e=>{let t=e.getRange();return d(DateRangePickerPreset,{type:`button`,selected:isSameRange(i,t),onClick:()=>a(t),children:e.label},e.label)}),f(`div`,{className:`my-3 flex flex-col gap-2`,children:[d(DateRangePickerRelativeField,{label:`Dias até hoje`,value:o,onValueChange:e=>a(getRelativeDaysRange(e,`today`))}),d(DateRangePickerRelativeField,{label:`Dias até ontem`,value:s,onValueChange:e=>a(getRelativeDaysRange(e,`yesterday`))})]})]})}function DateRangePickerPreset({className:t,selected:n=!1,...r}){return d(`button`,{"data-slot":`date-range-picker-preset`,"data-selected":n,className:e(`flex h-8.5 w-full items-center border-l-3 border-border bg-transparent px-2 text-left text-sm text-foreground transition-colors outline-none`,`hover:border-primary hover:bg-primary-50 hover:text-primary-700 dark:hover:bg-primary-950 dark:hover:text-primary-300`,`focus-visible:border-primary focus-visible:ring-3 focus-visible:ring-ring/50`,`data-[selected=true]:border-primary data-[selected=true]:bg-primary-50 data-[selected=true]:text-primary-700 dark:data-[selected=true]:bg-primary-950 dark:data-[selected=true]:text-primary-300`,t),"aria-pressed":n,...r})}function DateRangePickerRelativeField({label:e,value:t,onValueChange:n}){let i=p.useId(),[a,o]=p.useState(()=>formatRelativeInputValue(t));return p.useEffect(()=>{o(formatRelativeInputValue(t))},[t]),f(`div`,{className:`flex items-center gap-2 text-sm text-foreground`,children:[d(r,{id:i,type:`number`,name:e,min:1,step:1,value:a,className:`h-7 w-9 rounded-md px-1 text-center [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none`,"aria-label":e,onChange:e=>{let t=e.target.value;if(o(t),t===``)return;let r=parsePositiveInteger(t);r&&n(r)}}),d(`label`,{htmlFor:i,children:e})]})}function DateRangePickerCalendar({className:t,showOutsideDays:r=!1,onMonthChange:i,...a}){let{draft:o,locale:s,month:c,setDraft:l,setMonth:u}=useDateRangePicker();return d(n,{mode:`range`,numberOfMonths:2,showOutsideDays:r,month:c,onMonthChange:e=>{u(e),i?.(e)},selected:o,onSelect:l,locale:s,className:e(`mx-auto bg-transparent p-0`,t),...a})}function DateRangePickerDateFields({className:t,...n}){let{draft:i,setDraft:a}=useDateRangePicker();return f(`div`,{"data-slot":`date-range-picker-date-fields`,className:e(`pb-2 border-b flex justify-between gap-2 flex-wrap flex-col sm:flex-row sm:items-center`,t),...n,children:[d(r,{type:`date`,value:formatInputDate(i?.from),className:`sm:w-max`,onChange:e=>{if(e.target.value===``){a(void 0);return}let t=parseInputDate(e.target.value);t&&a(normalizeDraft({from:t,to:i?.to}))}}),d(s,{className:`size-4 text-primary hidden sm:block`}),d(r,{type:`date`,value:formatInputDate(i?.to),className:`sm:w-max`,onChange:e=>{if(e.target.value===``){a(void 0);return}let t=parseInputDate(e.target.value);t&&a(normalizeDraft({from:i?.from,to:t}))}})]})}function DateRangePickerActions({className:t,children:n,...r}){return d(`div`,{"data-slot":`date-range-picker-actions`,className:e(`flex items-center gap-2 mt-auto`,t),...r,children:n??f(u,{children:[d(DateRangePickerReset,{}),d(DateRangePickerApply,{})]})})}function DateRangePickerApply({children:n=`Aplicar`,onClick:r,className:i,...a}){let{apply:o}=useDateRangePicker();return d(t,{size:`sm`,className:e(`flex-1`,i),onClick:e=>{r?.(e),e.defaultPrevented||o()},...a,children:n})}function DateRangePickerReset({children:n=`Resetar`,onClick:r,variant:i=`outline`,color:a=`zinc`,className:o,...s}){let{reset:c}=useDateRangePicker();return d(t,{size:`sm`,className:e(`flex-1`,o),variant:i,color:a,onClick:e=>{r?.(e),e.defaultPrevented||c()},...s,children:n})}function useDateRangePicker(){let e=p.useContext(m);if(!e)throw Error(`DateRangePicker components must be used within DateRangePicker.`);return e}function isDateRangePickerPresetsElement(e){return p.isValidElement(e)&&e.type===DateRangePickerPresets}function toDraft(e){return normalizeDraft(e??void 0)}function toValue(e){return normalizeDraft(e)??null}function getRangeMonth(e){return startOfDay(e?.from??e?.to??new Date)}function normalizeDraft(e){if(!(!e?.from&&!e?.to))return e.from&&e.to&&e.from>e.to?{from:startOfDay(e.to),to:startOfDay(e.from)}:{from:e.from?startOfDay(e.from):void 0,to:e.to?startOfDay(e.to):void 0}}function formatRange(e,t,n){return!e?.from&&!e?.to?n:e.from&&e.to?`${formatDisplayDate(e.from,t)} - ${formatDisplayDate(e.to,t)}`:formatDisplayDate(e.from??e.to,t)}function formatDisplayDate(e,t){return e?new Intl.DateTimeFormat(t?.code??`pt-BR`,{day:`2-digit`,month:`2-digit`,year:`numeric`}).format(e):``}function formatInputDate(e){return e?`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-${String(e.getDate()).padStart(2,`0`)}`:``}function parseInputDate(e){if(!e)return;let t=/^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})$/.exec(e);if(!t?.groups)return;let n=Number(t.groups.year),r=Number(t.groups.month),i=Number(t.groups.day),a=new Date(n,r-1,i);if(a.getFullYear()===n&&a.getMonth()===r-1&&a.getDate()===i)return a}function parsePositiveInteger(e){if(!e)return;let t=Number(e);if(!(!Number.isInteger(t)||t<1))return t}function formatRelativeInputValue(e){return e?String(e):``}function getRelativeDaysRange(e,t){let n=startOfDay(new Date),r=t===`today`?addDays(n,-1):addDays(n,-2);return{from:addDays(r,-e+1),to:r}}function getRelativeDaysValue(e,t){if(!e?.from||!e.to)return;let n=startOfDay(new Date),r=t===`today`?addDays(n,-1):addDays(n,-2);if(!isSameDay(e.to,r))return;let i=differenceInCalendarDays(r,startOfDay(e.from))+1;return i>0?i:void 0}function isSameRange(e,t){return isSameDay(e?.from,t?.from)&&isSameDay(e?.to,t?.to)}function isSameDay(e,t){return!e||!t?e===t:e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate()}function startOfDay(e){return new Date(e.getFullYear(),e.getMonth(),e.getDate())}function startOfWeek(e){let t=startOfDay(e);return addDays(t,-t.getDay())}function startOfMonth(e){return new Date(e.getFullYear(),e.getMonth(),1)}function endOfMonth(e){return new Date(e.getFullYear(),e.getMonth()+1,0)}function differenceInCalendarDays(e,t){return Math.round((startOfDay(e).getTime()-startOfDay(t).getTime())/(1440*60*1e3))}function addDays(e,t){let n=startOfDay(e);return n.setDate(n.getDate()+t),n}export{DateRangePickerContent as a,DateRangePickerPresets as c,DateRangePickerValue as d,DateRangePickerCalendar as i,DateRangePickerReset as l,DateRangePickerActions as n,DateRangePickerDateFields as o,DateRangePickerApply as r,DateRangePickerPreset as s,DateRangePicker as t,DateRangePickerTrigger as u};
2
+ //# sourceMappingURL=date-range-picker-BjkVzFWQ.js.map