{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-function-completion/src/babylonian-programming-editor/ui/example-widget.js"],"names":["FormWidget","InputField","DeleteButton","SwitchButton","ExpandButton","ErrorButton","PrePostscriptButton","defaultInstance","ExampleWidget","constructor","editor","location","kind","changeCallback","deleteCallback","stateCallback","defaultIsOn","instances","customInstances","_isOn","_color","randomColor","_stateCallback","_instanceElement","_error","_update","_getNameElement","_getAdditionalFormElements","_onSelectChanged","bind","options","_getOptions","element","_addButtonElement","buttonElement","appendChild","_deleteCallback","_onSwitchClicked","_onPrePostscriptClicked","_prescript","length","_postscript","_onExpandClicked","_element","innerHTML","_addFormElements","_changeCallback","_id","instanceId","value","color","error","hue","Math","round","random"],"mappings":"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","file":"example-widget.js","sourcesContent":["import FormWidget from \"./form-widget.js\";\nimport InputField from \"./input-field.js\";\nimport {\n  DeleteButton,\n  SwitchButton,\n  ExpandButton,\n  ErrorButton,\n  PrePostscriptButton,\n} from \"./buttons.js\";\nimport { defaultInstance } from \"../utils/defaults.js\";\n\n\nexport default class ExampleWidget extends FormWidget {\n  constructor(editor, location, kind, changeCallback, deleteCallback, stateCallback, defaultIsOn, instances, customInstances) {\n    super(editor, location, kind, instances, customInstances, changeCallback, deleteCallback);\n    this._isOn = defaultIsOn;\n    this._color = randomColor();\n    this._stateCallback = stateCallback;\n    this._instanceElement = null; // {element, input}\n    this._error = null;\n    this._update();\n  }\n  \n  // UI Generators\n  \n  _getNameElement() {\n    return super._getNameElement(\"example-name space-before\", `background-color: ${this._isOn ? this._color : \"lightgray\"}`);\n  }\n  \n  _getAdditionalFormElements() {\n    if(!this._instanceElement) {\n      this._instanceElement = new InputField(this, \"this\", \"null\", this._onSelectChanged.bind(this));\n    }\n    this._instanceElement.options = this._getOptions();\n    return [\n      {\n        element:<span class=\"space-before\">this: {this._instanceElement.element}</span>\n      }\n    ];\n  }\n  \n  _addButtonElement() {\n    const buttonElement = <span class=\"buttons\"></span>;\n    buttonElement.appendChild(DeleteButton(this._deleteCallback));\n    buttonElement.appendChild(SwitchButton(this._onSwitchClicked.bind(this),\n                                           this._isOn));\n    buttonElement.appendChild(PrePostscriptButton(\n      this._onPrePostscriptClicked.bind(this),\n      this._prescript.length || this._postscript.length\n    ));\n    buttonElement.appendChild(ExpandButton(this._onExpandClicked.bind(this)));\n    if(this._error) {\n      buttonElement.appendChild(ErrorButton(this._error));\n    }\n    this._element.appendChild(buttonElement);\n  }\n  \n  _update() {\n    this._element.innerHTML = \"\";\n    this._addButtonElement();\n    this._element.appendChild(this._getNameElement().element);\n    this._addFormElements();\n  }\n                                           \n  _onSwitchClicked() {\n    this._isOn = !this._isOn;\n    this._stateCallback(this._isOn);\n  }\n  \n  _onSelectChanged() {\n    this._changeCallback(this._id);\n  }\n  \n  // Getters and Setters\n  \n  get instanceId() {\n    return this._instanceElement.value\n  }\n  \n  set instanceId(instanceId) {\n    this._instanceElement.value = instanceId;\n  }\n  \n  get color() {\n    return this._color;\n  }\n  \n  set color(color) {\n    if(color) {\n      this._color = color;\n    }\n  }\n  \n  set error(error) {\n    this._error = error;\n  }\n}\n\nconst randomColor = () => {\n  const hue = Math.round(Math.random() * 36) * 10;\n  return `hsl(${hue}, 30%, 70%)`;\n}\n"]}