@cratis/scene.react 4.2.1 → 4.4.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 (97) hide show
  1. package/SceneElementView.tsx +13 -4
  2. package/core/CoreNavigationBar.tsx +59 -0
  3. package/core/coreComponents.ts +2 -0
  4. package/core/coreDescriptors.ts +75 -0
  5. package/core/corePackage.ts +3 -0
  6. package/core/index.ts +2 -0
  7. package/dist/cjs/SceneElementView.js +6 -2
  8. package/dist/cjs/SceneElementView.js.map +1 -1
  9. package/dist/cjs/core/CoreNavigationBar.js +59 -0
  10. package/dist/cjs/core/CoreNavigationBar.js.map +1 -0
  11. package/dist/cjs/core/coreComponents.js +3 -1
  12. package/dist/cjs/core/coreComponents.js.map +1 -1
  13. package/dist/cjs/core/coreDescriptors.js +162 -0
  14. package/dist/cjs/core/coreDescriptors.js.map +1 -0
  15. package/dist/cjs/core/corePackage.js +5 -2
  16. package/dist/cjs/core/corePackage.js.map +1 -1
  17. package/dist/cjs/icons/IconAdapterContext.js +21 -0
  18. package/dist/cjs/icons/IconAdapterContext.js.map +1 -0
  19. package/dist/cjs/icons/IconAdapterRegistry.js +45 -0
  20. package/dist/cjs/icons/IconAdapterRegistry.js.map +1 -0
  21. package/dist/cjs/icons/SceneIcon.js +42 -0
  22. package/dist/cjs/icons/SceneIcon.js.map +1 -0
  23. package/dist/cjs/icons/useIconGlyph.js +86 -0
  24. package/dist/cjs/icons/useIconGlyph.js.map +1 -0
  25. package/dist/cjs/index.js +15 -0
  26. package/dist/cjs/index.js.map +1 -1
  27. package/dist/cjs/packages/ScenePackageBundle.js +74 -1
  28. package/dist/cjs/packages/ScenePackageBundle.js.map +1 -1
  29. package/dist/esm/SceneElementView.d.ts +3 -2
  30. package/dist/esm/SceneElementView.d.ts.map +1 -1
  31. package/dist/esm/SceneElementView.js +7 -3
  32. package/dist/esm/SceneElementView.js.map +1 -1
  33. package/dist/esm/core/CoreNavigationBar.d.ts +3 -0
  34. package/dist/esm/core/CoreNavigationBar.d.ts.map +1 -0
  35. package/dist/esm/core/CoreNavigationBar.js +57 -0
  36. package/dist/esm/core/CoreNavigationBar.js.map +1 -0
  37. package/dist/esm/core/coreComponents.d.ts.map +1 -1
  38. package/dist/esm/core/coreComponents.js +3 -1
  39. package/dist/esm/core/coreComponents.js.map +1 -1
  40. package/dist/esm/core/coreDescriptors.d.ts +3 -0
  41. package/dist/esm/core/coreDescriptors.d.ts.map +1 -0
  42. package/dist/esm/core/coreDescriptors.js +160 -0
  43. package/dist/esm/core/coreDescriptors.js.map +1 -0
  44. package/dist/esm/core/corePackage.d.ts.map +1 -1
  45. package/dist/esm/core/corePackage.js +5 -2
  46. package/dist/esm/core/corePackage.js.map +1 -1
  47. package/dist/esm/core/index.d.ts +2 -0
  48. package/dist/esm/core/index.d.ts.map +1 -1
  49. package/dist/esm/core/index.js +2 -0
  50. package/dist/esm/core/index.js.map +1 -1
  51. package/dist/esm/icons/IconAdapter.d.ts +13 -0
  52. package/dist/esm/icons/IconAdapter.d.ts.map +1 -0
  53. package/dist/esm/icons/IconAdapter.js +2 -0
  54. package/dist/esm/icons/IconAdapter.js.map +1 -0
  55. package/dist/esm/icons/IconAdapterContext.d.ts +8 -0
  56. package/dist/esm/icons/IconAdapterContext.d.ts.map +1 -0
  57. package/dist/esm/icons/IconAdapterContext.js +18 -0
  58. package/dist/esm/icons/IconAdapterContext.js.map +1 -0
  59. package/dist/esm/icons/IconAdapterRegistry.d.ts +9 -0
  60. package/dist/esm/icons/IconAdapterRegistry.d.ts.map +1 -0
  61. package/dist/esm/icons/IconAdapterRegistry.js +42 -0
  62. package/dist/esm/icons/IconAdapterRegistry.js.map +1 -0
  63. package/dist/esm/icons/IconLibraryBundle.d.ts +7 -0
  64. package/dist/esm/icons/IconLibraryBundle.d.ts.map +1 -0
  65. package/dist/esm/icons/IconLibraryBundle.js +2 -0
  66. package/dist/esm/icons/IconLibraryBundle.js.map +1 -0
  67. package/dist/esm/icons/SceneIcon.d.ts +14 -0
  68. package/dist/esm/icons/SceneIcon.d.ts.map +1 -0
  69. package/dist/esm/icons/SceneIcon.js +40 -0
  70. package/dist/esm/icons/SceneIcon.js.map +1 -0
  71. package/dist/esm/icons/index.d.ts +7 -0
  72. package/dist/esm/icons/index.d.ts.map +1 -0
  73. package/dist/esm/icons/index.js +7 -0
  74. package/dist/esm/icons/index.js.map +1 -0
  75. package/dist/esm/icons/useIconGlyph.d.ts +14 -0
  76. package/dist/esm/icons/useIconGlyph.d.ts.map +1 -0
  77. package/dist/esm/icons/useIconGlyph.js +84 -0
  78. package/dist/esm/icons/useIconGlyph.js.map +1 -0
  79. package/dist/esm/index.d.ts +1 -0
  80. package/dist/esm/index.d.ts.map +1 -1
  81. package/dist/esm/index.js +7 -1
  82. package/dist/esm/index.js.map +1 -1
  83. package/dist/esm/packages/ScenePackageBundle.d.ts +6 -1
  84. package/dist/esm/packages/ScenePackageBundle.d.ts.map +1 -1
  85. package/dist/esm/packages/ScenePackageBundle.js +74 -2
  86. package/dist/esm/packages/ScenePackageBundle.js.map +1 -1
  87. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  88. package/icons/IconAdapter.ts +52 -0
  89. package/icons/IconAdapterContext.tsx +21 -0
  90. package/icons/IconAdapterRegistry.ts +50 -0
  91. package/icons/IconLibraryBundle.ts +25 -0
  92. package/icons/SceneIcon.tsx +73 -0
  93. package/icons/index.ts +9 -0
  94. package/icons/useIconGlyph.ts +79 -0
  95. package/index.ts +1 -0
  96. package/package.json +5 -5
  97. package/packages/ScenePackageBundle.ts +106 -2
@@ -0,0 +1,160 @@
1
+ import { PropertyValueType } from '@cratis/scene.model';
2
+ import { componentRegistryKey } from '../packages/ScenePackageBundle.js';
3
+
4
+ // Copyright (c) Cratis. All rights reserved.
5
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
6
+ const key = (name)=>componentRegistryKey('core', name);
7
+ /**
8
+ * What can be edited on the `core` package's components.
9
+ *
10
+ * Only the components an author configures by hand are described: a button's label, an action's command and its
11
+ * argument mapping, a column's heading, and the navigation bar. The Screenplay structural components - `data`,
12
+ * `section`, `summary` - have nothing to edit that is not already a node in the tree.
13
+ */ const coreDescriptors = [
14
+ {
15
+ component: key('button'),
16
+ displayName: 'Button',
17
+ properties: [
18
+ {
19
+ path: 'label',
20
+ label: 'Label',
21
+ group: 'Content',
22
+ valueType: PropertyValueType.String,
23
+ default: ''
24
+ }
25
+ ]
26
+ },
27
+ {
28
+ component: key('action'),
29
+ displayName: 'Command action',
30
+ description: 'Invokes a modeled command. The command and its argument mapping are stored on the element; the host that handles the command event reads them.',
31
+ properties: [
32
+ {
33
+ path: 'label',
34
+ label: 'Label',
35
+ group: 'Content',
36
+ valueType: PropertyValueType.String
37
+ },
38
+ {
39
+ path: 'command',
40
+ label: 'Command',
41
+ group: 'Behavior',
42
+ valueType: PropertyValueType.String,
43
+ editorKind: 'stateChangeReference',
44
+ constraints: {
45
+ required: true
46
+ },
47
+ description: 'The state change this action submits.'
48
+ },
49
+ {
50
+ path: 'arguments',
51
+ label: 'Argument mapping',
52
+ group: 'Behavior',
53
+ valueType: PropertyValueType.Collection,
54
+ description: 'Where each command argument comes from.',
55
+ item: {
56
+ label: 'Argument',
57
+ properties: [
58
+ {
59
+ path: 'name',
60
+ label: 'Argument',
61
+ group: 'Behavior',
62
+ valueType: PropertyValueType.String,
63
+ constraints: {
64
+ required: true
65
+ }
66
+ },
67
+ {
68
+ path: 'source',
69
+ label: 'Source',
70
+ group: 'Behavior',
71
+ valueType: PropertyValueType.String,
72
+ editorKind: 'bindingPath',
73
+ constraints: {
74
+ required: true
75
+ }
76
+ }
77
+ ]
78
+ }
79
+ }
80
+ ]
81
+ },
82
+ {
83
+ component: key('column'),
84
+ displayName: 'Table column',
85
+ properties: [
86
+ {
87
+ path: 'property',
88
+ label: 'Result field',
89
+ group: 'Data',
90
+ valueType: PropertyValueType.String,
91
+ editorKind: 'resultField',
92
+ constraints: {
93
+ required: true
94
+ }
95
+ },
96
+ {
97
+ path: 'label',
98
+ label: 'Heading',
99
+ group: 'Content',
100
+ valueType: PropertyValueType.String
101
+ }
102
+ ]
103
+ },
104
+ {
105
+ component: key('navigationBar'),
106
+ displayName: 'Navigation bar',
107
+ description: 'A list of navigation items. A template author fixes the first item (Home) and can expose the list so that screens add their own.',
108
+ properties: [
109
+ {
110
+ path: 'title',
111
+ label: 'Title',
112
+ group: 'Content',
113
+ valueType: PropertyValueType.String,
114
+ default: 'Navigation'
115
+ },
116
+ {
117
+ path: 'items',
118
+ label: 'Items',
119
+ group: 'Content',
120
+ valueType: PropertyValueType.Collection,
121
+ default: [],
122
+ item: {
123
+ label: 'Navigation item',
124
+ properties: [
125
+ {
126
+ path: 'label',
127
+ label: 'Label',
128
+ group: 'Content',
129
+ valueType: PropertyValueType.String,
130
+ constraints: {
131
+ required: true,
132
+ minimumLength: 1
133
+ }
134
+ },
135
+ {
136
+ path: 'icon',
137
+ label: 'Icon',
138
+ group: 'Content',
139
+ valueType: PropertyValueType.Icon,
140
+ editorKind: 'iconPicker'
141
+ },
142
+ {
143
+ path: 'destination',
144
+ label: 'Destination',
145
+ group: 'Content',
146
+ valueType: PropertyValueType.Destination,
147
+ editorKind: 'screenPicker',
148
+ constraints: {
149
+ required: true
150
+ }
151
+ }
152
+ ]
153
+ }
154
+ }
155
+ ]
156
+ }
157
+ ];
158
+
159
+ export { coreDescriptors };
160
+ //# sourceMappingURL=coreDescriptors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coreDescriptors.js","sources":["../../../core/coreDescriptors.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { ComponentDescriptor, PropertyValueType } from '@cratis/scene.model';\nimport { componentRegistryKey } from '../packages';\n\nconst key = (name: string) => componentRegistryKey('core', name);\n\n/**\n * What can be edited on the `core` package's components.\n *\n * Only the components an author configures by hand are described: a button's label, an action's command and its\n * argument mapping, a column's heading, and the navigation bar. The Screenplay structural components - `data`,\n * `section`, `summary` - have nothing to edit that is not already a node in the tree.\n */\nexport const coreDescriptors: ComponentDescriptor[] = [\n {\n component: key('button'),\n displayName: 'Button',\n properties: [\n { path: 'label', label: 'Label', group: 'Content', valueType: PropertyValueType.String, default: '' },\n ],\n },\n {\n component: key('action'),\n displayName: 'Command action',\n description: 'Invokes a modeled command. The command and its argument mapping are stored on the element; the host that handles the command event reads them.',\n properties: [\n { path: 'label', label: 'Label', group: 'Content', valueType: PropertyValueType.String },\n {\n path: 'command', label: 'Command', group: 'Behavior', valueType: PropertyValueType.String,\n editorKind: 'stateChangeReference', constraints: { required: true },\n description: 'The state change this action submits.',\n },\n {\n path: 'arguments', label: 'Argument mapping', group: 'Behavior', valueType: PropertyValueType.Collection,\n description: 'Where each command argument comes from.',\n item: {\n label: 'Argument',\n properties: [\n { path: 'name', label: 'Argument', group: 'Behavior', valueType: PropertyValueType.String, constraints: { required: true } },\n { path: 'source', label: 'Source', group: 'Behavior', valueType: PropertyValueType.String, editorKind: 'bindingPath', constraints: { required: true } },\n ],\n },\n },\n ],\n },\n {\n component: key('column'),\n displayName: 'Table column',\n properties: [\n { path: 'property', label: 'Result field', group: 'Data', valueType: PropertyValueType.String, editorKind: 'resultField', constraints: { required: true } },\n { path: 'label', label: 'Heading', group: 'Content', valueType: PropertyValueType.String },\n ],\n },\n {\n component: key('navigationBar'),\n displayName: 'Navigation bar',\n description: 'A list of navigation items. A template author fixes the first item (Home) and can expose the list so that screens add their own.',\n properties: [\n { path: 'title', label: 'Title', group: 'Content', valueType: PropertyValueType.String, default: 'Navigation' },\n {\n path: 'items', label: 'Items', group: 'Content', valueType: PropertyValueType.Collection, default: [],\n item: {\n label: 'Navigation item',\n properties: [\n { path: 'label', label: 'Label', group: 'Content', valueType: PropertyValueType.String, constraints: { required: true, minimumLength: 1 } },\n { path: 'icon', label: 'Icon', group: 'Content', valueType: PropertyValueType.Icon, editorKind: 'iconPicker' },\n { path: 'destination', label: 'Destination', group: 'Content', valueType: PropertyValueType.Destination, editorKind: 'screenPicker', constraints: { required: true } },\n ],\n },\n },\n ],\n },\n];\n"],"names":["key","name","componentRegistryKey","coreDescriptors","component","displayName","properties","path","label","group","valueType","PropertyValueType","String","default","description","editorKind","constraints","required","Collection","item","minimumLength","Icon","Destination"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"corePackage.d.ts","sourceRoot":"","sources":["../../../core/corePackage.ts"],"names":[],"mappings":"AAGA,OAAO,EAAe,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAUjD,eAAO,MAAM,mBAAmB,EAAE,YA8BjC,CAAC;AAKF,eAAO,MAAM,WAAW,EAAE,kBAGzB,CAAC"}
1
+ {"version":3,"file":"corePackage.d.ts","sourceRoot":"","sources":["../../../core/corePackage.ts"],"names":[],"mappings":"AAGA,OAAO,EAAe,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAWjD,eAAO,MAAM,mBAAmB,EAAE,YA+BjC,CAAC;AAKF,eAAO,MAAM,WAAW,EAAE,kBAIzB,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { PackageKind } from '@cratis/scene.model';
2
2
  import { coreComponents } from './coreComponents.js';
3
+ import { coreDescriptors } from './coreDescriptors.js';
3
4
 
4
5
  // Copyright (c) Cratis. All rights reserved.
5
6
  // Licensed under the MIT license. See LICENSE file in the project root for full license information.
@@ -28,7 +29,8 @@ import { coreComponents } from './coreComponents.js';
28
29
  'summary',
29
30
  'field',
30
31
  'code',
31
- 'file'
32
+ 'file',
33
+ 'navigationBar'
32
34
  ],
33
35
  layouts: [],
34
36
  screenTemplates: [],
@@ -44,7 +46,8 @@ import { coreComponents } from './coreComponents.js';
44
46
  * The `core` package as a loadable bundle.
45
47
  */ const corePackage = {
46
48
  manifest: corePackageManifest,
47
- components: coreComponents
49
+ components: coreComponents,
50
+ descriptors: coreDescriptors
48
51
  };
49
52
 
50
53
  export { corePackage, corePackageManifest };
@@ -1 +1 @@
1
- {"version":3,"file":"corePackage.js","sources":["../../../core/corePackage.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { PackageKind, ScenePackage } from '@cratis/scene.model';\nimport { ScenePackageBundle } from '../packages';\nimport { coreComponents } from './coreComponents';\n\n/**\n * The `core` package's declaration. Every other package is loaded by a host that reads its manifest;\n * `core` ships inside the renderer itself, because Scene#3 guarantees a bare name always has somewhere to\n * resolve regardless of which packages a profile lists. It is still declared the same way as any other -\n * a package picker should be able to show it, and the dependency resolver should be able to reason about\n * it, without a special case.\n */\nexport const corePackageManifest: ScenePackage = {\n name: 'core',\n version: '1.0.0',\n kind: PackageKind.ComponentLibrary,\n dependencies: [],\n components: [\n 'text',\n 'button',\n 'card',\n 'data',\n 'action',\n 'section',\n 'navigate',\n 'title',\n 'table',\n 'column',\n 'summary',\n 'field',\n 'code',\n 'file',\n ],\n layouts: [],\n screenTemplates: [],\n dialogTemplates: [],\n themes: [],\n displayName: 'Core',\n description: 'The built-in fallback vocabulary every ui profile resolves against.',\n module: '@cratis/scene.react',\n license: 'MIT',\n licenseUrl: 'https://github.com/Cratis/Scene/blob/main/LICENSE',\n};\n\n/**\n * The `core` package as a loadable bundle.\n */\nexport const corePackage: ScenePackageBundle = {\n manifest: corePackageManifest,\n components: coreComponents,\n};\n"],"names":["corePackageManifest","name","version","kind","PackageKind","ComponentLibrary","dependencies","components","layouts","screenTemplates","dialogTemplates","themes","displayName","description","module","license","licenseUrl","corePackage","manifest","coreComponents"],"mappings":";;;AAAA;AACA;AAMA;;;;;;UAOaA,mBAAAA,GAAoC;IAC7CC,IAAAA,EAAM,MAAA;IACNC,OAAAA,EAAS,OAAA;AACTC,IAAAA,IAAAA,EAAMC,YAAYC,gBAAgB;AAClCC,IAAAA,YAAAA,EAAc,EAAE;IAChBC,UAAAA,EAAY;AACR,QAAA,MAAA;AACA,QAAA,QAAA;AACA,QAAA,MAAA;AACA,QAAA,MAAA;AACA,QAAA,QAAA;AACA,QAAA,SAAA;AACA,QAAA,UAAA;AACA,QAAA,OAAA;AACA,QAAA,OAAA;AACA,QAAA,QAAA;AACA,QAAA,SAAA;AACA,QAAA,OAAA;AACA,QAAA,MAAA;AACA,QAAA;AACH,KAAA;AACDC,IAAAA,OAAAA,EAAS,EAAE;AACXC,IAAAA,eAAAA,EAAiB,EAAE;AACnBC,IAAAA,eAAAA,EAAiB,EAAE;AACnBC,IAAAA,MAAAA,EAAQ,EAAE;IACVC,WAAAA,EAAa,MAAA;IACbC,WAAAA,EAAa,qEAAA;IACbC,MAAAA,EAAQ,qBAAA;IACRC,OAAAA,EAAS,KAAA;IACTC,UAAAA,EAAY;AAChB;AAEA;;UAGaC,WAAAA,GAAkC;IAC3CC,QAAAA,EAAUlB,mBAAAA;IACVO,UAAAA,EAAYY;AAChB;;"}
1
+ {"version":3,"file":"corePackage.js","sources":["../../../core/corePackage.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { PackageKind, ScenePackage } from '@cratis/scene.model';\nimport { ScenePackageBundle } from '../packages';\nimport { coreComponents } from './coreComponents';\nimport { coreDescriptors } from './coreDescriptors';\n\n/**\n * The `core` package's declaration. Every other package is loaded by a host that reads its manifest;\n * `core` ships inside the renderer itself, because Scene#3 guarantees a bare name always has somewhere to\n * resolve regardless of which packages a profile lists. It is still declared the same way as any other -\n * a package picker should be able to show it, and the dependency resolver should be able to reason about\n * it, without a special case.\n */\nexport const corePackageManifest: ScenePackage = {\n name: 'core',\n version: '1.0.0',\n kind: PackageKind.ComponentLibrary,\n dependencies: [],\n components: [\n 'text',\n 'button',\n 'card',\n 'data',\n 'action',\n 'section',\n 'navigate',\n 'title',\n 'table',\n 'column',\n 'summary',\n 'field',\n 'code',\n 'file',\n 'navigationBar',\n ],\n layouts: [],\n screenTemplates: [],\n dialogTemplates: [],\n themes: [],\n displayName: 'Core',\n description: 'The built-in fallback vocabulary every ui profile resolves against.',\n module: '@cratis/scene.react',\n license: 'MIT',\n licenseUrl: 'https://github.com/Cratis/Scene/blob/main/LICENSE',\n};\n\n/**\n * The `core` package as a loadable bundle.\n */\nexport const corePackage: ScenePackageBundle = {\n manifest: corePackageManifest,\n components: coreComponents,\n descriptors: coreDescriptors,\n};\n"],"names":["corePackageManifest","name","version","kind","PackageKind","ComponentLibrary","dependencies","components","layouts","screenTemplates","dialogTemplates","themes","displayName","description","module","license","licenseUrl","corePackage","manifest","coreComponents","descriptors","coreDescriptors"],"mappings":";;;;AAAA;AACA;AAOA;;;;;;UAOaA,mBAAAA,GAAoC;IAC7CC,IAAAA,EAAM,MAAA;IACNC,OAAAA,EAAS,OAAA;AACTC,IAAAA,IAAAA,EAAMC,YAAYC,gBAAgB;AAClCC,IAAAA,YAAAA,EAAc,EAAE;IAChBC,UAAAA,EAAY;AACR,QAAA,MAAA;AACA,QAAA,QAAA;AACA,QAAA,MAAA;AACA,QAAA,MAAA;AACA,QAAA,QAAA;AACA,QAAA,SAAA;AACA,QAAA,UAAA;AACA,QAAA,OAAA;AACA,QAAA,OAAA;AACA,QAAA,QAAA;AACA,QAAA,SAAA;AACA,QAAA,OAAA;AACA,QAAA,MAAA;AACA,QAAA,MAAA;AACA,QAAA;AACH,KAAA;AACDC,IAAAA,OAAAA,EAAS,EAAE;AACXC,IAAAA,eAAAA,EAAiB,EAAE;AACnBC,IAAAA,eAAAA,EAAiB,EAAE;AACnBC,IAAAA,MAAAA,EAAQ,EAAE;IACVC,WAAAA,EAAa,MAAA;IACbC,WAAAA,EAAa,qEAAA;IACbC,MAAAA,EAAQ,qBAAA;IACRC,OAAAA,EAAS,KAAA;IACTC,UAAAA,EAAY;AAChB;AAEA;;UAGaC,WAAAA,GAAkC;IAC3CC,QAAAA,EAAUlB,mBAAAA;IACVO,UAAAA,EAAYY,cAAAA;IACZC,WAAAA,EAAaC;AACjB;;"}
@@ -1,6 +1,8 @@
1
1
  export * from './CoreText';
2
2
  export * from './CoreButton';
3
3
  export * from './CoreCard';
4
+ export * from './CoreNavigationBar';
5
+ export * from './coreDescriptors';
4
6
  export * from './ScreenplayCoreComponents';
5
7
  export * from './coreComponents';
6
8
  export * from './corePackage';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../core/index.ts"],"names":[],"mappings":"AAGA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../core/index.ts"],"names":[],"mappings":"AAGA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC"}
@@ -1,6 +1,8 @@
1
1
  export * from './CoreText';
2
2
  export * from './CoreButton';
3
3
  export * from './CoreCard';
4
+ export * from './CoreNavigationBar';
5
+ export * from './coreDescriptors';
4
6
  export * from './ScreenplayCoreComponents';
5
7
  export * from './coreComponents';
6
8
  export * from './corePackage';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../core/index.ts"],"names":[],"mappings":"AAGA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../core/index.ts"],"names":[],"mappings":"AAGA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { ComponentType } from 'react';
2
+ import { IconReference } from '@cratis/scene.model';
3
+ export interface IconGlyphProps {
4
+ size: number | string;
5
+ color: string;
6
+ className?: string;
7
+ }
8
+ export type IconGlyph = ComponentType<IconGlyphProps>;
9
+ export interface IconAdapter {
10
+ library: string;
11
+ loadGlyph(reference: IconReference): Promise<IconGlyph | undefined> | IconGlyph | undefined;
12
+ }
13
+ //# sourceMappingURL=IconAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IconAdapter.d.ts","sourceRoot":"","sources":["../../../icons/IconAdapter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAMpD,MAAM,WAAW,cAAc;IAI3B,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAKtB,KAAK,EAAE,MAAM,CAAC;IAKd,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAKD,MAAM,MAAM,SAAS,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC;AAWtD,MAAM,WAAW,WAAW;IAIxB,OAAO,EAAE,MAAM,CAAC;IAKhB,SAAS,CAAC,SAAS,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,GAAG,SAAS,GAAG,SAAS,CAAC;CAC/F"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IconAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IconAdapter.js","sourceRoot":"","sources":["../../../icons/IconAdapter.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import { ReactNode } from 'react';
2
+ import { IconAdapterRegistry } from './IconAdapterRegistry';
3
+ export declare const IconAdapterProvider: ({ registry, children }: {
4
+ registry: IconAdapterRegistry;
5
+ children?: ReactNode;
6
+ }) => import("react").JSX.Element;
7
+ export declare function useIconAdapters(): IconAdapterRegistry | undefined;
8
+ //# sourceMappingURL=IconAdapterContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IconAdapterContext.d.ts","sourceRoot":"","sources":["../../../icons/IconAdapterContext.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAA6B,MAAM,OAAO,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAO5D,eAAO,MAAM,mBAAmB,2BAA4B;IAAE,QAAQ,EAAE,mBAAmB,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,gCAElH,CAAC;AAKF,wBAAgB,eAAe,IAAI,mBAAmB,GAAG,SAAS,CAEjE"}
@@ -0,0 +1,18 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { useContext, createContext } from 'react';
3
+
4
+ const IconAdapterContext = /*#__PURE__*/ createContext(undefined);
5
+ /**
6
+ * Supplies the icon adapters every `SceneIcon` below it renders through.
7
+ */ const IconAdapterProvider = ({ registry, children })=>/*#__PURE__*/ jsx(IconAdapterContext.Provider, {
8
+ value: registry,
9
+ children: children
10
+ });
11
+ /**
12
+ * The icon adapters in scope, or `undefined` outside an {@link IconAdapterProvider}.
13
+ */ function useIconAdapters() {
14
+ return useContext(IconAdapterContext);
15
+ }
16
+
17
+ export { IconAdapterProvider, useIconAdapters };
18
+ //# sourceMappingURL=IconAdapterContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IconAdapterContext.js","sources":["../../../icons/IconAdapterContext.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { ReactNode, createContext, useContext } from 'react';\nimport { IconAdapterRegistry } from './IconAdapterRegistry';\n\nconst IconAdapterContext = createContext<IconAdapterRegistry | undefined>(undefined);\n\n/**\n * Supplies the icon adapters every `SceneIcon` below it renders through.\n */\nexport const IconAdapterProvider = ({ registry, children }: { registry: IconAdapterRegistry; children?: ReactNode }) => (\n <IconAdapterContext.Provider value={registry}>{children}</IconAdapterContext.Provider>\n);\n\n/**\n * The icon adapters in scope, or `undefined` outside an {@link IconAdapterProvider}.\n */\nexport function useIconAdapters(): IconAdapterRegistry | undefined {\n return useContext(IconAdapterContext);\n}\n"],"names":["IconAdapterContext","createContext","undefined","IconAdapterProvider","registry","children","_jsx","Provider","value","useIconAdapters","useContext"],"mappings":";;;AAMA,MAAMA,mCAAqBC,aAAAA,CAA+CC,SAAAA,CAAAA;AAE1E;;AAEC,IACM,MAAMC,mBAAAA,GAAsB,CAAC,EAAEC,QAAQ,EAAEC,QAAQ,EAA2D,iBAC/GC,GAAA,CAACN,kBAAAA,CAAmBO,QAAQ,EAAA;QAACC,KAAAA,EAAOJ,QAAAA;AAAWC,QAAAA,QAAAA,EAAAA;AACjD,KAAA;AAEF;;AAEC,IACM,SAASI,eAAAA,GAAAA;AACZ,IAAA,OAAOC,UAAAA,CAAWV,kBAAAA,CAAAA;AACtB;;"}
@@ -0,0 +1,9 @@
1
+ import { IconAdapter } from './IconAdapter';
2
+ export declare class IconAdapterRegistry {
3
+ #private;
4
+ register(adapter: IconAdapter): this;
5
+ get(library: string): IconAdapter | undefined;
6
+ get libraries(): string[];
7
+ }
8
+ export declare function createIconAdapterRegistry(adapters?: IconAdapter[]): IconAdapterRegistry;
9
+ //# sourceMappingURL=IconAdapterRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IconAdapterRegistry.d.ts","sourceRoot":"","sources":["../../../icons/IconAdapterRegistry.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAO5C,qBAAa,mBAAmB;;IAQ5B,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAOnC;IAKD,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAE5C;IAKD,IAAI,SAAS,IAAI,MAAM,EAAE,CAExB;CACJ;AAKD,wBAAgB,yBAAyB,CAAC,QAAQ,GAAE,WAAW,EAAO,GAAG,mBAAmB,CAI3F"}
@@ -0,0 +1,42 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+ /**
4
+ * The icon adapters a renderer has, one per library. Registering is explicit and never replaces: two
5
+ * adapters for one library would mean an icon renders differently depending on registration order, which
6
+ * is the silent swapping the library-qualified reference exists to prevent.
7
+ */ class IconAdapterRegistry {
8
+ #adapters = new Map();
9
+ /**
10
+ * Adds an adapter.
11
+ *
12
+ * @throws Error when an adapter for the same library is already registered.
13
+ */ register(adapter) {
14
+ if (this.#adapters.has(adapter.library)) {
15
+ throw new Error(`An icon adapter for the library '${adapter.library}' is already registered`);
16
+ }
17
+ this.#adapters.set(adapter.library, adapter);
18
+ return this;
19
+ }
20
+ /**
21
+ * The adapter for a library, or `undefined` when this renderer has none.
22
+ */ get(library) {
23
+ return this.#adapters.get(library);
24
+ }
25
+ /**
26
+ * The libraries this registry can render.
27
+ */ get libraries() {
28
+ return [
29
+ ...this.#adapters.keys()
30
+ ];
31
+ }
32
+ }
33
+ /**
34
+ * Creates a registry holding the given adapters.
35
+ */ function createIconAdapterRegistry(adapters = []) {
36
+ const registry = new IconAdapterRegistry();
37
+ adapters.forEach((adapter)=>registry.register(adapter));
38
+ return registry;
39
+ }
40
+
41
+ export { IconAdapterRegistry, createIconAdapterRegistry };
42
+ //# sourceMappingURL=IconAdapterRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IconAdapterRegistry.js","sources":["../../../icons/IconAdapterRegistry.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { IconAdapter } from './IconAdapter';\n\n/**\n * The icon adapters a renderer has, one per library. Registering is explicit and never replaces: two\n * adapters for one library would mean an icon renders differently depending on registration order, which\n * is the silent swapping the library-qualified reference exists to prevent.\n */\nexport class IconAdapterRegistry {\n readonly #adapters = new Map<string, IconAdapter>();\n\n /**\n * Adds an adapter.\n *\n * @throws Error when an adapter for the same library is already registered.\n */\n register(adapter: IconAdapter): this {\n if (this.#adapters.has(adapter.library)) {\n throw new Error(`An icon adapter for the library '${adapter.library}' is already registered`);\n }\n\n this.#adapters.set(adapter.library, adapter);\n return this;\n }\n\n /**\n * The adapter for a library, or `undefined` when this renderer has none.\n */\n get(library: string): IconAdapter | undefined {\n return this.#adapters.get(library);\n }\n\n /**\n * The libraries this registry can render.\n */\n get libraries(): string[] {\n return [...this.#adapters.keys()];\n }\n}\n\n/**\n * Creates a registry holding the given adapters.\n */\nexport function createIconAdapterRegistry(adapters: IconAdapter[] = []): IconAdapterRegistry {\n const registry = new IconAdapterRegistry();\n adapters.forEach((adapter) => registry.register(adapter));\n return registry;\n}\n"],"names":["IconAdapterRegistry","Map","register","adapter","has","library","Error","set","get","libraries","keys","createIconAdapterRegistry","adapters","registry","forEach"],"mappings":"AAAA;AACA;AAIA;;;;AAIC,IACM,MAAMA,mBAAAA,CAAAA;IACA,SAAS,GAAG,IAAIC,GAAAA,EAAAA;AAEzB;;;;QAKAC,QAAAA,CAASC,OAAoB,EAAQ;QACjC,IAAI,IAAI,CAAC,SAAS,CAACC,GAAG,CAACD,OAAAA,CAAQE,OAAO,CAAA,EAAG;YACrC,MAAM,IAAIC,MAAM,CAAC,iCAAiC,EAAEH,OAAAA,CAAQE,OAAO,CAAC,uBAAuB,CAAC,CAAA;AAChG,QAAA;QAEA,IAAI,CAAC,SAAS,CAACE,GAAG,CAACJ,OAAAA,CAAQE,OAAO,EAAEF,OAAAA,CAAAA;AACpC,QAAA,OAAO,IAAI;AACf,IAAA;AAEA;;QAGAK,GAAAA,CAAIH,OAAe,EAA2B;AAC1C,QAAA,OAAO,IAAI,CAAC,SAAS,CAACG,GAAG,CAACH,OAAAA,CAAAA;AAC9B,IAAA;AAEA;;AAEC,QACD,IAAII,SAAAA,GAAsB;QACtB,OAAO;AAAI,YAAA,GAAA,IAAI,CAAC,SAAS,CAACC,IAAI;AAAG,SAAA;AACrC,IAAA;AACJ;AAEA;;AAEC,IACM,SAASC,yBAAAA,CAA0BC,QAAAA,GAA0B,EAAE,EAAA;AAClE,IAAA,MAAMC,WAAW,IAAIb,mBAAAA,EAAAA;AACrBY,IAAAA,QAAAA,CAASE,OAAO,CAAC,CAACX,OAAAA,GAAYU,QAAAA,CAASX,QAAQ,CAACC,OAAAA,CAAAA,CAAAA;IAChD,OAAOU,QAAAA;AACX;;"}
@@ -0,0 +1,7 @@
1
+ import { IconCatalogSource } from '@cratis/scene.engine';
2
+ import { IconAdapter } from './IconAdapter';
3
+ export interface IconLibraryBundle {
4
+ catalog: IconCatalogSource;
5
+ adapter: IconAdapter;
6
+ }
7
+ //# sourceMappingURL=IconLibraryBundle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IconLibraryBundle.d.ts","sourceRoot":"","sources":["../../../icons/IconLibraryBundle.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAU5C,MAAM,WAAW,iBAAiB;IAI9B,OAAO,EAAE,iBAAiB,CAAC;IAK3B,OAAO,EAAE,WAAW,CAAC;CACxB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IconLibraryBundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IconLibraryBundle.js","sourceRoot":"","sources":["../../../icons/IconLibraryBundle.ts"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ import { ReactNode } from 'react';
2
+ import { IconReference } from '@cratis/scene.model';
3
+ import { IconAdapterRegistry } from './IconAdapterRegistry';
4
+ export interface SceneIconProps {
5
+ reference: IconReference;
6
+ adapters?: IconAdapterRegistry;
7
+ size?: number | string;
8
+ color?: string;
9
+ label?: string;
10
+ className?: string;
11
+ fallback?: ReactNode;
12
+ }
13
+ export declare const SceneIcon: ({ reference, adapters, size, color, label, className, fallback }: SceneIconProps) => import("react").JSX.Element;
14
+ //# sourceMappingURL=SceneIcon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SceneIcon.d.ts","sourceRoot":"","sources":["../../../icons/SceneIcon.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAI5D,MAAM,WAAW,cAAc;IAI3B,SAAS,EAAE,aAAa,CAAC;IAKzB,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAM/B,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAKvB,KAAK,CAAC,EAAE,MAAM,CAAC;IAMf,KAAK,CAAC,EAAE,MAAM,CAAC;IAKf,SAAS,CAAC,EAAE,MAAM,CAAC;IAMnB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACxB;AAMD,eAAO,MAAM,SAAS,qEAA+F,cAAc,gCAmBlI,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { useIconAdapters } from './IconAdapterContext.js';
3
+ import { useIconGlyph } from './useIconGlyph.js';
4
+
5
+ // Copyright (c) Cratis. All rights reserved.
6
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
7
+ /**
8
+ * Draws a renderer-neutral {@link IconReference} through the adapter registered for its library, honoring
9
+ * size, color and accessible label. The reference is all that is persisted; this is where it becomes pixels.
10
+ */ const SceneIcon = ({ reference, adapters, size = '1em', color = 'currentColor', label, className, fallback })=>{
11
+ const inScope = useIconAdapters();
12
+ const state = useIconGlyph(reference, adapters ?? inScope);
13
+ const Glyph = state.status === 'ready' ? state.glyph : undefined;
14
+ return /*#__PURE__*/ jsx("span", {
15
+ className: className,
16
+ role: label ? 'img' : undefined,
17
+ "aria-label": label,
18
+ "aria-hidden": label ? undefined : true,
19
+ "data-icon-library": reference.library,
20
+ "data-icon-key": reference.key,
21
+ "data-icon-variant": reference.variant,
22
+ "data-icon-state": state.status,
23
+ style: {
24
+ display: 'inline-flex',
25
+ alignItems: 'center',
26
+ justifyContent: 'center',
27
+ width: size,
28
+ height: size,
29
+ color,
30
+ flexShrink: 0
31
+ },
32
+ children: Glyph ? /*#__PURE__*/ jsx(Glyph, {
33
+ size: size,
34
+ color: color
35
+ }) : state.status === 'unavailable' ? fallback : null
36
+ });
37
+ };
38
+
39
+ export { SceneIcon };
40
+ //# sourceMappingURL=SceneIcon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SceneIcon.js","sources":["../../../icons/SceneIcon.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { ReactNode } from 'react';\nimport { IconReference } from '@cratis/scene.model';\nimport { IconAdapterRegistry } from './IconAdapterRegistry';\nimport { useIconAdapters } from './IconAdapterContext';\nimport { useIconGlyph } from './useIconGlyph';\n\nexport interface SceneIconProps {\n /**\n * The icon to draw.\n */\n reference: IconReference;\n\n /**\n * The adapters to render through. Defaults to the ones an `IconAdapterProvider` supplies.\n */\n adapters?: IconAdapterRegistry;\n\n /**\n * The width and height of the icon: a number of pixels or any CSS length. Defaults to `1em`, so an\n * icon scales with the text it sits in.\n */\n size?: number | string;\n\n /**\n * The color to draw in. Defaults to `currentColor`.\n */\n color?: string;\n\n /**\n * The accessible name. With a label the icon is announced as an image; without one it is decorative\n * and hidden from assistive technology - an icon next to its own text label should not be read twice.\n */\n label?: string;\n\n /**\n * An optional class for the box the icon sits in.\n */\n className?: string;\n\n /**\n * What to show when the icon cannot be drawn - no adapter, no such icon, a failed load. Nothing by\n * default; the box keeps its size so layout does not shift.\n */\n fallback?: ReactNode;\n}\n\n/**\n * Draws a renderer-neutral {@link IconReference} through the adapter registered for its library, honoring\n * size, color and accessible label. The reference is all that is persisted; this is where it becomes pixels.\n */\nexport const SceneIcon = ({ reference, adapters, size = '1em', color = 'currentColor', label, className, fallback }: SceneIconProps) => {\n const inScope = useIconAdapters();\n const state = useIconGlyph(reference, adapters ?? inScope);\n const Glyph = state.status === 'ready' ? state.glyph : undefined;\n\n return (\n <span\n className={className}\n role={label ? 'img' : undefined}\n aria-label={label}\n aria-hidden={label ? undefined : true}\n data-icon-library={reference.library}\n data-icon-key={reference.key}\n data-icon-variant={reference.variant}\n data-icon-state={state.status}\n style={{ display: 'inline-flex', alignItems: 'center', justifyContent: 'center', width: size, height: size, color, flexShrink: 0 }}>\n {Glyph ? <Glyph size={size} color={color} /> : state.status === 'unavailable' ? fallback : null}\n </span>\n );\n};\n"],"names":["SceneIcon","reference","adapters","size","color","label","className","fallback","inScope","useIconAdapters","state","useIconGlyph","Glyph","status","glyph","undefined","_jsx","span","role","aria-label","aria-hidden","data-icon-library","library","data-icon-key","key","data-icon-variant","variant","data-icon-state","style","display","alignItems","justifyContent","width","height","flexShrink"],"mappings":";;;;AAAA;AACA;AAgDA;;;UAIaA,SAAAA,GAAY,CAAC,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,IAAAA,GAAO,KAAK,EAAEC,KAAAA,GAAQ,cAAc,EAAEC,KAAK,EAAEC,SAAS,EAAEC,QAAQ,EAAkB,GAAA;AAC/H,IAAA,MAAMC,OAAAA,GAAUC,eAAAA,EAAAA;IAChB,MAAMC,KAAAA,GAAQC,YAAAA,CAAaV,SAAAA,EAAWC,QAAAA,IAAYM,OAAAA,CAAAA;AAClD,IAAA,MAAMI,QAAQF,KAAAA,CAAMG,MAAM,KAAK,OAAA,GAAUH,KAAAA,CAAMI,KAAK,GAAGC,SAAAA;AAEvD,IAAA,qBACIC,GAAA,CAACC,MAAAA,EAAAA;QACGX,SAAAA,EAAWA,SAAAA;AACXY,QAAAA,IAAAA,EAAMb,QAAQ,KAAA,GAAQU,SAAAA;QACtBI,YAAAA,EAAYd,KAAAA;AACZe,QAAAA,aAAAA,EAAaf,QAAQU,SAAAA,GAAY,IAAA;AACjCM,QAAAA,mBAAAA,EAAmBpB,UAAUqB,OAAO;AACpCC,QAAAA,eAAAA,EAAetB,UAAUuB,GAAG;AAC5BC,QAAAA,mBAAAA,EAAmBxB,UAAUyB,OAAO;AACpCC,QAAAA,iBAAAA,EAAiBjB,MAAMG,MAAM;QAC7Be,KAAAA,EAAO;YAAEC,OAAAA,EAAS,aAAA;YAAeC,UAAAA,EAAY,QAAA;YAAUC,cAAAA,EAAgB,QAAA;YAAUC,KAAAA,EAAO7B,IAAAA;YAAM8B,MAAAA,EAAQ9B,IAAAA;AAAMC,YAAAA,KAAAA;YAAO8B,UAAAA,EAAY;AAAE,SAAA;AAChItB,QAAAA,QAAAA,EAAAA,KAAAA,iBAAQI,GAAA,CAACJ,KAAAA,EAAAA;YAAMT,IAAAA,EAAMA,IAAAA;YAAMC,KAAAA,EAAOA;aAAYM,KAAAA,CAAMG,MAAM,KAAK,aAAA,GAAgBN,QAAAA,GAAW;;AAGvG;;"}
@@ -0,0 +1,7 @@
1
+ export * from './IconAdapter';
2
+ export * from './IconAdapterRegistry';
3
+ export * from './IconAdapterContext';
4
+ export * from './useIconGlyph';
5
+ export * from './SceneIcon';
6
+ export * from './IconLibraryBundle';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../icons/index.ts"],"names":[],"mappings":"AAGA,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from './IconAdapter';
2
+ export * from './IconAdapterRegistry';
3
+ export * from './IconAdapterContext';
4
+ export * from './useIconGlyph';
5
+ export * from './SceneIcon';
6
+ export * from './IconLibraryBundle';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../icons/index.ts"],"names":[],"mappings":"AAGA,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { IconReference } from '@cratis/scene.model';
2
+ import { IconGlyph } from './IconAdapter';
3
+ import { IconAdapterRegistry } from './IconAdapterRegistry';
4
+ export type IconGlyphState = {
5
+ status: 'loading';
6
+ } | {
7
+ status: 'ready';
8
+ glyph: IconGlyph;
9
+ } | {
10
+ status: 'unavailable';
11
+ reason: string;
12
+ };
13
+ export declare function useIconGlyph(reference: IconReference, adapters: IconAdapterRegistry | undefined): IconGlyphState;
14
+ //# sourceMappingURL=useIconGlyph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useIconGlyph.d.ts","sourceRoot":"","sources":["../../../icons/useIconGlyph.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAe,SAAS,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAK5D,MAAM,MAAM,cAAc,GACpB;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACrB;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,GACrC;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAmChD,wBAAgB,YAAY,CAAC,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,mBAAmB,GAAG,SAAS,GAAG,cAAc,CA6BhH"}
@@ -0,0 +1,84 @@
1
+ import { useState, useEffect } from 'react';
2
+
3
+ // Copyright (c) Cratis. All rights reserved.
4
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
5
+ const loads = new WeakMap();
6
+ function keyOf(reference) {
7
+ return JSON.stringify([
8
+ reference.key,
9
+ reference.variant ?? null
10
+ ]);
11
+ }
12
+ /**
13
+ * One load per adapter and icon, shared between every place the icon is drawn; a failed load is
14
+ * forgotten so the next render can try again.
15
+ */ function load(adapter, reference) {
16
+ let perAdapter = loads.get(adapter);
17
+ if (!perAdapter) {
18
+ perAdapter = new Map();
19
+ loads.set(adapter, perAdapter);
20
+ }
21
+ const key = keyOf(reference);
22
+ let pending = perAdapter.get(key);
23
+ if (!pending) {
24
+ pending = Promise.resolve().then(()=>adapter.loadGlyph(reference));
25
+ perAdapter.set(key, pending);
26
+ pending.catch(()=>perAdapter.delete(key));
27
+ }
28
+ return pending;
29
+ }
30
+ /**
31
+ * Loads the artwork for a reference through the adapter registered for its library. An absent registry,
32
+ * a library with no adapter, an icon the library lacks and a failed load are all `unavailable`, each with
33
+ * its reason - never a different icon.
34
+ */ function useIconGlyph(reference, adapters) {
35
+ const [state, setState] = useState({
36
+ status: 'loading'
37
+ });
38
+ const { library, key, variant } = reference;
39
+ useEffect(()=>{
40
+ let isCurrent = true;
41
+ const adapter = adapters?.get(library);
42
+ if (!adapter) {
43
+ setState({
44
+ status: 'unavailable',
45
+ reason: `No icon adapter is registered for the library '${library}'`
46
+ });
47
+ return;
48
+ }
49
+ setState({
50
+ status: 'loading'
51
+ });
52
+ load(adapter, {
53
+ library,
54
+ key,
55
+ variant
56
+ }).then((glyph)=>{
57
+ if (!isCurrent) return;
58
+ setState(glyph ? {
59
+ status: 'ready',
60
+ glyph
61
+ } : {
62
+ status: 'unavailable',
63
+ reason: `The library '${library}' has no icon '${key}'`
64
+ });
65
+ }, (error)=>{
66
+ if (isCurrent) setState({
67
+ status: 'unavailable',
68
+ reason: error instanceof Error ? error.message : String(error)
69
+ });
70
+ });
71
+ return ()=>{
72
+ isCurrent = false;
73
+ };
74
+ }, [
75
+ adapters,
76
+ library,
77
+ key,
78
+ variant
79
+ ]);
80
+ return state;
81
+ }
82
+
83
+ export { useIconGlyph };
84
+ //# sourceMappingURL=useIconGlyph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useIconGlyph.js","sources":["../../../icons/useIconGlyph.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { useEffect, useState } from 'react';\nimport { IconReference } from '@cratis/scene.model';\nimport { IconAdapter, IconGlyph } from './IconAdapter';\nimport { IconAdapterRegistry } from './IconAdapterRegistry';\n\n/**\n * Where loading one icon's artwork stands.\n */\nexport type IconGlyphState =\n | { status: 'loading' }\n | { status: 'ready'; glyph: IconGlyph }\n | { status: 'unavailable'; reason: string };\n\nconst loads = new WeakMap<IconAdapter, Map<string, Promise<IconGlyph | undefined>>>();\n\nfunction keyOf(reference: IconReference): string {\n return JSON.stringify([reference.key, reference.variant ?? null]);\n}\n\n/**\n * One load per adapter and icon, shared between every place the icon is drawn; a failed load is\n * forgotten so the next render can try again.\n */\nfunction load(adapter: IconAdapter, reference: IconReference): Promise<IconGlyph | undefined> {\n let perAdapter = loads.get(adapter);\n if (!perAdapter) {\n perAdapter = new Map();\n loads.set(adapter, perAdapter);\n }\n\n const key = keyOf(reference);\n let pending = perAdapter.get(key);\n if (!pending) {\n pending = Promise.resolve().then(() => adapter.loadGlyph(reference));\n perAdapter.set(key, pending);\n pending.catch(() => perAdapter.delete(key));\n }\n\n return pending;\n}\n\n/**\n * Loads the artwork for a reference through the adapter registered for its library. An absent registry,\n * a library with no adapter, an icon the library lacks and a failed load are all `unavailable`, each with\n * its reason - never a different icon.\n */\nexport function useIconGlyph(reference: IconReference, adapters: IconAdapterRegistry | undefined): IconGlyphState {\n const [state, setState] = useState<IconGlyphState>({ status: 'loading' });\n const { library, key, variant } = reference;\n\n useEffect(() => {\n let isCurrent = true;\n const adapter = adapters?.get(library);\n if (!adapter) {\n setState({ status: 'unavailable', reason: `No icon adapter is registered for the library '${library}'` });\n return;\n }\n\n setState({ status: 'loading' });\n load(adapter, { library, key, variant }).then(\n (glyph) => {\n if (!isCurrent) return;\n setState(glyph ? { status: 'ready', glyph } : { status: 'unavailable', reason: `The library '${library}' has no icon '${key}'` });\n },\n (error: unknown) => {\n if (isCurrent) setState({ status: 'unavailable', reason: error instanceof Error ? error.message : String(error) });\n }\n );\n\n return () => {\n isCurrent = false;\n };\n }, [adapters, library, key, variant]);\n\n return state;\n}\n"],"names":["loads","WeakMap","keyOf","reference","JSON","stringify","key","variant","load","adapter","perAdapter","get","Map","set","pending","Promise","resolve","then","loadGlyph","catch","delete","useIconGlyph","adapters","state","setState","useState","status","library","useEffect","isCurrent","reason","glyph","error","Error","message","String"],"mappings":"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"}