{"version":3,"file":"index.cjs","sources":["../../src/collapse-panel/index.ts"],"sourcesContent":["import { Component, ReactNode } from \"react\";\nimport h, { classed } from \"@macrostrat/hyper\";\nimport { Button, Collapse } from \"@blueprintjs/core\";\n\nconst HeaderButton = classed(Button, \"ms-header-button\");\n\ntype CollapsePanelProps = {\n  storageID?: string;\n  title: string;\n  headerRight: ReactNode;\n  children?: ReactNode;\n};\n\ntype CollapsePanelState = {\n  isOpen: boolean;\n};\n\nexport class CollapsePanel extends Component<\n  CollapsePanelProps,\n  CollapsePanelState\n> {\n  static defaultProps = {\n    title: \"Panel\",\n    // `storageID` prop allows storage of state in\n    // localStorage or equivalent.\n    storageID: null,\n  };\n\n  constructor(props: CollapsePanelProps) {\n    super(props);\n    this.state = { isOpen: false };\n  }\n\n  componentWillMount() {\n    // Set open state from local storage if it is available\n    const { storageID } = this.props;\n    if (storageID == null) {\n      return;\n    }\n    const isOpen = this.savedState()[storageID];\n    if (isOpen == null) {\n      return;\n    }\n    return this.setState({ isOpen });\n  }\n\n  /*\n  Next functions are for state management\n  across pages, if storageID prop is passed\n  */\n  savedState() {\n    try {\n      const st = window.localStorage.getItem(\"collapse-panel-state\");\n      return JSON.parse(st) || {};\n    } catch (error) {\n      return {};\n    }\n  }\n\n  checkLocalStorage() {\n    // Set open state from local storage if it is available\n    const { storageID } = this.props;\n    if (storageID == null) {\n      return;\n    }\n    let isOpen = this.savedState()[storageID] || null;\n    if (isOpen == null) {\n      isOpen = false;\n    }\n    return this.setState({ isOpen });\n  }\n\n  componentDidUpdate(\n    prevProps: CollapsePanelProps,\n    prevState: CollapsePanelState,\n  ) {\n    // Refresh object in local storage\n    const { storageID } = this.props;\n    if (storageID == null) {\n      return;\n    }\n    const { isOpen } = this.state;\n    if (isOpen === prevState.isOpen) {\n      return;\n    }\n    const s = this.savedState();\n    s[storageID] = isOpen;\n    const j = JSON.stringify(s);\n    return window.localStorage.setItem(\"collapse-panel-state\", j);\n  }\n\n  render() {\n    let { title, children, storageID, headerRight, ...props } = this.props;\n    const { isOpen } = this.state;\n\n    const icon = isOpen ? \"collapse-all\" : \"expand-all\";\n    const onClick = () => this.setState({ isOpen: !isOpen });\n\n    if (headerRight == null) {\n      headerRight = null;\n    }\n\n    return h(\"div.collapse-panel\", props, [\n      h(\"div.panel-header\", [\n        h(HeaderButton, { icon, minimal: true, onClick, fill: true }, [\n          h(\"h2\", title),\n          h(\"span.expander\"),\n        ]),\n        headerRight,\n      ]),\n      h(Collapse, { isOpen }, children),\n    ]);\n  }\n}\n"],"names":["classed","Button","Component","h","Collapse"],"mappings":";;;;;;;AAIA,MAAM,eAAeA,EAAAA,QAAQC,KAAAA,QAAQ,kBAAkB;AAahD,MAAM,sBAAsBC,MAAAA,UAGjC;AAAA,EACA,OAAO,eAAe;AAAA,IACpB,OAAO;AAAA;AAAA;AAAA,IAGP,WAAW;AAAA,EAAA;AAAA,EAGb,YAAY,OAA2B;AACrC,UAAM,KAAK;AACX,SAAK,QAAQ,EAAE,QAAQ,MAAA;AAAA,EACzB;AAAA,EAEA,qBAAqB;AAEnB,UAAM,EAAE,cAAc,KAAK;AAC3B,QAAI,aAAa,MAAM;AACrB;AAAA,IACF;AACA,UAAM,SAAS,KAAK,WAAA,EAAa,SAAS;AAC1C,QAAI,UAAU,MAAM;AAClB;AAAA,IACF;AACA,WAAO,KAAK,SAAS,EAAE,QAAQ;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAa;AACX,QAAI;AACF,YAAM,KAAK,OAAO,aAAa,QAAQ,sBAAsB;AAC7D,aAAO,KAAK,MAAM,EAAE,KAAK,CAAA;AAAA,IAC3B,SAAS,OAAO;AACd,aAAO,CAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,oBAAoB;AAElB,UAAM,EAAE,cAAc,KAAK;AAC3B,QAAI,aAAa,MAAM;AACrB;AAAA,IACF;AACA,QAAI,SAAS,KAAK,WAAA,EAAa,SAAS,KAAK;AAC7C,QAAI,UAAU,MAAM;AAClB,eAAS;AAAA,IACX;AACA,WAAO,KAAK,SAAS,EAAE,QAAQ;AAAA,EACjC;AAAA,EAEA,mBACE,WACA,WACA;AAEA,UAAM,EAAE,cAAc,KAAK;AAC3B,QAAI,aAAa,MAAM;AACrB;AAAA,IACF;AACA,UAAM,EAAE,WAAW,KAAK;AACxB,QAAI,WAAW,UAAU,QAAQ;AAC/B;AAAA,IACF;AACA,UAAM,IAAI,KAAK,WAAA;AACf,MAAE,SAAS,IAAI;AACf,UAAM,IAAI,KAAK,UAAU,CAAC;AAC1B,WAAO,OAAO,aAAa,QAAQ,wBAAwB,CAAC;AAAA,EAC9D;AAAA,EAEA,SAAS;AACP,QAAI,EAAE,OAAO,UAAU,WAAW,aAAa,GAAG,MAAA,IAAU,KAAK;AACjE,UAAM,EAAE,WAAW,KAAK;AAExB,UAAM,OAAO,SAAS,iBAAiB;AACvC,UAAM,UAAU,MAAM,KAAK,SAAS,EAAE,QAAQ,CAAC,QAAQ;AAEvD,QAAI,eAAe,MAAM;AACvB,oBAAc;AAAA,IAChB;AAEA,WAAOC,WAAAA,QAAE,sBAAsB,OAAO;AAAA,MACpCA,WAAAA,QAAE,oBAAoB;AAAA,QACpBA,mBAAE,cAAc,EAAE,MAAM,SAAS,MAAM,SAAS,MAAM,QAAQ;AAAA,UAC5DA,WAAAA,QAAE,MAAM,KAAK;AAAA,UACbA,WAAAA,QAAE,eAAe;AAAA,QAAA,CAClB;AAAA,QACD;AAAA,MAAA,CACD;AAAA,MACDA,WAAAA,QAAEC,KAAAA,UAAU,EAAE,OAAA,GAAU,QAAQ;AAAA,IAAA,CACjC;AAAA,EACH;AACF;;"}