@liiift-studio/sanity-font-manager 2.7.0 → 2.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +695 -437
  3. package/dist/index.js +1634 -17839
  4. package/dist/index.mjs +1551 -17745
  5. package/package.json +83 -83
  6. package/src/components/BatchUploadFonts.jsx +655 -655
  7. package/src/components/BulkActions.jsx +99 -99
  8. package/src/components/ExistingDocumentResolver.jsx +152 -152
  9. package/src/components/FontReviewCard.jsx +455 -455
  10. package/src/components/FontScriptUploaderComponent.jsx +463 -463
  11. package/src/components/GenerateCollectionsPairsComponent.jsx +259 -259
  12. package/src/components/KeyValueInput.jsx +95 -95
  13. package/src/components/KeyValueReferenceInput.jsx +267 -267
  14. package/src/components/NestedObjectArraySelector.jsx +146 -146
  15. package/src/components/PriceInput.jsx +26 -26
  16. package/src/components/PrimaryCollectionGeneratorTypeface.jsx +116 -116
  17. package/src/components/RegenerateSubfamiliesComponent.jsx +185 -185
  18. package/src/components/SetOTF.jsx +87 -87
  19. package/src/components/SingleUploaderTool.jsx +674 -674
  20. package/src/components/StatusDisplay.jsx +26 -26
  21. package/src/components/StyleCountInput.jsx +16 -16
  22. package/src/components/UpdateScriptsComponent.jsx +76 -76
  23. package/src/components/UploadButton.jsx +43 -43
  24. package/src/components/UploadModal.jsx +309 -309
  25. package/src/components/UploadScriptsComponent.jsx +539 -539
  26. package/src/components/UploadStep1Settings.jsx +272 -272
  27. package/src/components/UploadStep2Review.jsx +478 -478
  28. package/src/components/UploadStep3Execute.jsx +234 -234
  29. package/src/components/UploadStep3bInstances.jsx +396 -396
  30. package/src/components/UploadSummary.jsx +196 -196
  31. package/src/components/VariableInstanceReferencesInput.jsx +190 -190
  32. package/src/hooks/useNestedObjects.js +92 -92
  33. package/src/hooks/useSanityClient.js +9 -9
  34. package/src/index.js +120 -120
  35. package/src/schema/openTypeField.js +1995 -1995
  36. package/src/schema/styleCountField.js +12 -12
  37. package/src/schema/stylesField.js +302 -302
  38. package/src/schema/stylisticSetField.js +301 -301
  39. package/src/utils/buildUploadPlan.js +326 -326
  40. package/src/utils/executeUploadPlan.js +430 -430
  41. package/src/utils/executionReducer.js +56 -56
  42. package/src/utils/fontHelpers.js +281 -281
  43. package/src/utils/generateCssFile.js +207 -207
  44. package/src/utils/generateFontData.js +98 -98
  45. package/src/utils/generateFontFile.js +38 -38
  46. package/src/utils/generateKeywords.js +185 -185
  47. package/src/utils/generateSubset.js +45 -45
  48. package/src/utils/getEmptyFontKit.js +101 -101
  49. package/src/utils/parseFont.js +56 -56
  50. package/src/utils/parseVariableFontInstances.js +301 -301
  51. package/src/utils/planReducer.js +531 -531
  52. package/src/utils/planTypes.js +183 -183
  53. package/src/utils/processFontFiles.js +530 -530
  54. package/src/utils/regenerateFontData.js +146 -146
  55. package/src/utils/resolveExistingFont.js +87 -87
  56. package/src/utils/retitleFontEntries.js +154 -154
  57. package/src/utils/sanitizeForSanityId.js +65 -65
  58. package/src/utils/setupDecompressors.js +27 -27
  59. package/src/utils/updateFontPrices.js +94 -94
  60. package/src/utils/updateTypefaceDocument.js +162 -162
  61. package/src/utils/uploadFontFiles.js +405 -405
  62. package/src/utils/utils.js +24 -24
@@ -1,95 +1,95 @@
1
- // Ordered key-value string pair editor for Sanity Studio — add, remove, and reorder rows
2
-
3
- import React, { useState, useCallback } from 'react';
4
- import { Button, Grid, Stack, TextInput } from '@sanity/ui';
5
- import { AddIcon, ArrowDownIcon, ArrowUpIcon, TrashIcon } from '@sanity/icons';
6
- import { set } from 'sanity';
7
-
8
- /**
9
- * Ordered key-value string pair editor with add, remove, and reorder controls.
10
- * Writes an array of { _key, key, value } objects to Sanity.
11
- * @param {Array} value - Current array of { _key, key, value } pairs
12
- * @param {Function} onChange - Sanity onChange callback
13
- */
14
- export function KeyValueInput({ value = [], onChange }) {
15
- const [pairs, setPairs] = useState(value);
16
-
17
- /** Updates a specific field for a pair at the given index */
18
- const handlePairChange = useCallback((index, field, fieldValue) => {
19
- const updatedPairs = pairs.map((pair, idx) => idx === index ? { ...pair, [field]: fieldValue } : pair);
20
- setPairs(updatedPairs);
21
- onChange(set(updatedPairs));
22
- }, [pairs, onChange]);
23
-
24
- /** Appends a new empty pair */
25
- const handleAddPair = useCallback(() => {
26
- const newPair = { key: '', value: '', _key: Math.random().toString(36).substr(2, 9) };
27
- const updatedPairs = [...pairs, newPair];
28
- setPairs(updatedPairs);
29
- onChange(set(updatedPairs));
30
- }, [pairs, onChange]);
31
-
32
- /** Removes the pair at the given index */
33
- const handleRemovePair = useCallback((index) => {
34
- const updatedPairs = pairs.filter((_, idx) => idx !== index);
35
- setPairs(updatedPairs);
36
- onChange(set(updatedPairs));
37
- }, [pairs, onChange]);
38
-
39
- /** Swaps a pair with the one above it */
40
- const handleMoveUp = useCallback((index) => {
41
- if (index === 0) return;
42
- const updatedPairs = [...pairs];
43
- [updatedPairs[index], updatedPairs[index - 1]] = [updatedPairs[index - 1], updatedPairs[index]];
44
- setPairs(updatedPairs);
45
- onChange(set(updatedPairs));
46
- }, [pairs, onChange]);
47
-
48
- /** Swaps a pair with the one below it */
49
- const handleMoveDown = useCallback((index) => {
50
- if (index === pairs.length - 1) return;
51
- const updatedPairs = [...pairs];
52
- [updatedPairs[index], updatedPairs[index + 1]] = [updatedPairs[index + 1], updatedPairs[index]];
53
- setPairs(updatedPairs);
54
- onChange(set(updatedPairs));
55
- }, [pairs, onChange]);
56
-
57
- return (
58
- <Stack space={3}>
59
- {pairs.map((pair, index) => (
60
- <Grid className="manualButtonWrap" columns={[2]} key={index} gap={0} style={{ position: 'relative' }}>
61
- <div style={{ position: 'absolute', height: '100%', top: '0', left: '-10px', width: 'min-content', transform: 'translate(-100%, 0%)' }}>
62
- <button className="manualButton manualButtonUp" style={{ fontSize: '15px', height: '50%' }} onClick={() => handleMoveUp(index)}>
63
- <ArrowUpIcon />
64
- </button>
65
- <button className="manualButton manualButtonDown" style={{ fontSize: '15px', height: '50%' }} onClick={() => handleMoveDown(index)}>
66
- <ArrowDownIcon />
67
- </button>
68
- </div>
69
-
70
- <TextInput
71
- value={pair.key}
72
- onChange={(e) => handlePairChange(index, 'key', e.target.value)}
73
- placeholder="Key"
74
- />
75
- <div style={{ marginLeft: '-1px' }}>
76
- <TextInput
77
- value={pair.value}
78
- onChange={(e) => handlePairChange(index, 'value', e.target.value)}
79
- placeholder="Value"
80
- />
81
- </div>
82
-
83
- <button
84
- className="manualButton"
85
- onClick={() => handleRemovePair(index)}
86
- style={{ position: 'absolute', top: '0', right: '-10px', transform: 'translate(100%, 0%)' }}
87
- >
88
- <TrashIcon />
89
- </button>
90
- </Grid>
91
- ))}
92
- <Button tone="primary" onClick={handleAddPair} icon={AddIcon} text="Add Row" />
93
- </Stack>
94
- );
95
- }
1
+ // Ordered key-value string pair editor for Sanity Studio — add, remove, and reorder rows
2
+
3
+ import React, { useState, useCallback } from 'react';
4
+ import { Button, Grid, Stack, TextInput } from '@sanity/ui';
5
+ import { AddIcon, ArrowDownIcon, ArrowUpIcon, TrashIcon } from '@sanity/icons';
6
+ import { set } from 'sanity';
7
+
8
+ /**
9
+ * Ordered key-value string pair editor with add, remove, and reorder controls.
10
+ * Writes an array of { _key, key, value } objects to Sanity.
11
+ * @param {Array} value - Current array of { _key, key, value } pairs
12
+ * @param {Function} onChange - Sanity onChange callback
13
+ */
14
+ export function KeyValueInput({ value = [], onChange }) {
15
+ const [pairs, setPairs] = useState(value);
16
+
17
+ /** Updates a specific field for a pair at the given index */
18
+ const handlePairChange = useCallback((index, field, fieldValue) => {
19
+ const updatedPairs = pairs.map((pair, idx) => idx === index ? { ...pair, [field]: fieldValue } : pair);
20
+ setPairs(updatedPairs);
21
+ onChange(set(updatedPairs));
22
+ }, [pairs, onChange]);
23
+
24
+ /** Appends a new empty pair */
25
+ const handleAddPair = useCallback(() => {
26
+ const newPair = { key: '', value: '', _key: Math.random().toString(36).substr(2, 9) };
27
+ const updatedPairs = [...pairs, newPair];
28
+ setPairs(updatedPairs);
29
+ onChange(set(updatedPairs));
30
+ }, [pairs, onChange]);
31
+
32
+ /** Removes the pair at the given index */
33
+ const handleRemovePair = useCallback((index) => {
34
+ const updatedPairs = pairs.filter((_, idx) => idx !== index);
35
+ setPairs(updatedPairs);
36
+ onChange(set(updatedPairs));
37
+ }, [pairs, onChange]);
38
+
39
+ /** Swaps a pair with the one above it */
40
+ const handleMoveUp = useCallback((index) => {
41
+ if (index === 0) return;
42
+ const updatedPairs = [...pairs];
43
+ [updatedPairs[index], updatedPairs[index - 1]] = [updatedPairs[index - 1], updatedPairs[index]];
44
+ setPairs(updatedPairs);
45
+ onChange(set(updatedPairs));
46
+ }, [pairs, onChange]);
47
+
48
+ /** Swaps a pair with the one below it */
49
+ const handleMoveDown = useCallback((index) => {
50
+ if (index === pairs.length - 1) return;
51
+ const updatedPairs = [...pairs];
52
+ [updatedPairs[index], updatedPairs[index + 1]] = [updatedPairs[index + 1], updatedPairs[index]];
53
+ setPairs(updatedPairs);
54
+ onChange(set(updatedPairs));
55
+ }, [pairs, onChange]);
56
+
57
+ return (
58
+ <Stack space={3}>
59
+ {pairs.map((pair, index) => (
60
+ <Grid className="manualButtonWrap" columns={[2]} key={index} gap={0} style={{ position: 'relative' }}>
61
+ <div style={{ position: 'absolute', height: '100%', top: '0', left: '-10px', width: 'min-content', transform: 'translate(-100%, 0%)' }}>
62
+ <button className="manualButton manualButtonUp" style={{ fontSize: '15px', height: '50%' }} onClick={() => handleMoveUp(index)}>
63
+ <ArrowUpIcon />
64
+ </button>
65
+ <button className="manualButton manualButtonDown" style={{ fontSize: '15px', height: '50%' }} onClick={() => handleMoveDown(index)}>
66
+ <ArrowDownIcon />
67
+ </button>
68
+ </div>
69
+
70
+ <TextInput
71
+ value={pair.key}
72
+ onChange={(e) => handlePairChange(index, 'key', e.target.value)}
73
+ placeholder="Key"
74
+ />
75
+ <div style={{ marginLeft: '-1px' }}>
76
+ <TextInput
77
+ value={pair.value}
78
+ onChange={(e) => handlePairChange(index, 'value', e.target.value)}
79
+ placeholder="Value"
80
+ />
81
+ </div>
82
+
83
+ <button
84
+ className="manualButton"
85
+ onClick={() => handleRemovePair(index)}
86
+ style={{ position: 'absolute', top: '0', right: '-10px', transform: 'translate(100%, 0%)' }}
87
+ >
88
+ <TrashIcon />
89
+ </button>
90
+ </Grid>
91
+ ))}
92
+ <Button tone="primary" onClick={handleAddPair} icon={AddIcon} text="Add Row" />
93
+ </Stack>
94
+ );
95
+ }