@stellar-expert/ui-framework 1.16.8 → 1.17.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 (78) hide show
  1. package/CLAUDE.md +35 -0
  2. package/README.md +1125 -3
  3. package/account/account-address.js +127 -127
  4. package/account/available-balance.js +22 -22
  5. package/account/identicon.js +90 -90
  6. package/account/signer-key.js +65 -64
  7. package/api/explorer-api-hooks.js +209 -202
  8. package/api/explorer-api-paginated-list-hooks.js +441 -440
  9. package/api/explorer-batch-info-loader.js +111 -85
  10. package/api/explorer-tx-api.js +28 -28
  11. package/api/ledger-stream.js +15 -0
  12. package/asset/amount.js +56 -56
  13. package/asset/asset-icon.js +41 -41
  14. package/asset/asset-issuer.js +21 -21
  15. package/asset/asset-link.js +107 -107
  16. package/asset/asset-list-hooks.js +59 -59
  17. package/asset/asset-meta-hooks.js +88 -88
  18. package/asset/asset-selector.js +72 -71
  19. package/claimable-balance/claimable-balance-claimants.js +23 -18
  20. package/contract/contract-api.js +15 -0
  21. package/contract/invocation-info-view.js +10 -2
  22. package/contract/sc-val.js +131 -107
  23. package/controls/button-group.js +25 -19
  24. package/controls/button.js +93 -78
  25. package/controls/code-block.js +42 -34
  26. package/controls/dropdown.js +318 -287
  27. package/controls/external-link.js +10 -4
  28. package/controls/info-tooltip.js +23 -16
  29. package/controls/slider.js +29 -19
  30. package/controls/tabs.js +94 -94
  31. package/controls/tooltip.js +244 -240
  32. package/controls/update-highlighter.js +32 -27
  33. package/date/date-selector.js +56 -54
  34. package/date/elapsed-time.js +28 -21
  35. package/dex/price-dynamic.js +53 -44
  36. package/directory/directory-hooks.js +109 -97
  37. package/effect/effect-description.js +346 -344
  38. package/errors/error-boundary.js +110 -97
  39. package/horizon/horizon-account-helpers.js +104 -104
  40. package/horizon/horizon-ledger-helpers.js +35 -35
  41. package/horizon/horizon-trades-helper.js +88 -88
  42. package/horizon/horizon-transaction-helpers.js +36 -36
  43. package/index.d.ts +1241 -0
  44. package/interaction/accordion.js +43 -35
  45. package/interaction/autofocus.js +13 -9
  46. package/interaction/block-select.js +64 -53
  47. package/interaction/copy-to-clipboard.js +25 -18
  48. package/interaction/inline-progress.js +20 -15
  49. package/interaction/qr-code.js +34 -34
  50. package/interaction/responsive.js +20 -20
  51. package/interaction/spoiler.js +52 -39
  52. package/interaction/theme-selector.js +13 -10
  53. package/ledger/ledger-entry-href-formatter.js +27 -26
  54. package/ledger/ledger-entry-link.js +93 -58
  55. package/ledger/ledger-info-parser.js +46 -18
  56. package/meta/page-meta-tags.js +243 -238
  57. package/module/dynamic-module.js +47 -47
  58. package/package.json +41 -40
  59. package/state/on-screen-hooks.js +22 -22
  60. package/state/page-visibility-helpers.js +29 -16
  61. package/state/page-visibility-hooks.js +13 -11
  62. package/state/screen-orientation-hooks.js +19 -15
  63. package/state/state-hooks.js +76 -76
  64. package/state/stellar-network-hooks.js +56 -44
  65. package/state/theme.js +29 -28
  66. package/stellar/key-type.js +92 -91
  67. package/stellar/ledger-generic-id.js +39 -39
  68. package/stellar/signature-hint-utils.js +65 -65
  69. package/toast/toast-notifications-block.js +59 -59
  70. package/tx/op-description-view.js +945 -942
  71. package/tx/op-icon.js +98 -98
  72. package/tx/parser/op-balance-changes.js +66 -66
  73. package/tx/parser/op-descriptor.js +51 -48
  74. package/tx/parser/tx-details-parser.js +81 -81
  75. package/tx/parser/tx-matcher.js +371 -371
  76. package/tx/parser/type-filter-matcher.js +126 -126
  77. package/tx/tx-list-hooks.js +32 -18
  78. package/tx/tx-operations-list.js +117 -116
@@ -1,239 +1,244 @@
1
- import {useEffect} from 'react'
2
- import isEqual from 'react-fast-compare'
3
-
4
- const metaProps = {
5
- serviceTitle: '',
6
- description: '',
7
- image: '',
8
- imageEndpoint: '',
9
- origin: '',
10
- domain: ''
11
- }
12
-
13
- setOrigin(window.location.origin)
14
-
15
- /**
16
- * Initialize default meta properties for the application
17
- * @param {{serviceTitle: String, description: String, origin: String, [image]: String, [imageEndpoint]: String}} appMetaProps
18
- */
19
- export function initMeta(appMetaProps) {
20
- const {origin, ...props} = appMetaProps
21
- Object.assign(metaProps, props)
22
- if (origin) {
23
- setOrigin(origin)
24
- }
25
- }
26
-
27
- function setOrigin(origin) {
28
- metaProps.origin = origin
29
- metaProps.domain = origin.replace(/https?:\/\//, '')
30
- }
31
-
32
- function formatPageTitle(title) {
33
- if (!title)
34
- return metaProps.serviceTitle
35
- if (title.includes(metaProps.serviceTitle))
36
- return title
37
- return `${title} ${metaProps.serviceTitle}`
38
- }
39
-
40
- function generateCanonicalLink(params, canonicalUrl) {
41
- return {
42
- tag: 'link',
43
- locator: 'rel',
44
- tags: [
45
- {name: 'canonical', content: canonicalUrl, attribute: 'href'}
46
- ]
47
- }
48
- }
49
-
50
- function generateDescriptionMeta({description}) {
51
- return {
52
- locator: 'name',
53
- tags: [
54
- {name: 'description', content: description || metaProps.description}
55
- ]
56
- }
57
- }
58
-
59
- function generateOpenGraphMeta({description, title, image}, canonicalUrl) {
60
- //imageEndpoint
61
- return {
62
- locator: 'property',
63
- tags: [
64
- {name: 'og:title', content: formatPageTitle(title)},
65
- {name: 'og:url', content: canonicalUrl},
66
- {name: 'og:site_name', content: formatPageTitle(metaProps.serviceTitle)},
67
- {name: 'og:description', content: description || metaProps.description},
68
- {name: 'og:type', content: 'website'},
69
- {name: 'og:image:width', content: 1200},
70
- {name: 'og:image:height', content: 630},
71
- {name: 'og:image', content: formatPageImage(image, canonicalUrl)}
72
- ]
73
- }
74
- }
75
-
76
- function generateItemPropSchema({description, title, image}) {
77
- return {
78
- locator: 'itemprop',
79
- tags: [
80
- {name: 'name', content: title},
81
- {name: 'description', content: description || metaProps.description},
82
- {name: 'image', content: image || metaProps.image}
83
- ]
84
- }
85
- }
86
-
87
- function generateLdJsonSchema({title, description, image}, canonicalUrl) {
88
- return {
89
- tag: 'script',
90
- locator: 'type',
91
- tags: [
92
- {
93
- name: 'application/ld+json',
94
- content: JSON.stringify({
95
- '@context': 'http://schema.org',
96
- '@type': 'WebPage',
97
- name: formatPageTitle(title),
98
- description: description || metaProps.description,
99
- url: canonicalUrl,
100
- thumbnailUrl: formatPageImage(image, canonicalUrl),
101
- publisher: {
102
- '@type': 'ProfilePage',
103
- name: metaProps.serviceTitle
104
- }
105
- })
106
- }
107
- ]
108
- }
109
- }
110
-
111
- /**
112
- * @param {MetaTagReplacement} replacement
113
- */
114
- function replaceMetaTags(replacement) {
115
- const {tag, tags, locator} = replacement
116
- const selector = tag || 'meta'
117
- tags.forEach(tagSettings => {
118
- let tag = document.querySelector(`${selector}[${locator}="${tagSettings.name}"]`)
119
- if (!tag) {
120
- tag = createTag(selector)
121
- tag.setAttribute(locator, tagSettings.name)
122
- }
123
- if (selector === 'meta') {
124
- tag.content = tagSettings.content
125
- } else if (tagSettings.attribute) {
126
- tag[tagSettings.attribute] = tagSettings.content
127
- } else {
128
- tag.innerText = tagSettings.content
129
- }
130
- })
131
- }
132
-
133
- function createTag(tagName, props) {
134
- let tag = document.createElement(tagName)
135
- for (let key in props) {
136
- tag[key] = props[key]
137
- }
138
- document.head.appendChild(tag)
139
- return tag
140
- }
141
-
142
- function removeTag(selector) {
143
- let tag = document.querySelector(selector)
144
- if (tag) {
145
- tag.parentElement.removeChild(tag)
146
- }
147
- }
148
-
149
- function formatCanonicalUrl() {
150
- return metaProps.origin + window.location.pathname// + location.search
151
- }
152
-
153
- function formatPageImage(image, canonicalUrl) {
154
- if (image)
155
- return image
156
- if (metaProps.imageEndpoint)
157
- return metaProps.imageEndpoint + canonicalUrl.replace(metaProps.origin, '')
158
- return metaProps.image
159
- }
160
-
161
- let pageMeta = {}
162
-
163
- const tagReplacerPipeline = [
164
- generateCanonicalLink,
165
- generateDescriptionMeta,
166
- generateOpenGraphMeta,
167
- generateLdJsonSchema
168
- ] // generateItemPropSchema
169
-
170
- /**
171
- * Update page metadata tags
172
- * @param {PageMeta} meta - Page metadata
173
- */
174
- function setPageMetadata(meta) {
175
- if (isEqual(pageMeta, meta))
176
- return
177
- //generate canonical URL
178
- const canonicalUrl = formatCanonicalUrl()
179
- document.title = formatPageTitle(meta.title)
180
- for (const replacer of tagReplacerPipeline) {
181
- replaceMetaTags(replacer(meta, canonicalUrl))
182
- }
183
- if (meta.customMeta) {
184
- replaceMetaTags(meta.customMeta)
185
- }
186
- pageMeta = meta
187
- }
188
-
189
- /**
190
- * Reset page metadata tags to their default values
191
- * @param {PageMeta} meta - Page metadata
192
- */
193
- function resetPageMetadata(meta) {
194
- setPageMetadata({
195
- title: metaProps.serviceTitle,
196
- description: metaProps.description,
197
- image: metaProps.image
198
- })
199
- //TODO: add logic to cleanup custom page meta tags on page unload
200
- }
201
-
202
- /**
203
- * React hook for setting page metadata
204
- * @param {PageMeta} meta - Page metadata
205
- */
206
- export function usePageMetadata(meta) {
207
- useEffect(() => {
208
- setPageMetadata(meta)
209
- return () => resetPageMetadata(meta)
210
- }, [JSON.stringify(meta), [formatCanonicalUrl()]])
211
- }
212
-
213
- export function setPageNoIndex(noIndex) {
214
- if (!noIndex) {
215
- removeTag('meta[name=robots]')
216
- } else {
217
- replaceMetaTags({
218
- locator: 'name',
219
- tags: [
220
- {name: 'robots', content: 'noindex,nofollow'}
221
- ]
222
- })
223
- }
224
- }
225
-
226
- /**
227
- * @typedef {Object} PageMeta
228
- * @property {String} title - Page title
229
- * @property {String} description - Contents description
230
- * @property {String} [image] - Page image url
231
- * @property {MetaTagReplacement} [customMeta] - Custom metadata tags
232
- */
233
-
234
- /**
235
- * @typedef {Object} MetaTagReplacement
236
- * @property {String} [tag] - Tag name to search for ("meta" by default)
237
- * @property {String} locator - Tag attribute to match
238
- * @property {{name: String, content: String, [attribute]: String}[]} tags - Tag properties to set
1
+ import {useEffect} from 'react'
2
+ import isEqual from 'react-fast-compare'
3
+
4
+ const metaProps = {
5
+ serviceTitle: '',
6
+ description: '',
7
+ image: '',
8
+ imageEndpoint: '',
9
+ origin: '',
10
+ domain: ''
11
+ }
12
+
13
+ setOrigin(window.location.origin)
14
+
15
+ /**
16
+ * Initialize default meta properties for the application
17
+ * @param {{serviceTitle: string, description: string, origin: string, [image]: string, [imageEndpoint]: string}} appMetaProps
18
+ */
19
+ export function initMeta(appMetaProps) {
20
+ const {origin, ...props} = appMetaProps
21
+ Object.assign(metaProps, props)
22
+ if (origin) {
23
+ setOrigin(origin)
24
+ }
25
+ }
26
+
27
+ function setOrigin(origin) {
28
+ metaProps.origin = origin
29
+ metaProps.domain = origin.replace(/https?:\/\//, '')
30
+ }
31
+
32
+ function formatPageTitle(title) {
33
+ if (!title)
34
+ return metaProps.serviceTitle
35
+ if (title.includes(metaProps.serviceTitle))
36
+ return title
37
+ return `${title} ${metaProps.serviceTitle}`
38
+ }
39
+
40
+ function generateCanonicalLink(params, canonicalUrl) {
41
+ return {
42
+ tag: 'link',
43
+ locator: 'rel',
44
+ tags: [
45
+ {name: 'canonical', content: canonicalUrl, attribute: 'href'}
46
+ ]
47
+ }
48
+ }
49
+
50
+ function generateDescriptionMeta({description}) {
51
+ return {
52
+ locator: 'name',
53
+ tags: [
54
+ {name: 'description', content: description || metaProps.description}
55
+ ]
56
+ }
57
+ }
58
+
59
+ function generateOpenGraphMeta({description, title, image}, canonicalUrl) {
60
+ //imageEndpoint
61
+ return {
62
+ locator: 'property',
63
+ tags: [
64
+ {name: 'og:title', content: formatPageTitle(title)},
65
+ {name: 'og:url', content: canonicalUrl},
66
+ {name: 'og:site_name', content: formatPageTitle(metaProps.serviceTitle)},
67
+ {name: 'og:description', content: description || metaProps.description},
68
+ {name: 'og:type', content: 'website'},
69
+ {name: 'og:image:width', content: 1200},
70
+ {name: 'og:image:height', content: 630},
71
+ {name: 'og:image', content: formatPageImage(image, canonicalUrl)}
72
+ ]
73
+ }
74
+ }
75
+
76
+ function generateItemPropSchema({description, title, image}) {
77
+ return {
78
+ locator: 'itemprop',
79
+ tags: [
80
+ {name: 'name', content: title},
81
+ {name: 'description', content: description || metaProps.description},
82
+ {name: 'image', content: image || metaProps.image}
83
+ ]
84
+ }
85
+ }
86
+
87
+ function generateLdJsonSchema({title, description, image}, canonicalUrl) {
88
+ return {
89
+ tag: 'script',
90
+ locator: 'type',
91
+ tags: [
92
+ {
93
+ name: 'application/ld+json',
94
+ content: JSON.stringify({
95
+ '@context': 'http://schema.org',
96
+ '@type': 'WebPage',
97
+ name: formatPageTitle(title),
98
+ description: description || metaProps.description,
99
+ url: canonicalUrl,
100
+ thumbnailUrl: formatPageImage(image, canonicalUrl),
101
+ publisher: {
102
+ '@type': 'ProfilePage',
103
+ name: metaProps.serviceTitle
104
+ }
105
+ })
106
+ }
107
+ ]
108
+ }
109
+ }
110
+
111
+ /**
112
+ * Replace or create HTML meta tags in the document head
113
+ * @param {MetaTagReplacement} replacement
114
+ */
115
+ function replaceMetaTags(replacement) {
116
+ const {tag, tags, locator} = replacement
117
+ const selector = tag || 'meta'
118
+ tags.forEach(tagSettings => {
119
+ let tag = document.querySelector(`${selector}[${locator}="${tagSettings.name}"]`)
120
+ if (!tag) {
121
+ tag = createTag(selector)
122
+ tag.setAttribute(locator, tagSettings.name)
123
+ }
124
+ if (selector === 'meta') {
125
+ tag.content = tagSettings.content
126
+ } else if (tagSettings.attribute) {
127
+ tag[tagSettings.attribute] = tagSettings.content
128
+ } else {
129
+ tag.innerText = tagSettings.content
130
+ }
131
+ })
132
+ }
133
+
134
+ function createTag(tagName, props) {
135
+ let tag = document.createElement(tagName)
136
+ for (let key in props) {
137
+ tag[key] = props[key]
138
+ }
139
+ document.head.appendChild(tag)
140
+ return tag
141
+ }
142
+
143
+ function removeTag(selector) {
144
+ let tag = document.querySelector(selector)
145
+ if (tag) {
146
+ tag.parentElement.removeChild(tag)
147
+ }
148
+ }
149
+
150
+ function formatCanonicalUrl() {
151
+ return metaProps.origin + window.location.pathname// + location.search
152
+ }
153
+
154
+ function formatPageImage(image, canonicalUrl) {
155
+ if (image)
156
+ return image
157
+ if (metaProps.imageEndpoint)
158
+ return metaProps.imageEndpoint + canonicalUrl.replace(metaProps.origin, '')
159
+ return metaProps.image
160
+ }
161
+
162
+ let pageMeta = {}
163
+
164
+ const tagReplacerPipeline = [
165
+ generateCanonicalLink,
166
+ generateDescriptionMeta,
167
+ generateOpenGraphMeta,
168
+ generateLdJsonSchema
169
+ ] // generateItemPropSchema
170
+
171
+ /**
172
+ * Update page metadata tags
173
+ * @param {PageMeta} meta - Page metadata
174
+ */
175
+ function setPageMetadata(meta) {
176
+ if (isEqual(pageMeta, meta))
177
+ return
178
+ //generate canonical URL
179
+ const canonicalUrl = formatCanonicalUrl()
180
+ document.title = formatPageTitle(meta.title)
181
+ for (const replacer of tagReplacerPipeline) {
182
+ replaceMetaTags(replacer(meta, canonicalUrl))
183
+ }
184
+ if (meta.customMeta) {
185
+ replaceMetaTags(meta.customMeta)
186
+ }
187
+ pageMeta = meta
188
+ }
189
+
190
+ /**
191
+ * Reset page metadata tags to their default values
192
+ * @param {PageMeta} meta - Page metadata
193
+ */
194
+ function resetPageMetadata(meta) {
195
+ setPageMetadata({
196
+ title: metaProps.serviceTitle,
197
+ description: metaProps.description,
198
+ image: metaProps.image
199
+ })
200
+ //TODO: add logic to cleanup custom page meta tags on page unload
201
+ }
202
+
203
+ /**
204
+ * React hook for setting page metadata
205
+ * @param {PageMeta} meta - Page metadata
206
+ */
207
+ export function usePageMetadata(meta) {
208
+ useEffect(() => {
209
+ setPageMetadata(meta)
210
+ return () => resetPageMetadata(meta)
211
+ }, [JSON.stringify(meta), [formatCanonicalUrl()]])
212
+ }
213
+
214
+ /**
215
+ * Set or remove the robots "noindex,nofollow" meta tag
216
+ * @param {boolean} noIndex - Whether to add (true) or remove (false) the noindex directive
217
+ */
218
+ export function setPageNoIndex(noIndex) {
219
+ if (!noIndex) {
220
+ removeTag('meta[name=robots]')
221
+ } else {
222
+ replaceMetaTags({
223
+ locator: 'name',
224
+ tags: [
225
+ {name: 'robots', content: 'noindex,nofollow'}
226
+ ]
227
+ })
228
+ }
229
+ }
230
+
231
+ /**
232
+ * @typedef {Object} PageMeta
233
+ * @property {string} title - Page title
234
+ * @property {string} description - Contents description
235
+ * @property {string} [image] - Page image url
236
+ * @property {MetaTagReplacement} [customMeta] - Custom metadata tags
237
+ */
238
+
239
+ /**
240
+ * @typedef {Object} MetaTagReplacement
241
+ * @property {string} [tag] - Tag name to search for ("meta" by default)
242
+ * @property {string} locator - Tag attribute to match
243
+ * @property {{name: string, content: string, [attribute]: string}[]} tags - Tag properties to set
239
244
  */
@@ -1,48 +1,48 @@
1
- import React, {useEffect, useState} from 'react'
2
- import PropTypes from 'prop-types'
3
- import {withErrorBoundary} from '../errors/error-boundary'
4
-
5
- const loadedModules = new Map()
6
-
7
- export const DynamicModule = withErrorBoundary(
8
- /**
9
- * Dynamically loadable module
10
- * @param {Function} load - Dynamic load function, e.g. ()=>import('./dynamic_module_import')
11
- * @param {String} module - Module unique name for aching purpose
12
- * @param {*} [otherProps]
13
- * @constructor
14
- */
15
- function DynamicModule({load, module, ...otherProps}) {
16
- const [error, setError] = useState(undefined)
17
- const key = module || load
18
-
19
- useEffect(() => {
20
- if (loadedModules.get(key))
21
- return //skip if module is already loaded
22
- load()
23
- .then(dynamicModule => {
24
- //use default export for ES modules or top-level export for CJS
25
- if (dynamicModule.__esModule) {
26
- dynamicModule = dynamicModule.default
27
- }
28
- //add to cache
29
- loadedModules.set(key, dynamicModule)
30
- setError(null)
31
- })
32
- .catch(error => {
33
- error.message = 'Failed to load module. ' + error.message
34
- setError(error)
35
- })
36
- }, [module || load])
37
- if (error)
38
- throw error
39
- const resolvedModule = loadedModules.get(key)
40
- if (!resolvedModule)
41
- return <div className="loader"/>
42
- return React.createElement(resolvedModule, otherProps)
43
- })
44
-
45
- DynamicModule.propTypes = {
46
- load: PropTypes.func.isRequired,
47
- module: PropTypes.string
1
+ import React, {useEffect, useState} from 'react'
2
+ import PropTypes from 'prop-types'
3
+ import {withErrorBoundary} from '../errors/error-boundary'
4
+
5
+ const loadedModules = new Map()
6
+
7
+ export const DynamicModule = withErrorBoundary(
8
+ /**
9
+ * Dynamically loadable module
10
+ * @param {function} load - Dynamic load function, e.g. ()=>import('./dynamic_module_import')
11
+ * @param {string} module - Module unique name for aching purpose
12
+ * @param {*} [otherProps]
13
+ * @constructor
14
+ */
15
+ function DynamicModule({load, module, ...otherProps}) {
16
+ const [error, setError] = useState(undefined)
17
+ const key = module || load
18
+
19
+ useEffect(() => {
20
+ if (loadedModules.get(key))
21
+ return //skip if module is already loaded
22
+ load()
23
+ .then(dynamicModule => {
24
+ //use default export for ES modules or top-level export for CJS
25
+ if (dynamicModule.__esModule) {
26
+ dynamicModule = dynamicModule.default
27
+ }
28
+ //add to cache
29
+ loadedModules.set(key, dynamicModule)
30
+ setError(null)
31
+ })
32
+ .catch(error => {
33
+ error.message = 'Failed to load module. ' + error.message
34
+ setError(error)
35
+ })
36
+ }, [module || load])
37
+ if (error)
38
+ throw error
39
+ const resolvedModule = loadedModules.get(key)
40
+ if (!resolvedModule)
41
+ return <div className="loader"/>
42
+ return React.createElement(resolvedModule, otherProps)
43
+ })
44
+
45
+ DynamicModule.propTypes = {
46
+ load: PropTypes.func.isRequired,
47
+ module: PropTypes.string
48
48
  }
package/package.json CHANGED
@@ -1,40 +1,41 @@
1
- {
2
- "name": "@stellar-expert/ui-framework",
3
- "version": "1.16.8",
4
- "description": "StellarExpert shared UI components library",
5
- "main": "index.js",
6
- "module": "./index.js",
7
- "sideEffects": [
8
- "*.scss"
9
- ],
10
- "keywords": [
11
- "StellarExpert",
12
- "UI"
13
- ],
14
- "author": "orbitlens <orbit@stellar.expert>",
15
- "license": "MIT",
16
- "peerDependencies": {
17
- "@stellar/stellar-base": "^14.0.0",
18
- "@stellar/stellar-sdk": "^14.0.0",
19
- "@stellar-expert/asset-descriptor": "^1.5.0",
20
- "@stellar-expert/claimable-balance-utils": "^1.4.1",
21
- "@stellar-expert/client-cache": "^1.1.0",
22
- "@stellar-expert/contract-wasm-interface-parser": "^3.2.0",
23
- "@stellar-expert/formatter": "^3.0.0",
24
- "@stellar-expert/navigation": "^1.1.0",
25
- "@stellar-expert/tx-meta-effects-parser": "^8.3.3",
26
- "classnames": ">=2",
27
- "prop-types": ">=15",
28
- "qrcode.react": "^4.2.0",
29
- "react": ">=17",
30
- "react-dom": ">=17",
31
- "react-fast-compare": ">=3",
32
- "throttle-debounce": ">=5.0.0"
33
- },
34
- "dependencies": {
35
- "highlight.js": "^11.8.0",
36
- "history": "^4.10.1",
37
- "react-copy-to-clipboard": "^5.1.0",
38
- "react-timeago": "^7.2.0"
39
- }
40
- }
1
+ {
2
+ "name": "@stellar-expert/ui-framework",
3
+ "version": "1.17.0",
4
+ "description": "StellarExpert shared UI components library",
5
+ "main": "index.js",
6
+ "module": "./index.js",
7
+ "types": "index.d.ts",
8
+ "sideEffects": [
9
+ "*.scss"
10
+ ],
11
+ "keywords": [
12
+ "StellarExpert",
13
+ "UI"
14
+ ],
15
+ "author": "orbitlens <orbit@stellar.expert>",
16
+ "license": "MIT",
17
+ "peerDependencies": {
18
+ "@stellar/stellar-base": "^14.0.0",
19
+ "@stellar/stellar-sdk": "^14.0.0",
20
+ "@stellar-expert/asset-descriptor": "^1.5.0",
21
+ "@stellar-expert/claimable-balance-utils": "^1.4.1",
22
+ "@stellar-expert/client-cache": "^1.1.0",
23
+ "@stellar-expert/contract-wasm-interface-parser": "^4.0.0",
24
+ "@stellar-expert/formatter": "^3.0.0",
25
+ "@stellar-expert/navigation": "^1.1.0",
26
+ "@stellar-expert/tx-meta-effects-parser": "^8.3.3",
27
+ "classnames": ">=2",
28
+ "prop-types": ">=15",
29
+ "qrcode.react": "^4.2.0",
30
+ "react": ">=17",
31
+ "react-dom": ">=17",
32
+ "react-fast-compare": ">=3",
33
+ "throttle-debounce": ">=5.0.0"
34
+ },
35
+ "dependencies": {
36
+ "highlight.js": "^11.8.0",
37
+ "history": "^4.10.1",
38
+ "react-copy-to-clipboard": "^5.1.0",
39
+ "react-timeago": "^7.2.0"
40
+ }
41
+ }