@helpwave/hightide 0.0.16 → 0.0.17

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 (111) hide show
  1. package/dist/components/ErrorComponent.js.map +1 -1
  2. package/dist/components/ErrorComponent.mjs.map +1 -1
  3. package/dist/components/LoadingAndErrorComponent.js.map +1 -1
  4. package/dist/components/LoadingAndErrorComponent.mjs.map +1 -1
  5. package/dist/components/LoadingAnimation.js.map +1 -1
  6. package/dist/components/LoadingAnimation.mjs.map +1 -1
  7. package/dist/components/Pagination.js.map +1 -1
  8. package/dist/components/Pagination.mjs.map +1 -1
  9. package/dist/components/SearchableList.js +1 -2
  10. package/dist/components/SearchableList.js.map +1 -1
  11. package/dist/components/SearchableList.mjs +1 -2
  12. package/dist/components/SearchableList.mjs.map +1 -1
  13. package/dist/components/StepperBar.js.map +1 -1
  14. package/dist/components/StepperBar.mjs.map +1 -1
  15. package/dist/components/Table.js.map +1 -1
  16. package/dist/components/Table.mjs.map +1 -1
  17. package/dist/components/TextImage.js.map +1 -1
  18. package/dist/components/TextImage.mjs.map +1 -1
  19. package/dist/components/TimeDisplay.js.map +1 -1
  20. package/dist/components/TimeDisplay.mjs.map +1 -1
  21. package/dist/components/date/DatePicker.js.map +1 -1
  22. package/dist/components/date/DatePicker.mjs.map +1 -1
  23. package/dist/components/date/DayPicker.js.map +1 -1
  24. package/dist/components/date/DayPicker.mjs.map +1 -1
  25. package/dist/components/date/YearMonthPicker.js.map +1 -1
  26. package/dist/components/date/YearMonthPicker.mjs.map +1 -1
  27. package/dist/components/modals/ConfirmDialog.js.map +1 -1
  28. package/dist/components/modals/ConfirmDialog.mjs.map +1 -1
  29. package/dist/components/modals/DiscardChangesDialog.js.map +1 -1
  30. package/dist/components/modals/DiscardChangesDialog.mjs.map +1 -1
  31. package/dist/components/modals/InputModal.js +1 -2
  32. package/dist/components/modals/InputModal.js.map +1 -1
  33. package/dist/components/modals/InputModal.mjs +1 -2
  34. package/dist/components/modals/InputModal.mjs.map +1 -1
  35. package/dist/components/modals/LanguageModal.js.map +1 -1
  36. package/dist/components/modals/LanguageModal.mjs.map +1 -1
  37. package/dist/components/modals/Modal.js.map +1 -1
  38. package/dist/components/modals/Modal.mjs.map +1 -1
  39. package/dist/components/properties/CheckboxProperty.js.map +1 -1
  40. package/dist/components/properties/CheckboxProperty.mjs.map +1 -1
  41. package/dist/components/properties/DateProperty.js +1 -2
  42. package/dist/components/properties/DateProperty.js.map +1 -1
  43. package/dist/components/properties/DateProperty.mjs +1 -2
  44. package/dist/components/properties/DateProperty.mjs.map +1 -1
  45. package/dist/components/properties/MultiSelectProperty.js +1 -2
  46. package/dist/components/properties/MultiSelectProperty.js.map +1 -1
  47. package/dist/components/properties/MultiSelectProperty.mjs +1 -2
  48. package/dist/components/properties/MultiSelectProperty.mjs.map +1 -1
  49. package/dist/components/properties/NumberProperty.js +1 -2
  50. package/dist/components/properties/NumberProperty.js.map +1 -1
  51. package/dist/components/properties/NumberProperty.mjs +1 -2
  52. package/dist/components/properties/NumberProperty.mjs.map +1 -1
  53. package/dist/components/properties/PropertyBase.js.map +1 -1
  54. package/dist/components/properties/PropertyBase.mjs.map +1 -1
  55. package/dist/components/properties/SelectProperty.js +1 -2
  56. package/dist/components/properties/SelectProperty.js.map +1 -1
  57. package/dist/components/properties/SelectProperty.mjs +1 -2
  58. package/dist/components/properties/SelectProperty.mjs.map +1 -1
  59. package/dist/components/properties/TextProperty.js +1 -2
  60. package/dist/components/properties/TextProperty.js.map +1 -1
  61. package/dist/components/properties/TextProperty.mjs +1 -2
  62. package/dist/components/properties/TextProperty.mjs.map +1 -1
  63. package/dist/components/user-input/DateAndTimePicker.js.map +1 -1
  64. package/dist/components/user-input/DateAndTimePicker.mjs.map +1 -1
  65. package/dist/components/user-input/Input.js +1 -2
  66. package/dist/components/user-input/Input.js.map +1 -1
  67. package/dist/components/user-input/Input.mjs +1 -2
  68. package/dist/components/user-input/Input.mjs.map +1 -1
  69. package/dist/components/user-input/MultiSelect.js +1 -2
  70. package/dist/components/user-input/MultiSelect.js.map +1 -1
  71. package/dist/components/user-input/MultiSelect.mjs +1 -2
  72. package/dist/components/user-input/MultiSelect.mjs.map +1 -1
  73. package/dist/components/user-input/SearchableSelect.js +1 -2
  74. package/dist/components/user-input/SearchableSelect.js.map +1 -1
  75. package/dist/components/user-input/SearchableSelect.mjs +1 -2
  76. package/dist/components/user-input/SearchableSelect.mjs.map +1 -1
  77. package/dist/components/user-input/Textarea.js +1 -2
  78. package/dist/components/user-input/Textarea.js.map +1 -1
  79. package/dist/components/user-input/Textarea.mjs +1 -2
  80. package/dist/components/user-input/Textarea.mjs.map +1 -1
  81. package/dist/components/user-input/ToggleableInput.js +1 -2
  82. package/dist/components/user-input/ToggleableInput.js.map +1 -1
  83. package/dist/components/user-input/ToggleableInput.mjs +1 -2
  84. package/dist/components/user-input/ToggleableInput.mjs.map +1 -1
  85. package/dist/hooks/useLanguage.js +1 -2
  86. package/dist/hooks/useLanguage.js.map +1 -1
  87. package/dist/hooks/useLanguage.mjs +1 -2
  88. package/dist/hooks/useLanguage.mjs.map +1 -1
  89. package/dist/hooks/useLocalStorage.d.mts +1 -1
  90. package/dist/hooks/useLocalStorage.d.ts +1 -1
  91. package/dist/hooks/useLocalStorage.js +5 -2
  92. package/dist/hooks/useLocalStorage.js.map +1 -1
  93. package/dist/hooks/useLocalStorage.mjs +1 -2
  94. package/dist/hooks/useLocalStorage.mjs.map +1 -1
  95. package/dist/hooks/useSaveDelay.d.mts +1 -1
  96. package/dist/hooks/useSaveDelay.d.ts +1 -1
  97. package/dist/hooks/useSaveDelay.js +5 -2
  98. package/dist/hooks/useSaveDelay.js.map +1 -1
  99. package/dist/hooks/useSaveDelay.mjs +1 -2
  100. package/dist/hooks/useSaveDelay.mjs.map +1 -1
  101. package/dist/hooks/useTranslation.js.map +1 -1
  102. package/dist/hooks/useTranslation.mjs.map +1 -1
  103. package/dist/index.d.mts +2 -0
  104. package/dist/index.d.ts +2 -0
  105. package/dist/index.js +8 -6
  106. package/dist/index.js.map +1 -1
  107. package/dist/index.mjs +6 -6
  108. package/dist/index.mjs.map +1 -1
  109. package/dist/util/news.js.map +1 -1
  110. package/dist/util/news.mjs.map +1 -1
  111. package/package.json +4 -6
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/util/news.ts","../../src/hooks/useLanguage.tsx","../../src/hooks/useLocalStorage.tsx"],"sourcesContent":["import { z } from 'zod'\nimport type { Languages } from '../hooks/useLanguage'\nimport { languages } from '../hooks/useLanguage'\n\nexport type News = {\n title: string,\n date: Date,\n description: (string | URL)[],\n externalResource?: URL,\n keys: string[],\n}\n\nexport type LocalizedNews = Record<Languages, News[]>\n\nexport const newsSchema = z.object({\n title: z.string(),\n description: z.string(),\n date: z.string(),\n image: z.string().url().optional(),\n externalResource: z.string().url().optional(),\n keys: z.array(z.string())\n}).transform<News>((obj) => {\n let description: (string | URL)[] = [obj.description]\n if (obj.image) {\n description = [new URL(obj.image), ...description]\n }\n\n return {\n title: obj.title,\n date: new Date(obj.date),\n description,\n externalResource: obj.externalResource ? new URL(obj.externalResource) : undefined,\n keys: obj.keys\n }\n})\n\nexport const newsListSchema = z.array(newsSchema)\n\nexport const localizedNewsSchema = z.record(z.enum(languages), newsListSchema)\n\nexport const filterNews = (localizedNews: News[], requiredKeys: string[]) => {\n return localizedNews.filter(news => requiredKeys.every(value => news.keys.includes(value)))\n}\n","import type { Dispatch, PropsWithChildren, SetStateAction } from 'react'\nimport { createContext, useContext, useEffect, useState } from 'react'\nimport useLocalStorage from './useLocalStorage'\n\nexport const languages = ['en', 'de'] as const\nexport type Languages = typeof languages[number]\nexport const languagesLocalNames: Record<Languages, string> = {\n en: 'English',\n de: 'Deutsch',\n}\n\nexport const DEFAULT_LANGUAGE = 'en'\n\nexport type LanguageContextValue = {\n language: Languages,\n setLanguage: Dispatch<SetStateAction<Languages>>,\n}\n\nexport const LanguageContext = createContext<LanguageContextValue>({ language: DEFAULT_LANGUAGE, setLanguage: (v) => v })\n\nexport const useLanguage = () => useContext(LanguageContext)\n\nexport const useLocale = (overWriteLanguage?: Languages) => {\n const { language } = useLanguage()\n const mapping: Record<Languages, string> = {\n en: 'en-US',\n de: 'de-DE'\n }\n return mapping[overWriteLanguage ?? language]\n}\n\ntype ProvideLanguageProps = {\n initialLanguage?: Languages,\n}\n\nexport const ProvideLanguage = ({ initialLanguage, children }: PropsWithChildren<ProvideLanguageProps>) => {\n const [language, setLanguage] = useState<Languages>(initialLanguage ?? DEFAULT_LANGUAGE)\n const [storedLanguage, setStoredLanguage] = useLocalStorage<Languages>('language', initialLanguage ?? DEFAULT_LANGUAGE)\n\n useEffect(() => {\n if(language !== initialLanguage && initialLanguage){\n console.warn('LanguageProvider initial state changed: Prefer using useLanguages\\'s setLanguage instead')\n setLanguage(initialLanguage)\n }\n }, [initialLanguage]) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n // TODO set locale of html tag here as well\n setStoredLanguage(language)\n }, [language, setStoredLanguage])\n\n useEffect(() => {\n if (storedLanguage !== null) {\n setLanguage(storedLanguage)\n return\n }\n\n const languagesToTestAgainst = Object.values(languages)\n\n const matchingBrowserLanguages = window.navigator.languages\n .map(language => languagesToTestAgainst.find((test) => language === test || language.split('-')[0] === test))\n .filter(entry => entry !== undefined)\n\n if (matchingBrowserLanguages.length === 0) return\n\n const firstMatch = matchingBrowserLanguages[0] as Languages\n setLanguage(firstMatch)\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return (\n <LanguageContext.Provider value={{\n language,\n setLanguage\n }}>\n {children}\n </LanguageContext.Provider>\n )\n}\n","import type { Dispatch, SetStateAction } from 'react'\nimport { useCallback, useEffect, useState } from 'react'\nimport { LocalStorageService } from '../util/storage'\n\ntype SetValue<T> = Dispatch<SetStateAction<T>>\nconst useLocalStorage = <T, >(key: string, initValue: T): [T, SetValue<T>] => {\n const get = useCallback((): T => {\n if (typeof window === 'undefined') {\n return initValue\n }\n const storageService = new LocalStorageService()\n const value = storageService.get<T>(key)\n return value || initValue\n }, [initValue, key])\n\n const [storedValue, setStoredValue] = useState<T>(get)\n\n const setValue: SetValue<T> = useCallback(value => {\n const newValue = value instanceof Function ? value(storedValue) : value\n const storageService = new LocalStorageService()\n storageService.set(key, value)\n\n setStoredValue(newValue)\n }, [storedValue, setStoredValue, key])\n\n useEffect(() => {\n setStoredValue(get())\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return [storedValue, setValue]\n}\n\nexport default useLocalStorage\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAkB;;;ACClB,IAAAA,gBAA+D;;;ACA/D,mBAAiD;;;ADqE7C;AAlEG,IAAM,YAAY,CAAC,MAAM,IAAI;AAO7B,IAAM,mBAAmB;AAOzB,IAAM,sBAAkB,6BAAoC,EAAE,UAAU,kBAAkB,aAAa,CAAC,MAAM,EAAE,CAAC;;;ADJjH,IAAM,aAAa,aAAE,OAAO;AAAA,EACjC,OAAO,aAAE,OAAO;AAAA,EAChB,aAAa,aAAE,OAAO;AAAA,EACtB,MAAM,aAAE,OAAO;AAAA,EACf,OAAO,aAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACjC,kBAAkB,aAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EAC5C,MAAM,aAAE,MAAM,aAAE,OAAO,CAAC;AAC1B,CAAC,EAAE,UAAgB,CAAC,QAAQ;AAC1B,MAAI,cAAgC,CAAC,IAAI,WAAW;AACpD,MAAI,IAAI,OAAO;AACb,kBAAc,CAAC,IAAI,IAAI,IAAI,KAAK,GAAG,GAAG,WAAW;AAAA,EACnD;AAEA,SAAO;AAAA,IACL,OAAO,IAAI;AAAA,IACX,MAAM,IAAI,KAAK,IAAI,IAAI;AAAA,IACvB;AAAA,IACA,kBAAkB,IAAI,mBAAmB,IAAI,IAAI,IAAI,gBAAgB,IAAI;AAAA,IACzE,MAAM,IAAI;AAAA,EACZ;AACF,CAAC;AAEM,IAAM,iBAAiB,aAAE,MAAM,UAAU;AAEzC,IAAM,sBAAsB,aAAE,OAAO,aAAE,KAAK,SAAS,GAAG,cAAc;AAEtE,IAAM,aAAa,CAAC,eAAuB,iBAA2B;AAC3E,SAAO,cAAc,OAAO,UAAQ,aAAa,MAAM,WAAS,KAAK,KAAK,SAAS,KAAK,CAAC,CAAC;AAC5F;","names":["import_react"]}
1
+ {"version":3,"sources":["../../src/util/news.ts","../../src/hooks/useLanguage.tsx","../../src/hooks/useLocalStorage.tsx"],"sourcesContent":["import { z } from 'zod'\nimport type { Languages } from '../hooks/useLanguage'\nimport { languages } from '../hooks/useLanguage'\n\nexport type News = {\n title: string,\n date: Date,\n description: (string | URL)[],\n externalResource?: URL,\n keys: string[],\n}\n\nexport type LocalizedNews = Record<Languages, News[]>\n\nexport const newsSchema = z.object({\n title: z.string(),\n description: z.string(),\n date: z.string(),\n image: z.string().url().optional(),\n externalResource: z.string().url().optional(),\n keys: z.array(z.string())\n}).transform<News>((obj) => {\n let description: (string | URL)[] = [obj.description]\n if (obj.image) {\n description = [new URL(obj.image), ...description]\n }\n\n return {\n title: obj.title,\n date: new Date(obj.date),\n description,\n externalResource: obj.externalResource ? new URL(obj.externalResource) : undefined,\n keys: obj.keys\n }\n})\n\nexport const newsListSchema = z.array(newsSchema)\n\nexport const localizedNewsSchema = z.record(z.enum(languages), newsListSchema)\n\nexport const filterNews = (localizedNews: News[], requiredKeys: string[]) => {\n return localizedNews.filter(news => requiredKeys.every(value => news.keys.includes(value)))\n}\n","import type { Dispatch, PropsWithChildren, SetStateAction } from 'react'\nimport { createContext, useContext, useEffect, useState } from 'react'\nimport { useLocalStorage } from './useLocalStorage'\n\nexport const languages = ['en', 'de'] as const\nexport type Languages = typeof languages[number]\nexport const languagesLocalNames: Record<Languages, string> = {\n en: 'English',\n de: 'Deutsch',\n}\n\nexport const DEFAULT_LANGUAGE = 'en'\n\nexport type LanguageContextValue = {\n language: Languages,\n setLanguage: Dispatch<SetStateAction<Languages>>,\n}\n\nexport const LanguageContext = createContext<LanguageContextValue>({ language: DEFAULT_LANGUAGE, setLanguage: (v) => v })\n\nexport const useLanguage = () => useContext(LanguageContext)\n\nexport const useLocale = (overWriteLanguage?: Languages) => {\n const { language } = useLanguage()\n const mapping: Record<Languages, string> = {\n en: 'en-US',\n de: 'de-DE'\n }\n return mapping[overWriteLanguage ?? language]\n}\n\ntype ProvideLanguageProps = {\n initialLanguage?: Languages,\n}\n\nexport const ProvideLanguage = ({ initialLanguage, children }: PropsWithChildren<ProvideLanguageProps>) => {\n const [language, setLanguage] = useState<Languages>(initialLanguage ?? DEFAULT_LANGUAGE)\n const [storedLanguage, setStoredLanguage] = useLocalStorage<Languages>('language', initialLanguage ?? DEFAULT_LANGUAGE)\n\n useEffect(() => {\n if(language !== initialLanguage && initialLanguage){\n console.warn('LanguageProvider initial state changed: Prefer using useLanguages\\'s setLanguage instead')\n setLanguage(initialLanguage)\n }\n }, [initialLanguage]) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n // TODO set locale of html tag here as well\n setStoredLanguage(language)\n }, [language, setStoredLanguage])\n\n useEffect(() => {\n if (storedLanguage !== null) {\n setLanguage(storedLanguage)\n return\n }\n\n const languagesToTestAgainst = Object.values(languages)\n\n const matchingBrowserLanguages = window.navigator.languages\n .map(language => languagesToTestAgainst.find((test) => language === test || language.split('-')[0] === test))\n .filter(entry => entry !== undefined)\n\n if (matchingBrowserLanguages.length === 0) return\n\n const firstMatch = matchingBrowserLanguages[0] as Languages\n setLanguage(firstMatch)\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return (\n <LanguageContext.Provider value={{\n language,\n setLanguage\n }}>\n {children}\n </LanguageContext.Provider>\n )\n}\n","import type { Dispatch, SetStateAction } from 'react'\nimport { useCallback, useEffect, useState } from 'react'\nimport { LocalStorageService } from '../util/storage'\n\ntype SetValue<T> = Dispatch<SetStateAction<T>>\nexport const useLocalStorage = <T, >(key: string, initValue: T): [T, SetValue<T>] => {\n const get = useCallback((): T => {\n if (typeof window === 'undefined') {\n return initValue\n }\n const storageService = new LocalStorageService()\n const value = storageService.get<T>(key)\n return value || initValue\n }, [initValue, key])\n\n const [storedValue, setStoredValue] = useState<T>(get)\n\n const setValue: SetValue<T> = useCallback(value => {\n const newValue = value instanceof Function ? value(storedValue) : value\n const storageService = new LocalStorageService()\n storageService.set(key, value)\n\n setStoredValue(newValue)\n }, [storedValue, setStoredValue, key])\n\n useEffect(() => {\n setStoredValue(get())\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return [storedValue, setValue]\n}"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAkB;;;ACClB,IAAAA,gBAA+D;;;ACA/D,mBAAiD;;;ADqE7C;AAlEG,IAAM,YAAY,CAAC,MAAM,IAAI;AAO7B,IAAM,mBAAmB;AAOzB,IAAM,sBAAkB,6BAAoC,EAAE,UAAU,kBAAkB,aAAa,CAAC,MAAM,EAAE,CAAC;;;ADJjH,IAAM,aAAa,aAAE,OAAO;AAAA,EACjC,OAAO,aAAE,OAAO;AAAA,EAChB,aAAa,aAAE,OAAO;AAAA,EACtB,MAAM,aAAE,OAAO;AAAA,EACf,OAAO,aAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACjC,kBAAkB,aAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EAC5C,MAAM,aAAE,MAAM,aAAE,OAAO,CAAC;AAC1B,CAAC,EAAE,UAAgB,CAAC,QAAQ;AAC1B,MAAI,cAAgC,CAAC,IAAI,WAAW;AACpD,MAAI,IAAI,OAAO;AACb,kBAAc,CAAC,IAAI,IAAI,IAAI,KAAK,GAAG,GAAG,WAAW;AAAA,EACnD;AAEA,SAAO;AAAA,IACL,OAAO,IAAI;AAAA,IACX,MAAM,IAAI,KAAK,IAAI,IAAI;AAAA,IACvB;AAAA,IACA,kBAAkB,IAAI,mBAAmB,IAAI,IAAI,IAAI,gBAAgB,IAAI;AAAA,IACzE,MAAM,IAAI;AAAA,EACZ;AACF,CAAC;AAEM,IAAM,iBAAiB,aAAE,MAAM,UAAU;AAEzC,IAAM,sBAAsB,aAAE,OAAO,aAAE,KAAK,SAAS,GAAG,cAAc;AAEtE,IAAM,aAAa,CAAC,eAAuB,iBAA2B;AAC3E,SAAO,cAAc,OAAO,UAAQ,aAAa,MAAM,WAAS,KAAK,KAAK,SAAS,KAAK,CAAC,CAAC;AAC5F;","names":["import_react"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/util/news.ts","../../src/hooks/useLanguage.tsx","../../src/hooks/useLocalStorage.tsx"],"sourcesContent":["import { z } from 'zod'\nimport type { Languages } from '../hooks/useLanguage'\nimport { languages } from '../hooks/useLanguage'\n\nexport type News = {\n title: string,\n date: Date,\n description: (string | URL)[],\n externalResource?: URL,\n keys: string[],\n}\n\nexport type LocalizedNews = Record<Languages, News[]>\n\nexport const newsSchema = z.object({\n title: z.string(),\n description: z.string(),\n date: z.string(),\n image: z.string().url().optional(),\n externalResource: z.string().url().optional(),\n keys: z.array(z.string())\n}).transform<News>((obj) => {\n let description: (string | URL)[] = [obj.description]\n if (obj.image) {\n description = [new URL(obj.image), ...description]\n }\n\n return {\n title: obj.title,\n date: new Date(obj.date),\n description,\n externalResource: obj.externalResource ? new URL(obj.externalResource) : undefined,\n keys: obj.keys\n }\n})\n\nexport const newsListSchema = z.array(newsSchema)\n\nexport const localizedNewsSchema = z.record(z.enum(languages), newsListSchema)\n\nexport const filterNews = (localizedNews: News[], requiredKeys: string[]) => {\n return localizedNews.filter(news => requiredKeys.every(value => news.keys.includes(value)))\n}\n","import type { Dispatch, PropsWithChildren, SetStateAction } from 'react'\nimport { createContext, useContext, useEffect, useState } from 'react'\nimport useLocalStorage from './useLocalStorage'\n\nexport const languages = ['en', 'de'] as const\nexport type Languages = typeof languages[number]\nexport const languagesLocalNames: Record<Languages, string> = {\n en: 'English',\n de: 'Deutsch',\n}\n\nexport const DEFAULT_LANGUAGE = 'en'\n\nexport type LanguageContextValue = {\n language: Languages,\n setLanguage: Dispatch<SetStateAction<Languages>>,\n}\n\nexport const LanguageContext = createContext<LanguageContextValue>({ language: DEFAULT_LANGUAGE, setLanguage: (v) => v })\n\nexport const useLanguage = () => useContext(LanguageContext)\n\nexport const useLocale = (overWriteLanguage?: Languages) => {\n const { language } = useLanguage()\n const mapping: Record<Languages, string> = {\n en: 'en-US',\n de: 'de-DE'\n }\n return mapping[overWriteLanguage ?? language]\n}\n\ntype ProvideLanguageProps = {\n initialLanguage?: Languages,\n}\n\nexport const ProvideLanguage = ({ initialLanguage, children }: PropsWithChildren<ProvideLanguageProps>) => {\n const [language, setLanguage] = useState<Languages>(initialLanguage ?? DEFAULT_LANGUAGE)\n const [storedLanguage, setStoredLanguage] = useLocalStorage<Languages>('language', initialLanguage ?? DEFAULT_LANGUAGE)\n\n useEffect(() => {\n if(language !== initialLanguage && initialLanguage){\n console.warn('LanguageProvider initial state changed: Prefer using useLanguages\\'s setLanguage instead')\n setLanguage(initialLanguage)\n }\n }, [initialLanguage]) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n // TODO set locale of html tag here as well\n setStoredLanguage(language)\n }, [language, setStoredLanguage])\n\n useEffect(() => {\n if (storedLanguage !== null) {\n setLanguage(storedLanguage)\n return\n }\n\n const languagesToTestAgainst = Object.values(languages)\n\n const matchingBrowserLanguages = window.navigator.languages\n .map(language => languagesToTestAgainst.find((test) => language === test || language.split('-')[0] === test))\n .filter(entry => entry !== undefined)\n\n if (matchingBrowserLanguages.length === 0) return\n\n const firstMatch = matchingBrowserLanguages[0] as Languages\n setLanguage(firstMatch)\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return (\n <LanguageContext.Provider value={{\n language,\n setLanguage\n }}>\n {children}\n </LanguageContext.Provider>\n )\n}\n","import type { Dispatch, SetStateAction } from 'react'\nimport { useCallback, useEffect, useState } from 'react'\nimport { LocalStorageService } from '../util/storage'\n\ntype SetValue<T> = Dispatch<SetStateAction<T>>\nconst useLocalStorage = <T, >(key: string, initValue: T): [T, SetValue<T>] => {\n const get = useCallback((): T => {\n if (typeof window === 'undefined') {\n return initValue\n }\n const storageService = new LocalStorageService()\n const value = storageService.get<T>(key)\n return value || initValue\n }, [initValue, key])\n\n const [storedValue, setStoredValue] = useState<T>(get)\n\n const setValue: SetValue<T> = useCallback(value => {\n const newValue = value instanceof Function ? value(storedValue) : value\n const storageService = new LocalStorageService()\n storageService.set(key, value)\n\n setStoredValue(newValue)\n }, [storedValue, setStoredValue, key])\n\n useEffect(() => {\n setStoredValue(get())\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return [storedValue, setValue]\n}\n\nexport default useLocalStorage\n"],"mappings":";AAAA,SAAS,SAAS;;;ACClB,SAAS,eAAe,YAAY,aAAAA,YAAW,YAAAC,iBAAgB;;;ACA/D,SAAS,aAAa,WAAW,gBAAgB;;;ADqE7C;AAlEG,IAAM,YAAY,CAAC,MAAM,IAAI;AAO7B,IAAM,mBAAmB;AAOzB,IAAM,kBAAkB,cAAoC,EAAE,UAAU,kBAAkB,aAAa,CAAC,MAAM,EAAE,CAAC;;;ADJjH,IAAM,aAAa,EAAE,OAAO;AAAA,EACjC,OAAO,EAAE,OAAO;AAAA,EAChB,aAAa,EAAE,OAAO;AAAA,EACtB,MAAM,EAAE,OAAO;AAAA,EACf,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACjC,kBAAkB,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EAC5C,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC;AAC1B,CAAC,EAAE,UAAgB,CAAC,QAAQ;AAC1B,MAAI,cAAgC,CAAC,IAAI,WAAW;AACpD,MAAI,IAAI,OAAO;AACb,kBAAc,CAAC,IAAI,IAAI,IAAI,KAAK,GAAG,GAAG,WAAW;AAAA,EACnD;AAEA,SAAO;AAAA,IACL,OAAO,IAAI;AAAA,IACX,MAAM,IAAI,KAAK,IAAI,IAAI;AAAA,IACvB;AAAA,IACA,kBAAkB,IAAI,mBAAmB,IAAI,IAAI,IAAI,gBAAgB,IAAI;AAAA,IACzE,MAAM,IAAI;AAAA,EACZ;AACF,CAAC;AAEM,IAAM,iBAAiB,EAAE,MAAM,UAAU;AAEzC,IAAM,sBAAsB,EAAE,OAAO,EAAE,KAAK,SAAS,GAAG,cAAc;AAEtE,IAAM,aAAa,CAAC,eAAuB,iBAA2B;AAC3E,SAAO,cAAc,OAAO,UAAQ,aAAa,MAAM,WAAS,KAAK,KAAK,SAAS,KAAK,CAAC,CAAC;AAC5F;","names":["useEffect","useState"]}
1
+ {"version":3,"sources":["../../src/util/news.ts","../../src/hooks/useLanguage.tsx","../../src/hooks/useLocalStorage.tsx"],"sourcesContent":["import { z } from 'zod'\nimport type { Languages } from '../hooks/useLanguage'\nimport { languages } from '../hooks/useLanguage'\n\nexport type News = {\n title: string,\n date: Date,\n description: (string | URL)[],\n externalResource?: URL,\n keys: string[],\n}\n\nexport type LocalizedNews = Record<Languages, News[]>\n\nexport const newsSchema = z.object({\n title: z.string(),\n description: z.string(),\n date: z.string(),\n image: z.string().url().optional(),\n externalResource: z.string().url().optional(),\n keys: z.array(z.string())\n}).transform<News>((obj) => {\n let description: (string | URL)[] = [obj.description]\n if (obj.image) {\n description = [new URL(obj.image), ...description]\n }\n\n return {\n title: obj.title,\n date: new Date(obj.date),\n description,\n externalResource: obj.externalResource ? new URL(obj.externalResource) : undefined,\n keys: obj.keys\n }\n})\n\nexport const newsListSchema = z.array(newsSchema)\n\nexport const localizedNewsSchema = z.record(z.enum(languages), newsListSchema)\n\nexport const filterNews = (localizedNews: News[], requiredKeys: string[]) => {\n return localizedNews.filter(news => requiredKeys.every(value => news.keys.includes(value)))\n}\n","import type { Dispatch, PropsWithChildren, SetStateAction } from 'react'\nimport { createContext, useContext, useEffect, useState } from 'react'\nimport { useLocalStorage } from './useLocalStorage'\n\nexport const languages = ['en', 'de'] as const\nexport type Languages = typeof languages[number]\nexport const languagesLocalNames: Record<Languages, string> = {\n en: 'English',\n de: 'Deutsch',\n}\n\nexport const DEFAULT_LANGUAGE = 'en'\n\nexport type LanguageContextValue = {\n language: Languages,\n setLanguage: Dispatch<SetStateAction<Languages>>,\n}\n\nexport const LanguageContext = createContext<LanguageContextValue>({ language: DEFAULT_LANGUAGE, setLanguage: (v) => v })\n\nexport const useLanguage = () => useContext(LanguageContext)\n\nexport const useLocale = (overWriteLanguage?: Languages) => {\n const { language } = useLanguage()\n const mapping: Record<Languages, string> = {\n en: 'en-US',\n de: 'de-DE'\n }\n return mapping[overWriteLanguage ?? language]\n}\n\ntype ProvideLanguageProps = {\n initialLanguage?: Languages,\n}\n\nexport const ProvideLanguage = ({ initialLanguage, children }: PropsWithChildren<ProvideLanguageProps>) => {\n const [language, setLanguage] = useState<Languages>(initialLanguage ?? DEFAULT_LANGUAGE)\n const [storedLanguage, setStoredLanguage] = useLocalStorage<Languages>('language', initialLanguage ?? DEFAULT_LANGUAGE)\n\n useEffect(() => {\n if(language !== initialLanguage && initialLanguage){\n console.warn('LanguageProvider initial state changed: Prefer using useLanguages\\'s setLanguage instead')\n setLanguage(initialLanguage)\n }\n }, [initialLanguage]) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n // TODO set locale of html tag here as well\n setStoredLanguage(language)\n }, [language, setStoredLanguage])\n\n useEffect(() => {\n if (storedLanguage !== null) {\n setLanguage(storedLanguage)\n return\n }\n\n const languagesToTestAgainst = Object.values(languages)\n\n const matchingBrowserLanguages = window.navigator.languages\n .map(language => languagesToTestAgainst.find((test) => language === test || language.split('-')[0] === test))\n .filter(entry => entry !== undefined)\n\n if (matchingBrowserLanguages.length === 0) return\n\n const firstMatch = matchingBrowserLanguages[0] as Languages\n setLanguage(firstMatch)\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return (\n <LanguageContext.Provider value={{\n language,\n setLanguage\n }}>\n {children}\n </LanguageContext.Provider>\n )\n}\n","import type { Dispatch, SetStateAction } from 'react'\nimport { useCallback, useEffect, useState } from 'react'\nimport { LocalStorageService } from '../util/storage'\n\ntype SetValue<T> = Dispatch<SetStateAction<T>>\nexport const useLocalStorage = <T, >(key: string, initValue: T): [T, SetValue<T>] => {\n const get = useCallback((): T => {\n if (typeof window === 'undefined') {\n return initValue\n }\n const storageService = new LocalStorageService()\n const value = storageService.get<T>(key)\n return value || initValue\n }, [initValue, key])\n\n const [storedValue, setStoredValue] = useState<T>(get)\n\n const setValue: SetValue<T> = useCallback(value => {\n const newValue = value instanceof Function ? value(storedValue) : value\n const storageService = new LocalStorageService()\n storageService.set(key, value)\n\n setStoredValue(newValue)\n }, [storedValue, setStoredValue, key])\n\n useEffect(() => {\n setStoredValue(get())\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return [storedValue, setValue]\n}"],"mappings":";AAAA,SAAS,SAAS;;;ACClB,SAAS,eAAe,YAAY,aAAAA,YAAW,YAAAC,iBAAgB;;;ACA/D,SAAS,aAAa,WAAW,gBAAgB;;;ADqE7C;AAlEG,IAAM,YAAY,CAAC,MAAM,IAAI;AAO7B,IAAM,mBAAmB;AAOzB,IAAM,kBAAkB,cAAoC,EAAE,UAAU,kBAAkB,aAAa,CAAC,MAAM,EAAE,CAAC;;;ADJjH,IAAM,aAAa,EAAE,OAAO;AAAA,EACjC,OAAO,EAAE,OAAO;AAAA,EAChB,aAAa,EAAE,OAAO;AAAA,EACtB,MAAM,EAAE,OAAO;AAAA,EACf,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACjC,kBAAkB,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EAC5C,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC;AAC1B,CAAC,EAAE,UAAgB,CAAC,QAAQ;AAC1B,MAAI,cAAgC,CAAC,IAAI,WAAW;AACpD,MAAI,IAAI,OAAO;AACb,kBAAc,CAAC,IAAI,IAAI,IAAI,KAAK,GAAG,GAAG,WAAW;AAAA,EACnD;AAEA,SAAO;AAAA,IACL,OAAO,IAAI;AAAA,IACX,MAAM,IAAI,KAAK,IAAI,IAAI;AAAA,IACvB;AAAA,IACA,kBAAkB,IAAI,mBAAmB,IAAI,IAAI,IAAI,gBAAgB,IAAI;AAAA,IACzE,MAAM,IAAI;AAAA,EACZ;AACF,CAAC;AAEM,IAAM,iBAAiB,EAAE,MAAM,UAAU;AAEzC,IAAM,sBAAsB,EAAE,OAAO,EAAE,KAAK,SAAS,GAAG,cAAc;AAEtE,IAAM,aAAa,CAAC,eAAuB,iBAA2B;AAC3E,SAAO,cAAc,OAAO,UAAQ,aAAa,MAAM,WAAS,KAAK,KAAK,SAAS,KAAK,CAAC,CAAC;AAC5F;","names":["useEffect","useState"]}
package/package.json CHANGED
@@ -7,7 +7,7 @@
7
7
  "url": "git+https://github.com/helpwave/hightide.git"
8
8
  },
9
9
  "license": "MPL-2.0",
10
- "version": "0.0.16",
10
+ "version": "0.0.17",
11
11
  "files": [
12
12
  "dist"
13
13
  ],
@@ -36,10 +36,13 @@
36
36
  "@radix-ui/react-checkbox": "1.1.3",
37
37
  "@tailwindcss/cli": "^4.1.7",
38
38
  "clsx": "^2.1.1",
39
+ "next": "15.2.4",
39
40
  "lucide-react": "0.468.0",
40
41
  "postcss": "^8.5.3",
41
42
  "prop-types": "15.8.1",
43
+ "react": "18.3.1",
42
44
  "react-custom-scrollbars-2": "4.5.0",
45
+ "react-dom": "18.3.1",
43
46
  "simplebar-core": "1.3.0",
44
47
  "simplebar-react": "3.3.0",
45
48
  "tailwindcss": "^4.1.3",
@@ -72,11 +75,6 @@
72
75
  "typescript": "^5.7.2",
73
76
  "webpack": "5.97.1"
74
77
  },
75
- "peerDependencies": {
76
- "next": "15.2.4",
77
- "react": "18.3.1",
78
- "react-dom": "18.3.1"
79
- },
80
78
  "keywords": [
81
79
  "react",
82
80
  "tailwindcss",