willba-component-library 0.3.27 → 0.4.1

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 (159) hide show
  1. package/README.md +75 -123
  2. package/lib/components/FilterBar/FilterBar.d.ts +1 -1
  3. package/lib/components/FilterCalendar/FilterCalendar.d.ts +1 -1
  4. package/lib/core/i18n/I18nProvider.d.ts +6 -0
  5. package/lib/core/i18n/index.d.ts +1 -0
  6. package/lib/embed.d.ts +21 -0
  7. package/lib/embed.esm.js +74 -0
  8. package/lib/embed.esm.js.map +1 -0
  9. package/lib/embed.umd.js +74 -0
  10. package/lib/embed.umd.js.map +1 -0
  11. package/lib/i18n.d.ts +2 -2
  12. package/lib/index.d.ts +2 -2
  13. package/lib/index.esm.js +1111 -930
  14. package/lib/index.esm.js.map +1 -1
  15. package/lib/index.js +1110 -929
  16. package/lib/index.js.map +1 -1
  17. package/package.json +9 -1
  18. package/.nvmrc +0 -1
  19. package/.storybook/main.ts +0 -17
  20. package/.storybook/preview.ts +0 -15
  21. package/lib/components/FilterBar/components/buttons/index.d.ts +0 -4
  22. package/lib/components/FilterBar/components/buttons/select-button/SelectButton.d.ts +0 -13
  23. package/lib/components/FilterBar/components/buttons/tab-button/TabButton.d.ts +0 -10
  24. package/lib/components/FilterBar/components/cards/image-card/ImageCard.d.ts +0 -11
  25. package/lib/components/FilterBar/components/cards/index.d.ts +0 -1
  26. package/lib/components/FilterBar/components/categories/Categories.d.ts +0 -8
  27. package/lib/components/FilterBar/components/common/FilterSectionHeader.d.ts +0 -8
  28. package/lib/components/FilterBar/components/dates/Dates.d.ts +0 -17
  29. package/lib/components/FilterBar/components/dates/index.d.ts +0 -1
  30. package/lib/components/FilterBar/components/guests/GuestCount/GuestCount.d.ts +0 -4
  31. package/lib/components/FilterBar/components/guests/Guests.d.ts +0 -12
  32. package/lib/components/FilterBar/components/locations/Locations.d.ts +0 -14
  33. package/lib/components/FilterBar/hooks/useFilterBar.d.ts +0 -32
  34. package/lib/components/FilterBar/hooks/useFilterUi.d.ts +0 -8
  35. package/lib/components/FilterBar/utils/calculateDropdownPosition.d.ts +0 -12
  36. package/lib/components/FilterBar/utils/getLocalizedContent.d.ts +0 -8
  37. package/lib/core/components/buttons/close-button/CloseButton.d.ts +0 -7
  38. package/lib/core/components/buttons/submit-button/SubmitButton.d.ts +0 -14
  39. package/lib/index.umd.js +0 -12489
  40. package/lib/index.umd.js.map +0 -1
  41. package/prettier.config.js +0 -6
  42. package/rollup.config.mjs +0 -63
  43. package/src/assets/IconsSvg.tsx +0 -69
  44. package/src/components/Button/Button.stories.tsx +0 -34
  45. package/src/components/Button/Button.tsx +0 -56
  46. package/src/components/Button/button.css +0 -30
  47. package/src/components/Button/index.ts +0 -1
  48. package/src/components/FilterBar/FilterBar.css +0 -35
  49. package/src/components/FilterBar/FilterBar.stories.tsx +0 -116
  50. package/src/components/FilterBar/FilterBar.tsx +0 -64
  51. package/src/components/FilterBar/FilterBarTypes.ts +0 -71
  52. package/src/components/FilterBar/components/Divider/Divider.css +0 -14
  53. package/src/components/FilterBar/components/Divider/Divider.tsx +0 -7
  54. package/src/components/FilterBar/components/FilterControls/FilterControls.css +0 -22
  55. package/src/components/FilterBar/components/FilterControls/FilterControls.tsx +0 -139
  56. package/src/components/FilterBar/components/FilterPanels/Categories/Categories.css +0 -21
  57. package/src/components/FilterBar/components/FilterPanels/Categories/Categories.tsx +0 -49
  58. package/src/components/FilterBar/components/FilterPanels/Dates/Dates.css +0 -9
  59. package/src/components/FilterBar/components/FilterPanels/Dates/Dates.tsx +0 -60
  60. package/src/components/FilterBar/components/FilterPanels/FilterPanels.css +0 -22
  61. package/src/components/FilterBar/components/FilterPanels/FilterPanels.tsx +0 -111
  62. package/src/components/FilterBar/components/FilterPanels/Guests/GuestCount/GuestCount.css +0 -58
  63. package/src/components/FilterBar/components/FilterPanels/Guests/GuestCount/GuestCount.tsx +0 -85
  64. package/src/components/FilterBar/components/FilterPanels/Guests/Guests.css +0 -24
  65. package/src/components/FilterBar/components/FilterPanels/Guests/Guests.tsx +0 -59
  66. package/src/components/FilterBar/components/FilterPanels/Locations/Locations.css +0 -16
  67. package/src/components/FilterBar/components/FilterPanels/Locations/Locations.tsx +0 -94
  68. package/src/components/FilterBar/components/FilterPanels/SectionHeader/SectionHeader.css +0 -34
  69. package/src/components/FilterBar/components/FilterPanels/SectionHeader/SectionHeader.tsx +0 -17
  70. package/src/components/FilterBar/components/FilterTabs/FilterTabs.css +0 -10
  71. package/src/components/FilterBar/components/FilterTabs/FilterTabs.tsx +0 -50
  72. package/src/components/FilterBar/components/ImageCard/ImageCard.css +0 -30
  73. package/src/components/FilterBar/components/ImageCard/ImageCard.tsx +0 -45
  74. package/src/components/FilterBar/components/SelectButton/SelectButton.css +0 -76
  75. package/src/components/FilterBar/components/SelectButton/SelectButton.tsx +0 -54
  76. package/src/components/FilterBar/components/TabButton/TabButton.css +0 -36
  77. package/src/components/FilterBar/components/TabButton/TabButton.tsx +0 -23
  78. package/src/components/FilterBar/components/index.ts +0 -6
  79. package/src/components/FilterBar/hooks/index.ts +0 -5
  80. package/src/components/FilterBar/hooks/useFilterActions.tsx +0 -126
  81. package/src/components/FilterBar/hooks/useFilterRefs.tsx +0 -21
  82. package/src/components/FilterBar/hooks/useFilterState.tsx +0 -86
  83. package/src/components/FilterBar/hooks/usePanelPosition.tsx +0 -52
  84. package/src/components/FilterBar/hooks/useScrollInToView.tsx +0 -29
  85. package/src/components/FilterBar/index.ts +0 -3
  86. package/src/components/FilterBar/providers/FilterBarProvider.tsx +0 -172
  87. package/src/components/FilterBar/providers/index.ts +0 -1
  88. package/src/components/FilterBar/utils/ageCategoriesRules.ts +0 -27
  89. package/src/components/FilterBar/utils/index.tsx +0 -3
  90. package/src/components/FilterBar/utils/parseGuests.tsx +0 -65
  91. package/src/components/FilterBar/utils/parseLocations.ts +0 -28
  92. package/src/components/FilterCalendar/FilterCalendar.css +0 -109
  93. package/src/components/FilterCalendar/FilterCalendar.stories.tsx +0 -554
  94. package/src/components/FilterCalendar/FilterCalendar.tsx +0 -115
  95. package/src/components/FilterCalendar/FilterCalendarTypes.ts +0 -11
  96. package/src/components/FilterCalendar/components/Footer.tsx +0 -96
  97. package/src/components/FilterCalendar/hooks/useFilterCalendar.ts +0 -163
  98. package/src/components/FilterCalendar/index.ts +0 -3
  99. package/src/core/components/buttons/CloseButton/CloseButton.css +0 -33
  100. package/src/core/components/buttons/CloseButton/CloseButton.tsx +0 -16
  101. package/src/core/components/buttons/SubmitButton/SubmitButton.css +0 -54
  102. package/src/core/components/buttons/SubmitButton/SubmitButton.tsx +0 -42
  103. package/src/core/components/calendar/Calendar.css +0 -280
  104. package/src/core/components/calendar/Calendar.tsx +0 -253
  105. package/src/core/components/calendar/CalendarTypes.ts +0 -48
  106. package/src/core/components/calendar/hooks/index.ts +0 -3
  107. package/src/core/components/calendar/hooks/useCalendarLoadingSpinner.tsx +0 -19
  108. package/src/core/components/calendar/hooks/useCalendarTooltips.tsx +0 -125
  109. package/src/core/components/calendar/hooks/useUpdateDisabledDates.tsx +0 -105
  110. package/src/core/components/calendar/utils/calendarSelectionRules.tsx +0 -180
  111. package/src/core/components/calendar/utils/checkForContinuousSelection.tsx +0 -86
  112. package/src/core/components/calendar/utils/disabledDatesByPage.tsx +0 -31
  113. package/src/core/components/calendar/utils/handleCalendarModifiers.tsx +0 -118
  114. package/src/core/components/calendar/utils/handleRangeContextDisabledDates.tsx +0 -75
  115. package/src/core/components/calendar/utils/index.ts +0 -8
  116. package/src/core/components/calendar/utils/nightsCount.tsx +0 -19
  117. package/src/core/components/calendar/utils/parseDate.tsx +0 -17
  118. package/src/core/components/calendar/utils/parseDates.tsx +0 -12
  119. package/src/core/components/index.ts +0 -7
  120. package/src/core/hooks/index.ts +0 -4
  121. package/src/core/hooks/useAutoFocus.tsx +0 -27
  122. package/src/core/hooks/useAwaitRender.tsx +0 -12
  123. package/src/core/hooks/useCloseFilterSection.tsx +0 -29
  124. package/src/core/hooks/useUpdateTranslations.tsx +0 -14
  125. package/src/i18n.ts +0 -27
  126. package/src/index.ts +0 -8
  127. package/src/locales/en/common.json +0 -18
  128. package/src/locales/en/filterBar.json +0 -33
  129. package/src/locales/fi/common.json +0 -19
  130. package/src/locales/fi/filterBar.json +0 -33
  131. package/src/themes/Default.css +0 -69
  132. package/src/themes/useTheme.tsx +0 -27
  133. package/stories/Button.stories.ts +0 -50
  134. package/stories/Button.tsx +0 -53
  135. package/stories/Configure.mdx +0 -364
  136. package/stories/Header.stories.ts +0 -27
  137. package/stories/Header.tsx +0 -70
  138. package/stories/Page.stories.ts +0 -29
  139. package/stories/Page.tsx +0 -91
  140. package/stories/assets/accessibility.png +0 -0
  141. package/stories/assets/accessibility.svg +0 -5
  142. package/stories/assets/addon-library.png +0 -0
  143. package/stories/assets/assets.png +0 -0
  144. package/stories/assets/context.png +0 -0
  145. package/stories/assets/discord.svg +0 -15
  146. package/stories/assets/docs.png +0 -0
  147. package/stories/assets/figma-plugin.png +0 -0
  148. package/stories/assets/github.svg +0 -3
  149. package/stories/assets/share.png +0 -0
  150. package/stories/assets/styling.png +0 -0
  151. package/stories/assets/testing.png +0 -0
  152. package/stories/assets/theming.png +0 -0
  153. package/stories/assets/tutorials.svg +0 -12
  154. package/stories/assets/youtube.svg +0 -4
  155. package/stories/button.css +0 -30
  156. package/stories/header.css +0 -32
  157. package/stories/page.css +0 -69
  158. package/tsconfig.json +0 -29
  159. /package/lib/components/FilterBar/components/{divider → Divider}/Divider.d.ts +0 -0
package/README.md CHANGED
@@ -1,165 +1,117 @@
1
1
  ## Description
2
2
 
3
- Willba Component Library is a custom UI component collection that can be utilized across multiple platforms. It is available as an <a href="https://www.npmjs.com/package/willba-component-library">npm package</a>, or can be used directly through scripts.
3
+ Willba Component Library is a custom UI component collection that can be used across multiple platforms as an [npm package](https://www.npmjs.com/package/willba-component-library) inside a React app, or as a standalone `<script>` snippet on any website.
4
4
 
5
5
  <div style="display: flex; gap: 20px;">
6
- <img src="https://lh3.googleusercontent.com/fife/ALs6j_E9S05-AoxQW3EDUN_R0_CoKocZjB_0SwUe2s04qlzSMBaR18MI_AizFrkKf7JLELYTyzuUTVr5z_IehlqgF_fmQ9MFAhDfm5ATXvL6PjXqK5tClfew0sAXHodybiN2PFhqfmOsikYpaT-NxYBg6ISV8jIjKkXuQCCr7m1_FqqEMDm8zj5s2Gj4Vs8pT42J9pce2Z1ZXnkMMPYiN37cm-ozobzjP4WOA4400RptGwJmqrvKkZxhJcB-Y-ZbifPkuIp9Wzb0FhKFsEe01l6GiGBmQlT7HeuH74N3FnsLx9GVvhbyPWLaaN9H4p7V9WzDwVvMmJWICrhfLxptJn0EYaxuYfkrLbKQsF5NC-3dvk43AGDfHukDphV5AukZBomSGoIqK9d3cdaiT3zctH4ksupAP6lEv2AQgJE0u-_wuSzMW8f5Vn2_rHUhxAXPDYvL1MH6KNv8jI39adbIyeK9xAF1sIpv2rpHtyiJcCTO_xMeJWgKXNKUdh5vAKRS1vzNFBTkQDy-lriFgGUxy3y1BHv0CtCs_l_Cl2B8xqbDXjkGzKJHxR1HYquOI0WZJDVWTrufwarVrXRTlY07VK6UcF6WEFd_UDzS44adkAXD2Vpf_xDTrRsoi0lcRBgctj6MWkEzOJPTQJK014XPROQ_PoF547CN_ht9G3HqITvWB-Bn6OTYWGbfbc4wPR7MB-iWS8XawNLn-TzQhn3ZzB1kLcCc0u9SNjhXGeFvFAcoPll21y1FX85tQYrXlnIzlIikKzAxuKjiNFDC4Bvrj8RarVeTaEcUU5wv6NswE6MJ-mI5_s28AmgoDurW4mAGhJH6f1BhNDAy6E2oz3kB9ezhqUSWfyl6WfO2eQ9oOxg8ib5kmowcE9220FgrW06Tjl75sQrbVEy4dtYWb-OKbfWwaAfFUbn70RoMaClv4x-ilqRcytfUMNsm41hETt9tbJvRnneBQaZ_ZudwxZvOrILOjXVIf5v5vKLhmSnte9d9DScxT5sdACCCYmZxVafzJxfX1Jew1O8b1nh7lsxD62Pd3HCgUQoaMWLRx2EZBZeL-IkWS-IJRtcd_cN0Mg0Rzk9X-OZZ1YomoAZVH6d7Bg1PxlT9205BuvFTxLyvUZ0wk4FHP40bTMd4_PN1Qt9LCSm3fxZCCBSbF8szl_NT-9bC2iY2fvAVCX4ZPeqKiS6RCi4Gf8C-WDOGusQj5SDestBh8wEbWvgP7C0e20pXUzj94vyAlFCEL0rIdopGzerPT5BS7TNqeKtZNnh-dVgUfGsbp81K03LqbW3cx14JAmB6Z_j7QOrwVC-qrzcbgmP1_DG1Q7VsPki8yJ0JUWzoTgHCk8Shbuhqy3uvfvNwdJlf2YkTejKQIIOy8zeSO7Xja65PF8VYaV-wadRchVku1YSOVNjyVOjYWSQAAFJP-BUczh0_pvXw3TXs_S_TEtq50AgNGRiq_Kex4uxeapDzaWjy3xMwod-M5ewz6zuTS2PMRkl57oN904ebC-2fScIKUZDBJ87IcwL7dq1IGaUOdb5FKcB8Bat8nxhNDVGEG_o6dCQmgUwXGt1HyHhrmXnEheLzPLDG3ePIpZz6u4UFb3d92yxqX9_5KSFFRHdM69U6FC01SiPe2OUKwPQ-ISDd_ETIyvNWLsh-NzsEYzs3RIAVOjBxKRDmA7Jboeet6g" alt="Filter Bar Calendar" style="width: auto; max-width: 50%;">
6
+ <img src="https://lh3.googleusercontent.com/d/1n5U0vBMseBci4xV5wH8vApeAcRjcyos_" alt="Filter Bar Calendar" style="width: auto; max-width: 50%;">
7
7
  <img src="https://lh3.googleusercontent.com/d/1KCTqGgM2IZDY2nZ1ZTDf9WgX_zhmVB6D" alt="Filter Bar Guests" style="width: auto; max-width: 50%;">
8
8
  </div>
9
9
 
10
- ## React usage
10
+ ## Components
11
11
 
12
- ### Install the package:
12
+ | HTML tag | React component |
13
+ | --------------------- | --------------- |
14
+ | `<willba-filter-bar>` | `FilterBar` |
15
+
16
+ ## Use in a React app
17
+
18
+ Install:
13
19
 
14
20
  ```sh
15
- // with npm
16
21
  npm install willba-component-library
17
-
18
- // with yarn
22
+ # or
19
23
  yarn add willba-component-library
20
24
  ```
21
25
 
22
- ### Import and use the package:
26
+ Import and render:
23
27
 
24
28
  ```jsx
25
- import React from 'react'
26
- import ReactDOM from 'react-dom'
27
29
  import { FilterBar } from 'willba-component-library'
28
30
 
29
- function App() {
31
+ export function MyPage() {
30
32
  return (
31
33
  <FilterBar
32
- redirectUrl={'https://store.vendor.willba.app/'}
33
- language={'en'}
34
- disableCalendarDates={{
35
- disabledDatesByPage: [
36
- {
37
- offset: 7,
38
- page: '/rooms',
39
- },
40
- {
41
- offset: -1,
42
- page: '/events',
43
- },
44
- ],
45
- }}
46
- mode={'dark'}
47
- ageCategories={[
48
- {
49
- id: '2',
50
- name: 'Alle 6 vuotiaat',
51
- minVal: 0,
52
- sortOrder: 3,
53
- },
54
- {
55
- id: '3',
56
- name: '6-16 vuotiaat',
57
- minVal: 0,
58
- sortOrder: 2,
59
- },
60
- {
61
- id: '1',
62
- name: 'Aikuiset',
63
- minVal: 1,
64
- sortOrder: 1,
65
- },
66
- ]}
34
+ redirectUrl="https://store.vendor.willba.app/"
35
+ language="en"
36
+ mode="dark"
67
37
  tabs={[
68
- {
69
- label: 'Rooms',
70
- path: '/rooms',
71
- default: true,
72
- order: 2,
73
- },
74
- {
75
- label: 'Events',
76
- path: '/events',
77
- default: false,
78
- order: 1,
79
- },
38
+ { label: 'Rooms', path: '/rooms', default: true, order: 1 },
39
+ { label: 'Events', path: '/events', default: false, order: 2 },
40
+ ]}
41
+ ageCategories={[
42
+ { id: '1', name: 'Adults', minVal: 1, sortOrder: 1 },
43
+ { id: '2', name: 'Children', minVal: 0, sortOrder: 2 },
80
44
  ]}
81
45
  locations={{
82
46
  multiSelect: false,
83
- disabled: false,
84
- data: [
85
- {
86
- id: 1,
87
- label: 'Helsinki',
88
- description: 'Capital of Finland',
89
- imageUrl: 'https://example.com/helsinki.jpg',
90
- },
91
- ],
47
+ data: [{ id: 1, label: 'Helsinki', description: 'Capital of Finland' }],
92
48
  }}
93
49
  />
94
50
  )
95
51
  }
96
-
97
- ReactDOM.render(<App />, document.querySelector('#app'))
98
52
  ```
99
53
 
100
- ## Script usage
54
+ See [FilterBar props](#filterbar-props) for all available props. TypeScript types are exported as `FilterBarTypes` and `FilterCalendarTypes`.
55
+
56
+ ## Use as a script tag (WordPress, plain HTML, anywhere)
57
+
58
+ Two lines. Set `domain` to the host that serves the filter bar config — the element fetches it on mount and renders.
101
59
 
102
60
  ```html
103
- <div
104
- id="will-filter-bar"
105
- style="display: flex; justify-content: center; margin-bottom: 50px"
106
- ></div>
61
+ <willba-filter-bar
62
+ domain="customer.willba.store"
63
+ mode="dark"
64
+ ></willba-filter-bar>
65
+ <script src="https://cdn.jsdelivr.net/npm/willba-component-library@0.4.1/lib/embed.umd.js"></script>
66
+ ```
67
+
68
+ The element auto-fetches `https://{domain}/api/services/filter-bar-config?locale=...` and renders inside an isolated Shadow DOM. React, ReactDOM, i18n, and all CSS are bundled inside the script — nothing on the host page can interfere with it, and it cannot interfere with the host page.
107
69
 
108
- <script src="https://unpkg.com/react@18.3.1/umd/react.production.min.js"></script>
109
- <script src="https://unpkg.com/react-dom@18.3.1/umd/react-dom.production.min.js"></script>
110
- <script src="https://cdn.jsdelivr.net/npm/willba-component-library@0.3.27/lib/index.umd.js"></script>
70
+ ### Available HTML attributes
111
71
 
72
+ | Attribute | Purpose | Default |
73
+ | ----------------- | ----------------------------------------------------------------------------- | ------------------------------------ |
74
+ | `domain` | Host that serves the filter bar config API. Triggers auto-fetch when present. | (none — element waits for `.props=`) |
75
+ | `mode` | `"dark"` or `"light"`. | (whatever the API returns) |
76
+ | `language` | `"en"` or `"fi"`. | `navigator.language` |
77
+ | `fallback-locale` | Locale to use if `navigator.language` is unavailable. | `"fi"` |
78
+ | `redirect-url` | URL to redirect to after submit. | `https://{domain}` |
79
+
80
+ Protocol is auto-detected: `http://` for `localhost` / `127.0.0.1` hosts, `https://` everywhere else.
81
+
82
+ ### Configuration precedence
83
+
84
+ When multiple sources set the same prop, the higher one wins:
85
+
86
+ ```
87
+ API response → HTML attributes → el.props (programmatic)
88
+ (lowest) (highest)
89
+ ```
90
+
91
+ So a customer's API can ship sensible defaults, and a single embed can override `mode` or `language` per page without touching the API.
92
+
93
+ ### Programmatic control (advanced)
94
+
95
+ For full programmatic control — including complex props like `tabs`, `locations`, `ageCategories`, `palette` that don't fit in HTML attributes — set `.props` directly:
96
+
97
+ ```html
98
+ <willba-filter-bar id="fb"></willba-filter-bar>
99
+ <script src="https://cdn.jsdelivr.net/npm/willba-component-library@0.4.1/lib/embed.umd.js"></script>
112
100
  <script>
113
- const renderFilterBar = async () => {
114
- try {
115
- // Specify domain in order to get the correct filter banner config
116
- const domain = 'customer.willba.store'
117
- // Set mode to "dark" or "light" for filter bar style color background
118
- const mode = 'dark'
119
- // Add fallback locale in case navigator.language is not available
120
- const fallbackLocale = 'fi'
121
- // Set request timeout in milliseconds
122
- const requestTimeout = 10000
123
-
124
- const locale = (navigator.language || fallbackLocale).split('-')[0]
125
- const url = `https://${domain}/api/services/filter-bar-config?locale=${locale}`
126
-
127
- const response = await fetch(url, {
128
- method: 'GET',
129
- headers: { Accept: 'application/json' },
130
- signal: AbortSignal.timeout(requestTimeout),
131
- })
132
-
133
- if (!response.ok) return
134
-
135
- const { filterBarConfig } = await response.json()
136
- if (!filterBarConfig) return
137
-
138
- const filterBarContainer = document.getElementById('will-filter-bar')
139
- const WillbaFilterBar = WillbaComponentLibrary?.FilterBar
140
-
141
- if (!filterBarContainer || !WillbaFilterBar) return
142
-
143
- const root = ReactDOM.createRoot(filterBarContainer)
144
- root.render(
145
- React.createElement(WillbaFilterBar, {
146
- ...filterBarConfig,
147
- redirectUrl: `https://${domain}`,
148
- mode,
149
- })
150
- )
151
- } catch (error) {
152
- console.error('Failed to render filter bar:', error)
153
- }
101
+ document.getElementById('fb').props = {
102
+ redirectUrl: 'https://store.vendor.willba.app/',
103
+ language: 'en',
104
+ mode: 'dark',
105
+ tabs: [{ label: 'Rooms', path: '/rooms', default: true, order: 1 }],
106
+ ageCategories: [{ id: '1', name: 'Adults', minVal: 1, sortOrder: 1 }],
107
+ locations: { multiSelect: false, data: [{ id: 1, label: 'Helsinki' }] },
154
108
  }
155
-
156
- window.addEventListener('DOMContentLoaded', () => {
157
- renderFilterBar()
158
- })
159
109
  </script>
160
110
  ```
161
111
 
162
- ## Props of FilterBar
112
+ Re-assigning `.props` re-renders the element. Setting `.props` before the element upgrades is safe — the value is buffered and applied automatically. To merge with existing props instead of replacing, spread first: `el.props = { ...el.props, language: 'fi' }`.
113
+
114
+ ## FilterBar props
163
115
 
164
116
  | Name | Value | Description |
165
117
  | -------------------- | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -2,4 +2,4 @@ import React from 'react';
2
2
  import { FilterBarTypes } from './FilterBarTypes';
3
3
  import '../../themes/Default.css';
4
4
  import './FilterBar.css';
5
- export declare const FilterBar: ({ language, ageCategories, redirectUrl, palette, onSubmit, fullWidth, disableCalendarDates, mode, tabs, outerLoading, locations, }: FilterBarTypes) => React.JSX.Element;
5
+ export declare const FilterBar: (props: FilterBarTypes) => React.JSX.Element;
@@ -2,4 +2,4 @@ import React from 'react';
2
2
  import { FilterCalendarTypes } from './FilterCalendarTypes';
3
3
  import '../../themes/Default.css';
4
4
  import './FilterCalendar.css';
5
- export default function FilterCalendar({ calendarOffset, language, palette, onSubmit, disableCalendarDates: outerDisableCalendarDates, toggleCalendar, loadingData, setToggleCalendar, requestDates, showFeedback, noActiveSelection, rangeContext: outerRangeContext, }: FilterCalendarTypes): React.JSX.Element;
5
+ export default function FilterCalendar(props: FilterCalendarTypes): React.JSX.Element;
@@ -0,0 +1,6 @@
1
+ import React, { PropsWithChildren } from 'react';
2
+ type Props = PropsWithChildren<{
3
+ language?: string;
4
+ }>;
5
+ export declare const I18nProvider: ({ language, children }: Props) => React.JSX.Element;
6
+ export {};
@@ -0,0 +1 @@
1
+ export { I18nProvider } from './I18nProvider';
package/lib/embed.d.ts ADDED
@@ -0,0 +1,21 @@
1
+ import React from 'react';
2
+ import { FilterBarTypes } from './components/FilterBar/FilterBarTypes';
3
+ declare abstract class WillbaElement<P extends object> extends HTMLElement {
4
+ private _props;
5
+ private _root;
6
+ private _shadow;
7
+ private _container;
8
+ set props(value: Partial<P>);
9
+ get props(): Partial<P>;
10
+ protected abstract renderReact(props: Partial<P>): React.ReactNode;
11
+ connectedCallback(): void;
12
+ disconnectedCallback(): void;
13
+ private _render;
14
+ }
15
+ export declare class WillbaFilterBarElement extends WillbaElement<FilterBarTypes> {
16
+ private _autoFetchTriggered;
17
+ protected renderReact(props: Partial<FilterBarTypes>): React.JSX.Element;
18
+ connectedCallback(): void;
19
+ private _loadConfigFromApi;
20
+ }
21
+ export {};