@wheelhouse/ui 0.2.2 → 0.2.4

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 (236) hide show
  1. package/dist/blocks/columns/columns-types.d.ts +40 -0
  2. package/dist/blocks/columns/columns-types.d.ts.map +1 -0
  3. package/dist/blocks/columns/columns-types.js +10 -0
  4. package/dist/blocks/columns/columns-utils.d.ts +13 -0
  5. package/dist/blocks/columns/columns-utils.d.ts.map +1 -0
  6. package/dist/blocks/columns/columns-utils.js +85 -0
  7. package/dist/blocks/columns/columns.d.ts +3 -0
  8. package/dist/blocks/columns/columns.d.ts.map +1 -0
  9. package/dist/blocks/columns/columns.js +79 -0
  10. package/dist/blocks/columns/columns.stories.d.ts +12 -0
  11. package/dist/blocks/columns/columns.stories.d.ts.map +1 -0
  12. package/dist/blocks/columns/columns.stories.js +67 -0
  13. package/dist/blocks/columns/index.d.ts +6 -0
  14. package/dist/blocks/columns/index.d.ts.map +1 -0
  15. package/dist/blocks/columns/index.js +3 -0
  16. package/dist/blocks/date-selector/date-selector-context.d.ts.map +1 -0
  17. package/dist/blocks/date-selector/date-selector-default-i18n.d.ts +10 -0
  18. package/dist/blocks/date-selector/date-selector-default-i18n.d.ts.map +1 -0
  19. package/dist/blocks/date-selector/date-selector-default-i18n.js +29 -0
  20. package/dist/blocks/date-selector/date-selector-i18n-resources.d.ts +11 -0
  21. package/dist/blocks/date-selector/date-selector-i18n-resources.d.ts.map +1 -0
  22. package/dist/blocks/date-selector/date-selector-i18n-resources.js +248 -0
  23. package/dist/blocks/date-selector/date-selector-i18n.shared.d.ts +12 -0
  24. package/dist/blocks/date-selector/date-selector-i18n.shared.d.ts.map +1 -0
  25. package/dist/blocks/date-selector/date-selector-i18n.shared.js +84 -0
  26. package/dist/{components → blocks}/date-selector/date-selector-parts.d.ts +9 -0
  27. package/dist/blocks/date-selector/date-selector-parts.d.ts.map +1 -0
  28. package/dist/{components → blocks}/date-selector/date-selector-parts.js +21 -6
  29. package/dist/{components → blocks}/date-selector/date-selector-types.d.ts +70 -0
  30. package/dist/blocks/date-selector/date-selector-types.d.ts.map +1 -0
  31. package/dist/{components → blocks}/date-selector/date-selector-types.js +22 -0
  32. package/dist/blocks/date-selector/date-selector-value.d.ts +81 -0
  33. package/dist/blocks/date-selector/date-selector-value.d.ts.map +1 -0
  34. package/dist/blocks/date-selector/date-selector-value.js +423 -0
  35. package/dist/{components → blocks}/date-selector/date-selector.d.ts +1 -1
  36. package/dist/blocks/date-selector/date-selector.d.ts.map +1 -0
  37. package/dist/blocks/date-selector/date-selector.js +191 -0
  38. package/dist/{components → blocks}/date-selector/date-selector.stories.d.ts +14 -0
  39. package/dist/blocks/date-selector/date-selector.stories.d.ts.map +1 -0
  40. package/dist/blocks/date-selector/date-selector.stories.js +299 -0
  41. package/dist/blocks/date-selector/index.d.ts +11 -0
  42. package/dist/blocks/date-selector/index.d.ts.map +1 -0
  43. package/dist/blocks/date-selector/index.js +8 -0
  44. package/dist/{components → blocks}/date-selector/use-date-selector.d.ts +4 -3
  45. package/dist/blocks/date-selector/use-date-selector.d.ts.map +1 -0
  46. package/dist/{components → blocks}/date-selector/use-date-selector.js +14 -8
  47. package/dist/blocks/floating-menu-widget/floating-menu-widget.d.ts +26 -0
  48. package/dist/blocks/floating-menu-widget/floating-menu-widget.d.ts.map +1 -0
  49. package/dist/blocks/floating-menu-widget/floating-menu-widget.js +200 -0
  50. package/dist/blocks/floating-menu-widget/floating-menu-widget.stories.d.ts +15 -0
  51. package/dist/blocks/floating-menu-widget/floating-menu-widget.stories.d.ts.map +1 -0
  52. package/dist/blocks/floating-menu-widget/floating-menu-widget.stories.js +22 -0
  53. package/dist/blocks/floating-menu-widget/index.d.ts +3 -0
  54. package/dist/blocks/floating-menu-widget/index.d.ts.map +1 -0
  55. package/dist/blocks/floating-menu-widget/index.js +1 -0
  56. package/dist/blocks/index.d.ts +5 -0
  57. package/dist/blocks/index.d.ts.map +1 -0
  58. package/dist/blocks/index.js +4 -0
  59. package/dist/blocks/navigation/index.d.ts +5 -0
  60. package/dist/blocks/navigation/index.d.ts.map +1 -0
  61. package/dist/blocks/navigation/index.js +2 -0
  62. package/dist/blocks/navigation/navigation-types.d.ts +60 -0
  63. package/dist/blocks/navigation/navigation-types.d.ts.map +1 -0
  64. package/dist/blocks/navigation/navigation-types.js +1 -0
  65. package/dist/blocks/navigation/navigation.d.ts +9 -0
  66. package/dist/blocks/navigation/navigation.d.ts.map +1 -0
  67. package/dist/blocks/navigation/navigation.demo.d.ts +4 -0
  68. package/dist/blocks/navigation/navigation.demo.d.ts.map +1 -0
  69. package/dist/blocks/navigation/navigation.demo.js +46 -0
  70. package/dist/blocks/navigation/navigation.js +98 -0
  71. package/dist/blocks/navigation/navigation.stories.d.ts +14 -0
  72. package/dist/blocks/navigation/navigation.stories.d.ts.map +1 -0
  73. package/dist/blocks/navigation/navigation.stories.js +16 -0
  74. package/dist/components/accordion/accordion.stories.js +1 -1
  75. package/dist/components/alert/alert.stories.js +1 -1
  76. package/dist/components/alert-dialog/alert-dialog.stories.js +1 -1
  77. package/dist/components/aspect-ratio/aspect-ratio.stories.js +1 -1
  78. package/dist/components/avatar/avatar.stories.js +1 -1
  79. package/dist/components/badge/badge.stories.js +1 -1
  80. package/dist/components/breadcrumb/breadcrumb.stories.js +1 -1
  81. package/dist/components/button/button.d.ts +18 -11
  82. package/dist/components/button/button.d.ts.map +1 -1
  83. package/dist/components/button/button.js +27 -14
  84. package/dist/components/button/button.stories.d.ts +11 -0
  85. package/dist/components/button/button.stories.d.ts.map +1 -1
  86. package/dist/components/button/button.stories.js +85 -1
  87. package/dist/components/button-group/button-group.d.ts +10 -4
  88. package/dist/components/button-group/button-group.d.ts.map +1 -1
  89. package/dist/components/button-group/button-group.js +15 -3
  90. package/dist/components/button-group/button-group.stories.js +1 -1
  91. package/dist/components/button-group/index.d.ts +2 -2
  92. package/dist/components/button-group/index.d.ts.map +1 -1
  93. package/dist/components/button-group/index.js +1 -1
  94. package/dist/components/calendar/calendar.stories.js +1 -1
  95. package/dist/components/card/card.stories.js +1 -1
  96. package/dist/components/checkbox/checkbox.stories.js +1 -1
  97. package/dist/components/collapsible/collapsible.stories.js +1 -1
  98. package/dist/components/combobox/combobox.stories.js +1 -1
  99. package/dist/components/command/command.stories.js +1 -1
  100. package/dist/components/context-menu/context-menu.stories.js +1 -1
  101. package/dist/components/dialog/dialog.stories.js +1 -1
  102. package/dist/components/direction/direction.stories.js +1 -1
  103. package/dist/components/drawer/drawer.stories.js +1 -1
  104. package/dist/components/dropdown-menu/dropdown-menu.d.ts +9 -2
  105. package/dist/components/dropdown-menu/dropdown-menu.d.ts.map +1 -1
  106. package/dist/components/dropdown-menu/dropdown-menu.js +4 -1
  107. package/dist/components/dropdown-menu/dropdown-menu.stories.js +1 -1
  108. package/dist/components/dropdown-menu/index.d.ts +2 -2
  109. package/dist/components/dropdown-menu/index.d.ts.map +1 -1
  110. package/dist/components/dropdown-menu/index.js +1 -1
  111. package/dist/components/empty/empty.stories.js +1 -1
  112. package/dist/components/field/field.stories.js +1 -1
  113. package/dist/components/filters/filter-date-metric-value.d.ts +32 -0
  114. package/dist/components/filters/filter-date-metric-value.d.ts.map +1 -0
  115. package/dist/components/filters/filter-date-metric-value.js +406 -0
  116. package/dist/components/filters/filter-fields-listing-demo.d.ts +12 -0
  117. package/dist/components/filters/filter-fields-listing-demo.d.ts.map +1 -0
  118. package/dist/components/filters/filter-fields-listing-demo.js +565 -0
  119. package/dist/components/filters/filters-defaults.d.ts +4 -0
  120. package/dist/components/filters/filters-defaults.d.ts.map +1 -1
  121. package/dist/components/filters/filters-defaults.js +59 -1
  122. package/dist/components/filters/filters-i18n-resources.d.ts +277 -0
  123. package/dist/components/filters/filters-i18n-resources.d.ts.map +1 -0
  124. package/dist/components/filters/filters-i18n-resources.js +276 -0
  125. package/dist/components/filters/filters-i18n.shared.d.ts +16 -0
  126. package/dist/components/filters/filters-i18n.shared.d.ts.map +1 -0
  127. package/dist/components/filters/filters-i18n.shared.js +111 -0
  128. package/dist/components/filters/filters-types.d.ts +40 -1
  129. package/dist/components/filters/filters-types.d.ts.map +1 -1
  130. package/dist/components/filters/filters-utils.d.ts +28 -1
  131. package/dist/components/filters/filters-utils.d.ts.map +1 -1
  132. package/dist/components/filters/filters-utils.js +102 -0
  133. package/dist/components/filters/filters.d.ts +21 -3
  134. package/dist/components/filters/filters.d.ts.map +1 -1
  135. package/dist/components/filters/filters.js +493 -290
  136. package/dist/components/filters/filters.stories.d.ts +107 -2
  137. package/dist/components/filters/filters.stories.d.ts.map +1 -1
  138. package/dist/components/filters/filters.stories.js +224 -30
  139. package/dist/components/filters/index.d.ts +4 -1
  140. package/dist/components/filters/index.d.ts.map +1 -1
  141. package/dist/components/filters/index.js +4 -1
  142. package/dist/components/frame/frame.stories.js +1 -1
  143. package/dist/components/hover-card/hover-card.stories.js +1 -1
  144. package/dist/components/index.d.ts +2 -2
  145. package/dist/components/index.d.ts.map +1 -1
  146. package/dist/components/index.js +2 -2
  147. package/dist/components/input/input.stories.js +1 -1
  148. package/dist/components/input-group/input-group.stories.js +1 -1
  149. package/dist/components/item/item.stories.js +1 -1
  150. package/dist/components/kbd/kbd.stories.js +1 -1
  151. package/dist/components/label/label.stories.js +1 -1
  152. package/dist/components/menubar/menubar.stories.js +1 -1
  153. package/dist/components/native-select/native-select.stories.js +1 -1
  154. package/dist/components/navigation-menu/navigation-menu.stories.js +1 -1
  155. package/dist/components/pagination/pagination.stories.js +1 -1
  156. package/dist/components/popover/index.d.ts +1 -0
  157. package/dist/components/popover/index.d.ts.map +1 -1
  158. package/dist/components/popover/index.js +1 -0
  159. package/dist/components/popover/popover-handle.d.ts +6 -0
  160. package/dist/components/popover/popover-handle.d.ts.map +1 -0
  161. package/dist/components/popover/popover-handle.js +6 -0
  162. package/dist/components/popover/popover.d.ts +41 -7
  163. package/dist/components/popover/popover.d.ts.map +1 -1
  164. package/dist/components/popover/popover.js +50 -3
  165. package/dist/components/popover/popover.stories.js +1 -1
  166. package/dist/components/progress/progress.js +1 -1
  167. package/dist/components/progress/progress.stories.d.ts +11 -2
  168. package/dist/components/progress/progress.stories.d.ts.map +1 -1
  169. package/dist/components/progress/progress.stories.js +78 -5
  170. package/dist/components/radio-group/radio-group.stories.js +1 -1
  171. package/dist/components/resizable/resizable.stories.js +1 -1
  172. package/dist/components/scroll-area/scroll-area.stories.js +1 -1
  173. package/dist/components/select/select.stories.js +1 -1
  174. package/dist/components/separator/separator.stories.js +1 -1
  175. package/dist/components/sheet/sheet.stories.js +1 -1
  176. package/dist/components/sidebar/index.d.ts +2 -0
  177. package/dist/components/sidebar/index.d.ts.map +1 -0
  178. package/dist/components/sidebar/index.js +1 -0
  179. package/dist/components/sidebar/sidebar.d.ts +64 -0
  180. package/dist/components/sidebar/sidebar.d.ts.map +1 -0
  181. package/dist/components/sidebar/sidebar.js +255 -0
  182. package/dist/components/sidebar/sidebar.stories.d.ts +20 -0
  183. package/dist/components/sidebar/sidebar.stories.d.ts.map +1 -0
  184. package/dist/components/sidebar/sidebar.stories.js +184 -0
  185. package/dist/components/skeleton/index.d.ts +3 -0
  186. package/dist/components/skeleton/index.d.ts.map +1 -0
  187. package/dist/components/skeleton/index.js +1 -0
  188. package/dist/components/skeleton/skeleton.d.ts +7 -0
  189. package/dist/components/skeleton/skeleton.d.ts.map +1 -0
  190. package/dist/components/skeleton/skeleton.js +8 -0
  191. package/dist/components/slider/slider.stories.js +1 -1
  192. package/dist/components/sonner/sonner.stories.js +1 -1
  193. package/dist/components/sortable/sortable.stories.js +1 -1
  194. package/dist/components/spinner/spinner.stories.js +1 -1
  195. package/dist/components/status-indicator/status-indicator.stories.js +1 -1
  196. package/dist/components/switch/switch.stories.js +1 -1
  197. package/dist/components/tabs/tabs.stories.js +1 -1
  198. package/dist/components/text/text.stories.js +1 -1
  199. package/dist/components/textarea/textarea.stories.js +1 -1
  200. package/dist/components/toggle/toggle.stories.js +1 -1
  201. package/dist/components/toggle-group/toggle-group.stories.js +1 -1
  202. package/dist/components/tooltip/tooltip.stories.js +1 -1
  203. package/dist/index.d.ts +1 -0
  204. package/dist/index.d.ts.map +1 -1
  205. package/dist/index.js +1 -0
  206. package/dist/tsconfig.tsbuildinfo +1 -1
  207. package/llms.txt +10 -5
  208. package/package.json +8 -4
  209. package/dist/components/date-selector/date-selector-context.d.ts.map +0 -1
  210. package/dist/components/date-selector/date-selector-parts.d.ts.map +0 -1
  211. package/dist/components/date-selector/date-selector-types.d.ts.map +0 -1
  212. package/dist/components/date-selector/date-selector-value.d.ts +0 -47
  213. package/dist/components/date-selector/date-selector-value.d.ts.map +0 -1
  214. package/dist/components/date-selector/date-selector-value.js +0 -183
  215. package/dist/components/date-selector/date-selector.d.ts.map +0 -1
  216. package/dist/components/date-selector/date-selector.js +0 -144
  217. package/dist/components/date-selector/date-selector.stories.d.ts.map +0 -1
  218. package/dist/components/date-selector/date-selector.stories.js +0 -144
  219. package/dist/components/date-selector/index.d.ts +0 -7
  220. package/dist/components/date-selector/index.d.ts.map +0 -1
  221. package/dist/components/date-selector/index.js +0 -5
  222. package/dist/components/date-selector/use-date-selector.d.ts.map +0 -1
  223. package/dist/components/navigation-pattern-1/index.d.ts +0 -3
  224. package/dist/components/navigation-pattern-1/index.d.ts.map +0 -1
  225. package/dist/components/navigation-pattern-1/index.js +0 -1
  226. package/dist/components/navigation-pattern-1/pattern-1.config.d.ts +0 -47
  227. package/dist/components/navigation-pattern-1/pattern-1.config.d.ts.map +0 -1
  228. package/dist/components/navigation-pattern-1/pattern-1.config.js +0 -55
  229. package/dist/components/navigation-pattern-1/pattern-1.d.ts +0 -7
  230. package/dist/components/navigation-pattern-1/pattern-1.d.ts.map +0 -1
  231. package/dist/components/navigation-pattern-1/pattern-1.js +0 -83
  232. package/dist/components/navigation-pattern-1/pattern-1.stories.d.ts +0 -16
  233. package/dist/components/navigation-pattern-1/pattern-1.stories.d.ts.map +0 -1
  234. package/dist/components/navigation-pattern-1/pattern-1.stories.js +0 -20
  235. /package/dist/{components → blocks}/date-selector/date-selector-context.d.ts +0 -0
  236. /package/dist/{components → blocks}/date-selector/date-selector-context.js +0 -0
@@ -0,0 +1,40 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { DateSelectorValue } from '../date-selector';
3
+ export interface ColumnDefinition {
4
+ id: string;
5
+ name: string;
6
+ description?: string;
7
+ /** When true, selecting the row opens the date configuration pane. */
8
+ supportsDateRange?: boolean;
9
+ icon?: ReactNode;
10
+ }
11
+ export interface ColumnFieldGroup {
12
+ group?: string;
13
+ fields: ColumnDefinition[];
14
+ }
15
+ export type ColumnsFieldsConfig = (ColumnDefinition | ColumnFieldGroup)[];
16
+ export interface SelectedColumn {
17
+ id: string;
18
+ dateRange?: DateSelectorValue;
19
+ }
20
+ export interface ColumnsI18n {
21
+ triggerLabel: string;
22
+ triggerCount: (n: number) => string;
23
+ addColumnsTitle: string;
24
+ addColumnsSubtitle: string;
25
+ clearAll: string;
26
+ /** Shown after the numeric count in the footer (e.g. "columns selected"). */
27
+ columnsSelectedSuffix: (n: number) => string;
28
+ configureDateRangeHint: string;
29
+ done: string;
30
+ }
31
+ export declare const DEFAULT_COLUMNS_I18N: ColumnsI18n;
32
+ export interface ColumnsProps {
33
+ columns: ColumnsFieldsConfig;
34
+ value: SelectedColumn[];
35
+ onChange: (value: SelectedColumn[]) => void;
36
+ className?: string;
37
+ popoverContentClassName?: string;
38
+ i18n?: Partial<ColumnsI18n>;
39
+ }
40
+ //# sourceMappingURL=columns-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"columns-types.d.ts","sourceRoot":"","sources":["../../../src/blocks/columns/columns-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,MAAM,WAAW,gBAAgB;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,IAAI,CAAC,EAAE,SAAS,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAED,MAAM,MAAM,mBAAmB,GAAG,CAAC,gBAAgB,GAAG,gBAAgB,CAAC,EAAE,CAAC;AAE1E,MAAM,WAAW,cAAc;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,iBAAiB,CAAC;CACjC;AAED,MAAM,WAAW,WAAW;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,qBAAqB,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7C,sBAAsB,EAAE,MAAM,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,oBAAoB,EAAE,WASlC,CAAC;AAEF,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,mBAAmB,CAAC;IAC7B,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;CAC/B"}
@@ -0,0 +1,10 @@
1
+ export const DEFAULT_COLUMNS_I18N = {
2
+ triggerLabel: 'Columns',
3
+ triggerCount: (n) => `${n} column${n === 1 ? '' : 's'}`,
4
+ addColumnsTitle: 'Add Columns',
5
+ addColumnsSubtitle: 'Select columns to add to the table',
6
+ clearAll: 'Clear all',
7
+ columnsSelectedSuffix: (n) => (n === 1 ? 'column selected' : 'columns selected'),
8
+ configureDateRangeHint: 'Configure date range for this column',
9
+ done: 'Done',
10
+ };
@@ -0,0 +1,13 @@
1
+ import type { DateSelectorValue } from '../date-selector';
2
+ import type { ColumnDefinition, ColumnsFieldsConfig } from './columns-types';
3
+ /** Secondary label for sortable rows: rolling presets and custom period summaries (e.g. `2024 Q2`). */
4
+ export declare function formatColumnDateRangeSecondary(value: DateSelectorValue): string | null;
5
+ export declare function flattenColumns(fields: ColumnsFieldsConfig): ColumnDefinition[];
6
+ export type ColumnsMenuSection = {
7
+ groupLabel?: string;
8
+ fields: ColumnDefinition[];
9
+ };
10
+ export declare function parseColumnSections(config: ColumnsFieldsConfig): ColumnsMenuSection[];
11
+ export declare function hasTopLevelColumnGroups(config: ColumnsFieldsConfig): boolean;
12
+ export declare function buildColumnMap(fields: ColumnsFieldsConfig): Record<string, ColumnDefinition>;
13
+ //# sourceMappingURL=columns-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"columns-utils.d.ts","sourceRoot":"","sources":["../../../src/blocks/columns/columns-utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,KAAK,EAAE,gBAAgB,EAAoB,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE/F,uGAAuG;AACvG,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,GAAG,IAAI,CAoDtF;AAMD,wBAAgB,cAAc,CAAC,MAAM,EAAE,mBAAmB,GAAG,gBAAgB,EAAE,CAO9E;AAED,MAAM,MAAM,kBAAkB,GAAG;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,gBAAgB,EAAE,CAAA;CAAE,CAAC;AAErF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,kBAAkB,EAAE,CAWrF;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAE5E;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAS5F"}
@@ -0,0 +1,85 @@
1
+ import { format } from 'date-fns';
2
+ import { DEFAULT_DATE_SELECTOR_I18N, getRollingSummaryLabel } from '../date-selector';
3
+ /** Secondary label for sortable rows: rolling presets and custom period summaries (e.g. `2024 Q2`). */
4
+ export function formatColumnDateRangeSecondary(value) {
5
+ const i18n = DEFAULT_DATE_SELECTOR_I18N;
6
+ const { period } = value;
7
+ const rollingLabel = getRollingSummaryLabel(value, i18n);
8
+ if (rollingLabel)
9
+ return rollingLabel;
10
+ if (period === 'day') {
11
+ const { startDate, endDate } = value;
12
+ if (startDate && endDate) {
13
+ return `${format(startDate, 'M/d/yyyy')} – ${format(endDate, 'M/d/yyyy')}`;
14
+ }
15
+ if (startDate) {
16
+ return format(startDate, 'M/d/yyyy');
17
+ }
18
+ return null;
19
+ }
20
+ if (period === 'month') {
21
+ const { year, month, rangeStart, rangeEnd } = value;
22
+ if (rangeStart && rangeEnd) {
23
+ return `${i18n.monthsShort[rangeStart.value]} ${rangeStart.year} – ${i18n.monthsShort[rangeEnd.value]} ${rangeEnd.year}`;
24
+ }
25
+ if (year !== undefined && month !== undefined) {
26
+ return `${i18n.monthsShort[month]} ${year}`;
27
+ }
28
+ return null;
29
+ }
30
+ if (period === 'quarter') {
31
+ const { year, quarter, rangeStart, rangeEnd } = value;
32
+ if (rangeStart && rangeEnd) {
33
+ return `${rangeStart.year} ${i18n.quarters[rangeStart.value]} – ${rangeEnd.year} ${i18n.quarters[rangeEnd.value]}`;
34
+ }
35
+ if (year !== undefined && quarter !== undefined) {
36
+ return `${year} ${i18n.quarters[quarter]}`;
37
+ }
38
+ return null;
39
+ }
40
+ if (period === 'year') {
41
+ const { year, rangeStart, rangeEnd } = value;
42
+ if (rangeStart && rangeEnd) {
43
+ return `${rangeStart.year} – ${rangeEnd.year}`;
44
+ }
45
+ if (year !== undefined) {
46
+ return String(year);
47
+ }
48
+ return null;
49
+ }
50
+ return null;
51
+ }
52
+ function isFieldGroup(item) {
53
+ return item !== null && typeof item === 'object' && 'fields' in item && Array.isArray(item.fields);
54
+ }
55
+ export function flattenColumns(fields) {
56
+ return fields.reduce((acc, item) => {
57
+ if (isFieldGroup(item)) {
58
+ return [...acc, ...item.fields];
59
+ }
60
+ return [...acc, item];
61
+ }, []);
62
+ }
63
+ export function parseColumnSections(config) {
64
+ const sections = [];
65
+ for (const raw of config) {
66
+ if (isFieldGroup(raw)) {
67
+ const groupLabel = raw.group ? String(raw.group) : undefined;
68
+ sections.push({ groupLabel, fields: raw.fields });
69
+ }
70
+ else {
71
+ sections.push({ groupLabel: undefined, fields: [raw] });
72
+ }
73
+ }
74
+ return sections;
75
+ }
76
+ export function hasTopLevelColumnGroups(config) {
77
+ return config.some((item) => isFieldGroup(item));
78
+ }
79
+ export function buildColumnMap(fields) {
80
+ const flat = flattenColumns(fields);
81
+ return flat.reduce((acc, col) => {
82
+ acc[col.id] = col;
83
+ return acc;
84
+ }, {});
85
+ }
@@ -0,0 +1,3 @@
1
+ import type { ColumnsProps } from './columns-types';
2
+ export declare function Columns({ columns, value, onChange, className, popoverContentClassName, i18n: i18nPartial }: ColumnsProps): import("react/jsx-runtime").JSX.Element;
3
+ //# sourceMappingURL=columns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"columns.d.ts","sourceRoot":"","sources":["../../../src/blocks/columns/columns.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,iBAAiB,CAAC;AAIpE,wBAAgB,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,uBAAuB,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,YAAY,2CA2RxH"}
@@ -0,0 +1,79 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useCallback, useMemo, useState } from 'react';
4
+ import { ChevronDown, ChevronRight, Columns3, GripVertical, X } from 'lucide-react';
5
+ import { Button } from '../../components/button';
6
+ import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '../../components/collapsible';
7
+ import { Popover, PopoverContent, PopoverTrigger } from '../../components/popover';
8
+ import { ScrollArea } from '../../components/scroll-area';
9
+ import { Separator } from '../../components/separator';
10
+ import { Sortable, SortableItem, SortableItemHandle } from '../../components/sortable';
11
+ import { cn } from '../../lib/utils';
12
+ import { DateSelector } from '../date-selector';
13
+ import { DEFAULT_COLUMNS_I18N } from './columns-types';
14
+ import { buildColumnMap, formatColumnDateRangeSecondary, parseColumnSections } from './columns-utils';
15
+ export function Columns({ columns, value, onChange, className, popoverContentClassName, i18n: i18nPartial }) {
16
+ const i18n = useMemo(() => ({ ...DEFAULT_COLUMNS_I18N, ...i18nPartial }), [i18nPartial]);
17
+ const columnMap = useMemo(() => buildColumnMap(columns), [columns]);
18
+ const sections = useMemo(() => parseColumnSections(columns), [columns]);
19
+ const [open, setOpen] = useState(false);
20
+ const [activeColumnId, setActiveColumnId] = useState(null);
21
+ const selectedIdSet = useMemo(() => new Set(value.map((v) => v.id)), [value]);
22
+ const activeDef = activeColumnId ? columnMap[activeColumnId] : undefined;
23
+ const showRightPanel = Boolean(activeDef?.supportsDateRange && activeColumnId && selectedIdSet.has(activeColumnId));
24
+ const activeSelected = activeColumnId ? value.find((s) => s.id === activeColumnId) : undefined;
25
+ const activeDateRange = activeSelected?.dateRange;
26
+ const handleOpenChange = useCallback((next) => {
27
+ setOpen(next);
28
+ if (!next) {
29
+ setActiveColumnId(null);
30
+ }
31
+ }, []);
32
+ const updateSelectedDateRange = useCallback((columnId, dateRange) => {
33
+ onChange(value.map((row) => (row.id === columnId ? { ...row, dateRange } : row)));
34
+ }, [onChange, value]);
35
+ const removeColumn = useCallback((id) => {
36
+ onChange(value.filter((v) => v.id !== id));
37
+ setActiveColumnId((prev) => (prev === id ? null : prev));
38
+ }, [onChange, value]);
39
+ const clearAll = useCallback(() => {
40
+ onChange([]);
41
+ setActiveColumnId(null);
42
+ }, [onChange]);
43
+ const addColumn = useCallback((id) => {
44
+ if (selectedIdSet.has(id))
45
+ return;
46
+ onChange([...value, { id }]);
47
+ }, [onChange, selectedIdSet, value]);
48
+ const handleRowActivate = useCallback((id) => {
49
+ setActiveColumnId(id);
50
+ }, []);
51
+ const count = value.length;
52
+ return (_jsx("div", { className: cn(className), children: _jsxs(Popover, { open: open, onOpenChange: handleOpenChange, children: [_jsxs(PopoverTrigger, { render: _jsx(Button, { type: "button", variant: "outline", size: "sm", className: "gap-2 font-normal", "aria-expanded": open, "aria-haspopup": "dialog" }), children: [_jsx(Columns3, { className: "size-4 text-primary", "aria-hidden": true }), _jsxs("span", { className: "text-sm", children: [i18n.triggerLabel, " \u00B7 ", i18n.triggerCount(count)] }), _jsx(ChevronDown, { className: "size-4 opacity-60", "aria-hidden": true })] }), _jsx(PopoverContent, { align: "start", className: cn('w-auto max-w-[min(100vw-2rem,720px)] gap-0 overflow-hidden p-0 shadow-lg ring-1 ring-foreground/10', showRightPanel ? 'min-w-[min(100vw-2rem,720px)]' : 'min-w-[min(100vw-2rem,340px)]', popoverContentClassName), children: _jsxs("div", { className: "flex max-h-[min(85vh,560px)] min-h-0", children: [_jsxs("div", { className: cn('flex min-h-0 min-w-0 flex-1 flex-col border-e border-border', showRightPanel ? 'max-w-[340px]' : 'w-full max-w-[360px]'), children: [_jsx("div", { className: "shrink-0 space-y-1 border-b border-border px-3 py-2.5", children: _jsxs("div", { className: "flex items-start justify-between gap-2", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("p", { className: "text-sm font-medium", children: i18n.addColumnsTitle }), _jsx("p", { className: "text-xs text-muted-foreground", children: i18n.addColumnsSubtitle })] }), _jsx("button", { type: "button", onClick: clearAll, disabled: count === 0, className: "shrink-0 text-xs font-medium text-primary hover:underline disabled:pointer-events-none disabled:opacity-40", children: i18n.clearAll })] }) }), _jsx(ScrollArea, { className: "min-h-0 flex-1", children: _jsxs("div", { className: "flex flex-col gap-2 px-3 py-2", children: [value.length > 0 ? (_jsx(Sortable, { value: value, onValueChange: onChange, getItemValue: (item) => item.id, className: "flex flex-col gap-2", children: value.map((row) => {
53
+ const def = columnMap[row.id];
54
+ if (!def)
55
+ return null;
56
+ const isActive = activeColumnId === row.id;
57
+ const secondary = row.dateRange && def.supportsDateRange ? formatColumnDateRangeSecondary(row.dateRange) : null;
58
+ const showHighlight = isActive && def.supportsDateRange;
59
+ return (_jsxs(SortableItem, { value: row.id, className: cn('flex min-w-0 items-center gap-2 rounded-md border px-2 py-1.5 text-sm shadow-xs transition-colors', showHighlight
60
+ ? 'border-primary bg-primary text-primary-foreground'
61
+ : isActive
62
+ ? 'border-primary/40 bg-primary/5'
63
+ : 'border-border bg-card text-card-foreground'), children: [_jsx(SortableItemHandle, { className: cn('shrink-0 touch-none', showHighlight ? 'text-primary-foreground/80' : 'text-muted-foreground'), "aria-label": `Reorder ${def.name}`, children: _jsx(GripVertical, { className: "size-4", strokeWidth: 2.5 }) }), _jsxs("button", { type: "button", className: "flex min-w-0 flex-1 items-center gap-1.5 text-start", onClick: () => handleRowActivate(row.id), children: [_jsx("span", { className: cn('truncate font-medium', !secondary && 'flex-1'), children: def.name }), secondary ? (_jsxs("span", { className: cn('truncate text-xs', showHighlight ? 'text-primary-foreground/85' : 'text-muted-foreground'), children: ["\u00B7 ", secondary] })) : null] }), _jsx("button", { type: "button", className: cn('shrink-0 rounded-sm p-0.5 outline-none hover:bg-black/10 focus-visible:ring-2 focus-visible:ring-ring', showHighlight && 'hover:bg-white/15'), "aria-label": `Remove ${def.name}`, onClick: (e) => {
64
+ e.stopPropagation();
65
+ removeColumn(row.id);
66
+ }, children: _jsx(X, { className: "size-4" }) })] }, row.id));
67
+ }) })) : (_jsx("p", { className: "text-xs text-muted-foreground", children: "No columns selected." })), _jsx(Separator, { className: "my-1" }), _jsx("div", { className: "flex flex-col gap-2 pb-2", children: sections.map((section, si) => {
68
+ const available = section.fields.filter((f) => !selectedIdSet.has(f.id));
69
+ if (available.length === 0)
70
+ return null;
71
+ const flatUngrouped = !section.groupLabel && available.length === 1;
72
+ if (flatUngrouped) {
73
+ const field = available[0];
74
+ return (_jsxs("button", { type: "button", className: "flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-start text-sm text-foreground hover:bg-accent hover:text-accent-foreground", onClick: () => addColumn(field.id), children: [field.icon, _jsx("span", { className: "min-w-0 flex-1 truncate", children: field.name })] }, field.id));
75
+ }
76
+ const heading = section.groupLabel ?? (available.length > 1 ? 'Columns' : (available[0]?.name ?? 'Columns'));
77
+ return (_jsxs(Collapsible, { defaultOpen: true, className: "flex flex-col gap-1", children: [_jsxs(CollapsibleTrigger, { className: "group flex w-full items-center gap-2 rounded-md px-1 py-1.5 text-start text-sm font-medium hover:bg-muted/80", type: "button", children: [available[0]?.icon, _jsx("span", { className: "min-w-0 flex-1 truncate", children: heading }), _jsx(ChevronRight, { className: "size-4 shrink-0 text-muted-foreground transition-transform group-data-[panel-open]:rotate-90" })] }), _jsx(CollapsibleContent, { className: "flex flex-col gap-0.5 ps-1", children: available.map((field) => (_jsx("button", { type: "button", className: "rounded-md px-2 py-1.5 text-start text-sm text-foreground hover:bg-accent hover:text-accent-foreground", onClick: () => addColumn(field.id), children: field.name }, field.id))) })] }, si));
78
+ }) })] }) }), _jsxs("div", { className: "shrink-0 border-t border-border px-3 py-2 text-xs text-muted-foreground", children: [_jsx("span", { className: "font-medium text-primary tabular-nums", children: count }), " ", i18n.columnsSelectedSuffix(count)] })] }), showRightPanel && activeColumnId && activeDef?.supportsDateRange ? (_jsxs("div", { className: "flex min-h-0 w-[min(100%,380px)] min-w-[280px] flex-1 flex-col border-border bg-popover", children: [_jsxs("div", { className: "flex shrink-0 items-start justify-between gap-2 border-b border-border px-3 py-2.5", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("p", { className: "text-sm font-medium", children: activeDef.name }), _jsx("p", { className: "text-xs text-muted-foreground", children: activeDef.description ?? i18n.configureDateRangeHint })] }), _jsx("button", { type: "button", className: "shrink-0 rounded-sm p-1 text-muted-foreground hover:bg-muted hover:text-foreground", "aria-label": "Close configuration", onClick: () => setActiveColumnId(null), children: _jsx(X, { className: "size-4" }) })] }), _jsx("div", { className: "flex min-h-0 flex-1 flex-col overflow-hidden", children: _jsx("div", { className: "flex min-h-0 flex-1 flex-col p-3", children: _jsx(DateSelector, { value: activeDateRange, onChange: (next) => updateSelectedDateRange(activeColumnId, next), showRollingPresets: true, periodTypes: ['day', 'month', 'quarter', 'year'], separateDayPeriod: true, showInput: false, showOperators: false, defaultPeriodType: "day", defaultFilterType: "between", fillHeight: true, className: "min-h-0 max-w-none flex-1" }) }) }), _jsx("div", { className: "flex shrink-0 items-center justify-end gap-2 border-t border-border px-3 py-2.5", children: _jsx(Button, { type: "button", size: "sm", onClick: () => setActiveColumnId(null), children: i18n.done }) })] })) : null] }) })] }) }));
79
+ }
@@ -0,0 +1,12 @@
1
+ import type { StoryObj } from '@storybook/react';
2
+ declare const meta: {
3
+ title: string;
4
+ tags: string[];
5
+ parameters: {
6
+ layout: string;
7
+ };
8
+ };
9
+ export default meta;
10
+ type Story = StoryObj<typeof meta>;
11
+ export declare const Default: Story;
12
+ //# sourceMappingURL=columns.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"columns.stories.d.ts","sourceRoot":"","sources":["../../../src/blocks/columns/columns.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAqEvD,QAAA,MAAM,IAAI;;;;;;CAMM,CAAC;AAEjB,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC"}
@@ -0,0 +1,67 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Activity, BarChart3, Home, Users } from 'lucide-react';
3
+ import { useState } from 'react';
4
+ import { Columns } from './columns';
5
+ const rolling180 = {
6
+ period: 'day',
7
+ operator: 'between',
8
+ selectionMode: 'rolling-next',
9
+ rollingDays: 180,
10
+ };
11
+ const catalog = [
12
+ {
13
+ group: 'Listing Features',
14
+ fields: [
15
+ { id: 'address', name: 'Address', description: 'Property address' },
16
+ { id: 'bathrooms', name: 'Bathrooms', description: '' },
17
+ { id: 'bedrooms', name: 'Bedrooms', description: '' },
18
+ ].map((f) => ({ ...f, icon: _jsx(Home, { className: "size-4 text-muted-foreground", "aria-hidden": true }) })),
19
+ },
20
+ {
21
+ group: 'Listing Status',
22
+ fields: [{ id: 'status', name: 'Status', description: 'Current listing status' }].map((f) => ({
23
+ ...f,
24
+ icon: _jsx(Activity, { className: "size-4 text-muted-foreground", "aria-hidden": true }),
25
+ })),
26
+ },
27
+ {
28
+ group: 'Team & Access',
29
+ fields: [{ id: 'team', name: 'Team', description: '' }].map((f) => ({
30
+ ...f,
31
+ icon: _jsx(Users, { className: "size-4 text-muted-foreground", "aria-hidden": true }),
32
+ })),
33
+ },
34
+ {
35
+ group: 'Listing Performance',
36
+ fields: [
37
+ {
38
+ id: 'occupancy',
39
+ name: 'Adj. Occupancy',
40
+ description: 'Configure date range for this column',
41
+ supportsDateRange: true,
42
+ },
43
+ {
44
+ id: 'adr',
45
+ name: 'Avg. Daily Rate',
46
+ description: 'Configure date range for this column',
47
+ supportsDateRange: true,
48
+ },
49
+ ].map((f) => ({ ...f, icon: _jsx(BarChart3, { className: "size-4 text-muted-foreground", "aria-hidden": true }) })),
50
+ },
51
+ ];
52
+ const initialSelected = [{ id: 'bedrooms' }, { id: 'bathrooms' }, { id: 'occupancy', dateRange: rolling180 }, { id: 'adr' }];
53
+ function ColumnsPlayground() {
54
+ const [value, setValue] = useState(initialSelected);
55
+ return (_jsx("div", { className: "p-6", children: _jsx(Columns, { columns: catalog, value: value, onChange: setValue }) }));
56
+ }
57
+ const meta = {
58
+ title: 'Blocks/Columns',
59
+ tags: ['autodocs'],
60
+ parameters: {
61
+ layout: 'padded',
62
+ },
63
+ };
64
+ export default meta;
65
+ export const Default = {
66
+ render: () => _jsx(ColumnsPlayground, {}),
67
+ };
@@ -0,0 +1,6 @@
1
+ export { Columns } from './columns';
2
+ export type { ColumnDefinition, ColumnFieldGroup, ColumnsFieldsConfig, ColumnsI18n, ColumnsProps, SelectedColumn } from './columns-types';
3
+ export { DEFAULT_COLUMNS_I18N } from './columns-types';
4
+ export { buildColumnMap, flattenColumns, formatColumnDateRangeSecondary, hasTopLevelColumnGroups, parseColumnSections } from './columns-utils';
5
+ export type { ColumnsMenuSection } from './columns-utils';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/blocks/columns/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC1I,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,8BAA8B,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC/I,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { Columns } from './columns';
2
+ export { DEFAULT_COLUMNS_I18N } from './columns-types';
3
+ export { buildColumnMap, flattenColumns, formatColumnDateRangeSecondary, hasTopLevelColumnGroups, parseColumnSections } from './columns-utils';
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-selector-context.d.ts","sourceRoot":"","sources":["../../../src/blocks/date-selector/date-selector-context.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,wBAAwB,EAA8B,MAAM,uBAAuB,CAAC;AAElG,QAAA,MAAM,mBAAmB,mDAIvB,CAAC;AAEH,iFAAiF;AACjF,eAAO,MAAM,sBAAsB,gCAAwC,CAAC;AAE5E,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { i18n as I18nInstance } from 'i18next';
2
+ /**
3
+ * Dedicated i18next instance with built-in `dateSelector` resources. Used when no {@link I18nextProvider}
4
+ * wraps the tree and no `i18nInstance` prop is passed.
5
+ *
6
+ * Lives in a client module because `initReactI18next` touches React (`createContext`), which is not
7
+ * available in the React Server Components runtime.
8
+ */
9
+ export declare function getDateSelectorDefaultI18n(): I18nInstance;
10
+ //# sourceMappingURL=date-selector-default-i18n.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-selector-default-i18n.d.ts","sourceRoot":"","sources":["../../../src/blocks/date-selector/date-selector-default-i18n.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,IAAI,YAAY,EAAE,MAAM,SAAS,CAAC;AAOpD;;;;;;GAMG;AACH,wBAAgB,0BAA0B,IAAI,YAAY,CAgBzD"}
@@ -0,0 +1,29 @@
1
+ 'use client';
2
+ import { createInstance } from 'i18next';
3
+ import { initReactI18next } from 'react-i18next';
4
+ import { DATE_SELECTOR_NAMESPACE, DATE_SELECTOR_RESOURCE_BUNDLES } from './date-selector-i18n-resources';
5
+ let defaultI18nForDateSelector;
6
+ /**
7
+ * Dedicated i18next instance with built-in `dateSelector` resources. Used when no {@link I18nextProvider}
8
+ * wraps the tree and no `i18nInstance` prop is passed.
9
+ *
10
+ * Lives in a client module because `initReactI18next` touches React (`createContext`), which is not
11
+ * available in the React Server Components runtime.
12
+ */
13
+ export function getDateSelectorDefaultI18n() {
14
+ if (!defaultI18nForDateSelector) {
15
+ const inst = createInstance();
16
+ inst.use(initReactI18next).init({
17
+ lng: 'en',
18
+ fallbackLng: 'en',
19
+ supportedLngs: Object.keys(DATE_SELECTOR_RESOURCE_BUNDLES),
20
+ interpolation: { escapeValue: false },
21
+ react: { useSuspense: false },
22
+ ns: [DATE_SELECTOR_NAMESPACE],
23
+ defaultNS: DATE_SELECTOR_NAMESPACE,
24
+ resources: Object.fromEntries(Object.entries(DATE_SELECTOR_RESOURCE_BUNDLES).map(([lng, bundle]) => [lng, { [DATE_SELECTOR_NAMESPACE]: bundle }])),
25
+ });
26
+ defaultI18nForDateSelector = inst;
27
+ }
28
+ return defaultI18nForDateSelector;
29
+ }
@@ -0,0 +1,11 @@
1
+ import { type DateSelectorI18nConfig } from './date-selector-types';
2
+ /** i18next namespace for {@link DateSelector} strings. */
3
+ export declare const DATE_SELECTOR_NAMESPACE: "dateSelector";
4
+ /**
5
+ * JSON-shaped resource for the `dateSelector` namespace (nested objects + string arrays).
6
+ * Bundled for `en`, `es`, `fr`, and `de`; register on your i18n instance with {@link registerDateSelectorI18n}.
7
+ */
8
+ export type DateSelectorResourceBundle = DateSelectorI18nConfig;
9
+ /** Built-in locale bundles keyed by language code. */
10
+ export declare const DATE_SELECTOR_RESOURCE_BUNDLES: Record<string, DateSelectorResourceBundle>;
11
+ //# sourceMappingURL=date-selector-i18n-resources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-selector-i18n-resources.d.ts","sourceRoot":"","sources":["../../../src/blocks/date-selector/date-selector-i18n-resources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,sBAAsB,EAA8B,MAAM,uBAAuB,CAAC;AAEhG,0DAA0D;AAC1D,eAAO,MAAM,uBAAuB,EAAG,cAAuB,CAAC;AAE/D;;;GAGG;AACH,MAAM,MAAM,0BAA0B,GAAG,sBAAsB,CAAC;AAoPhE,sDAAsD;AACtD,eAAO,MAAM,8BAA8B,EAAE,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAMrF,CAAC"}