diff options
| author | sharkiecodes <lanyi_stroud@brown.edu> | 2025-05-12 00:43:44 -0400 |
|---|---|---|
| committer | sharkiecodes <lanyi_stroud@brown.edu> | 2025-05-12 00:43:44 -0400 |
| commit | a5744b79733654cdaa4ed732b48e2d86f570e31d (patch) | |
| tree | cf150d493ee522248a9240b31720b0f5e8bc0777 /src/client/views/nodes/scrapbook | |
| parent | f2642f08d49b787c462a2f34166ab545d0a5110a (diff) | |
scrapbooks with tags
Diffstat (limited to 'src/client/views/nodes/scrapbook')
| -rw-r--r-- | src/client/views/nodes/scrapbook/ScrapbookBox.tsx | 66 |
1 files changed, 61 insertions, 5 deletions
diff --git a/src/client/views/nodes/scrapbook/ScrapbookBox.tsx b/src/client/views/nodes/scrapbook/ScrapbookBox.tsx index ad3bfa7ad..9ffc13e6e 100644 --- a/src/client/views/nodes/scrapbook/ScrapbookBox.tsx +++ b/src/client/views/nodes/scrapbook/ScrapbookBox.tsx @@ -23,6 +23,8 @@ import { IReactionDisposer } from 'mobx'; import { observer } from 'mobx-react'; import { ImageField } from '../../../../fields/URLField'; import { runInAction } from 'mobx'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import { faRedoAlt } from '@fortawesome/free-solid-svg-icons'; enum ScrapbookPresetType { Classic = 'Classic', @@ -429,10 +431,12 @@ export class ScrapbookBox extends ViewBoxAnnotatableComponent<FieldViewProps>() } - async generateAiImageCorrect() { + async generateAiImageCorrect(prompt? : string) { this.loading = true; - - const prompt = 'A serene mountain landscape at sunrise, ultra-wide, pastel sky, abstract, scrapbook background'; + + if(!prompt){ + prompt = 'A serene mountain landscape at sunrise, ultra-wide, pastel sky, abstract, scrapbook background'; + } const dimensions = FireflyImageDimensions.Square; SmartDrawHandler.CreateWithFirefly(prompt, dimensions) @@ -538,8 +542,31 @@ export class ScrapbookBox extends ViewBoxAnnotatableComponent<FieldViewProps>() return false; }; + render() { + /*const internalTags = DocListCast(this.dataDoc[this.fieldKey]) + .flatMap(ph => StrListCast(ph.$tags_chat)) + .join(' ');*/ + const slots = DocListCast(this.dataDoc[this.fieldKey]); + + // 2) recursive unwrap: + const unwrap = (items: Doc[]): Doc[] => + items.flatMap(d => + d.$type === DocumentType.COL + ? unwrap(DocListCast(d[Doc.LayoutDataKey(d)])) + : [d] + ); + + // 3) produce a flat list of every doc, unwrapping any number of nested COLs + const allDocs: Doc[] = unwrap(slots); + const internalTags = '' + + const regenPrompt = internalTags + ? `Create a new background using these tags: ${internalTags}` + : 'A serene mountain landscape at sunrise, ultra-wide, pastel sky, abstract, scrapbook background'; + + return ( <div style={{ background: 'beige', width: '100%', height: '100%' }}> @@ -564,8 +591,37 @@ export class ScrapbookBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {...this._props} Document={this.imgDoc} fieldKey="data" - /> - )} <CollectionView + />)} + + {this._props.isContentActive() && ( + <div + className="scrapbookBox-ui" + style={{ + position: 'absolute', + top: 8, + right: 8, + zIndex: 20, + }} + onPointerDown={e => e.stopPropagation()} + > + <button + type="button" + title="Regenerate Background" + onClick={() => this.generateAiImageCorrect(regenPrompt)} + style={{ + background: 'white', + border: '1px solid #ccc', + borderRadius: 4, + padding: '4px 8px', + cursor: 'pointer', + }} + > + <FontAwesomeIcon icon={faRedoAlt} /> Regenerate + </button> + </div> + )} + + <CollectionView {...this._props} // setContentViewBox={emptyFunction} rejectDrop={this.rejectDrop} |
