@fgv/ts-res-browser 1.0.0 → 5.0.0-10

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 (98) hide show
  1. package/README.md +85 -15
  2. package/cli.js +156 -0
  3. package/dist/13.bundle.js +1 -0
  4. package/dist/25.bundle.js +1 -0
  5. package/dist/948.bundle.js +1 -0
  6. package/dist/bundle.js +1 -1
  7. package/dist/bundle.js.LICENSE.txt +10 -0
  8. package/package.json +22 -7
  9. package/.rush/temp/5fc90bc7c2ccf812114ea099111568e5429be2a2.tar.log +0 -15
  10. package/.rush/temp/chunked-rush-logs/ts-res-browser.build.chunks.jsonl +0 -35
  11. package/.rush/temp/operation/build/all.log +0 -35
  12. package/.rush/temp/operation/build/log-chunks.jsonl +0 -35
  13. package/.rush/temp/operation/build/state.json +0 -3
  14. package/.rush/temp/shrinkwrap-deps.json +0 -1217
  15. package/TS_RES_BROWSER_PLAN.md +0 -689
  16. package/babel.config.js +0 -17
  17. package/config/jest.config.json +0 -13
  18. package/config/rig.json +0 -16
  19. package/postcss.config.js +0 -3
  20. package/public/index.html +0 -15
  21. package/rush-logs/ts-res-browser.build.cache.log +0 -3
  22. package/rush-logs/ts-res-browser.build.log +0 -35
  23. package/src/App.tsx +0 -153
  24. package/src/cli.ts +0 -44
  25. package/src/components/common/FileImporter.tsx +0 -138
  26. package/src/components/common/NavigationWarningModal.tsx +0 -62
  27. package/src/components/layout/AppLayout.tsx +0 -46
  28. package/src/components/layout/Header.tsx +0 -22
  29. package/src/components/layout/MessagesWindow.tsx +0 -108
  30. package/src/components/layout/Sidebar.tsx +0 -92
  31. package/src/components/tools/CompiledBrowser.tsx +0 -949
  32. package/src/components/tools/ConfigurationTool.tsx +0 -1402
  33. package/src/components/tools/FilterTool.tsx +0 -1027
  34. package/src/components/tools/ImportTool.tsx +0 -246
  35. package/src/components/tools/ResolutionViewer.tsx +0 -1672
  36. package/src/components/tools/SourceBrowser.tsx +0 -496
  37. package/src/hooks/useAppState.ts +0 -107
  38. package/src/hooks/useFileImport.ts +0 -86
  39. package/src/hooks/useNavigationWarning.ts +0 -67
  40. package/src/hooks/useResourceManager.ts +0 -244
  41. package/src/index.css +0 -38
  42. package/src/main.tsx +0 -16
  43. package/src/types/app.ts +0 -62
  44. package/src/types/fileSystemAccess.d.ts +0 -94
  45. package/src/utils/browserFileTreeAccessors.ts +0 -245
  46. package/src/utils/fileImport.ts +0 -334
  47. package/src/utils/filterResources.ts +0 -677
  48. package/src/utils/tsResIntegration.ts +0 -467
  49. package/tailwind.config.js +0 -21
  50. package/test-data/README.md +0 -184
  51. package/test-data/config-variations/README.md +0 -64
  52. package/test-data/config-variations/composition-terminology.json +0 -112
  53. package/test-data/config-variations/enterprise-complex.json +0 -129
  54. package/test-data/config-variations/gaming-app.json +0 -87
  55. package/test-data/config-variations/high-priority-language.json +0 -65
  56. package/test-data/config-variations/minimal-basic.json +0 -37
  57. package/test-data/config-variations/qualifier-default-values.json +0 -71
  58. package/test-data/config-variations/territory-first.json +0 -68
  59. package/test-data/config-variations/territory-hierarchy-test.json +0 -31
  60. package/test-data/config-variations/territory-hierarchy-unconstrained.json +0 -32
  61. package/test-data/default-matching-test/greeting.res.json +0 -83
  62. package/test-data/default-matching-test/only-defaults.res.json +0 -48
  63. package/test-data/sample-project/package.json +0 -27
  64. package/test-data/sample-project/src/resources/app-config.json +0 -27
  65. package/test-data/sample-project/src/resources/app.json +0 -177
  66. package/test-data/sample-project/src/resources/config/app.env=development.json +0 -21
  67. package/test-data/sample-project/src/resources/config/app.json +0 -21
  68. package/test-data/sample-project/src/resources/config/app.platform=mobile.json +0 -23
  69. package/test-data/sample-project/src/resources/feature-flags.json +0 -23
  70. package/test-data/sample-project/src/resources/home=CA/common.json +0 -16
  71. package/test-data/sample-project/src/resources/images/density=hdpi.json +0 -29
  72. package/test-data/sample-project/src/resources/images/home.json +0 -29
  73. package/test-data/sample-project/src/resources/images/logout.json +0 -14
  74. package/test-data/sample-project/src/resources/images/settings.json +0 -14
  75. package/test-data/sample-project/src/resources/images/ui-icons.json +0 -29
  76. package/test-data/sample-project/src/resources/images/user.density=hdpi.json +0 -14
  77. package/test-data/sample-project/src/resources/images/user.json +0 -14
  78. package/test-data/sample-project/src/resources/lang=en-US/common.json +0 -15
  79. package/test-data/sample-project/src/resources/language=en-CA/ui-terms.json +0 -19
  80. package/test-data/sample-project/src/resources/language=en-GB/ui-terms.json +0 -30
  81. package/test-data/sample-project/src/resources/language=fr-CA/ui-terms.json +0 -25
  82. package/test-data/sample-project/src/resources/language=nl-BE/ui-terms.json +0 -17
  83. package/test-data/sample-project/src/resources/region=europe/feature-flags.json +0 -17
  84. package/test-data/sample-project/src/resources/region=north-america/feature-flags.json +0 -18
  85. package/test-data/sample-project/src/resources/strings/dashboard.home=CA,language=fr.json +0 -20
  86. package/test-data/sample-project/src/resources/strings/dashboard.json +0 -18
  87. package/test-data/sample-project/src/resources/strings/dashboard.role=admin.json +0 -23
  88. package/test-data/sample-project/src/resources/strings/dashboard.role=user.json +0 -21
  89. package/test-data/sample-project/src/resources/strings/language=en-US.json +0 -16
  90. package/test-data/sample-project/src/resources/strings.json +0 -78
  91. package/test-data/sample-project/src/resources/territory=BE/app-config.json +0 -19
  92. package/test-data/sample-project/src/resources/territory=CA/app-config.json +0 -21
  93. package/test-data/sample-project/src/resources/territory=GB/app-config.json +0 -25
  94. package/test-data/sample-project/src/resources/territory=NL/app-config.json +0 -25
  95. package/test-data/sample-project/src/resources/ui-terms.json +0 -96
  96. package/test-data/sample-project/src/resources-config.json +0 -111
  97. package/tsconfig.json +0 -27
  98. package/webpack.config.js +0 -54
@@ -1,108 +0,0 @@
1
- import React, { useState } from 'react';
2
- import {
3
- XMarkIcon,
4
- InformationCircleIcon,
5
- ExclamationTriangleIcon,
6
- XCircleIcon,
7
- CheckCircleIcon,
8
- ChevronUpIcon,
9
- ChevronDownIcon
10
- } from '@heroicons/react/24/outline';
11
-
12
- interface Message {
13
- id: string;
14
- type: 'info' | 'warning' | 'error' | 'success';
15
- message: string;
16
- timestamp: Date;
17
- }
18
-
19
- interface MessagesWindowProps {
20
- messages: Message[];
21
- onClearMessages: () => void;
22
- }
23
-
24
- const MessagesWindow: React.FC<MessagesWindowProps> = ({ messages, onClearMessages }) => {
25
- const [isCollapsed, setIsCollapsed] = useState(false);
26
-
27
- if (messages.length === 0) {
28
- return null;
29
- }
30
-
31
- const getMessageIcon = (type: Message['type']) => {
32
- switch (type) {
33
- case 'info':
34
- return <InformationCircleIcon className="h-5 w-5 text-blue-500" />;
35
- case 'warning':
36
- return <ExclamationTriangleIcon className="h-5 w-5 text-yellow-500" />;
37
- case 'error':
38
- return <XCircleIcon className="h-5 w-5 text-red-500" />;
39
- case 'success':
40
- return <CheckCircleIcon className="h-5 w-5 text-green-500" />;
41
- default:
42
- return <InformationCircleIcon className="h-5 w-5 text-gray-500" />;
43
- }
44
- };
45
-
46
- const getMessageBgColor = (type: Message['type']) => {
47
- switch (type) {
48
- case 'info':
49
- return 'bg-blue-50 border-blue-200';
50
- case 'warning':
51
- return 'bg-yellow-50 border-yellow-200';
52
- case 'error':
53
- return 'bg-red-50 border-red-200';
54
- case 'success':
55
- return 'bg-green-50 border-green-200';
56
- default:
57
- return 'bg-gray-50 border-gray-200';
58
- }
59
- };
60
-
61
- const formatTime = (date: Date) => {
62
- return date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit' });
63
- };
64
-
65
- return (
66
- <div className="border-t border-gray-200 bg-white">
67
- {/* Header */}
68
- <div className="flex items-center justify-between px-4 py-2 bg-gray-50 border-b border-gray-200">
69
- <div className="flex items-center space-x-2">
70
- <button onClick={() => setIsCollapsed(!isCollapsed)} className="p-1 hover:bg-gray-200 rounded">
71
- {isCollapsed ? (
72
- <ChevronUpIcon className="h-4 w-4 text-gray-500" />
73
- ) : (
74
- <ChevronDownIcon className="h-4 w-4 text-gray-500" />
75
- )}
76
- </button>
77
- <h3 className="text-sm font-medium text-gray-900">Messages ({messages.length})</h3>
78
- </div>
79
- <button
80
- onClick={onClearMessages}
81
- className="text-xs text-gray-500 hover:text-gray-700 px-2 py-1 rounded hover:bg-gray-200"
82
- >
83
- Clear All
84
- </button>
85
- </div>
86
-
87
- {/* Messages */}
88
- {!isCollapsed && (
89
- <div className="max-h-48 overflow-y-auto">
90
- {messages.map((message) => (
91
- <div
92
- key={message.id}
93
- className={`flex items-start space-x-3 p-3 border-l-4 ${getMessageBgColor(message.type)}`}
94
- >
95
- {getMessageIcon(message.type)}
96
- <div className="flex-1 min-w-0">
97
- <p className="text-sm text-gray-900">{message.message}</p>
98
- <p className="text-xs text-gray-500 mt-1">{formatTime(message.timestamp)}</p>
99
- </div>
100
- </div>
101
- ))}
102
- </div>
103
- )}
104
- </div>
105
- );
106
- };
107
-
108
- export default MessagesWindow;
@@ -1,92 +0,0 @@
1
- import React from 'react';
2
- import {
3
- DocumentArrowUpIcon,
4
- DocumentTextIcon,
5
- FunnelIcon,
6
- CubeIcon,
7
- MagnifyingGlassIcon,
8
- CogIcon
9
- } from '@heroicons/react/24/outline';
10
- import { Tool } from '../../types/app';
11
-
12
- interface SidebarProps {
13
- selectedTool: Tool;
14
- onToolSelect: (tool: Tool) => void;
15
- }
16
-
17
- const tools = [
18
- {
19
- id: 'import',
20
- name: 'Import Resources',
21
- icon: DocumentArrowUpIcon,
22
- description: 'Import ts-res resource files and directories'
23
- },
24
- {
25
- id: 'source',
26
- name: 'Source Browser',
27
- icon: DocumentTextIcon,
28
- description: 'Browse built resources in alphabetical order'
29
- },
30
- {
31
- id: 'filter',
32
- name: 'Filter Tool',
33
- icon: FunnelIcon,
34
- description: 'Filter resources by context for focused analysis'
35
- },
36
- {
37
- id: 'compiled',
38
- name: 'Compiled Browser',
39
- icon: CubeIcon,
40
- description: 'Navigate compiled resources in tree view'
41
- },
42
- {
43
- id: 'resolution',
44
- name: 'Resolution Viewer',
45
- icon: MagnifyingGlassIcon,
46
- description: 'View resource resolution with qualifiers'
47
- },
48
- {
49
- id: 'configuration',
50
- name: 'Configuration',
51
- icon: CogIcon,
52
- description: 'Manage qualifier types, qualifiers, and resource types'
53
- }
54
- ];
55
-
56
- const Sidebar: React.FC<SidebarProps> = ({ selectedTool, onToolSelect }) => {
57
- return (
58
- <aside className="w-64 bg-white shadow-sm border-r border-gray-200 h-screen overflow-y-auto">
59
- <div className="p-4">
60
- <h2 className="text-lg font-semibold text-gray-900 mb-4">Tools</h2>
61
- <nav className="space-y-2">
62
- {tools.map((tool) => {
63
- const Icon = tool.icon;
64
- const isSelected = selectedTool === tool.id;
65
-
66
- return (
67
- <button
68
- key={tool.id}
69
- onClick={() => onToolSelect(tool.id as Tool)}
70
- className={`w-full text-left p-3 rounded-lg transition-colors ${
71
- isSelected
72
- ? 'bg-blue-50 text-blue-700 border border-blue-200'
73
- : 'hover:bg-gray-50 text-gray-700 border border-transparent'
74
- }`}
75
- >
76
- <div className="flex items-center space-x-3">
77
- <Icon className="h-5 w-5 flex-shrink-0" />
78
- <div className="min-w-0 flex-1">
79
- <div className="font-medium text-sm">{tool.name}</div>
80
- <div className="text-xs text-gray-500 mt-1">{tool.description}</div>
81
- </div>
82
- </div>
83
- </button>
84
- );
85
- })}
86
- </nav>
87
- </div>
88
- </aside>
89
- );
90
- };
91
-
92
- export default Sidebar;