@seedgrid/fe-components 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 (270) hide show
  1. package/dist/blocked-email-domains.json +41 -0
  2. package/dist/buttons/SgButton.d.ts +43 -0
  3. package/dist/buttons/SgButton.d.ts.map +1 -0
  4. package/dist/buttons/SgButton.js +123 -0
  5. package/dist/buttons/SgFloatActionButton.d.ts +60 -0
  6. package/dist/buttons/SgFloatActionButton.d.ts.map +1 -0
  7. package/dist/buttons/SgFloatActionButton.js +532 -0
  8. package/dist/buttons/SgSpeedDial.d.ts +40 -0
  9. package/dist/buttons/SgSpeedDial.d.ts.map +1 -0
  10. package/dist/buttons/SgSpeedDial.js +149 -0
  11. package/dist/buttons/SgSplitButton.d.ts +32 -0
  12. package/dist/buttons/SgSplitButton.d.ts.map +1 -0
  13. package/dist/buttons/SgSplitButton.js +81 -0
  14. package/dist/clock/SgClock.d.ts +28 -0
  15. package/dist/clock/SgClock.d.ts.map +1 -0
  16. package/dist/clock/SgClock.js +280 -0
  17. package/dist/clock/SgTimeProvider.d.ts +13 -0
  18. package/dist/clock/SgTimeProvider.d.ts.map +1 -0
  19. package/dist/clock/SgTimeProvider.js +44 -0
  20. package/dist/clock/themes/SgClockThemePicker.d.ts +14 -0
  21. package/dist/clock/themes/SgClockThemePicker.d.ts.map +1 -0
  22. package/dist/clock/themes/SgClockThemePicker.js +71 -0
  23. package/dist/clock/themes/SgClockThemePreview.d.ts +7 -0
  24. package/dist/clock/themes/SgClockThemePreview.d.ts.map +1 -0
  25. package/dist/clock/themes/SgClockThemePreview.js +11 -0
  26. package/dist/clock/themes/builtins.d.ts +3 -0
  27. package/dist/clock/themes/builtins.d.ts.map +1 -0
  28. package/dist/clock/themes/builtins.js +241 -0
  29. package/dist/clock/themes/index.d.ts +9 -0
  30. package/dist/clock/themes/index.d.ts.map +1 -0
  31. package/dist/clock/themes/index.js +7 -0
  32. package/dist/clock/themes/provider.d.ts +19 -0
  33. package/dist/clock/themes/provider.d.ts.map +1 -0
  34. package/dist/clock/themes/provider.js +54 -0
  35. package/dist/clock/themes/registry.d.ts +9 -0
  36. package/dist/clock/themes/registry.d.ts.map +1 -0
  37. package/dist/clock/themes/registry.js +25 -0
  38. package/dist/clock/themes/renderTheme.d.ts +7 -0
  39. package/dist/clock/themes/renderTheme.d.ts.map +1 -0
  40. package/dist/clock/themes/renderTheme.js +41 -0
  41. package/dist/clock/themes/types.d.ts +21 -0
  42. package/dist/clock/themes/types.d.ts.map +1 -0
  43. package/dist/clock/themes/types.js +1 -0
  44. package/dist/clock/themes/urlThemeCache.d.ts +2 -0
  45. package/dist/clock/themes/urlThemeCache.d.ts.map +1 -0
  46. package/dist/clock/themes/urlThemeCache.js +11 -0
  47. package/dist/clock/themes/useDarkFlag.d.ts +2 -0
  48. package/dist/clock/themes/useDarkFlag.d.ts.map +1 -0
  49. package/dist/clock/themes/useDarkFlag.js +14 -0
  50. package/dist/commons/SgBadge.d.ts +51 -0
  51. package/dist/commons/SgBadge.d.ts.map +1 -0
  52. package/dist/commons/SgBadge.js +141 -0
  53. package/dist/commons/SgBadgeOverlay.d.ts +13 -0
  54. package/dist/commons/SgBadgeOverlay.d.ts.map +1 -0
  55. package/dist/commons/SgBadgeOverlay.js +20 -0
  56. package/dist/commons/SgButton.d.ts +39 -0
  57. package/dist/commons/SgButton.d.ts.map +1 -0
  58. package/dist/commons/SgButton.js +116 -0
  59. package/dist/commons/SgPopup.d.ts +42 -0
  60. package/dist/commons/SgPopup.d.ts.map +1 -0
  61. package/dist/commons/SgPopup.js +218 -0
  62. package/dist/commons/SgToast.d.ts +44 -0
  63. package/dist/commons/SgToast.d.ts.map +1 -0
  64. package/dist/commons/SgToast.js +97 -0
  65. package/dist/commons/SgToaster.d.ts +11 -0
  66. package/dist/commons/SgToaster.d.ts.map +1 -0
  67. package/dist/commons/SgToaster.js +85 -0
  68. package/dist/commons/common-passwords.d.ts +2 -0
  69. package/dist/commons/common-passwords.d.ts.map +1 -0
  70. package/dist/commons/common-passwords.js +167 -0
  71. package/dist/environment/SgEnvironmentProvider.d.ts +31 -0
  72. package/dist/environment/SgEnvironmentProvider.d.ts.map +1 -0
  73. package/dist/environment/SgEnvironmentProvider.js +120 -0
  74. package/dist/environment/persistence.d.ts +44 -0
  75. package/dist/environment/persistence.d.ts.map +1 -0
  76. package/dist/environment/persistence.js +149 -0
  77. package/dist/gadgets/clock/SgClock.d.ts +18 -0
  78. package/dist/gadgets/clock/SgClock.d.ts.map +1 -0
  79. package/dist/gadgets/clock/SgClock.js +407 -0
  80. package/dist/gadgets/clock/SgTimeProvider.d.ts +13 -0
  81. package/dist/gadgets/clock/SgTimeProvider.d.ts.map +1 -0
  82. package/dist/gadgets/clock/SgTimeProvider.js +44 -0
  83. package/dist/gadgets/clock/themes/SgClockThemePicker.d.ts +14 -0
  84. package/dist/gadgets/clock/themes/SgClockThemePicker.d.ts.map +1 -0
  85. package/dist/gadgets/clock/themes/SgClockThemePicker.js +71 -0
  86. package/dist/gadgets/clock/themes/SgClockThemePreview.d.ts +7 -0
  87. package/dist/gadgets/clock/themes/SgClockThemePreview.d.ts.map +1 -0
  88. package/dist/gadgets/clock/themes/SgClockThemePreview.js +11 -0
  89. package/dist/gadgets/clock/themes/builtins.d.ts +3 -0
  90. package/dist/gadgets/clock/themes/builtins.d.ts.map +1 -0
  91. package/dist/gadgets/clock/themes/builtins.js +241 -0
  92. package/dist/gadgets/clock/themes/index.d.ts +9 -0
  93. package/dist/gadgets/clock/themes/index.d.ts.map +1 -0
  94. package/dist/gadgets/clock/themes/index.js +7 -0
  95. package/dist/gadgets/clock/themes/provider.d.ts +19 -0
  96. package/dist/gadgets/clock/themes/provider.d.ts.map +1 -0
  97. package/dist/gadgets/clock/themes/provider.js +54 -0
  98. package/dist/gadgets/clock/themes/registry.d.ts +9 -0
  99. package/dist/gadgets/clock/themes/registry.d.ts.map +1 -0
  100. package/dist/gadgets/clock/themes/registry.js +25 -0
  101. package/dist/gadgets/clock/themes/renderTheme.d.ts +7 -0
  102. package/dist/gadgets/clock/themes/renderTheme.d.ts.map +1 -0
  103. package/dist/gadgets/clock/themes/renderTheme.js +41 -0
  104. package/dist/gadgets/clock/themes/types.d.ts +21 -0
  105. package/dist/gadgets/clock/themes/types.d.ts.map +1 -0
  106. package/dist/gadgets/clock/themes/types.js +1 -0
  107. package/dist/gadgets/clock/themes/urlThemeCache.d.ts +2 -0
  108. package/dist/gadgets/clock/themes/urlThemeCache.d.ts.map +1 -0
  109. package/dist/gadgets/clock/themes/urlThemeCache.js +11 -0
  110. package/dist/gadgets/clock/themes/useDarkFlag.d.ts +2 -0
  111. package/dist/gadgets/clock/themes/useDarkFlag.d.ts.map +1 -0
  112. package/dist/gadgets/clock/themes/useDarkFlag.js +14 -0
  113. package/dist/gadgets/flip-digit/SgFlipDigit.d.ts +23 -0
  114. package/dist/gadgets/flip-digit/SgFlipDigit.d.ts.map +1 -0
  115. package/dist/gadgets/flip-digit/SgFlipDigit.js +118 -0
  116. package/dist/gadgets/flip-digit/index.d.ts +3 -0
  117. package/dist/gadgets/flip-digit/index.d.ts.map +1 -0
  118. package/dist/gadgets/flip-digit/index.js +1 -0
  119. package/dist/i18n/en-US.json +76 -0
  120. package/dist/i18n/es.json +76 -0
  121. package/dist/i18n/index.d.ts +328 -0
  122. package/dist/i18n/index.d.ts.map +1 -0
  123. package/dist/i18n/index.js +87 -0
  124. package/dist/i18n/pt-BR.json +76 -0
  125. package/dist/i18n/pt-PT.json +76 -0
  126. package/dist/index.d.ts +88 -0
  127. package/dist/index.d.ts.map +1 -0
  128. package/dist/index.js +46 -0
  129. package/dist/inputs/FloatingInput.d.ts +13 -0
  130. package/dist/inputs/FloatingInput.d.ts.map +1 -0
  131. package/dist/inputs/FloatingInput.js +53 -0
  132. package/dist/inputs/FloatingSelect.d.ts +15 -0
  133. package/dist/inputs/FloatingSelect.d.ts.map +1 -0
  134. package/dist/inputs/FloatingSelect.js +52 -0
  135. package/dist/inputs/FloatingTextArea.d.ts +11 -0
  136. package/dist/inputs/FloatingTextArea.d.ts.map +1 -0
  137. package/dist/inputs/FloatingTextArea.js +34 -0
  138. package/dist/inputs/InputBirthDate.d.ts +13 -0
  139. package/dist/inputs/InputBirthDate.d.ts.map +1 -0
  140. package/dist/inputs/InputBirthDate.js +46 -0
  141. package/dist/inputs/InputDate.d.ts +8 -0
  142. package/dist/inputs/InputDate.d.ts.map +1 -0
  143. package/dist/inputs/InputDate.js +23 -0
  144. package/dist/inputs/InputEmail.d.ts +14 -0
  145. package/dist/inputs/InputEmail.d.ts.map +1 -0
  146. package/dist/inputs/InputEmail.js +43 -0
  147. package/dist/inputs/InputPassword.d.ts +12 -0
  148. package/dist/inputs/InputPassword.d.ts.map +1 -0
  149. package/dist/inputs/InputPassword.js +42 -0
  150. package/dist/inputs/MaskedInputs.d.ts +27 -0
  151. package/dist/inputs/MaskedInputs.d.ts.map +1 -0
  152. package/dist/inputs/MaskedInputs.js +161 -0
  153. package/dist/inputs/SgAutocomplete.d.ts +42 -0
  154. package/dist/inputs/SgAutocomplete.d.ts.map +1 -0
  155. package/dist/inputs/SgAutocomplete.js +241 -0
  156. package/dist/inputs/SgCurrencyEdit.d.ts +56 -0
  157. package/dist/inputs/SgCurrencyEdit.d.ts.map +1 -0
  158. package/dist/inputs/SgCurrencyEdit.js +496 -0
  159. package/dist/inputs/SgInputBirthDate.d.ts +13 -0
  160. package/dist/inputs/SgInputBirthDate.d.ts.map +1 -0
  161. package/dist/inputs/SgInputBirthDate.js +48 -0
  162. package/dist/inputs/SgInputCEP.d.ts +33 -0
  163. package/dist/inputs/SgInputCEP.d.ts.map +1 -0
  164. package/dist/inputs/SgInputCEP.js +117 -0
  165. package/dist/inputs/SgInputCNPJ.d.ts +20 -0
  166. package/dist/inputs/SgInputCNPJ.d.ts.map +1 -0
  167. package/dist/inputs/SgInputCNPJ.js +133 -0
  168. package/dist/inputs/SgInputCPF.d.ts +15 -0
  169. package/dist/inputs/SgInputCPF.d.ts.map +1 -0
  170. package/dist/inputs/SgInputCPF.js +70 -0
  171. package/dist/inputs/SgInputCPFCNPJ.d.ts +15 -0
  172. package/dist/inputs/SgInputCPFCNPJ.d.ts.map +1 -0
  173. package/dist/inputs/SgInputCPFCNPJ.js +92 -0
  174. package/dist/inputs/SgInputDate.d.ts +8 -0
  175. package/dist/inputs/SgInputDate.d.ts.map +1 -0
  176. package/dist/inputs/SgInputDate.js +120 -0
  177. package/dist/inputs/SgInputEmail.d.ts +16 -0
  178. package/dist/inputs/SgInputEmail.d.ts.map +1 -0
  179. package/dist/inputs/SgInputEmail.js +74 -0
  180. package/dist/inputs/SgInputFone.d.ts +15 -0
  181. package/dist/inputs/SgInputFone.d.ts.map +1 -0
  182. package/dist/inputs/SgInputFone.js +60 -0
  183. package/dist/inputs/SgInputMasked.d.ts +27 -0
  184. package/dist/inputs/SgInputMasked.d.ts.map +1 -0
  185. package/dist/inputs/SgInputMasked.js +161 -0
  186. package/dist/inputs/SgInputNumber.d.ts +49 -0
  187. package/dist/inputs/SgInputNumber.d.ts.map +1 -0
  188. package/dist/inputs/SgInputNumber.js +438 -0
  189. package/dist/inputs/SgInputPassword.d.ts +26 -0
  190. package/dist/inputs/SgInputPassword.d.ts.map +1 -0
  191. package/dist/inputs/SgInputPassword.js +278 -0
  192. package/dist/inputs/SgInputPhone.d.ts +15 -0
  193. package/dist/inputs/SgInputPhone.d.ts.map +1 -0
  194. package/dist/inputs/SgInputPhone.js +66 -0
  195. package/dist/inputs/SgInputPostalCode.d.ts +37 -0
  196. package/dist/inputs/SgInputPostalCode.d.ts.map +1 -0
  197. package/dist/inputs/SgInputPostalCode.js +193 -0
  198. package/dist/inputs/SgInputSelect.d.ts +16 -0
  199. package/dist/inputs/SgInputSelect.d.ts.map +1 -0
  200. package/dist/inputs/SgInputSelect.js +104 -0
  201. package/dist/inputs/SgInputText.d.ts +49 -0
  202. package/dist/inputs/SgInputText.d.ts.map +1 -0
  203. package/dist/inputs/SgInputText.js +336 -0
  204. package/dist/inputs/SgInputTextArea.d.ts +41 -0
  205. package/dist/inputs/SgInputTextArea.d.ts.map +1 -0
  206. package/dist/inputs/SgInputTextArea.js +216 -0
  207. package/dist/inputs/SgTextEditor.d.ts +27 -0
  208. package/dist/inputs/SgTextEditor.d.ts.map +1 -0
  209. package/dist/inputs/SgTextEditor.js +201 -0
  210. package/dist/integration/module.d.ts +39 -0
  211. package/dist/integration/module.d.ts.map +1 -0
  212. package/dist/integration/module.js +1 -0
  213. package/dist/layout/GroupBox.d.ts +10 -0
  214. package/dist/layout/GroupBox.d.ts.map +1 -0
  215. package/dist/layout/GroupBox.js +14 -0
  216. package/dist/layout/SgCard.d.ts +35 -0
  217. package/dist/layout/SgCard.d.ts.map +1 -0
  218. package/dist/layout/SgCard.js +106 -0
  219. package/dist/layout/SgDockLayout.d.ts +37 -0
  220. package/dist/layout/SgDockLayout.d.ts.map +1 -0
  221. package/dist/layout/SgDockLayout.js +101 -0
  222. package/dist/layout/SgDockZone.d.ts +12 -0
  223. package/dist/layout/SgDockZone.d.ts.map +1 -0
  224. package/dist/layout/SgDockZone.js +20 -0
  225. package/dist/layout/SgGrid.d.ts +18 -0
  226. package/dist/layout/SgGrid.d.ts.map +1 -0
  227. package/dist/layout/SgGrid.js +101 -0
  228. package/dist/layout/SgGroupBox.d.ts +10 -0
  229. package/dist/layout/SgGroupBox.d.ts.map +1 -0
  230. package/dist/layout/SgGroupBox.js +14 -0
  231. package/dist/layout/SgMainPanel.d.ts +11 -0
  232. package/dist/layout/SgMainPanel.d.ts.map +1 -0
  233. package/dist/layout/SgMainPanel.js +70 -0
  234. package/dist/layout/SgPanel.d.ts +22 -0
  235. package/dist/layout/SgPanel.d.ts.map +1 -0
  236. package/dist/layout/SgPanel.js +33 -0
  237. package/dist/layout/SgScreen.d.ts +11 -0
  238. package/dist/layout/SgScreen.d.ts.map +1 -0
  239. package/dist/layout/SgScreen.js +18 -0
  240. package/dist/layout/SgStack.d.ts +15 -0
  241. package/dist/layout/SgStack.d.ts.map +1 -0
  242. package/dist/layout/SgStack.js +32 -0
  243. package/dist/layout/SgToolBar.d.ts +46 -0
  244. package/dist/layout/SgToolBar.d.ts.map +1 -0
  245. package/dist/layout/SgToolBar.js +199 -0
  246. package/dist/layout/SgTreeView.d.ts +80 -0
  247. package/dist/layout/SgTreeView.d.ts.map +1 -0
  248. package/dist/layout/SgTreeView.js +338 -0
  249. package/dist/manifest.d.ts +3 -0
  250. package/dist/manifest.d.ts.map +1 -0
  251. package/dist/manifest.js +19 -0
  252. package/dist/masks.d.ts +14 -0
  253. package/dist/masks.d.ts.map +1 -0
  254. package/dist/masks.js +91 -0
  255. package/dist/overlay/SgDialog.d.ts +39 -0
  256. package/dist/overlay/SgDialog.d.ts.map +1 -0
  257. package/dist/overlay/SgDialog.js +177 -0
  258. package/dist/overlay/SgPopup.d.ts +42 -0
  259. package/dist/overlay/SgPopup.d.ts.map +1 -0
  260. package/dist/overlay/SgPopup.js +218 -0
  261. package/dist/rhf.d.ts +6 -0
  262. package/dist/rhf.d.ts.map +1 -0
  263. package/dist/rhf.js +1 -0
  264. package/dist/validators.d.ts +27 -0
  265. package/dist/validators.d.ts.map +1 -0
  266. package/dist/validators.js +218 -0
  267. package/dist/wizard/SGWizard.d.ts +28 -0
  268. package/dist/wizard/SGWizard.d.ts.map +1 -0
  269. package/dist/wizard/SGWizard.js +124 -0
  270. package/package.json +53 -0
@@ -0,0 +1,120 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import React from "react";
4
+ import { createLocalStorageStrategy, buildSgPersistenceKey, } from "./persistence";
5
+ export { buildSgPersistenceKey, createLocalStorageStrategy, createApiPersistenceStrategy, createCompositePersistenceStrategy, } from "./persistence";
6
+ const defaultNamespaceProvider = {
7
+ getNamespace: () => ""
8
+ };
9
+ const defaultEnvironment = {
10
+ namespaceProvider: defaultNamespaceProvider,
11
+ persistenceStrategy: createLocalStorageStrategy(),
12
+ persistence: {
13
+ scope: "app:unknown",
14
+ mode: "fallback",
15
+ stateVersion: 1
16
+ }
17
+ };
18
+ const SgEnvironmentContext = React.createContext(null);
19
+ export function SgEnvironmentProvider(props) {
20
+ const value = React.useMemo(() => ({
21
+ namespaceProvider: props.value?.namespaceProvider ?? defaultNamespaceProvider,
22
+ persistenceStrategy: props.value?.persistenceStrategy ?? defaultEnvironment.persistenceStrategy,
23
+ persistence: {
24
+ scope: props.value?.persistence?.scope ?? defaultEnvironment.persistence.scope,
25
+ mode: props.value?.persistence?.mode ?? defaultEnvironment.persistence.mode,
26
+ stateVersion: props.value?.persistence?.stateVersion ?? defaultEnvironment.persistence.stateVersion
27
+ }
28
+ }), [
29
+ props.value?.namespaceProvider,
30
+ props.value?.persistenceStrategy,
31
+ props.value?.persistence?.scope,
32
+ props.value?.persistence?.mode,
33
+ props.value?.persistence?.stateVersion
34
+ ]);
35
+ return (_jsx(SgEnvironmentContext.Provider, { value: value, children: props.children }));
36
+ }
37
+ export function useSgEnvironment() {
38
+ return React.useContext(SgEnvironmentContext) ?? defaultEnvironment;
39
+ }
40
+ export function useSgNamespaceProvider() {
41
+ return useSgEnvironment().namespaceProvider;
42
+ }
43
+ export function useSgPersistence() {
44
+ const env = useSgEnvironment();
45
+ const namespace = env.namespaceProvider.getNamespace();
46
+ const fullKey = (baseKey) => buildSgPersistenceKey(baseKey, namespace, env.persistence.scope);
47
+ const load = React.useCallback(async (baseKey) => {
48
+ const key = fullKey(baseKey);
49
+ if (!key)
50
+ return null;
51
+ return await env.persistenceStrategy.load(key);
52
+ }, [env.persistenceStrategy, namespace, env.persistence.scope]);
53
+ const save = React.useCallback(async (baseKey, state) => {
54
+ const key = fullKey(baseKey);
55
+ if (!key)
56
+ return;
57
+ await env.persistenceStrategy.save(key, state);
58
+ }, [env.persistenceStrategy, namespace, env.persistence.scope]);
59
+ const clear = React.useCallback(async (baseKey) => {
60
+ const key = fullKey(baseKey);
61
+ if (!key)
62
+ return;
63
+ await env.persistenceStrategy.clear(key);
64
+ }, [env.persistenceStrategy, namespace, env.persistence.scope]);
65
+ return {
66
+ namespace,
67
+ scope: env.persistence.scope,
68
+ mode: env.persistence.mode,
69
+ stateVersion: env.persistence.stateVersion,
70
+ load,
71
+ save,
72
+ clear
73
+ };
74
+ }
75
+ export function useSgPersistentState(args) {
76
+ const { baseKey, defaultValue } = args;
77
+ const serialize = args.serialize ?? ((value) => value);
78
+ const deserialize = args.deserialize ?? ((value) => value);
79
+ const persistence = useSgPersistence();
80
+ const [value, setValue] = React.useState(defaultValue);
81
+ const [hydrated, setHydrated] = React.useState(false);
82
+ React.useEffect(() => {
83
+ let alive = true;
84
+ (async () => {
85
+ try {
86
+ const loaded = await persistence.load(baseKey);
87
+ if (!alive)
88
+ return;
89
+ if (loaded !== null && loaded !== undefined) {
90
+ setValue(deserialize(loaded));
91
+ }
92
+ else {
93
+ setValue(defaultValue);
94
+ }
95
+ setHydrated(true);
96
+ }
97
+ catch {
98
+ if (!alive)
99
+ return;
100
+ setValue(defaultValue);
101
+ setHydrated(true);
102
+ }
103
+ })();
104
+ return () => {
105
+ alive = false;
106
+ };
107
+ }, [baseKey, persistence.load, deserialize]);
108
+ const setAndPersist = React.useCallback((next) => {
109
+ setValue((prev) => {
110
+ const computed = typeof next === "function" ? next(prev) : next;
111
+ void persistence.save(baseKey, serialize(computed));
112
+ return computed;
113
+ });
114
+ }, [baseKey, persistence.save, serialize]);
115
+ const clear = React.useCallback(async () => {
116
+ await persistence.clear(baseKey);
117
+ setValue(defaultValue);
118
+ }, [baseKey, persistence.clear, defaultValue]);
119
+ return { value, setValue: setAndPersist, clear, hydrated };
120
+ }
@@ -0,0 +1,44 @@
1
+ export type NamespaceProvider = {
2
+ getNamespace: () => string | null;
3
+ };
4
+ export type PersistenceStrategy = {
5
+ load: (key: string) => unknown | Promise<unknown>;
6
+ save: (key: string, state: unknown) => void | Promise<void>;
7
+ clear: (key: string) => void | Promise<void>;
8
+ };
9
+ export type SgPersistenceRecordDTO = {
10
+ protocolVersion: 1;
11
+ key: string;
12
+ scope: string;
13
+ stateVersion: number;
14
+ updatedAt: string;
15
+ state: unknown;
16
+ };
17
+ export type SgPersistenceMode = "strict" | "fallback" | "mirror";
18
+ export type SgPersistenceConfig = {
19
+ scope: string;
20
+ mode: SgPersistenceMode;
21
+ stateVersion: number;
22
+ };
23
+ export type SgEnvironmentValue = {
24
+ namespaceProvider: NamespaceProvider;
25
+ persistenceStrategy: PersistenceStrategy;
26
+ persistence: SgPersistenceConfig;
27
+ };
28
+ export type SgEnvironment = SgEnvironmentValue;
29
+ export declare function buildSgPersistenceKey(baseKey: string, namespace?: string | null, scope?: string | null): string | null;
30
+ export declare function createLocalStorageStrategy(options?: {
31
+ prefix?: string;
32
+ }): PersistenceStrategy;
33
+ export declare function createApiPersistenceStrategy(args: {
34
+ baseUrl: string;
35
+ fetcher?: (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>;
36
+ scope: string;
37
+ stateVersion: number;
38
+ }): PersistenceStrategy;
39
+ export declare function createCompositePersistenceStrategy(args: {
40
+ mode: SgPersistenceMode;
41
+ primary: PersistenceStrategy;
42
+ secondary: PersistenceStrategy;
43
+ }): PersistenceStrategy;
44
+ //# sourceMappingURL=persistence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../src/environment/persistence.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,YAAY,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAClD,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,eAAe,EAAE,CAAC,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEjE,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,iBAAiB,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,WAAW,EAAE,mBAAmB,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,kBAAkB,CAAC;AAE/C,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,iBAMtG;AAED,wBAAgB,0BAA0B,CAAC,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,mBAAmB,CA4B7F;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC9E,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG,mBAAmB,CAuCtB;AAED,wBAAgB,kCAAkC,CAAC,IAAI,EAAE;IACvD,IAAI,EAAE,iBAAiB,CAAC;IACxB,OAAO,EAAE,mBAAmB,CAAC;IAC7B,SAAS,EAAE,mBAAmB,CAAC;CAChC,GAAG,mBAAmB,CA0DtB"}
@@ -0,0 +1,149 @@
1
+ export function buildSgPersistenceKey(baseKey, namespace, scope) {
2
+ const resolved = namespace ?? "";
3
+ if (!resolved)
4
+ return null;
5
+ const resolvedScope = (scope ?? "").trim();
6
+ if (!resolvedScope)
7
+ return `sg:${resolved}:${baseKey}`;
8
+ return `sg:${resolved}:${resolvedScope}:${baseKey}`;
9
+ }
10
+ export function createLocalStorageStrategy(options) {
11
+ const prefix = options?.prefix ?? "";
12
+ const full = (key) => (prefix ? `${prefix}${key}` : key);
13
+ return {
14
+ load: (key) => {
15
+ try {
16
+ const raw = window.localStorage.getItem(full(key));
17
+ if (raw == null)
18
+ return null;
19
+ return JSON.parse(raw);
20
+ }
21
+ catch {
22
+ return null;
23
+ }
24
+ },
25
+ save: (key, state) => {
26
+ try {
27
+ window.localStorage.setItem(full(key), JSON.stringify(state));
28
+ }
29
+ catch {
30
+ // ignore
31
+ }
32
+ },
33
+ clear: (key) => {
34
+ try {
35
+ window.localStorage.removeItem(full(key));
36
+ }
37
+ catch {
38
+ // ignore
39
+ }
40
+ }
41
+ };
42
+ }
43
+ export function createApiPersistenceStrategy(args) {
44
+ const fetcher = args.fetcher ?? fetch;
45
+ const base = args.baseUrl.replace(/\/$/, "");
46
+ const version = args.stateVersion;
47
+ const scope = args.scope;
48
+ return {
49
+ load: async (key) => {
50
+ const res = await fetcher(`${base}/sg/persistence?key=${encodeURIComponent(key)}`, {
51
+ method: "GET"
52
+ });
53
+ if (!res.ok)
54
+ throw new Error(`SG persistence load failed (${res.status})`);
55
+ const data = (await res.json());
56
+ if (!data?.found || !data.record)
57
+ return null;
58
+ return data.record.state;
59
+ },
60
+ save: async (key, state) => {
61
+ const record = {
62
+ protocolVersion: 1,
63
+ key,
64
+ scope,
65
+ stateVersion: version,
66
+ updatedAt: new Date().toISOString(),
67
+ state
68
+ };
69
+ const res = await fetcher(`${base}/sg/persistence`, {
70
+ method: "POST",
71
+ headers: { "Content-Type": "application/json" },
72
+ body: JSON.stringify({ record })
73
+ });
74
+ if (!res.ok)
75
+ throw new Error(`SG persistence save failed (${res.status})`);
76
+ },
77
+ clear: async (key) => {
78
+ const res = await fetcher(`${base}/sg/persistence?key=${encodeURIComponent(key)}`, {
79
+ method: "DELETE"
80
+ });
81
+ if (!res.ok)
82
+ throw new Error(`SG persistence clear failed (${res.status})`);
83
+ }
84
+ };
85
+ }
86
+ export function createCompositePersistenceStrategy(args) {
87
+ const { mode, primary, secondary } = args;
88
+ return {
89
+ load: async (key) => {
90
+ if (mode === "strict")
91
+ return await primary.load(key);
92
+ if (mode === "mirror") {
93
+ try {
94
+ const remote = await primary.load(key);
95
+ if (remote !== null && remote !== undefined)
96
+ return remote;
97
+ }
98
+ catch {
99
+ // ignore and fallback
100
+ }
101
+ return await secondary.load(key);
102
+ }
103
+ try {
104
+ return await primary.load(key);
105
+ }
106
+ catch {
107
+ return await secondary.load(key);
108
+ }
109
+ },
110
+ save: async (key, state) => {
111
+ if (mode === "strict") {
112
+ await primary.save(key, state);
113
+ return;
114
+ }
115
+ if (mode === "mirror") {
116
+ await Promise.allSettled([
117
+ Promise.resolve(primary.save(key, state)),
118
+ Promise.resolve(secondary.save(key, state))
119
+ ]);
120
+ return;
121
+ }
122
+ try {
123
+ await primary.save(key, state);
124
+ }
125
+ catch {
126
+ await secondary.save(key, state);
127
+ }
128
+ },
129
+ clear: async (key) => {
130
+ if (mode === "strict") {
131
+ await primary.clear(key);
132
+ return;
133
+ }
134
+ if (mode === "mirror") {
135
+ await Promise.allSettled([
136
+ Promise.resolve(primary.clear(key)),
137
+ Promise.resolve(secondary.clear(key))
138
+ ]);
139
+ return;
140
+ }
141
+ try {
142
+ await primary.clear(key);
143
+ }
144
+ catch {
145
+ await secondary.clear(key);
146
+ }
147
+ }
148
+ };
149
+ }
@@ -0,0 +1,18 @@
1
+ import * as React from "react";
2
+ import type { SgClockTheme } from "./themes/types";
3
+ export type SgClockProps = {
4
+ variant?: "digital" | "analog";
5
+ size?: "sm" | "md" | "lg" | number;
6
+ timezone?: string;
7
+ locale?: string;
8
+ format?: "12h" | "24h";
9
+ showSeconds?: boolean;
10
+ digitalStyle?: "default" | "segment" | "roller3d" | "flip";
11
+ secondHandMode?: "step" | "smooth";
12
+ themeId?: string;
13
+ theme?: SgClockTheme;
14
+ className?: string;
15
+ centerOverlay?: React.ReactNode;
16
+ };
17
+ export declare function SgClock(props: SgClockProps): import("react/jsx-runtime").JSX.Element;
18
+ //# sourceMappingURL=SgClock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SgClock.d.ts","sourceRoot":"","sources":["../../../src/gadgets/clock/SgClock.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAenD,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC/B,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;IAC3D,cAAc,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACjC,CAAC;AAsrBF,wBAAgB,OAAO,CAAC,KAAK,EAAE,YAAY,2CA4C1C"}