{"id":15519450,"url":"https://github.com/rodydavis/object-dom","last_synced_at":"2025-04-23T04:16:34.801Z","repository":{"id":51128811,"uuid":"350850420","full_name":"rodydavis/object-dom","owner":"rodydavis","description":"HTML Object Declarative Dom","archived":false,"fork":false,"pushed_at":"2021-05-24T08:12:12.000Z","size":1884,"stargazers_count":21,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-23T04:16:27.610Z","etag":null,"topics":["declarative-ui","dom","html5","typescript","virtual-dom"],"latest_commit_sha":null,"homepage":"https://rodydavis.github.io/object-dom/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rodydavis.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"code-of-conduct.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-03-23T20:36:20.000Z","updated_at":"2022-10-20T00:58:56.000Z","dependencies_parsed_at":"2022-09-06T19:41:08.483Z","dependency_job_id":null,"html_url":"https://github.com/rodydavis/object-dom","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rodydavis%2Fobject-dom","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rodydavis%2Fobject-dom/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rodydavis%2Fobject-dom/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rodydavis%2Fobject-dom/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rodydavis","download_url":"https://codeload.github.com/rodydavis/object-dom/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250366716,"owners_count":21418772,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["declarative-ui","dom","html5","typescript","virtual-dom"],"created_at":"2024-10-02T10:21:33.977Z","updated_at":"2025-04-23T04:16:34.782Z","avatar_url":"https://github.com/rodydavis.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# object-dom\n\nDeclarative dom with 1:1 mapping of objects and tags, typed css, reactive updates and no bundler needed.\n\n[![styled with prettier](https://img.shields.io/badge/styled_with-prettier-ff69b4.svg)](https://github.com/prettier/prettier)\n[![Tests](https://github.com/rodydavis/object_dom/actions/workflows/tests.yml/badge.svg)](https://github.com/rodydavis/object_dom/actions/workflows/tests.yml)\n[![Published on npm](https://img.shields.io/npm/v/object-dom.svg)](https://www.npmjs.com/package/object-dom)\n\n- ✅ No Dependencies\n- ✅ ES Modules\n- ✅ Full Browser Support\n- ✅ Full types for CSS\n- ✅ Full types for DOM Events\n- ✅ Full types for Attributes\n- ✅ 100% Typescript\n\n## Supported Tags\n\nhttps://www.w3schools.com/TAGS/default.ASP\n\n\u003c!-- BEGIN_TAGS --\u003e\n\n| Tag            | Class      | Description                                                                                              |\n| -------------- | ---------- | -------------------------------------------------------------------------------------------------------- |\n| [`\u003ca\u003e`](https://www.w3schools.com/TAGS/tag_a.asp) | A | Defines a hyperlink |\n| [`\u003cabbr\u003e`](https://www.w3schools.com/TAGS/tag_abbr.asp) | Abbr | Defines an abbreviation or an acronym |\n| [`\u003caddress\u003e`](https://www.w3schools.com/TAGS/tag_address.asp) | Address | Defines contact information for the author/owner of a document |\n| [`\u003carea\u003e`](https://www.w3schools.com/TAGS/tag_area.asp) | Area | Defines an area inside an image map |\n| [`\u003carticle\u003e`](https://www.w3schools.com/TAGS/tag_article.asp) | Article | Defines an article |\n| [`\u003caside\u003e`](https://www.w3schools.com/TAGS/tag_aside.asp) | Aside | Defines content aside from the page content |\n| [`\u003caudio\u003e`](https://www.w3schools.com/TAGS/tag_audio.asp) | Audio | Defines embedded sound content |\n| [`\u003cb\u003e`](https://www.w3schools.com/TAGS/tag_b.asp) | B | Defines bold text |\n| [`\u003cbase\u003e`](https://www.w3schools.com/TAGS/tag_base.asp) | Base | Specifies the base URL/target for all relative URLs in a document |\n| [`\u003cbdi\u003e`](https://www.w3schools.com/TAGS/tag_bdi.asp) | Bdi | Isolates a part of text that might be formatted in a different direction  from other text outside it |\n| [`\u003cbdo\u003e`](https://www.w3schools.com/TAGS/tag_bdo.asp) | Bdo | Overrides the current text direction |\n| [`\u003cblockquote\u003e`](https://www.w3schools.com/TAGS/tag_blockquote.asp) | Blockquote | Defines a section that is quoted from another source |\n| [`\u003cbody\u003e`](https://www.w3schools.com/TAGS/tag_body.asp) | Body | Defines the document's body |\n| [`\u003cbr\u003e`](https://www.w3schools.com/TAGS/tag_br.asp) | Br | Defines a single line break |\n| [`\u003cbutton\u003e`](https://www.w3schools.com/TAGS/tag_button.asp) | Button | Defines a clickable button |\n| [`\u003ccanvas\u003e`](https://www.w3schools.com/TAGS/tag_canvas.asp) | Canvas | Used to draw graphics, on the fly, via scripting (usually JavaScript) |\n| [`\u003ccaption\u003e`](https://www.w3schools.com/TAGS/tag_caption.asp) | Caption | Defines a table caption |\n| [`\u003ccite\u003e`](https://www.w3schools.com/TAGS/tag_cite.asp) | Cite | Defines the title of a work |\n| [`\u003ccode\u003e`](https://www.w3schools.com/TAGS/tag_code.asp) | Code | Defines a piece of computer code |\n| [`\u003ccol\u003e`](https://www.w3schools.com/TAGS/tag_col.asp) | Col | Specifies column properties for each column within a `\u003ccolgroup\u003e` element |\n| [`\u003ccolgroup\u003e`](https://www.w3schools.com/TAGS/tag_colgroup.asp) | Colgroup | Specifies a group of one or more columns in a table for formatting |\n| [`\u003cdata\u003e`](https://www.w3schools.com/TAGS/tag_data.asp) | Data | Adds a machine-readable  translation of a given content |\n| [`\u003cdatalist\u003e`](https://www.w3schools.com/TAGS/tag_datalist.asp) | Datalist | Specifies a list of pre-defined options for input controls |\n| [`\u003cdd\u003e`](https://www.w3schools.com/TAGS/tag_dd.asp) | Dd | Defines a description/value of a term in a description list |\n| [`\u003cdel\u003e`](https://www.w3schools.com/TAGS/tag_del.asp) | Del | Defines text that has been deleted from a document |\n| [`\u003cdetails\u003e`](https://www.w3schools.com/TAGS/tag_details.asp) | Details | Defines additional details that the user can view or hide |\n| [`\u003cdfn\u003e`](https://www.w3schools.com/TAGS/tag_dfn.asp) | Dfn | Specifies a term that is going to be defined within the content |\n| [`\u003cdialog\u003e`](https://www.w3schools.com/TAGS/tag_dialog.asp) | Dialog | Defines a dialog box or window |\n| [`\u003cdiv\u003e`](https://www.w3schools.com/TAGS/tag_div.asp) | Div | Defines a section in a document |\n| [`\u003cdl\u003e`](https://www.w3schools.com/TAGS/tag_dl.asp) | Dl | Defines a description list |\n| [`\u003cdt\u003e`](https://www.w3schools.com/TAGS/tag_dt.asp) | Dt | Defines a term/name in a description list |\n| [`\u003cem\u003e`](https://www.w3schools.com/TAGS/tag_em.asp) | Em | Defines emphasized text |\n| [`\u003cembed\u003e`](https://www.w3schools.com/TAGS/tag_embed.asp) | Embed | Defines a container for an external application |\n| [`\u003cfieldset\u003e`](https://www.w3schools.com/TAGS/tag_fieldset.asp) | Fieldset | Groups related elements in a form |\n| [`\u003cfigcaption\u003e`](https://www.w3schools.com/TAGS/tag_figcaption.asp) | Figcaption | Defines a caption for a `\u003cfigure\u003e` element |\n| [`\u003cfigure\u003e`](https://www.w3schools.com/TAGS/tag_figure.asp) | Figure | Specifies self-contained content |\n| [`\u003cfooter\u003e`](https://www.w3schools.com/TAGS/tag_footer.asp) | Footer | Defines a footer for a document or section |\n| [`\u003cform\u003e`](https://www.w3schools.com/TAGS/tag_form.asp) | Form | Defines an HTML form for user input |\n| [`\u003ch1\u003e`](https://www.w3schools.com/TAGS/tag_h1.asp) | H1 | Defines HTML headings |\n| [`\u003ch2\u003e`](https://www.w3schools.com/TAGS/tag_h2.asp) | H2 | Defines HTML headings |\n| [`\u003ch3\u003e`](https://www.w3schools.com/TAGS/tag_h3.asp) | H3 | Defines HTML headings |\n| [`\u003ch4\u003e`](https://www.w3schools.com/TAGS/tag_h4.asp) | H4 | Defines HTML headings |\n| [`\u003ch5\u003e`](https://www.w3schools.com/TAGS/tag_h5.asp) | H5 | Defines HTML headings |\n| [`\u003ch6\u003e`](https://www.w3schools.com/TAGS/tag_h6.asp) | H6 | Defines HTML headings |\n| [`\u003chead\u003e`](https://www.w3schools.com/TAGS/tag_head.asp) | Head | Contains metadata/information for the document |\n| [`\u003cheader\u003e`](https://www.w3schools.com/TAGS/tag_header.asp) | Header | Defines a header for a document or section |\n| [`\u003chr\u003e`](https://www.w3schools.com/TAGS/tag_hr.asp) | Hr | Defines a thematic change in the content |\n| [`\u003chtml\u003e`](https://www.w3schools.com/TAGS/tag_html.asp) | Html | Defines the root of an HTML document |\n| [`\u003ci\u003e`](https://www.w3schools.com/TAGS/tag_i.asp) | I | Defines a part of text in an alternate voice or mood |\n| [`\u003ciframe\u003e`](https://www.w3schools.com/TAGS/tag_iframe.asp) | Iframe | Defines an inline frame |\n| [`\u003cimg\u003e`](https://www.w3schools.com/TAGS/tag_img.asp) | Img | Defines an image |\n| [`\u003cinput\u003e`](https://www.w3schools.com/TAGS/tag_input.asp) | Input | Defines an input control |\n| [`\u003cins\u003e`](https://www.w3schools.com/TAGS/tag_ins.asp) | Ins | Defines a text that has been inserted into a document |\n| [`\u003ckbd\u003e`](https://www.w3schools.com/TAGS/tag_kbd.asp) | Kbd | Defines keyboard input |\n| [`\u003clabel\u003e`](https://www.w3schools.com/TAGS/tag_label.asp) | Label | Defines a label for an `\u003cinput\u003e` element |\n| [`\u003clegend\u003e`](https://www.w3schools.com/TAGS/tag_legend.asp) | Legend | Defines a caption for a `\u003cfieldset\u003e` element |\n| [`\u003cli\u003e`](https://www.w3schools.com/TAGS/tag_li.asp) | Li | Defines a list item |\n| [`\u003clink\u003e`](https://www.w3schools.com/TAGS/tag_link.asp) | Link | Defines the relationship between a document and an external resource (most  used to link to style sheets) |\n| [`\u003cmain\u003e`](https://www.w3schools.com/TAGS/tag_main.asp) | Main | Specifies the main content of a document |\n| [`\u003cmap\u003e`](https://www.w3schools.com/TAGS/tag_map.asp) | Map | Defines an image map |\n| [`\u003cmark\u003e`](https://www.w3schools.com/TAGS/tag_mark.asp) | Mark | Defines marked/highlighted text |\n| [`\u003cmeta\u003e`](https://www.w3schools.com/TAGS/tag_meta.asp) | Meta | Defines metadata about an HTML document |\n| [`\u003cmeter\u003e`](https://www.w3schools.com/TAGS/tag_meter.asp) | Meter | Defines a scalar measurement within a known range (a gauge) |\n| [`\u003cnav\u003e`](https://www.w3schools.com/TAGS/tag_nav.asp) | Nav | Defines navigation links |\n| [`\u003cnoscript\u003e`](https://www.w3schools.com/TAGS/tag_noscript.asp) | Noscript | Defines an alternate content for users that do not support  client-side scripts |\n| [`\u003cobject\u003e`](https://www.w3schools.com/TAGS/tag_object.asp) | Obj | Defines a container for an external application |\n| [`\u003col\u003e`](https://www.w3schools.com/TAGS/tag_ol.asp) | Ol | Defines an ordered list |\n| [`\u003coptgroup\u003e`](https://www.w3schools.com/TAGS/tag_optgroup.asp) | Optgroup | Defines a group of related options in a drop-down list |\n| [`\u003coption\u003e`](https://www.w3schools.com/TAGS/tag_option.asp) | Option | Defines an option in a drop-down list |\n| [`\u003coutput\u003e`](https://www.w3schools.com/TAGS/tag_output.asp) | Output | Defines the result of a calculation |\n| [`\u003cp\u003e`](https://www.w3schools.com/TAGS/tag_p.asp) | P | Defines a paragraph |\n| [`\u003cparam\u003e`](https://www.w3schools.com/TAGS/tag_param.asp) | Param | Defines a parameter for an object |\n| [`\u003cpicture\u003e`](https://www.w3schools.com/TAGS/tag_picture.asp) | Picture | Defines a container for multiple image resources |\n| [`\u003cpre\u003e`](https://www.w3schools.com/TAGS/tag_pre.asp) | Pre | Defines preformatted text |\n| [`\u003cprogress\u003e`](https://www.w3schools.com/TAGS/tag_progress.asp) | Progress | Represents the progress of a task |\n| [`\u003cq\u003e`](https://www.w3schools.com/TAGS/tag_q.asp) | Q | Defines a short quotation |\n| [`\u003crp\u003e`](https://www.w3schools.com/TAGS/tag_rp.asp) | Rp | Defines what to show in browsers that do not support ruby annotations |\n| [`\u003crt\u003e`](https://www.w3schools.com/TAGS/tag_rt.asp) | Rt | Defines an explanation/pronunciation of characters (for East Asian  typography) |\n| [`\u003cruby\u003e`](https://www.w3schools.com/TAGS/tag_ruby.asp) | Ruby | Defines a ruby annotation (for East Asian typography) |\n| [`\u003cs\u003e`](https://www.w3schools.com/TAGS/tag_s.asp) | S | Defines text that is no longer correct |\n| [`\u003csamp\u003e`](https://www.w3schools.com/TAGS/tag_samp.asp) | Samp | Defines sample output from a computer program |\n| [`\u003cscript\u003e`](https://www.w3schools.com/TAGS/tag_script.asp) | Script | Defines a client-side script |\n| [`\u003csection\u003e`](https://www.w3schools.com/TAGS/tag_section.asp) | Section | Defines a section in a document |\n| [`\u003cselect\u003e`](https://www.w3schools.com/TAGS/tag_select.asp) | Select | Defines a drop-down list |\n| [`\u003csmall\u003e`](https://www.w3schools.com/TAGS/tag_small.asp) | Small | Defines smaller text |\n| [`\u003csource\u003e`](https://www.w3schools.com/TAGS/tag_source.asp) | Source | Defines multiple media resources for media elements (`\u003cvideo\u003e` and `\u003caudio\u003e`) |\n| [`\u003cspan\u003e`](https://www.w3schools.com/TAGS/tag_span.asp) | Span | Defines a section in a document |\n| [`\u003cstrong\u003e`](https://www.w3schools.com/TAGS/tag_strong.asp) | Strong | Defines important text |\n| [`\u003cstyle\u003e`](https://www.w3schools.com/TAGS/tag_style.asp) | Style | Defines style information for a document |\n| [`\u003csub\u003e`](https://www.w3schools.com/TAGS/tag_sub.asp) | Sub | Defines subscripted text |\n| [`\u003csummary\u003e`](https://www.w3schools.com/TAGS/tag_summary.asp) | Summary | Defines a visible heading for a `\u003cdetails\u003e` element |\n| [`\u003csup\u003e`](https://www.w3schools.com/TAGS/tag_sup.asp) | Sup | Defines superscripted text |\n| [`\u003csvg\u003e`](https://www.w3schools.com/TAGS/tag_svg.asp) | Svg | Defines a container for SVG graphics |\n| [`\u003ctable\u003e`](https://www.w3schools.com/TAGS/tag_table.asp) | Table | Defines a table |\n| [`\u003ctbody\u003e`](https://www.w3schools.com/TAGS/tag_tbody.asp) | Tbody | Groups the body content in a table |\n| [`\u003ctd\u003e`](https://www.w3schools.com/TAGS/tag_td.asp) | Td | Defines a cell in a table |\n| [`\u003ctemplate\u003e`](https://www.w3schools.com/TAGS/tag_template.asp) | Template | Defines a container for content that should be hidden when the page loads |\n| [`\u003ctextarea\u003e`](https://www.w3schools.com/TAGS/tag_textarea.asp) | Textarea | Defines a multiline input control (text area) |\n| [`\u003ctfoot\u003e`](https://www.w3schools.com/TAGS/tag_tfoot.asp) | Tfoot | Groups the footer content in a table |\n| [`\u003cth\u003e`](https://www.w3schools.com/TAGS/tag_th.asp) | Th | Defines a header cell in a table |\n| [`\u003cthead\u003e`](https://www.w3schools.com/TAGS/tag_thead.asp) | Thead | Groups the header content in a table |\n| [`\u003ctime\u003e`](https://www.w3schools.com/TAGS/tag_time.asp) | Time | Defines a specific time (or datetime) |\n| [`\u003ctitle\u003e`](https://www.w3schools.com/TAGS/tag_title.asp) | Title | Defines a title for the document |\n| [`\u003ctr\u003e`](https://www.w3schools.com/TAGS/tag_tr.asp) | Tr | Defines a row in a table |\n| [`\u003ctrack\u003e`](https://www.w3schools.com/TAGS/tag_track.asp) | Track | Defines text tracks for media elements (`\u003cvideo\u003e` and `\u003caudio\u003e`) |\n| [`\u003cu\u003e`](https://www.w3schools.com/TAGS/tag_u.asp) | U | Defines some text that is unarticulated and styled differently from normal  text |\n| [`\u003cul\u003e`](https://www.w3schools.com/TAGS/tag_ul.asp) | Ul | Defines an unordered list |\n| [`\u003cvar\u003e`](https://www.w3schools.com/TAGS/tag_var.asp) | Var | Defines a variable |\n| [`\u003cvideo\u003e`](https://www.w3schools.com/TAGS/tag_video.asp) | Video | Defines embedded video content |\n| [`\u003cwbr\u003e`](https://www.w3schools.com/TAGS/tag_wbr.asp) | Wbr | Defines a possible line-break |\n\u003c!-- END_TAGS --\u003e\n\n## Available Methods\n\n- jsonTable\n- render\n- generateHtml\n- parseHtml\n- textContent\n\n## Getting Started\n\n### Functional Approach\n\n```html\n\u003cdiv id=\"root\"\u003e\u003c/div\u003e\n\u003cscript type=\"module\"\u003e\n  import { Div, P, Button, Row, Column, render } from \"object-dom\";\n\n  const label = new P({ text: \"Hello World!\" });\n  const button = new Button({\n    text: \"Update\",\n    styles: { width: \"100px\" },\n  });\n  const app = new Div({\n    children: [\n      new Column({\n        children: [\n          label,\n          button,\n          new Row({\n            styles: { padding: \"10px\" },\n            children: [\"A\", \"B\", \"C\"],\n          }),\n        ],\n      }),\n    ],\n  });\n  button.addEventListener('click', () =\u003e {\n     label.text = \"New Update!\";\n  }, false);\n  render(app, document.body.querySelector(\"#root\"));\n\u003c/script\u003e\n```\n\n### Class Approach\n\n```js\nimport { ObjectDom, Div, H1, Button, Row, Canvas } from \"object-dom\";\n\nexport class MyApp extends ObjectDom {\n  render = () =\u003e {\n    return new Div({\n      children: [new H1({ text: \"Counter Example\" }), new Counter(), new CanvasExample()],\n    });\n  };\n}\n\nclass Counter extends ObjectDom {\n  value = 0;\n  render() {\n    return new Div({\n      styles: { margin: \"5px\" },\n      children: [\n        `${this.value}`,\n        new Row({\n          children: [\n            new Button({\n              text: \"-\",\n              styles: { width: \"50px\" },\n              events: {\n                click: () =\u003e {\n                  this.value -= 1;\n                  this.update();\n                },\n              },\n            }),\n            new Button({\n              text: \"+\",\n              styles: { width: \"50px\", marginLeft: \"5px\" },\n              events: {\n                click: () =\u003e {\n                  this.value += 1;\n                  this.update();\n                },\n              },\n            }),\n          ],\n        }),\n      ],\n    });\n  }\n}\n\nclass CanvasExample extends ObjectDom {\n  render() {\n    return new Canvas({\n      styles: { width: \"200px\", height: \"200px\" },\n      onCreate: (node) =\u003e {\n        const canvas = node as HTMLCanvasElement;\n        const ctx = canvas.getContext(\"2d\")!;\n\n        // Create gradient\n        const grd = ctx.createRadialGradient(75, 50, 5, 90, 60, 100);\n        grd.addColorStop(0, \"red\");\n        grd.addColorStop(1, \"white\");\n\n        // Fill with gradient\n        ctx.fillStyle = grd;\n        ctx.fillRect(10, 10, 150, 80);\n      },\n    });\n  }\n}\n\nrender(new MyApp(), document.body.querySelector(\"#root\"));\n```\n\n### JSON Table\n\n```js\njsonTable(\n  [\n    {\n      first_name: \"John\",\n      last_name: \"Smith\",\n      company: \"N/A\",\n    },\n    {\n      first_name: \"Steve\",\n      last_name: \"Jobs\",\n      company: \"Apple\",\n    },\n    {\n      first_name: \"Bill\",\n      last_name: \"Gates\",\n      company: \"Microsoft\",\n    },\n    {\n      first_name: \"Elon\",\n      last_name: \"Musk\",\n      company: \"Tesla\",\n    },\n  ],\n  { style: { margin: \"10px\" } }\n);\n```\n\nWhich renders the following html:\n\n```html\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003cth\u003efirst_name\u003c/th\u003e\n    \u003cth\u003elast_name\u003c/th\u003e\n    \u003cth\u003ecompany\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eJohn\u003c/td\u003e\n    \u003ctd\u003eSmith\u003c/td\u003e\n    \u003ctd\u003eN/A\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eSteve\u003c/td\u003e\n    \u003ctd\u003eJobs\u003c/td\u003e\n    \u003ctd\u003eApple\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eBill\u003c/td\u003e\n    \u003ctd\u003eGates\u003c/td\u003e\n    \u003ctd\u003eMicrosoft\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eElon\u003c/td\u003e\n    \u003ctd\u003eMusk\u003c/td\u003e\n    \u003ctd\u003eTesla\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frodydavis%2Fobject-dom","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frodydavis%2Fobject-dom","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frodydavis%2Fobject-dom/lists"}