@omnifyjp/ui 2.0.4 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/{chunk-V3S2AZKJ.js → chunk-2OPOSDEH.js} +3 -3
  2. package/dist/{chunk-V3S2AZKJ.js.map → chunk-2OPOSDEH.js.map} +1 -1
  3. package/dist/chunk-7HHL5OFD.js +71 -0
  4. package/dist/chunk-7HHL5OFD.js.map +1 -0
  5. package/dist/{chunk-VPTIRPZW.js → chunk-BBFOFRWT.js} +58 -7
  6. package/dist/chunk-BBFOFRWT.js.map +1 -0
  7. package/dist/{chunk-4NBDYSSQ.js → chunk-DB42CM3T.js} +3 -3
  8. package/dist/{chunk-4NBDYSSQ.js.map → chunk-DB42CM3T.js.map} +1 -1
  9. package/dist/{chunk-4AGNE75K.js → chunk-M22SIS5Z.js} +3 -3
  10. package/dist/{chunk-4AGNE75K.js.map → chunk-M22SIS5Z.js.map} +1 -1
  11. package/dist/{chunk-HDTHGIQR.js → chunk-ML2VNJ7R.js} +3 -3
  12. package/dist/{chunk-HDTHGIQR.js.map → chunk-ML2VNJ7R.js.map} +1 -1
  13. package/dist/chunk-PMNLM6VF.js +11 -0
  14. package/dist/chunk-PMNLM6VF.js.map +1 -0
  15. package/dist/{chunk-ZUBW2ERW.js → chunk-Q5KDFNRD.js} +3 -3
  16. package/dist/{chunk-ZUBW2ERW.js.map → chunk-Q5KDFNRD.js.map} +1 -1
  17. package/dist/components/domain/calendar/calendar-event-chip.js +5 -1
  18. package/dist/components/domain/calendar/calendar-event-chip.js.map +1 -1
  19. package/dist/components/domain/calendar/calendar-event-sheet.js +6 -3
  20. package/dist/components/domain/calendar/calendar-event-sheet.js.map +1 -1
  21. package/dist/components/domain/calendar/calendar-mini.js +7 -4
  22. package/dist/components/domain/calendar/calendar-mini.js.map +1 -1
  23. package/dist/components/domain/calendar/calendar-toolbar.js +4 -2
  24. package/dist/components/domain/calendar/calendar-toolbar.js.map +1 -1
  25. package/dist/components/inputs/button.d.ts +1 -1
  26. package/dist/components/inputs/color-picker.js +3 -3
  27. package/dist/components/inputs/date-picker.js +8 -5
  28. package/dist/components/inputs/date-picker.js.map +1 -1
  29. package/dist/components/inputs/input.js +2 -2
  30. package/dist/components/inputs/password-input.js +3 -3
  31. package/dist/components/inputs/slug-input.js +3 -3
  32. package/dist/components/inputs/textarea.js +2 -2
  33. package/dist/components/inputs/time-picker.js +2 -2
  34. package/dist/components/navigation/locale-switcher.d.ts +35 -0
  35. package/dist/components/navigation/locale-switcher.js +7 -0
  36. package/dist/components/navigation/locale-switcher.js.map +1 -0
  37. package/dist/index.d.ts +3 -1
  38. package/dist/index.js +8 -6
  39. package/dist/lib/timezone.d.ts +16 -0
  40. package/dist/lib/timezone.js +3 -0
  41. package/dist/lib/timezone.js.map +1 -0
  42. package/dist/providers/ui-provider.d.ts +36 -2
  43. package/dist/providers/ui-provider.js +1 -1
  44. package/package.json +11 -11
  45. package/dist/chunk-VPTIRPZW.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@omnifyjp/ui",
3
- "version": "2.0.4",
3
+ "version": "2.2.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",
@@ -35,14 +35,6 @@
35
35
  "dist",
36
36
  "src/styles"
37
37
  ],
38
- "scripts": {
39
- "build": "tsup",
40
- "dev": "tsup --watch",
41
- "lint": "eslint src/",
42
- "type-check": "tsc --noEmit",
43
- "test": "vitest run",
44
- "test:watch": "vitest"
45
- },
46
38
  "peerDependencies": {
47
39
  "date-fns": ">=3",
48
40
  "react": ">=19",
@@ -99,7 +91,7 @@
99
91
  "sonner": "2.0.3",
100
92
  "tailwind-merge": "3.2.0",
101
93
  "vaul": "1.1.2",
102
- "@omnifyjp/ui-mcp": "2.0.4"
94
+ "@omnifyjp/ui-mcp": "2.2.0"
103
95
  },
104
96
  "devDependencies": {
105
97
  "@testing-library/jest-dom": "^6.9.1",
@@ -111,5 +103,13 @@
111
103
  "tsup": "^8.0.0",
112
104
  "typescript": "^5.9.3",
113
105
  "vitest": "^4.0.18"
106
+ },
107
+ "scripts": {
108
+ "build": "tsup",
109
+ "dev": "tsup --watch",
110
+ "lint": "eslint src/",
111
+ "type-check": "tsc --noEmit",
112
+ "test": "vitest run",
113
+ "test:watch": "vitest"
114
114
  }
115
- }
115
+ }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/providers/ui-provider.tsx"],"names":[],"mappings":"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","file":"chunk-VPTIRPZW.js","sourcesContent":["import { createContext, useContext, useState, useEffect, useCallback, ReactNode } from 'react';\n\n// ─── Theme ────────────────────────────────────────────────────────────────────\n\nexport type Theme = 'light' | 'dark' | 'system';\n\n// ─── Locale ───────────────────────────────────────────────────────────────────\n\nexport type LocaleCode = string;\n\n/**\n * Map of locale code → display label.\n * @example { en: 'English', vi: 'Tiếng Việt', ja: '日本語' }\n */\nexport type LocaleMap = Record<LocaleCode, string>;\n\n/** Value shape for translatable fields: locale code → string content. */\nexport type TranslatableValue = Record<LocaleCode, string>;\n\n/** Locale configuration used by UIProvider and translatable fields. */\nexport interface UILocaleConfig {\n /** Available locales. e.g. `{ en: 'English', vi: 'Tiếng Việt' }` */\n locales: LocaleMap;\n /** Locale shown by default when a translatable field is first rendered. */\n defaultLocale: LocaleCode;\n /** Locale to fall back to when the active locale has no value. */\n fallbackLocale: LocaleCode;\n}\n\n/**\n * `true` — inherit UIProvider's locale config.\n * `object` — override per-field (merged with provider config).\n */\nexport type TranslatableConfig = true | Partial<UILocaleConfig>;\n\n// ─── Context ──────────────────────────────────────────────────────────────────\n\ninterface UIContextValue {\n theme: Theme;\n setTheme: (theme: Theme) => void;\n locale: UILocaleConfig | undefined;\n dateFnsLocale: object | undefined;\n}\n\nconst UIContext = createContext<UIContextValue | undefined>(undefined);\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction loadSavedTheme(): Theme {\n if (typeof window === 'undefined') return 'system';\n const saved = localStorage.getItem('omnify_theme');\n if (saved === 'light' || saved === 'dark' || saved === 'system') return saved;\n return 'system';\n}\n\nfunction applyTheme(theme: Theme) {\n const root = document.documentElement;\n if (theme === 'system') {\n root.classList.toggle('dark', window.matchMedia('(prefers-color-scheme: dark)').matches);\n } else {\n root.classList.toggle('dark', theme === 'dark');\n }\n}\n\n// ─── UIProvider ───────────────────────────────────────────────────────────────\n\nexport interface UIProviderProps {\n children: ReactNode;\n /**\n * Initial theme. Defaults to user's saved localStorage value or `'system'`.\n */\n defaultTheme?: Theme;\n /**\n * Available locales for translatable fields.\n * @example { en: 'English', vi: 'Tiếng Việt', ja: '日本語' }\n */\n locales?: LocaleMap;\n /**\n * Locale shown first in translatable fields.\n * Defaults to the first key in `locales`.\n */\n defaultLocale?: LocaleCode;\n /**\n * Locale used when a field has no value for the active locale.\n * Defaults to `defaultLocale`.\n */\n fallbackLocale?: LocaleCode;\n /**\n * date-fns `Locale` object used by date components (DatePicker, CalendarMini, etc.).\n * Typed as `object` to avoid importing date-fns as a direct dependency.\n *\n * @example\n * ```tsx\n * import { ja } from 'date-fns/locale';\n * <UIProvider dateFnsLocale={ja}>{children}</UIProvider>\n * ```\n */\n dateFnsLocale?: object;\n}\n\n/**\n * Root provider for @omnifyjp/ui — handles dark mode and translatable field config.\n *\n * @example\n * ```tsx\n * <UIProvider\n * locales={{ en: 'English', vi: 'Tiếng Việt', ja: '日本語' }}\n * defaultLocale=\"en\"\n * fallbackLocale=\"en\"\n * >\n * {children}\n * </UIProvider>\n * ```\n */\nexport function UIProvider({\n children,\n defaultTheme,\n locales,\n defaultLocale,\n fallbackLocale,\n dateFnsLocale,\n}: UIProviderProps) {\n const [theme, setThemeState] = useState<Theme>(() => defaultTheme ?? loadSavedTheme());\n\n const setTheme = useCallback((t: Theme) => setThemeState(t), []);\n\n useEffect(() => {\n localStorage.setItem('omnify_theme', theme);\n applyTheme(theme);\n }, [theme]);\n\n useEffect(() => {\n if (theme !== 'system') return;\n const mq = window.matchMedia('(prefers-color-scheme: dark)');\n const handler = () => applyTheme('system');\n mq.addEventListener('change', handler);\n return () => mq.removeEventListener('change', handler);\n }, [theme]);\n\n const firstLocale = locales ? Object.keys(locales)[0] : undefined;\n const locale: UILocaleConfig | undefined =\n locales && firstLocale\n ? {\n locales,\n defaultLocale: defaultLocale ?? firstLocale,\n fallbackLocale: fallbackLocale ?? defaultLocale ?? firstLocale,\n }\n : undefined;\n\n return (\n <UIContext.Provider value={{ theme, setTheme, locale, dateFnsLocale }}>\n {children}\n </UIContext.Provider>\n );\n}\n\n// ─── Hooks ────────────────────────────────────────────────────────────────────\n\n/** Access theme and setTheme. Must be inside UIProvider. */\nexport function useTheme(): { theme: Theme; setTheme: (t: Theme) => void } {\n const ctx = useContext(UIContext);\n if (!ctx) throw new Error('useTheme must be used within UIProvider');\n return { theme: ctx.theme, setTheme: ctx.setTheme };\n}\n\n/**\n * Returns the locale config from UIProvider.\n * Returns `undefined` when no `locales` prop was passed to UIProvider.\n */\nexport function useUILocales(): UILocaleConfig | undefined {\n return useContext(UIContext)?.locale;\n}\n\n/**\n * Returns the date-fns `Locale` object from UIProvider.\n * Returns `undefined` when no `dateFnsLocale` prop was passed.\n */\nexport function useDateFnsLocale(): object | undefined {\n return useContext(UIContext)?.dateFnsLocale;\n}\n\n/**\n * Resolves the effective UILocaleConfig for a translatable field.\n * Merges inline `TranslatableConfig` with the provider's locale config.\n */\nexport function resolveTranslatableConfig(\n translatable: TranslatableConfig,\n providerLocales: UILocaleConfig | undefined,\n): UILocaleConfig | undefined {\n if (translatable === true) {\n return providerLocales;\n }\n const base = providerLocales ?? { locales: {}, defaultLocale: '', fallbackLocale: '' };\n const merged: UILocaleConfig = {\n locales: translatable.locales ?? base.locales,\n defaultLocale: translatable.defaultLocale ?? base.defaultLocale,\n fallbackLocale: translatable.fallbackLocale ?? base.fallbackLocale,\n };\n return Object.keys(merged.locales).length > 0 ? merged : undefined;\n}\n"]}