@joelbarron/react-web-dev-kit 0.1.6 → 0.1.7

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 (53) hide show
  1. package/dist/core/buttons/JBButton.d.ts +8 -0
  2. package/dist/core/buttons/JBButton.d.ts.map +1 -0
  3. package/dist/core/buttons/JBButton.js +55 -0
  4. package/dist/core/buttons/index.d.ts +2 -0
  5. package/dist/core/buttons/index.d.ts.map +1 -0
  6. package/dist/core/buttons/index.js +1 -0
  7. package/dist/core/index.d.ts +1 -0
  8. package/dist/core/index.d.ts.map +1 -1
  9. package/dist/core/index.js +1 -0
  10. package/dist/core/layout/JBContentContainer.d.ts +5 -1
  11. package/dist/core/layout/JBContentContainer.d.ts.map +1 -1
  12. package/dist/core/layout/JBContentContainer.js +12 -4
  13. package/dist/core/layout/JBFormHeader.d.ts.map +1 -1
  14. package/dist/core/layout/JBFormHeader.js +43 -68
  15. package/dist/forms/JBAutocompleteField.d.ts +12 -0
  16. package/dist/forms/JBAutocompleteField.d.ts.map +1 -0
  17. package/dist/forms/JBAutocompleteField.js +20 -0
  18. package/dist/forms/index.d.ts +1 -0
  19. package/dist/forms/index.d.ts.map +1 -1
  20. package/dist/forms/index.js +1 -0
  21. package/dist/grid/JBGrid.d.ts.map +1 -1
  22. package/dist/grid/JBGrid.js +57 -5
  23. package/dist/grid/JBGridHeader.d.ts.map +1 -1
  24. package/dist/grid/JBGridHeader.js +13 -11
  25. package/dist/grid/defaults.d.ts.map +1 -1
  26. package/dist/grid/defaults.js +1 -0
  27. package/dist/grid/types.d.ts +10 -2
  28. package/dist/grid/types.d.ts.map +1 -1
  29. package/dist/hooks/index.d.ts +1 -0
  30. package/dist/hooks/index.d.ts.map +1 -1
  31. package/dist/hooks/index.js +1 -0
  32. package/dist/hooks/useJBEntityFormController.d.ts +54 -0
  33. package/dist/hooks/useJBEntityFormController.d.ts.map +1 -0
  34. package/dist/hooks/useJBEntityFormController.js +156 -0
  35. package/dist/utils/geo.d.ts +9 -0
  36. package/dist/utils/geo.d.ts.map +1 -0
  37. package/dist/utils/geo.js +186 -0
  38. package/dist/utils/index.d.ts +1 -0
  39. package/dist/utils/index.d.ts.map +1 -1
  40. package/dist/utils/index.js +1 -0
  41. package/package.json +1 -1
  42. package/dist/auth/ui/SignInPageTitle.d.ts +0 -6
  43. package/dist/auth/ui/SignInPageTitle.d.ts.map +0 -1
  44. package/dist/auth/ui/SignInPageTitle.js +0 -7
  45. package/dist/auth/ui/SignOutPageTitle.d.ts +0 -6
  46. package/dist/auth/ui/SignOutPageTitle.d.ts.map +0 -1
  47. package/dist/auth/ui/SignOutPageTitle.js +0 -7
  48. package/dist/auth/ui/SignUpPageTitle.d.ts +0 -6
  49. package/dist/auth/ui/SignUpPageTitle.d.ts.map +0 -1
  50. package/dist/auth/ui/SignUpPageTitle.js +0 -7
  51. package/dist/grid/JBFormHeader.d.ts +0 -2
  52. package/dist/grid/JBFormHeader.d.ts.map +0 -1
  53. package/dist/grid/JBFormHeader.js +0 -1
@@ -16,10 +16,14 @@ export type JBGridDefaults = {
16
16
  allowGrouping?: boolean;
17
17
  filters?: unknown[];
18
18
  sorting?: unknown[];
19
- grouping?: unknown[];
20
- expandedGroups?: unknown[];
19
+ grouping?: JBGridGrouping[];
20
+ expandedGroups?: string[];
21
+ expandGroupedRowsByDefault?: boolean;
21
22
  pageSizes?: number[];
22
23
  };
24
+ export type JBGridGrouping = {
25
+ columnName: string;
26
+ };
23
27
  export type JBGridColumn = {
24
28
  name: string;
25
29
  title: string;
@@ -68,6 +72,8 @@ export type JBGridProps<TData extends Record<string, unknown>> = {
68
72
  rows?: TData[];
69
73
  totalCount?: number;
70
74
  loading?: boolean;
75
+ isFetching?: boolean;
76
+ fetchingLabel?: string;
71
77
  error?: ReactNode;
72
78
  currentPage?: number;
73
79
  onCurrentPageChange?: (page: number) => void;
@@ -99,6 +105,7 @@ export type JBModuleTextsConfig = {
99
105
  goBackOnItemNotFoundText?: string;
100
106
  goBackToGrid?: string;
101
107
  formHeaderSubtitle?: string;
108
+ formHeaderRecordPrefix?: string;
102
109
  };
103
110
  export type JBModuleUrlsConfig = {
104
111
  base?: string;
@@ -147,6 +154,7 @@ export type JBFormHeaderProps = {
147
154
  onBackClick?: () => void;
148
155
  backContent?: ReactNode;
149
156
  isNew?: boolean;
157
+ recordId?: string | number;
150
158
  title?: string;
151
159
  dynamicTitle?: string;
152
160
  formValues?: Record<string, unknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/grid/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/grid/types.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
1
  export * from './useJBDebouncedValue';
2
+ export * from './useJBEntityFormController';
2
3
  export * from './useJBRedirect';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iBAAiB,CAAC"}
@@ -1,2 +1,3 @@
1
1
  export * from './useJBDebouncedValue';
2
+ export * from './useJBEntityFormController';
2
3
  export * from './useJBRedirect';
@@ -0,0 +1,54 @@
1
+ import { FieldValues, UseFormReset } from 'react-hook-form';
2
+ type JBEntityFormRetrieveQuery<TRetrieveData> = {
3
+ data?: TRetrieveData | null;
4
+ isError: boolean;
5
+ error?: unknown;
6
+ };
7
+ type UseJBEntityFormControllerMessages = {
8
+ loadError?: string;
9
+ saveError?: string;
10
+ deleteError?: string;
11
+ createSuccess?: string;
12
+ updateSuccess?: string;
13
+ deleteSuccess?: string;
14
+ };
15
+ type UseJBEntityFormControllerOptions<TFormValues extends FieldValues, TRetrieveData, TCreateResponse> = {
16
+ isNew: boolean;
17
+ itemId?: string;
18
+ defaultValues: TFormValues;
19
+ retrieveQuery: JBEntityFormRetrieveQuery<TRetrieveData>;
20
+ reset: UseFormReset<TFormValues>;
21
+ mapRetrieveToValues: (data: TRetrieveData) => TFormValues;
22
+ createItem: (formData: TFormValues) => Promise<TCreateResponse>;
23
+ updateItem: (id: string, formData: TFormValues) => Promise<unknown>;
24
+ deleteItem: (id: string) => Promise<unknown>;
25
+ navigateToList: () => void;
26
+ navigateToEdit: (id: string | number) => void;
27
+ onShowError: (error: unknown, fallbackMessage: string) => void;
28
+ onShowSuccess?: (message: string) => void;
29
+ getCreatedId?: (response: TCreateResponse) => string | number | undefined;
30
+ messages?: UseJBEntityFormControllerMessages;
31
+ };
32
+ type UseJBEntityFormControllerResult<TFormValues extends FieldValues> = {
33
+ formDisabled: boolean;
34
+ loadedValues: TFormValues;
35
+ deleteDialogOpen: boolean;
36
+ setDeleteDialogOpen: (open: boolean) => void;
37
+ handleStartEdit: () => void;
38
+ handleCancelEdit: () => void;
39
+ handleSave: (formData: TFormValues) => Promise<void>;
40
+ handleDelete: () => Promise<void>;
41
+ handleSubmitOnEnter: (event: {
42
+ key: string;
43
+ defaultPrevented?: boolean;
44
+ altKey?: boolean;
45
+ ctrlKey?: boolean;
46
+ metaKey?: boolean;
47
+ shiftKey?: boolean;
48
+ target: EventTarget | null;
49
+ preventDefault: () => void;
50
+ }, submit: () => void) => void;
51
+ };
52
+ export declare function useJBEntityFormController<TFormValues extends FieldValues, TRetrieveData, TCreateResponse>(options: UseJBEntityFormControllerOptions<TFormValues, TRetrieveData, TCreateResponse>): UseJBEntityFormControllerResult<TFormValues>;
53
+ export {};
54
+ //# sourceMappingURL=useJBEntityFormController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useJBEntityFormController.d.ts","sourceRoot":"","sources":["../../src/hooks/useJBEntityFormController.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,156 @@
1
+ import { useEffect, useRef, useState } from 'react';
2
+ const DEFAULT_MESSAGES = {
3
+ loadError: 'No se pudo cargar el registro.',
4
+ saveError: 'No se pudo guardar el registro.',
5
+ deleteError: 'No se pudo eliminar el registro.',
6
+ createSuccess: 'Registro creado correctamente.',
7
+ updateSuccess: 'Registro actualizado correctamente.',
8
+ deleteSuccess: 'Registro eliminado correctamente.'
9
+ };
10
+ export function useJBEntityFormController(options) {
11
+ const { isNew, itemId, defaultValues, retrieveQuery, reset, mapRetrieveToValues, createItem, updateItem, deleteItem, navigateToList, navigateToEdit, onShowError, onShowSuccess, getCreatedId, messages } = options;
12
+ const mapRetrieveToValuesRef = useRef(mapRetrieveToValues);
13
+ const onShowErrorRef = useRef(onShowError);
14
+ const navigateToListRef = useRef(navigateToList);
15
+ useEffect(() => {
16
+ mapRetrieveToValuesRef.current = mapRetrieveToValues;
17
+ }, [mapRetrieveToValues]);
18
+ useEffect(() => {
19
+ onShowErrorRef.current = onShowError;
20
+ }, [onShowError]);
21
+ useEffect(() => {
22
+ navigateToListRef.current = navigateToList;
23
+ }, [navigateToList]);
24
+ const resolvedMessages = {
25
+ ...DEFAULT_MESSAGES,
26
+ ...messages
27
+ };
28
+ const [formDisabled, setFormDisabled] = useState(!isNew);
29
+ const [loadedValues, setLoadedValues] = useState(defaultValues);
30
+ const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);
31
+ const skipRetrieveErrorAfterDeleteRef = useRef(false);
32
+ useEffect(() => {
33
+ if (isNew) {
34
+ reset(defaultValues);
35
+ setLoadedValues(defaultValues);
36
+ setFormDisabled(false);
37
+ return;
38
+ }
39
+ if (retrieveQuery.isError) {
40
+ if (skipRetrieveErrorAfterDeleteRef.current) {
41
+ return;
42
+ }
43
+ onShowErrorRef.current(retrieveQuery.error, resolvedMessages.loadError);
44
+ navigateToListRef.current();
45
+ return;
46
+ }
47
+ if (!retrieveQuery.data) {
48
+ return;
49
+ }
50
+ const values = mapRetrieveToValuesRef.current(retrieveQuery.data);
51
+ setLoadedValues(values);
52
+ reset(values);
53
+ setFormDisabled(true);
54
+ }, [
55
+ defaultValues,
56
+ isNew,
57
+ reset,
58
+ resolvedMessages.loadError,
59
+ retrieveQuery.data,
60
+ retrieveQuery.error,
61
+ retrieveQuery.isError
62
+ ]);
63
+ const handleSave = async (formData) => {
64
+ try {
65
+ if (isNew) {
66
+ const response = await createItem(formData);
67
+ onShowSuccess?.(resolvedMessages.createSuccess);
68
+ const createdId = getCreatedId?.(response) ?? response?.data?.id;
69
+ if (createdId !== undefined && createdId !== null) {
70
+ navigateToEdit(createdId);
71
+ }
72
+ return;
73
+ }
74
+ if (!itemId) {
75
+ return;
76
+ }
77
+ await updateItem(itemId, formData);
78
+ setLoadedValues(formData);
79
+ setFormDisabled(true);
80
+ onShowSuccess?.(resolvedMessages.updateSuccess);
81
+ }
82
+ catch (error) {
83
+ onShowError(error, resolvedMessages.saveError);
84
+ }
85
+ };
86
+ const handleDelete = async () => {
87
+ if (!itemId) {
88
+ return;
89
+ }
90
+ try {
91
+ skipRetrieveErrorAfterDeleteRef.current = true;
92
+ await deleteItem(itemId);
93
+ setDeleteDialogOpen(false);
94
+ onShowSuccess?.(resolvedMessages.deleteSuccess);
95
+ navigateToList();
96
+ }
97
+ catch (error) {
98
+ skipRetrieveErrorAfterDeleteRef.current = false;
99
+ onShowError(error, resolvedMessages.deleteError);
100
+ }
101
+ };
102
+ const handleStartEdit = () => {
103
+ setFormDisabled(false);
104
+ };
105
+ const handleCancelEdit = () => {
106
+ if (isNew) {
107
+ return;
108
+ }
109
+ reset(loadedValues);
110
+ setFormDisabled(true);
111
+ };
112
+ const handleSubmitOnEnter = (event, submit) => {
113
+ if (event.key !== 'Enter') {
114
+ return;
115
+ }
116
+ if (event.defaultPrevented) {
117
+ return;
118
+ }
119
+ if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {
120
+ return;
121
+ }
122
+ if (formDisabled || deleteDialogOpen) {
123
+ return;
124
+ }
125
+ const targetElement = event.target;
126
+ if (targetElement instanceof HTMLElement) {
127
+ const tagName = targetElement.tagName.toLowerCase();
128
+ const inputType = targetElement.getAttribute('type')?.toLowerCase();
129
+ const role = targetElement.getAttribute('role')?.toLowerCase();
130
+ const ariaAutocomplete = targetElement.getAttribute('aria-autocomplete')?.toLowerCase();
131
+ if (tagName === 'textarea' ||
132
+ tagName === 'button' ||
133
+ role === 'button' ||
134
+ role === 'combobox' ||
135
+ ariaAutocomplete === 'list' ||
136
+ targetElement.isContentEditable ||
137
+ inputType === 'submit' ||
138
+ inputType === 'button') {
139
+ return;
140
+ }
141
+ }
142
+ event.preventDefault();
143
+ submit();
144
+ };
145
+ return {
146
+ formDisabled,
147
+ loadedValues,
148
+ deleteDialogOpen,
149
+ setDeleteDialogOpen,
150
+ handleStartEdit,
151
+ handleCancelEdit,
152
+ handleSave,
153
+ handleDelete,
154
+ handleSubmitOnEnter
155
+ };
156
+ }
@@ -0,0 +1,9 @@
1
+ export type JBGeoOption = {
2
+ value: string;
3
+ label: string;
4
+ disabled?: boolean;
5
+ };
6
+ export declare const jbCountryCodeToFlagEmoji: (countryCode: string) => string;
7
+ export declare const getJBCountryOptions: (locale?: string) => JBGeoOption[];
8
+ export declare const getJBStateOptionsByCountry: (countryCode?: string | null) => JBGeoOption[];
9
+ //# sourceMappingURL=geo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geo.d.ts","sourceRoot":"","sources":["../../src/utils/geo.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AA4KF,eAAO,MAAM,wBAAwB,GAAI,aAAa,MAAM,KAAG,MAQ9D,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,eAAgB,KAAG,WAAW,EAkBjE,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAI,cAAc,MAAM,GAAG,IAAI,KAAG,WAAW,EAOnF,CAAC"}
@@ -0,0 +1,186 @@
1
+ const COUNTRY_PRIORITY = ['MX', 'US', 'ES', 'AR', 'CO', 'CL', 'PE', 'EC', 'BR', 'CA'];
2
+ const FALLBACK_COUNTRY_CODES = [
3
+ 'MX',
4
+ 'US',
5
+ 'CA',
6
+ 'ES',
7
+ 'AR',
8
+ 'CO',
9
+ 'CL',
10
+ 'PE',
11
+ 'EC',
12
+ 'UY',
13
+ 'PY',
14
+ 'BO',
15
+ 'BR',
16
+ 'FR',
17
+ 'DE',
18
+ 'IT',
19
+ 'GB',
20
+ 'PT'
21
+ ];
22
+ const MEXICO_STATES = [
23
+ { value: 'Aguascalientes', label: 'Aguascalientes' },
24
+ { value: 'Baja California', label: 'Baja California' },
25
+ { value: 'Baja California Sur', label: 'Baja California Sur' },
26
+ { value: 'Campeche', label: 'Campeche' },
27
+ { value: 'Chiapas', label: 'Chiapas' },
28
+ { value: 'Chihuahua', label: 'Chihuahua' },
29
+ { value: 'Ciudad de Mexico', label: 'Ciudad de Mexico' },
30
+ { value: 'Coahuila', label: 'Coahuila' },
31
+ { value: 'Colima', label: 'Colima' },
32
+ { value: 'Durango', label: 'Durango' },
33
+ { value: 'Estado de Mexico', label: 'Estado de Mexico' },
34
+ { value: 'Guanajuato', label: 'Guanajuato' },
35
+ { value: 'Guerrero', label: 'Guerrero' },
36
+ { value: 'Hidalgo', label: 'Hidalgo' },
37
+ { value: 'Jalisco', label: 'Jalisco' },
38
+ { value: 'Michoacan', label: 'Michoacan' },
39
+ { value: 'Morelos', label: 'Morelos' },
40
+ { value: 'Nayarit', label: 'Nayarit' },
41
+ { value: 'Nuevo Leon', label: 'Nuevo Leon' },
42
+ { value: 'Oaxaca', label: 'Oaxaca' },
43
+ { value: 'Puebla', label: 'Puebla' },
44
+ { value: 'Queretaro', label: 'Queretaro' },
45
+ { value: 'Quintana Roo', label: 'Quintana Roo' },
46
+ { value: 'San Luis Potosi', label: 'San Luis Potosi' },
47
+ { value: 'Sinaloa', label: 'Sinaloa' },
48
+ { value: 'Sonora', label: 'Sonora' },
49
+ { value: 'Tabasco', label: 'Tabasco' },
50
+ { value: 'Tamaulipas', label: 'Tamaulipas' },
51
+ { value: 'Tlaxcala', label: 'Tlaxcala' },
52
+ { value: 'Veracruz', label: 'Veracruz' },
53
+ { value: 'Yucatan', label: 'Yucatan' },
54
+ { value: 'Zacatecas', label: 'Zacatecas' }
55
+ ];
56
+ const UNITED_STATES = [
57
+ { value: 'Alabama', label: 'Alabama' },
58
+ { value: 'Alaska', label: 'Alaska' },
59
+ { value: 'Arizona', label: 'Arizona' },
60
+ { value: 'Arkansas', label: 'Arkansas' },
61
+ { value: 'California', label: 'California' },
62
+ { value: 'Colorado', label: 'Colorado' },
63
+ { value: 'Connecticut', label: 'Connecticut' },
64
+ { value: 'Delaware', label: 'Delaware' },
65
+ { value: 'Florida', label: 'Florida' },
66
+ { value: 'Georgia', label: 'Georgia' },
67
+ { value: 'Hawaii', label: 'Hawaii' },
68
+ { value: 'Idaho', label: 'Idaho' },
69
+ { value: 'Illinois', label: 'Illinois' },
70
+ { value: 'Indiana', label: 'Indiana' },
71
+ { value: 'Iowa', label: 'Iowa' },
72
+ { value: 'Kansas', label: 'Kansas' },
73
+ { value: 'Kentucky', label: 'Kentucky' },
74
+ { value: 'Louisiana', label: 'Louisiana' },
75
+ { value: 'Maine', label: 'Maine' },
76
+ { value: 'Maryland', label: 'Maryland' },
77
+ { value: 'Massachusetts', label: 'Massachusetts' },
78
+ { value: 'Michigan', label: 'Michigan' },
79
+ { value: 'Minnesota', label: 'Minnesota' },
80
+ { value: 'Mississippi', label: 'Mississippi' },
81
+ { value: 'Missouri', label: 'Missouri' },
82
+ { value: 'Montana', label: 'Montana' },
83
+ { value: 'Nebraska', label: 'Nebraska' },
84
+ { value: 'Nevada', label: 'Nevada' },
85
+ { value: 'New Hampshire', label: 'New Hampshire' },
86
+ { value: 'New Jersey', label: 'New Jersey' },
87
+ { value: 'New Mexico', label: 'New Mexico' },
88
+ { value: 'New York', label: 'New York' },
89
+ { value: 'North Carolina', label: 'North Carolina' },
90
+ { value: 'North Dakota', label: 'North Dakota' },
91
+ { value: 'Ohio', label: 'Ohio' },
92
+ { value: 'Oklahoma', label: 'Oklahoma' },
93
+ { value: 'Oregon', label: 'Oregon' },
94
+ { value: 'Pennsylvania', label: 'Pennsylvania' },
95
+ { value: 'Rhode Island', label: 'Rhode Island' },
96
+ { value: 'South Carolina', label: 'South Carolina' },
97
+ { value: 'South Dakota', label: 'South Dakota' },
98
+ { value: 'Tennessee', label: 'Tennessee' },
99
+ { value: 'Texas', label: 'Texas' },
100
+ { value: 'Utah', label: 'Utah' },
101
+ { value: 'Vermont', label: 'Vermont' },
102
+ { value: 'Virginia', label: 'Virginia' },
103
+ { value: 'Washington', label: 'Washington' },
104
+ { value: 'West Virginia', label: 'West Virginia' },
105
+ { value: 'Wisconsin', label: 'Wisconsin' },
106
+ { value: 'Wyoming', label: 'Wyoming' }
107
+ ];
108
+ const STATES_BY_COUNTRY = {
109
+ MX: MEXICO_STATES,
110
+ US: UNITED_STATES
111
+ };
112
+ const countryOptionsCache = new Map();
113
+ const isValidCountryCode = (code) => /^[A-Z]{2}$/.test(code);
114
+ const sortCountryCodes = (countryCodes) => {
115
+ return [...countryCodes].sort((left, right) => {
116
+ const leftIndex = COUNTRY_PRIORITY.indexOf(left);
117
+ const rightIndex = COUNTRY_PRIORITY.indexOf(right);
118
+ if (leftIndex >= 0 && rightIndex >= 0) {
119
+ return leftIndex - rightIndex;
120
+ }
121
+ if (leftIndex >= 0) {
122
+ return -1;
123
+ }
124
+ if (rightIndex >= 0) {
125
+ return 1;
126
+ }
127
+ return left.localeCompare(right);
128
+ });
129
+ };
130
+ const resolveCountryCodes = () => {
131
+ const intlValuesOf = Intl.supportedValuesOf;
132
+ if (typeof intlValuesOf === 'function') {
133
+ try {
134
+ // NOTE: "region" is not supported in all runtimes and may throw RangeError.
135
+ const values = intlValuesOf('region')
136
+ .map((value) => value.toUpperCase())
137
+ .filter((value) => isValidCountryCode(value));
138
+ if (values.length > 0) {
139
+ return sortCountryCodes(Array.from(new Set(values)));
140
+ }
141
+ }
142
+ catch (_error) {
143
+ // Fallback list is used when runtime does not support region values.
144
+ }
145
+ }
146
+ return sortCountryCodes(FALLBACK_COUNTRY_CODES);
147
+ };
148
+ const resolveCountryName = (countryCode, locale) => {
149
+ if (typeof Intl.DisplayNames !== 'function') {
150
+ return countryCode;
151
+ }
152
+ const displayNames = new Intl.DisplayNames([locale], { type: 'region' });
153
+ return displayNames.of(countryCode) ?? countryCode;
154
+ };
155
+ export const jbCountryCodeToFlagEmoji = (countryCode) => {
156
+ const normalized = countryCode.trim().toUpperCase();
157
+ if (!isValidCountryCode(normalized)) {
158
+ return '🏳️';
159
+ }
160
+ const points = [...normalized].map((char) => 127397 + char.charCodeAt(0));
161
+ return String.fromCodePoint(...points);
162
+ };
163
+ export const getJBCountryOptions = (locale = 'es-MX') => {
164
+ const cacheKey = locale.toLowerCase();
165
+ const cached = countryOptionsCache.get(cacheKey);
166
+ if (cached) {
167
+ return cached;
168
+ }
169
+ const options = resolveCountryCodes().map((countryCode) => {
170
+ const countryName = resolveCountryName(countryCode, locale);
171
+ const flag = jbCountryCodeToFlagEmoji(countryCode);
172
+ return {
173
+ value: countryCode,
174
+ label: `${flag} ${countryName}`
175
+ };
176
+ });
177
+ countryOptionsCache.set(cacheKey, options);
178
+ return options;
179
+ };
180
+ export const getJBStateOptionsByCountry = (countryCode) => {
181
+ const normalizedCountry = (countryCode ?? '').trim().toUpperCase();
182
+ if (!normalizedCountry) {
183
+ return [];
184
+ }
185
+ return STATES_BY_COUNTRY[normalizedCountry] ?? [];
186
+ };
@@ -2,4 +2,5 @@ export * from './query';
2
2
  export * from './format';
3
3
  export * from './regex';
4
4
  export * from './errors';
5
+ export * from './geo';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,OAAO,CAAC"}
@@ -2,3 +2,4 @@ export * from './query';
2
2
  export * from './format';
3
3
  export * from './regex';
4
4
  export * from './errors';
5
+ export * from './geo';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@joelbarron/react-web-dev-kit",
3
- "version": "0.1.6",
3
+ "version": "0.1.7",
4
4
  "private": false,
5
5
  "sideEffects": false,
6
6
  "main": "dist/index.js",
@@ -1,6 +0,0 @@
1
- type SignInPageTitleProps = {
2
- logoSrc?: string;
3
- };
4
- export declare function SignInPageTitle(props: SignInPageTitleProps): import("react/jsx-runtime").JSX.Element;
5
- export {};
6
- //# sourceMappingURL=SignInPageTitle.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SignInPageTitle.d.ts","sourceRoot":"","sources":["../../../src/auth/ui/SignInPageTitle.tsx"],"names":[],"mappings":"AAGA,KAAK,oBAAoB,GAAG;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,2CAiB1D"}
@@ -1,7 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import Box from '@mui/material/Box';
3
- import Typography from '@mui/material/Typography';
4
- export function SignInPageTitle(props) {
5
- const { logoSrc = '/assets/images/logo/logo.svg' } = props;
6
- return (_jsxs(Box, { sx: { width: '100%', display: 'flex', flexDirection: 'column', alignItems: 'center' }, children: [_jsx("img", { style: { width: 48 }, src: logoSrc, alt: "logo" }), _jsx(Typography, { sx: { mt: 4, fontSize: 36, lineHeight: 1.25, fontWeight: 800, letterSpacing: '-0.02em' }, children: "Iniciar sesi\u00F3n" })] }));
7
- }
@@ -1,6 +0,0 @@
1
- type SignOutPageTitleProps = {
2
- logoSrc?: string;
3
- };
4
- export declare function SignOutPageTitle(props: SignOutPageTitleProps): import("react/jsx-runtime").JSX.Element;
5
- export {};
6
- //# sourceMappingURL=SignOutPageTitle.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SignOutPageTitle.d.ts","sourceRoot":"","sources":["../../../src/auth/ui/SignOutPageTitle.tsx"],"names":[],"mappings":"AAGA,KAAK,qBAAqB,GAAG;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,2CAiB5D"}
@@ -1,7 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import Box from '@mui/material/Box';
3
- import Typography from '@mui/material/Typography';
4
- export function SignOutPageTitle(props) {
5
- const { logoSrc = '/assets/images/logo/logo.svg' } = props;
6
- return (_jsxs(Box, { sx: { width: '100%' }, children: [_jsx("img", { style: { width: 48, display: 'block', marginInline: 'auto' }, src: logoSrc, alt: "logo" }), _jsx(Typography, { sx: { mt: 4, textAlign: 'center', fontSize: 36, lineHeight: 1.25, fontWeight: 800, letterSpacing: '-0.02em' }, children: "Has cerrado sesi\u00F3n" })] }));
7
- }
@@ -1,6 +0,0 @@
1
- type SignUpPageTitleProps = {
2
- logoSrc?: string;
3
- };
4
- export declare function SignUpPageTitle(props: SignUpPageTitleProps): import("react/jsx-runtime").JSX.Element;
5
- export {};
6
- //# sourceMappingURL=SignUpPageTitle.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SignUpPageTitle.d.ts","sourceRoot":"","sources":["../../../src/auth/ui/SignUpPageTitle.tsx"],"names":[],"mappings":"AAGA,KAAK,oBAAoB,GAAG;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,2CAiB1D"}
@@ -1,7 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import Box from '@mui/material/Box';
3
- import Typography from '@mui/material/Typography';
4
- export function SignUpPageTitle(props) {
5
- const { logoSrc = '/assets/images/logo/logo.svg' } = props;
6
- return (_jsxs(Box, { sx: { width: '100%' }, children: [_jsx("img", { style: { width: 48 }, src: logoSrc, alt: "logo" }), _jsx(Typography, { sx: { mt: 4, fontSize: 36, lineHeight: 1.25, fontWeight: 800, letterSpacing: '-0.02em' }, children: "Crear cuenta" })] }));
7
- }
@@ -1,2 +0,0 @@
1
- export { JBFormHeader } from '../core/layout/JBFormHeader';
2
- //# sourceMappingURL=JBFormHeader.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"JBFormHeader.d.ts","sourceRoot":"","sources":["../../src/grid/JBFormHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC"}
@@ -1 +0,0 @@
1
- export { JBFormHeader } from '../core/layout/JBFormHeader';