@promptbook/components 0.101.0-7 → 0.101.0-8
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.
- package/esm/index.es.js +135 -37
- package/esm/index.es.js.map +1 -1
- package/esm/typings/src/_packages/core.index.d.ts +2 -0
- package/esm/typings/src/_packages/types.index.d.ts +2 -0
- package/esm/typings/src/book-2.0/agent-source/AgentBasicInformation.d.ts +31 -0
- package/esm/typings/src/book-2.0/agent-source/parseParameters.d.ts +13 -0
- package/esm/typings/src/version.d.ts +1 -1
- package/package.json +1 -1
- package/umd/index.umd.js +135 -37
- package/umd/index.umd.js.map +1 -1
package/esm/index.es.js
CHANGED
|
@@ -19,7 +19,7 @@ const BOOK_LANGUAGE_VERSION = '1.0.0';
|
|
|
19
19
|
* @generated
|
|
20
20
|
* @see https://github.com/webgptorg/promptbook
|
|
21
21
|
*/
|
|
22
|
-
const PROMPTBOOK_ENGINE_VERSION = '0.101.0-
|
|
22
|
+
const PROMPTBOOK_ENGINE_VERSION = '0.101.0-8';
|
|
23
23
|
/**
|
|
24
24
|
* TODO: string_promptbook_version should be constrained to the all versions of Promptbook engine
|
|
25
25
|
* Note: [💞] Ignore a discrepancy between file name and entity name
|
|
@@ -2087,6 +2087,64 @@ function parseAgentSourceWithCommitments(agentSource) {
|
|
|
2087
2087
|
};
|
|
2088
2088
|
}
|
|
2089
2089
|
|
|
2090
|
+
/**
|
|
2091
|
+
* Parses parameters from text using both supported notations:
|
|
2092
|
+
* 1. @Parameter - single word parameter starting with @
|
|
2093
|
+
* 2. {parameterName} or {parameter with multiple words} or {parameterName: description text}
|
|
2094
|
+
*
|
|
2095
|
+
* Both notations represent the same syntax feature - parameters
|
|
2096
|
+
*
|
|
2097
|
+
* @param text - Text to extract parameters from
|
|
2098
|
+
* @returns Array of parsed parameters with unified representation
|
|
2099
|
+
* @public exported from `@promptbook/core`
|
|
2100
|
+
*/
|
|
2101
|
+
function parseParameters(text) {
|
|
2102
|
+
const parameters = [];
|
|
2103
|
+
// [🧠] Parameter syntax parsing - unified approach for two different notations of the same syntax feature
|
|
2104
|
+
// The Book language supports parameters in two different notations but they represent the same concept
|
|
2105
|
+
// Extract @Parameter notation (single word parameters starting with @)
|
|
2106
|
+
const atParameterRegex = /@[\w\u00C0-\u017F\u0100-\u024F\u1E00-\u1EFF]+/gim;
|
|
2107
|
+
text.replace(atParameterRegex, (match) => {
|
|
2108
|
+
const parameterName = match.slice(1); // Remove the @ symbol
|
|
2109
|
+
parameters.push({
|
|
2110
|
+
text: match,
|
|
2111
|
+
notation: 'at',
|
|
2112
|
+
name: parameterName,
|
|
2113
|
+
});
|
|
2114
|
+
return match;
|
|
2115
|
+
});
|
|
2116
|
+
// Extract {parameter} notation (parameters in braces)
|
|
2117
|
+
const braceParameterRegex = /\{([^}]+)\}/gim;
|
|
2118
|
+
text.replace(braceParameterRegex, (match, content) => {
|
|
2119
|
+
// Check if the parameter has a description (parameterName: description)
|
|
2120
|
+
const colonIndex = content.indexOf(':');
|
|
2121
|
+
if (colonIndex !== -1) {
|
|
2122
|
+
const name = content.substring(0, colonIndex).trim();
|
|
2123
|
+
const description = content.substring(colonIndex + 1).trim();
|
|
2124
|
+
parameters.push({
|
|
2125
|
+
text: match,
|
|
2126
|
+
notation: 'brace',
|
|
2127
|
+
name,
|
|
2128
|
+
description,
|
|
2129
|
+
});
|
|
2130
|
+
}
|
|
2131
|
+
else {
|
|
2132
|
+
// Simple parameter without description
|
|
2133
|
+
parameters.push({
|
|
2134
|
+
text: match,
|
|
2135
|
+
notation: 'brace',
|
|
2136
|
+
name: content.trim(),
|
|
2137
|
+
});
|
|
2138
|
+
}
|
|
2139
|
+
return match;
|
|
2140
|
+
});
|
|
2141
|
+
// Remove duplicates based on name (keep the first occurrence)
|
|
2142
|
+
const uniqueParameters = parameters.filter((param, index, array) => {
|
|
2143
|
+
return array.findIndex(p => p.name === param.name) === index;
|
|
2144
|
+
});
|
|
2145
|
+
return uniqueParameters;
|
|
2146
|
+
}
|
|
2147
|
+
|
|
2090
2148
|
/**
|
|
2091
2149
|
* Parses basic information from agent source
|
|
2092
2150
|
*
|
|
@@ -2113,10 +2171,14 @@ function parseAgentSource(agentSource) {
|
|
|
2113
2171
|
if (!profileImageUrl) {
|
|
2114
2172
|
profileImageUrl = generatePlaceholderAgentProfileImageUrl(parseResult.agentName || '!!');
|
|
2115
2173
|
}
|
|
2174
|
+
// Parse parameters using unified approach - both @Parameter and {parameter} notations
|
|
2175
|
+
// are treated as the same syntax feature with unified representation
|
|
2176
|
+
const parameters = parseParameters(agentSource);
|
|
2116
2177
|
return {
|
|
2117
2178
|
agentName: parseResult.agentName,
|
|
2118
2179
|
personaDescription,
|
|
2119
2180
|
profileImageUrl,
|
|
2181
|
+
parameters,
|
|
2120
2182
|
};
|
|
2121
2183
|
}
|
|
2122
2184
|
/**
|
|
@@ -3667,7 +3729,7 @@ parseInt(process.env.API_REQUEST_TIMEOUT || '90000');
|
|
|
3667
3729
|
* TODO: [🧠][🧜♂️] Maybe join remoteServerUrl and path into single value
|
|
3668
3730
|
*/
|
|
3669
3731
|
|
|
3670
|
-
var css_248z = ".BookEditor-module_BookEditor__s-0PU{height:450px;width:100%}.BookEditor-module_bookEditorContainer__wLMwM{height:100%;width:100%}.BookEditor-module_bookEditorContainer__wLMwM.BookEditor-module_isVerbose__VQ6iL{background-color:rgba(0,0,0,.05);outline:1px dotted rgba(0,0,0,.5)}.BookEditor-module_isVerbose__VQ6iL{outline:2px dotted #ff7526}.BookEditor-module_bookEditorWrapper__twppD{background-color:#fff;border:1px solid rgba(209,213,219,.8);border-radius:1rem;box-shadow:0 1px 2px 0 rgba(0,0,0,.05);height:100%;overflow:hidden;position:relative;transition:box-shadow .2s ease-in-out;width:100%}.BookEditor-module_isVerbose__VQ6iL .BookEditor-module_bookEditorWrapper__twppD{overflow:visible}.BookEditor-module_bookEditorWrapper__twppD:hover{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.BookEditor-module_bookEditorWrapper__twppD:focus-within{box-shadow:0 0 0 3px rgba(99,102,241,.4);outline:2px solid transparent;outline-offset:2px}.BookEditor-module_bookEditorWrapper__twppD.BookEditor-module_isBorderRadiusDisabled__h1I3v{border-radius:0}.BookEditor-module_bookEditorBackground__5O4wu,.BookEditor-module_bookEditorHighlight__vs37t{bottom:0;left:0;pointer-events:none;position:absolute;right:0;top:0}.BookEditor-module_bookEditorHighlight__vs37t{-ms-overflow-style:none;color:#111827;font-size:1.125rem;margin-bottom:50px;overflow:auto;overflow-wrap:break-word;padding-left:46px;padding-right:46px;padding-top:0;scrollbar-width:none;white-space:pre-wrap;z-index:10}.BookEditor-module_isVerbose__VQ6iL .BookEditor-module_bookEditorHighlight__vs37t{opacity:.5;outline:1px dotted rgba(255,0,0,.5)}.BookEditor-module_bookEditorHighlight__vs37t::-webkit-scrollbar{display:none}.BookEditor-module_bookEditorTextarea__mUURn{background-color:transparent;border:none;bottom:0;caret-color:#111827;color:transparent;font-size:1.125rem;left:0;outline:none;overflow-wrap:break-word;padding-left:46px;padding-right:46px;padding-top:18px;position:absolute;resize:none;right:0;top:0;white-space:pre-wrap}.BookEditor-module_isVerbose__VQ6iL .BookEditor-module_bookEditorTextarea__mUURn{color:rgba(255,255,0,.5);outline:1px dotted rgba(255,255,0,.5)}.BookEditor-module_bookEditorTextarea__mUURn::selection{background-color:rgba(99,102,241,.6)}.BookEditor-module_bookEditorSerif__QRS7g{font-family:ui-serif,Georgia,Cambria,Times New Roman,Times,serif}.BookEditor-module_bookEditorBar__haBDz{background-color:rgba(99,102,241,.1);border-top:1px solid rgba(209,213,219,.8);bottom:0;color:rgba(17,24,39,.6);font-size:.875rem;left:0;padding:.5rem 1rem;position:absolute;right:0}.BookEditor-module_bookEditorBar__haBDz a{color:unset;text-decoration:none}.BookEditor-module_bookEditorHighlight__vs37t .book-highlight-title{color:#30a8bd;text-decoration:underline}.BookEditor-module_bookEditorHighlight__vs37t .book-highlight-keyword{color:#30a8bd}.BookEditor-module_bookEditorHighlight__vs37t .book-highlight-at-parameter{color:#e67e22;font-weight:500}.BookEditor-module_bookEditorHighlight__vs37t .book-highlight-brace-parameter{color:#8e44ad;font-weight:500}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkJvb2tFZGl0b3IubW9kdWxlLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxQ0FDSSxZQUFhLENBQ2IsVUFDSixDQUVBLDhDQUVJLFdBQVksQ0FEWixVQUVKLENBRUEsaUZBRUksZ0NBQXFDLENBQ3JDLGlDQUVKLENBRUEsb0NBQ0ksMEJBQ0osQ0FFQSw0Q0FRSSxxQkFBdUIsQ0FEdkIscUNBQTBDLENBRDFDLGtCQUFtQixDQUduQixzQ0FBMkMsQ0FQM0MsV0FBWSxDQUdaLGVBQWdCLENBRGhCLGlCQUFrQixDQU1sQixxQ0FBdUMsQ0FUdkMsVUFVSixDQUNBLGdGQUVJLGdCQUVKLENBRUEsa0RBQ0ksdUVBQ0osQ0FFQSx5REFHSSx3Q0FBNkMsQ0FGN0MsNkJBQThCLENBQzlCLGtCQUVKLENBRUEsNEZBQ0ksZUFDSixDQVdBLDZGQUpJLFFBQVMsQ0FDVCxNQUFPLENBTFAsbUJBQW9CLENBQ3BCLGlCQUFrQixDQUVsQixPQUFRLENBRFIsS0E4QkosQ0F4QkEsOENBb0JJLHVCQUF3QixDQVR4QixhQUFzQixDQUN0QixrQkFBbUIsQ0FJbkIsa0JBQW1CLENBUm5CLGFBQWMsQ0FjZCx3QkFBeUIsQ0FSekIsaUJBQWtCLENBQ2xCLGtCQUFtQixDQUZuQixhQUFjLENBTWQsb0JBQXFCLENBSXJCLG9CQUFxQixDQU5yQixVQU9KLENBRUEsa0ZBRUksVUFBWSxDQUNaLG1DQUVKLENBRUEsaUVBQ0ksWUFDSixDQUVBLDZDQVdJLDRCQUE2QixDQU03QixXQUFZLENBWlosUUFBUyxDQUlULG1CQUE0QixDQUQ1QixpQkFBa0IsQ0FFbEIsa0JBQW1CLENBSm5CLE1BQU8sQ0FNUCxZQUFhLENBUWIsd0JBQXlCLENBTHpCLGlCQUFrQixDQUNsQixrQkFBbUIsQ0FGbkIsZ0JBQWlCLENBWmpCLGlCQUFrQixDQVdsQixXQUFZLENBVFosT0FBUSxDQURSLEtBQU0sQ0FnQk4sb0JBRUosQ0FFQSxpRkFFSSx3QkFBNkIsQ0FDN0IscUNBRUosQ0FFQSx3REFDSSxvQ0FDSixDQUVBLDBDQUNJLGdFQUNKLENBRUEsd0NBVUksb0NBQXlDLENBRHpDLHlDQUE4QyxDQVA5QyxRQUFTLENBS1QsdUJBQTRCLENBRDVCLGlCQUFtQixDQUhuQixNQUFPLENBS1Asa0JBQW9CLENBUHBCLGlCQUFrQixDQUdsQixPQU9KLENBRUEsMENBQ0ksV0FBWSxDQUNaLG9CQUNKLENBSUEsb0VBQ0ksYUFBYyxDQUNkLHlCQUNKLENBRUEsc0VBQ0ksYUFDSixDQUdBLDJFQUNJLGFBQWMsQ0FDZCxlQUNKLENBRUEsOEVBQ0ksYUFBYyxDQUNkLGVBQ0oiLCJmaWxlIjoiQm9va0VkaXRvci5tb2R1bGUuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLkJvb2tFZGl0b3Ige1xuICAgIGhlaWdodDogNDUwcHg7XG4gICAgd2lkdGg6IDEwMCU7XG59XG5cbi5ib29rRWRpdG9yQ29udGFpbmVyIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG59XG5cbi5ib29rRWRpdG9yQ29udGFpbmVyLmlzVmVyYm9zZSB7XG4gICAgLyoqL1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gICAgb3V0bGluZTogMXB4IGRvdHRlZCByZ2JhKDAsIDAsIDAsIDAuNSk7XG4gICAgLyoqL1xufVxuXG4uaXNWZXJib3NlIHtcbiAgICBvdXRsaW5lOiAycHggZG90dGVkIHJnYigyNTUgMTE3IDM4KTtcbn1cblxuLmJvb2tFZGl0b3JXcmFwcGVyIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG5cbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBib3JkZXItcmFkaXVzOiAxcmVtO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjA5LCAyMTMsIDIxOSwgMC44KTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICBib3gtc2hhZG93OiAwIDFweCAycHggMCByZ2JhKDAsIDAsIDAsIDAuMDUpO1xuICAgIHRyYW5zaXRpb246IGJveC1zaGFkb3cgMC4ycyBlYXNlLWluLW91dDtcbn1cbi5pc1ZlcmJvc2UgLmJvb2tFZGl0b3JXcmFwcGVyIHtcbiAgICAvKiovXG4gICAgb3ZlcmZsb3c6IHZpc2libGU7XG4gICAgLyoqL1xufVxuXG4uYm9va0VkaXRvcldyYXBwZXI6aG92ZXIge1xuICAgIGJveC1zaGFkb3c6IDAgNHB4IDZweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4xKSwgMCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjA2KTtcbn1cblxuLmJvb2tFZGl0b3JXcmFwcGVyOmZvY3VzLXdpdGhpbiB7XG4gICAgb3V0bGluZTogMnB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgIG91dGxpbmUtb2Zmc2V0OiAycHg7XG4gICAgYm94LXNoYWRvdzogMCAwIDAgM3B4IHJnYmEoOTksIDEwMiwgMjQxLCAwLjQpO1xufVxuXG4uYm9va0VkaXRvcldyYXBwZXIuaXNCb3JkZXJSYWRpdXNEaXNhYmxlZCB7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuLmJvb2tFZGl0b3JCYWNrZ3JvdW5kIHtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBsZWZ0OiAwO1xufVxuXG4uYm9va0VkaXRvckhpZ2hsaWdodCB7XG4gICAgLyogVE9ETzogRFJZICovXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICByaWdodDogMDtcbiAgICBib3R0b206IDA7XG4gICAgbGVmdDogMDtcblxuICAgIG92ZXJmbG93OiBhdXRvO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuXG4gICAgY29sb3I6IHJnYigxNywgMjQsIDM5KTtcbiAgICBmb250LXNpemU6IDEuMTI1cmVtOyAvKiBUT0RPOiBEUlkgKi9cbiAgICBwYWRkaW5nLXRvcDogMDtcbiAgICBwYWRkaW5nLWxlZnQ6IDQ2cHg7XG4gICAgcGFkZGluZy1yaWdodDogNDZweDtcbiAgICBtYXJnaW4tYm90dG9tOiA1MHB4O1xuICAgIHotaW5kZXg6IDEwO1xuXG4gICAgc2Nyb2xsYmFyLXdpZHRoOiBub25lO1xuICAgIC1tcy1vdmVyZmxvdy1zdHlsZTogbm9uZTtcblxuICAgIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7XG4gICAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xufVxuXG4uaXNWZXJib3NlIC5ib29rRWRpdG9ySGlnaGxpZ2h0IHtcbiAgICAvKiovXG4gICAgb3BhY2l0eTogMC41O1xuICAgIG91dGxpbmU6IDFweCBkb3R0ZWQgcmdiYSgyNTUsIDAsIDAsIDAuNSk7XG4gICAgLyoqL1xufVxuXG4uYm9va0VkaXRvckhpZ2hsaWdodDo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5ib29rRWRpdG9yVGV4dGFyZWEge1xuICAgIC8qIFRPRE86IERSWSAqL1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIGxlZnQ6IDA7XG5cbiAgICBjb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgY2FyZXQtY29sb3I6IHJnYigxNywgMjQsIDM5KTtcbiAgICBmb250LXNpemU6IDEuMTI1cmVtOyAvKiBUT0RPOiBEUlkgKi9cbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBvdXRsaW5lOiBub25lO1xuICAgIHJlc2l6ZTogbm9uZTtcbiAgICBwYWRkaW5nLXRvcDogMThweDtcbiAgICBwYWRkaW5nLWxlZnQ6IDQ2cHg7XG4gICAgcGFkZGluZy1yaWdodDogNDZweDtcbiAgICBib3JkZXI6IG5vbmU7XG5cbiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XG4gICAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDtcbn1cblxuLmlzVmVyYm9zZSAuYm9va0VkaXRvclRleHRhcmVhIHtcbiAgICAvKiovXG4gICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDAsIDAuNSk7XG4gICAgb3V0bGluZTogMXB4IGRvdHRlZCByZ2JhKDI1NSwgMjU1LCAwLCAwLjUpO1xuICAgIC8qKi9cbn1cblxuLmJvb2tFZGl0b3JUZXh0YXJlYTo6c2VsZWN0aW9uIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDk5LCAxMDIsIDI0MSwgMC42KTtcbn1cblxuLmJvb2tFZGl0b3JTZXJpZiB7XG4gICAgZm9udC1mYW1pbHk6IHVpLXNlcmlmLCBHZW9yZ2lhLCBDYW1icmlhLCAnVGltZXMgTmV3IFJvbWFuJywgVGltZXMsIHNlcmlmO1xufVxuXG4uYm9va0VkaXRvckJhciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJvdHRvbTogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHJpZ2h0OiAwO1xuXG4gICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICBjb2xvcjogcmdiYSgxNywgMjQsIDM5LCAwLjYpO1xuICAgIHBhZGRpbmc6IDAuNXJlbSAxcmVtO1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDIwOSwgMjEzLCAyMTksIDAuOCk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSg5OSwgMTAyLCAyNDEsIDAuMSk7XG59XG5cbi5ib29rRWRpdG9yQmFyIGEge1xuICAgIGNvbG9yOiB1bnNldDtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbi8qIC0tLSBCb29rIHN5bnRheCBoaWdobGlnaHRpbmcgKi9cblxuLmJvb2tFZGl0b3JIaWdobGlnaHQgOmdsb2JhbCguYm9vay1oaWdobGlnaHQtdGl0bGUpIHtcbiAgICBjb2xvcjogIzMwYThiZDtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cblxuLmJvb2tFZGl0b3JIaWdobGlnaHQgOmdsb2JhbCguYm9vay1oaWdobGlnaHQta2V5d29yZCkge1xuICAgIGNvbG9yOiAjMzBhOGJkO1xufVxuXG4vKiBb8J+noF0gUGFyYW1ldGVyIHN5bnRheCBoaWdobGlnaHRpbmcgLSBkaWZmZXJlbnQgY29sb3JzIGZvciBkaWZmZXJlbnQgcGFyYW1ldGVyIHR5cGVzICovXG4uYm9va0VkaXRvckhpZ2hsaWdodCA6Z2xvYmFsKC5ib29rLWhpZ2hsaWdodC1hdC1wYXJhbWV0ZXIpIHtcbiAgICBjb2xvcjogI2U2N2UyMjsgLyogT3JhbmdlIGNvbG9yIGZvciBAUGFyYW1ldGVyIHN5bnRheCAqL1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5cbi5ib29rRWRpdG9ySGlnaGxpZ2h0IDpnbG9iYWwoLmJvb2staGlnaGxpZ2h0LWJyYWNlLXBhcmFtZXRlcikge1xuICAgIGNvbG9yOiAjOGU0NGFkOyAvKiBQdXJwbGUgY29sb3IgZm9yIHtwYXJhbWV0ZXJ9IHN5bnRheCAqL1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG4iXX0= */";
|
|
3732
|
+
var css_248z = ".BookEditor-module_BookEditor__s-0PU{height:450px;width:100%}.BookEditor-module_bookEditorContainer__wLMwM{height:100%;width:100%}.BookEditor-module_bookEditorContainer__wLMwM.BookEditor-module_isVerbose__VQ6iL{background-color:rgba(0,0,0,.05);outline:1px dotted rgba(0,0,0,.5)}.BookEditor-module_isVerbose__VQ6iL{outline:2px dotted #ff7526}.BookEditor-module_bookEditorWrapper__twppD{background-color:#fff;border:1px solid rgba(209,213,219,.8);border-radius:1rem;box-shadow:0 1px 2px 0 rgba(0,0,0,.05);height:100%;overflow:hidden;position:relative;transition:box-shadow .2s ease-in-out;width:100%}.BookEditor-module_isVerbose__VQ6iL .BookEditor-module_bookEditorWrapper__twppD{overflow:visible}.BookEditor-module_bookEditorWrapper__twppD:hover{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.BookEditor-module_bookEditorWrapper__twppD:focus-within{box-shadow:0 0 0 3px rgba(99,102,241,.4);outline:2px solid transparent;outline-offset:2px}.BookEditor-module_bookEditorWrapper__twppD.BookEditor-module_isBorderRadiusDisabled__h1I3v{border-radius:0}.BookEditor-module_bookEditorBackground__5O4wu,.BookEditor-module_bookEditorHighlight__vs37t{bottom:0;left:0;pointer-events:none;position:absolute;right:0;top:0}.BookEditor-module_bookEditorHighlight__vs37t{-ms-overflow-style:none;color:#111827;font-size:1.125rem;margin-bottom:50px;overflow:auto;overflow-wrap:break-word;padding-left:46px;padding-right:46px;padding-top:0;scrollbar-width:none;white-space:pre-wrap;z-index:10}.BookEditor-module_isVerbose__VQ6iL .BookEditor-module_bookEditorHighlight__vs37t{opacity:.5;outline:1px dotted rgba(255,0,0,.5)}.BookEditor-module_bookEditorHighlight__vs37t::-webkit-scrollbar{display:none}.BookEditor-module_bookEditorTextarea__mUURn{background-color:transparent;border:none;bottom:0;caret-color:#111827;color:transparent;font-size:1.125rem;left:0;outline:none;overflow-wrap:break-word;padding-left:46px;padding-right:46px;padding-top:18px;position:absolute;resize:none;right:0;top:0;white-space:pre-wrap}.BookEditor-module_isVerbose__VQ6iL .BookEditor-module_bookEditorTextarea__mUURn{color:rgba(255,255,0,.5);outline:1px dotted rgba(255,255,0,.5)}.BookEditor-module_bookEditorTextarea__mUURn::selection{background-color:rgba(99,102,241,.6)}.BookEditor-module_bookEditorSerif__QRS7g{font-family:ui-serif,Georgia,Cambria,Times New Roman,Times,serif}.BookEditor-module_bookEditorBar__haBDz{background-color:rgba(99,102,241,.1);border-top:1px solid rgba(209,213,219,.8);bottom:0;color:rgba(17,24,39,.6);font-size:.875rem;left:0;padding:.5rem 1rem;position:absolute;right:0}.BookEditor-module_bookEditorBar__haBDz a{color:unset;text-decoration:none}.BookEditor-module_bookEditorHighlight__vs37t .book-highlight-title{color:#30a8bd;text-decoration:underline}.BookEditor-module_bookEditorHighlight__vs37t .book-highlight-keyword{color:#30a8bd}.BookEditor-module_bookEditorHighlight__vs37t .book-highlight-at-parameter,.BookEditor-module_bookEditorHighlight__vs37t .book-highlight-brace-parameter,.BookEditor-module_bookEditorHighlight__vs37t .book-highlight-parameter{color:#8e44ad;font-weight:500}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkJvb2tFZGl0b3IubW9kdWxlLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxQ0FDSSxZQUFhLENBQ2IsVUFDSixDQUVBLDhDQUVJLFdBQVksQ0FEWixVQUVKLENBRUEsaUZBRUksZ0NBQXFDLENBQ3JDLGlDQUVKLENBRUEsb0NBQ0ksMEJBQ0osQ0FFQSw0Q0FRSSxxQkFBdUIsQ0FEdkIscUNBQTBDLENBRDFDLGtCQUFtQixDQUduQixzQ0FBMkMsQ0FQM0MsV0FBWSxDQUdaLGVBQWdCLENBRGhCLGlCQUFrQixDQU1sQixxQ0FBdUMsQ0FUdkMsVUFVSixDQUNBLGdGQUVJLGdCQUVKLENBRUEsa0RBQ0ksdUVBQ0osQ0FFQSx5REFHSSx3Q0FBNkMsQ0FGN0MsNkJBQThCLENBQzlCLGtCQUVKLENBRUEsNEZBQ0ksZUFDSixDQVdBLDZGQUpJLFFBQVMsQ0FDVCxNQUFPLENBTFAsbUJBQW9CLENBQ3BCLGlCQUFrQixDQUVsQixPQUFRLENBRFIsS0E4QkosQ0F4QkEsOENBb0JJLHVCQUF3QixDQVR4QixhQUFzQixDQUN0QixrQkFBbUIsQ0FJbkIsa0JBQW1CLENBUm5CLGFBQWMsQ0FjZCx3QkFBeUIsQ0FSekIsaUJBQWtCLENBQ2xCLGtCQUFtQixDQUZuQixhQUFjLENBTWQsb0JBQXFCLENBSXJCLG9CQUFxQixDQU5yQixVQU9KLENBRUEsa0ZBRUksVUFBWSxDQUNaLG1DQUVKLENBRUEsaUVBQ0ksWUFDSixDQUVBLDZDQVdJLDRCQUE2QixDQU03QixXQUFZLENBWlosUUFBUyxDQUlULG1CQUE0QixDQUQ1QixpQkFBa0IsQ0FFbEIsa0JBQW1CLENBSm5CLE1BQU8sQ0FNUCxZQUFhLENBUWIsd0JBQXlCLENBTHpCLGlCQUFrQixDQUNsQixrQkFBbUIsQ0FGbkIsZ0JBQWlCLENBWmpCLGlCQUFrQixDQVdsQixXQUFZLENBVFosT0FBUSxDQURSLEtBQU0sQ0FnQk4sb0JBRUosQ0FFQSxpRkFFSSx3QkFBNkIsQ0FDN0IscUNBRUosQ0FFQSx3REFDSSxvQ0FDSixDQUVBLDBDQUNJLGdFQUNKLENBRUEsd0NBVUksb0NBQXlDLENBRHpDLHlDQUE4QyxDQVA5QyxRQUFTLENBS1QsdUJBQTRCLENBRDVCLGlCQUFtQixDQUhuQixNQUFPLENBS1Asa0JBQW9CLENBUHBCLGlCQUFrQixDQUdsQixPQU9KLENBRUEsMENBQ0ksV0FBWSxDQUNaLG9CQUNKLENBSUEsb0VBQ0ksYUFBYyxDQUNkLHlCQUNKLENBRUEsc0VBQ0ksYUFDSixDQW1CQSxpT0FDSSxhQUFjLENBQ2QsZUFDSiIsImZpbGUiOiJCb29rRWRpdG9yLm1vZHVsZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuQm9va0VkaXRvciB7XG4gICAgaGVpZ2h0OiA0NTBweDtcbiAgICB3aWR0aDogMTAwJTtcbn1cblxuLmJvb2tFZGl0b3JDb250YWluZXIge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbn1cblxuLmJvb2tFZGl0b3JDb250YWluZXIuaXNWZXJib3NlIHtcbiAgICAvKiovXG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgICBvdXRsaW5lOiAxcHggZG90dGVkIHJnYmEoMCwgMCwgMCwgMC41KTtcbiAgICAvKiovXG59XG5cbi5pc1ZlcmJvc2Uge1xuICAgIG91dGxpbmU6IDJweCBkb3R0ZWQgcmdiKDI1NSAxMTcgMzgpO1xufVxuXG4uYm9va0VkaXRvcldyYXBwZXIge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcblxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGJvcmRlci1yYWRpdXM6IDFyZW07XG4gICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyMDksIDIxMywgMjE5LCAwLjgpO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgIGJveC1zaGFkb3c6IDAgMXB4IDJweCAwIHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjJzIGVhc2UtaW4tb3V0O1xufVxuLmlzVmVyYm9zZSAuYm9va0VkaXRvcldyYXBwZXIge1xuICAgIC8qKi9cbiAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgICAvKiovXG59XG5cbi5ib29rRWRpdG9yV3JhcHBlcjpob3ZlciB7XG4gICAgYm94LXNoYWRvdzogMCA0cHggNnB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMDYpO1xufVxuXG4uYm9va0VkaXRvcldyYXBwZXI6Zm9jdXMtd2l0aGluIHtcbiAgICBvdXRsaW5lOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgb3V0bGluZS1vZmZzZXQ6IDJweDtcbiAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggcmdiYSg5OSwgMTAyLCAyNDEsIDAuNCk7XG59XG5cbi5ib29rRWRpdG9yV3JhcHBlci5pc0JvcmRlclJhZGl1c0Rpc2FibGVkIHtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG4uYm9va0VkaXRvckJhY2tncm91bmQge1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIGxlZnQ6IDA7XG59XG5cbi5ib29rRWRpdG9ySGlnaGxpZ2h0IHtcbiAgICAvKiBUT0RPOiBEUlkgKi9cbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBsZWZ0OiAwO1xuXG4gICAgb3ZlcmZsb3c6IGF1dG87XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG5cbiAgICBjb2xvcjogcmdiKDE3LCAyNCwgMzkpO1xuICAgIGZvbnQtc2l6ZTogMS4xMjVyZW07IC8qIFRPRE86IERSWSAqL1xuICAgIHBhZGRpbmctdG9wOiAwO1xuICAgIHBhZGRpbmctbGVmdDogNDZweDtcbiAgICBwYWRkaW5nLXJpZ2h0OiA0NnB4O1xuICAgIG1hcmdpbi1ib3R0b206IDUwcHg7XG4gICAgei1pbmRleDogMTA7XG5cbiAgICBzY3JvbGxiYXItd2lkdGg6IG5vbmU7XG4gICAgLW1zLW92ZXJmbG93LXN0eWxlOiBub25lO1xuXG4gICAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDtcbiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XG59XG5cbi5pc1ZlcmJvc2UgLmJvb2tFZGl0b3JIaWdobGlnaHQge1xuICAgIC8qKi9cbiAgICBvcGFjaXR5OiAwLjU7XG4gICAgb3V0bGluZTogMXB4IGRvdHRlZCByZ2JhKDI1NSwgMCwgMCwgMC41KTtcbiAgICAvKiovXG59XG5cbi5ib29rRWRpdG9ySGlnaGxpZ2h0Ojotd2Via2l0LXNjcm9sbGJhciB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuLmJvb2tFZGl0b3JUZXh0YXJlYSB7XG4gICAgLyogVE9ETzogRFJZICovXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICByaWdodDogMDtcbiAgICBib3R0b206IDA7XG4gICAgbGVmdDogMDtcblxuICAgIGNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBjYXJldC1jb2xvcjogcmdiKDE3LCAyNCwgMzkpO1xuICAgIGZvbnQtc2l6ZTogMS4xMjVyZW07IC8qIFRPRE86IERSWSAqL1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIG91dGxpbmU6IG5vbmU7XG4gICAgcmVzaXplOiBub25lO1xuICAgIHBhZGRpbmctdG9wOiAxOHB4O1xuICAgIHBhZGRpbmctbGVmdDogNDZweDtcbiAgICBwYWRkaW5nLXJpZ2h0OiA0NnB4O1xuICAgIGJvcmRlcjogbm9uZTtcblxuICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcbiAgICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkO1xufVxuXG4uaXNWZXJib3NlIC5ib29rRWRpdG9yVGV4dGFyZWEge1xuICAgIC8qKi9cbiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMCwgMC41KTtcbiAgICBvdXRsaW5lOiAxcHggZG90dGVkIHJnYmEoMjU1LCAyNTUsIDAsIDAuNSk7XG4gICAgLyoqL1xufVxuXG4uYm9va0VkaXRvclRleHRhcmVhOjpzZWxlY3Rpb24ge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoOTksIDEwMiwgMjQxLCAwLjYpO1xufVxuXG4uYm9va0VkaXRvclNlcmlmIHtcbiAgICBmb250LWZhbWlseTogdWktc2VyaWYsIEdlb3JnaWEsIENhbWJyaWEsICdUaW1lcyBOZXcgUm9tYW4nLCBUaW1lcywgc2VyaWY7XG59XG5cbi5ib29rRWRpdG9yQmFyIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYm90dG9tOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG5cbiAgICBmb250LXNpemU6IDAuODc1cmVtO1xuICAgIGNvbG9yOiByZ2JhKDE3LCAyNCwgMzksIDAuNik7XG4gICAgcGFkZGluZzogMC41cmVtIDFyZW07XG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMjA5LCAyMTMsIDIxOSwgMC44KTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDk5LCAxMDIsIDI0MSwgMC4xKTtcbn1cblxuLmJvb2tFZGl0b3JCYXIgYSB7XG4gICAgY29sb3I6IHVuc2V0O1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLyogLS0tIEJvb2sgc3ludGF4IGhpZ2hsaWdodGluZyAqL1xuXG4uYm9va0VkaXRvckhpZ2hsaWdodCA6Z2xvYmFsKC5ib29rLWhpZ2hsaWdodC10aXRsZSkge1xuICAgIGNvbG9yOiAjMzBhOGJkO1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4uYm9va0VkaXRvckhpZ2hsaWdodCA6Z2xvYmFsKC5ib29rLWhpZ2hsaWdodC1rZXl3b3JkKSB7XG4gICAgY29sb3I6ICMzMGE4YmQ7XG59XG5cbi8qIFvwn6egXSBQYXJhbWV0ZXIgc3ludGF4IGhpZ2hsaWdodGluZyAtIHVuaWZpZWQgY29sb3IgZm9yIGJvdGggcGFyYW1ldGVyIG5vdGF0aW9uc1xuICogVGhlIEJvb2sgbGFuZ3VhZ2Ugc3VwcG9ydHMgdHdvIGRpZmZlcmVudCBub3RhdGlvbnMgZm9yIHRoZSBzYW1lIHN5bnRheCBmZWF0dXJlIC0gcGFyYW1ldGVyczpcbiAqIDEuIEBQYXJhbWV0ZXIgLSBzaW5nbGUgd29yZCBwYXJhbWV0ZXIgc3RhcnRpbmcgd2l0aCBAXG4gKiAyLiB7cGFyYW1ldGVyTmFtZX0gb3Ige3BhcmFtZXRlciB3aXRoIG11bHRpcGxlIHdvcmRzfSBvciB7cGFyYW1ldGVyTmFtZTogZGVzY3JpcHRpb24gdGV4dH1cbiAqIEJvdGggbm90YXRpb25zIHJlcHJlc2VudCB0aGUgc2FtZSBzZW1hbnRpYyBjb25jZXB0IGFuZCBhcmUgaGlnaGxpZ2h0ZWQgd2l0aCB0aGUgc2FtZSBwdXJwbGUgY29sb3IuXG4gKi9cbi5ib29rRWRpdG9ySGlnaGxpZ2h0IDpnbG9iYWwoLmJvb2staGlnaGxpZ2h0LXBhcmFtZXRlcikge1xuICAgIGNvbG9yOiAjOGU0NGFkOyAvKiBQdXJwbGUgY29sb3IgZm9yIGFsbCBwYXJhbWV0ZXIgc3ludGF4ZXMgKi9cbiAgICBmb250LXdlaWdodDogNTAwO1xufVxuXG4vKiBMZWdhY3kgY2xhc3NlcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAtIGJvdGggdXNlIHRoZSBzYW1lIHB1cnBsZSBjb2xvciBub3cgKi9cbi5ib29rRWRpdG9ySGlnaGxpZ2h0IDpnbG9iYWwoLmJvb2staGlnaGxpZ2h0LWF0LXBhcmFtZXRlcikge1xuICAgIGNvbG9yOiAjOGU0NGFkOyAvKiBQdXJwbGUgY29sb3IgKHVuaWZpZWQgd2l0aCBicmFjZSBwYXJhbWV0ZXJzKSAqL1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5cbi5ib29rRWRpdG9ySGlnaGxpZ2h0IDpnbG9iYWwoLmJvb2staGlnaGxpZ2h0LWJyYWNlLXBhcmFtZXRlcikge1xuICAgIGNvbG9yOiAjOGU0NGFkOyAvKiBQdXJwbGUgY29sb3IgKHNhbWUgYXMgYXQgcGFyYW1ldGVycykgKi9cbiAgICBmb250LXdlaWdodDogNTAwO1xufVxuIl19 */";
|
|
3671
3733
|
var styles = {"BookEditor":"BookEditor-module_BookEditor__s-0PU","bookEditorContainer":"BookEditor-module_bookEditorContainer__wLMwM","isVerbose":"BookEditor-module_isVerbose__VQ6iL","bookEditorWrapper":"BookEditor-module_bookEditorWrapper__twppD","isBorderRadiusDisabled":"BookEditor-module_isBorderRadiusDisabled__h1I3v","bookEditorBackground":"BookEditor-module_bookEditorBackground__5O4wu","bookEditorHighlight":"BookEditor-module_bookEditorHighlight__vs37t","bookEditorTextarea":"BookEditor-module_bookEditorTextarea__mUURn","bookEditorSerif":"BookEditor-module_bookEditorSerif__QRS7g","bookEditorBar":"BookEditor-module_bookEditorBar__haBDz"};
|
|
3672
3734
|
styleInject(css_248z);
|
|
3673
3735
|
|
|
@@ -3982,13 +4044,24 @@ function BookEditorInner(props) {
|
|
|
3982
4044
|
return new RegExp(pattern, 'gmi');
|
|
3983
4045
|
}, []);
|
|
3984
4046
|
const metaRegex = useMemo(() => {
|
|
3985
|
-
// Pattern to match META followed by one
|
|
3986
|
-
// This will match: META IMAGE, META LINK, META TITLE, META DESCRIPTION, META
|
|
3987
|
-
|
|
4047
|
+
// Pattern to match META followed by exactly one uppercase word (DRY principle - single pattern for all META commitments)
|
|
4048
|
+
// This will match: META IMAGE, META LINK, META TITLE, META DESCRIPTION, META FOO, etc.
|
|
4049
|
+
// But NOT multiple words like "META IMAGE SOMETHING" - only "META IMAGE" part will be highlighted
|
|
4050
|
+
return /\bMETA\s+[A-Z]+\b/gim;
|
|
3988
4051
|
}, []);
|
|
3989
|
-
// [🧠] Parameter syntax highlighting - two
|
|
3990
|
-
//
|
|
3991
|
-
//
|
|
4052
|
+
// [🧠] Parameter syntax highlighting - unified approach for two different notations of the same syntax feature
|
|
4053
|
+
//
|
|
4054
|
+
// IMPORTANT PRINCIPLE: The Book language supports parameters as a single syntax feature
|
|
4055
|
+
// expressed through two different notations:
|
|
4056
|
+
// 1. @Parameter (single word parameters starting with @) - e.g., @name, @ěščřžý
|
|
4057
|
+
// 2. {parameterName} (parameters in braces) - e.g., {name}, {user name}, {name: description}
|
|
4058
|
+
//
|
|
4059
|
+
// Both notations represent the same semantic concept - parameters - and should be:
|
|
4060
|
+
// - Highlighted with the same color (purple)
|
|
4061
|
+
// - Parsed using the same logic
|
|
4062
|
+
// - Treated identically in the syntax processing
|
|
4063
|
+
//
|
|
4064
|
+
// This follows the DRY principle: don't repeat yourself for the same syntax feature.
|
|
3992
4065
|
const atParameterRegex = useMemo(() => {
|
|
3993
4066
|
// Match @followed by word characters (letters, numbers, underscore) and unicode letters (for @ěščřžý)
|
|
3994
4067
|
return /@[\w\u00C0-\u017F\u0100-\u024F\u1E00-\u1EFF]+/gim;
|
|
@@ -3997,6 +4070,43 @@ function BookEditorInner(props) {
|
|
|
3997
4070
|
// Match {parameter} or {parameter: description} - content inside braces
|
|
3998
4071
|
return /\{[^}]+\}/gim;
|
|
3999
4072
|
}, []);
|
|
4073
|
+
/**
|
|
4074
|
+
* Unified parameter extraction function that handles both parameter notations
|
|
4075
|
+
*
|
|
4076
|
+
* This function embodies the principle that @Parameter and {parameter} are
|
|
4077
|
+
* two different notations for the same syntax feature - parameters.
|
|
4078
|
+
*
|
|
4079
|
+
* @param text - Text to extract parameters from
|
|
4080
|
+
* @returns Array of parameter ranges with unified type
|
|
4081
|
+
*/
|
|
4082
|
+
const extractUnifiedParameters = useCallback((text) => {
|
|
4083
|
+
const parameters = [];
|
|
4084
|
+
// Extract @Parameter notation (first notation)
|
|
4085
|
+
text.replace(atParameterRegex, (match, ...args) => {
|
|
4086
|
+
const index = args[args.length - 2];
|
|
4087
|
+
parameters.push({
|
|
4088
|
+
start: index,
|
|
4089
|
+
end: index + match.length,
|
|
4090
|
+
type: 'parameter',
|
|
4091
|
+
notation: 'at',
|
|
4092
|
+
text: match,
|
|
4093
|
+
});
|
|
4094
|
+
return match;
|
|
4095
|
+
});
|
|
4096
|
+
// Extract {parameter} notation (second notation)
|
|
4097
|
+
text.replace(braceParameterRegex, (match, ...args) => {
|
|
4098
|
+
const index = args[args.length - 2];
|
|
4099
|
+
parameters.push({
|
|
4100
|
+
start: index,
|
|
4101
|
+
end: index + match.length,
|
|
4102
|
+
type: 'parameter',
|
|
4103
|
+
notation: 'brace',
|
|
4104
|
+
text: match,
|
|
4105
|
+
});
|
|
4106
|
+
return match;
|
|
4107
|
+
});
|
|
4108
|
+
return parameters.sort((a, b) => a.start - b.start);
|
|
4109
|
+
}, [atParameterRegex, braceParameterRegex]);
|
|
4000
4110
|
const highlightedHtml = useMemo(() => {
|
|
4001
4111
|
const text = value !== null && value !== void 0 ? value : '';
|
|
4002
4112
|
let lastIndex = 0;
|
|
@@ -4021,31 +4131,21 @@ function BookEditorInner(props) {
|
|
|
4021
4131
|
}
|
|
4022
4132
|
return match;
|
|
4023
4133
|
});
|
|
4024
|
-
// Handle
|
|
4025
|
-
|
|
4026
|
-
|
|
4027
|
-
|
|
4028
|
-
// Check if this
|
|
4029
|
-
const overlaps = processedRanges.some((range) => (
|
|
4030
|
-
(
|
|
4031
|
-
(
|
|
4134
|
+
// Handle parameters using the unified extraction function - both @Parameter and {parameter} notations
|
|
4135
|
+
// are treated as the same syntax feature with unified highlighting
|
|
4136
|
+
const unifiedParameters = extractUnifiedParameters(text);
|
|
4137
|
+
unifiedParameters.forEach((param) => {
|
|
4138
|
+
// Check if this parameter overlaps with any existing range
|
|
4139
|
+
const overlaps = processedRanges.some((range) => (param.start >= range.start && param.start < range.end) ||
|
|
4140
|
+
(param.end > range.start && param.end <= range.end) ||
|
|
4141
|
+
(param.start < range.start && param.end > range.end));
|
|
4032
4142
|
if (!overlaps) {
|
|
4033
|
-
processedRanges.push({
|
|
4034
|
-
|
|
4035
|
-
|
|
4036
|
-
|
|
4037
|
-
|
|
4038
|
-
text.replace(braceParameterRegex, (match, ...args) => {
|
|
4039
|
-
const index = args[args.length - 2];
|
|
4040
|
-
const matchEnd = index + match.length;
|
|
4041
|
-
// Check if this match overlaps with any existing range
|
|
4042
|
-
const overlaps = processedRanges.some((range) => (index >= range.start && index < range.end) ||
|
|
4043
|
-
(matchEnd > range.start && matchEnd <= range.end) ||
|
|
4044
|
-
(index < range.start && matchEnd > range.end));
|
|
4045
|
-
if (!overlaps) {
|
|
4046
|
-
processedRanges.push({ start: index, end: matchEnd, type: 'brace-parameter' });
|
|
4143
|
+
processedRanges.push({
|
|
4144
|
+
start: param.start,
|
|
4145
|
+
end: param.end,
|
|
4146
|
+
type: 'parameter'
|
|
4147
|
+
});
|
|
4047
4148
|
}
|
|
4048
|
-
return match;
|
|
4049
4149
|
});
|
|
4050
4150
|
// Sort ranges by start position
|
|
4051
4151
|
processedRanges.sort((a, b) => a.start - b.start);
|
|
@@ -4060,11 +4160,9 @@ function BookEditorInner(props) {
|
|
|
4060
4160
|
case 'keyword':
|
|
4061
4161
|
cssClass = 'book-highlight-keyword';
|
|
4062
4162
|
break;
|
|
4063
|
-
case '
|
|
4064
|
-
|
|
4065
|
-
|
|
4066
|
-
case 'brace-parameter':
|
|
4067
|
-
cssClass = 'book-highlight-brace-parameter';
|
|
4163
|
+
case 'parameter':
|
|
4164
|
+
// Use the unified parameter class, but maintain backward compatibility
|
|
4165
|
+
cssClass = 'book-highlight-parameter';
|
|
4068
4166
|
break;
|
|
4069
4167
|
default:
|
|
4070
4168
|
cssClass = 'book-highlight-keyword';
|
|
@@ -4080,7 +4178,7 @@ function BookEditorInner(props) {
|
|
|
4080
4178
|
lines[0] = `<span class="book-highlight-title">${lines[0]}</span>`;
|
|
4081
4179
|
}
|
|
4082
4180
|
return lines.join('\n');
|
|
4083
|
-
}, [value, typeRegex, metaRegex,
|
|
4181
|
+
}, [value, typeRegex, metaRegex, extractUnifiedParameters]);
|
|
4084
4182
|
return (jsx("div", { className: classNames(styles.bookEditorContainer, isVerbose && styles.isVerbose, className), children: jsxs("div", { className: classNames(styles.bookEditorWrapper, effectiveFontClassName, isBorderRadiusDisabled && styles.isBorderRadiusDisabled), children: [jsx("div", { "aria-hidden": true, className: styles.bookEditorBackground, style: { backgroundImage: 'none' } }), jsx("pre", { ref: highlightRef, "aria-hidden": true, className: `${styles.bookEditorHighlight} ${effectiveFontClassName}`, style: {
|
|
4085
4183
|
lineHeight: `${lineHeight}px`,
|
|
4086
4184
|
backgroundImage: `linear-gradient(90deg, transparent 30px, rgba(59,130,246,0.3) 30px, rgba(59,130,246,0.3) 31px, transparent 31px), repeating-linear-gradient(0deg, transparent, transparent calc(${lineHeight}px - 1px), rgba(0,0,0,0.06) ${lineHeight}px)`,
|