{"id":13149,"date":"2026-02-05T10:38:31","date_gmt":"2026-02-05T09:38:31","guid":{"rendered":"https:\/\/schedulejs.com\/?p=13149"},"modified":"2026-02-05T10:42:04","modified_gmt":"2026-02-05T09:42:04","slug":"building-custom-tree-tables-in-schedulejs","status":"publish","type":"post","link":"https:\/\/schedulejs.com\/en\/building-custom-tree-tables-in-schedulejs\/","title":{"rendered":"Building custom Tree Tables in ScheduleJS"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"13149\" class=\"elementor elementor-13149\" data-elementor-settings=\"[]\">\n\t\t\t\t\t\t\t<div class=\"elementor-section-wrap\">\n\t\t\t\t\t\t\t<div class=\"elementor-section elementor-top-section elementor-element elementor-element-7c94adf elementor-section-stretched elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"7c94adf\" data-element_type=\"section\" data-settings=\"{&quot;stretch_section&quot;:&quot;section-stretched&quot;,&quot;background_background&quot;:&quot;classic&quot;,&quot;animation&quot;:&quot;none&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-5883a9c\" data-id=\"5883a9c\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b52beb2 elementor-widget elementor-widget-image\" data-id=\"b52beb2\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/schedulejs.com\/\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"900\" height=\"300\" src=\"https:\/\/schedulejs.com\/wp-content\/uploads\/2021\/05\/logo_schedulejs_blue_1500x500-2-1024x341.png\" class=\"attachment-large size-large\" alt=\"schedulejs\" srcset=\"https:\/\/schedulejs.com\/wp-content\/uploads\/2021\/05\/logo_schedulejs_blue_1500x500-2-1024x341.png 1024w, https:\/\/schedulejs.com\/wp-content\/uploads\/2021\/05\/logo_schedulejs_blue_1500x500-2-300x100.png 300w, https:\/\/schedulejs.com\/wp-content\/uploads\/2021\/05\/logo_schedulejs_blue_1500x500-2-768x256.png 768w, https:\/\/schedulejs.com\/wp-content\/uploads\/2021\/05\/logo_schedulejs_blue_1500x500-2-730x243.png 730w, https:\/\/schedulejs.com\/wp-content\/uploads\/2021\/05\/logo_schedulejs_blue_1500x500-2.png 1500w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-2cd1c38\" data-id=\"2cd1c38\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-1376031 elementor-widget elementor-widget-ekit-nav-menu\" data-id=\"1376031\" data-element_type=\"widget\" data-widget_type=\"ekit-nav-menu.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<div class=\"ekit-wid-con ekit_menu_responsive_tablet\" data-hamburger-icon=\"fas fa-bars\" data-hamburger-icon-type=\"icon\" data-responsive-breakpoint=\"1024\">            <button class=\"elementskit-menu-hamburger elementskit-menu-toggler\">\n                <i aria-hidden=\"true\" class=\"ekit-menu-icon fas fa-bars\"><\/i>            <\/button>\n            <div id=\"ekit-megamenu-schedulejs-primary-menu\" class=\"elementskit-menu-container elementskit-menu-offcanvas-elements elementskit-navbar-nav-default elementskit_line_arrow ekit-nav-menu-one-page-\"><ul id=\"main-menu\" class=\"elementskit-navbar-nav elementskit-menu-po-right submenu-click-on-\"><li id=\"menu-item-11511\" class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-11511 nav-item delay-1 nav-item elementskit-mobile-builder-content\" data-vertical-menu=750px><a href=\"https:\/\/schedulejs.com\/en\/blog-javascript-framework\/\" class=\"ekit-menu-nav-link\">Blog<\/a><\/li>\n<li id=\"menu-item-2859\" class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-2859 nav-item delay-1 nav-item elementskit-dropdown-has relative_position elementskit-dropdown-menu-default_width elementskit-mobile-builder-content\" data-vertical-menu=750px><a href=\"https:\/\/schedulejs.com\/en\/presentation-angular-gantt-library\/\" class=\"ekit-menu-nav-link ekit-menu-dropdown-toggle\">Product<i class=\"icon icon-down-arrow1 elementskit-submenu-indicator\"><\/i><\/a>\n<ul class=\"elementskit-dropdown elementskit-submenu-panel\">\n\t<li id=\"menu-item-2860\" class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-2860 nav-item delay-1 nav-item elementskit-mobile-builder-content\" data-vertical-menu=750px><a href=\"https:\/\/schedulejs.com\/en\/presentation-angular-gantt-library\/\" class=\" dropdown-item\">ScheduleJS<\/a>\t<li id=\"menu-item-10522\" class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-10522 nav-item delay-1 nav-item elementskit-mobile-builder-content\" data-vertical-menu=750px><a href=\"https:\/\/schedulejs.com\/en\/schedule-js-viewer-2\/\" class=\" dropdown-item\">ScheduleJS Viewer<\/a>\t<li id=\"menu-item-12063\" class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-12063 nav-item delay-1 nav-item elementskit-mobile-builder-content\" data-vertical-menu=750px><a href=\"https:\/\/schedulejs.com\/en\/api-code-typescript-gantt-library\/\" class=\" dropdown-item\">API &amp; Code<\/a>\t<li id=\"menu-item-2892\" class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-2892 nav-item delay-1 nav-item elementskit-mobile-builder-content\" data-vertical-menu=750px><a href=\"https:\/\/schedulejs.com\/en\/example-gantt-js\/\" class=\" dropdown-item\">Use Case Example<\/a>\t<li id=\"menu-item-2890\" class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-2890 nav-item delay-1 nav-item elementskit-mobile-builder-content\" data-vertical-menu=750px><a href=\"https:\/\/schedulejs.com\/en\/faqs-gantt-js\/\" class=\" dropdown-item\">FAQs<\/a><\/ul>\n<\/li>\n<li id=\"menu-item-11895\" class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-11895 nav-item delay-1 nav-item elementskit-dropdown-has relative_position elementskit-dropdown-menu-default_width elementskit-mobile-builder-content\" data-vertical-menu=750px><a href=\"https:\/\/schedulejs.com\/en\/services-gantt-js\/\" class=\"ekit-menu-nav-link ekit-menu-dropdown-toggle\">Services<i class=\"icon icon-down-arrow1 elementskit-submenu-indicator\"><\/i><\/a>\n<ul class=\"elementskit-dropdown elementskit-submenu-panel\">\n\t<li id=\"menu-item-5624\" class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-5624 nav-item delay-1 nav-item elementskit-mobile-builder-content\" data-vertical-menu=750px><a href=\"https:\/\/schedulejs.com\/en\/maintenance-support\/\" class=\" dropdown-item\">Maintenance &#038; Support<\/a>\t<li id=\"menu-item-11589\" class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-11589 nav-item delay-1 nav-item elementskit-mobile-builder-content\" data-vertical-menu=750px><a href=\"https:\/\/schedulejs.com\/en\/training-gantt-js-2\/\" class=\" dropdown-item\">Training<\/a>\t<li id=\"menu-item-5622\" class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-5622 nav-item delay-1 nav-item elementskit-mobile-builder-content\" data-vertical-menu=750px><a href=\"https:\/\/schedulejs.com\/en\/development\/\" class=\" dropdown-item\">Development<\/a>\t<li id=\"menu-item-5626\" class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-5626 nav-item delay-1 nav-item elementskit-mobile-builder-content\" data-vertical-menu=750px><a href=\"https:\/\/schedulejs.com\/en\/ui-ux-design\/\" class=\" dropdown-item\">UI \/ UX Design<\/a>\t<li id=\"menu-item-5623\" class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-5623 nav-item delay-1 nav-item elementskit-mobile-builder-content\" data-vertical-menu=750px><a href=\"https:\/\/schedulejs.com\/en\/flexgantt-migration\/\" class=\" dropdown-item\">FlexGantt Migration<\/a>\t<li id=\"menu-item-5621\" class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-5621 nav-item delay-1 nav-item elementskit-mobile-builder-content\" data-vertical-menu=750px><a href=\"https:\/\/schedulejs.com\/en\/proof-of-concept-gantt-js\/\" class=\" dropdown-item\">Proof of Concept<\/a><\/ul>\n<\/li>\n<li id=\"menu-item-11590\" class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-11590 nav-item delay-1 nav-item elementskit-mobile-builder-content\" data-vertical-menu=750px><a href=\"https:\/\/schedulejs.com\/en\/pricing-js-gantt\/\" class=\"ekit-menu-nav-link\">Pricing<\/a><\/li>\n<li id=\"menu-item-6751\" class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-6751 nav-item delay-1 nav-item elementskit-dropdown-has relative_position elementskit-dropdown-menu-default_width elementskit-mobile-builder-content\" data-vertical-menu=750px><a href=\"https:\/\/schedulejs.com\/en\/job-openings\/\" class=\"ekit-menu-nav-link ekit-menu-dropdown-toggle\">Careers<i class=\"icon icon-down-arrow1 elementskit-submenu-indicator\"><\/i><\/a>\n<ul class=\"elementskit-dropdown elementskit-submenu-panel\">\n\t<li id=\"menu-item-7071\" class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7071 nav-item delay-1 nav-item elementskit-mobile-builder-content\" data-vertical-menu=750px><a href=\"https:\/\/schedulejs.com\/en\/our-work-gantt-js\/\" class=\" dropdown-item\">Our Work<\/a>\t<li id=\"menu-item-7072\" class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7072 nav-item delay-1 nav-item elementskit-mobile-builder-content\" data-vertical-menu=750px><a href=\"https:\/\/schedulejs.com\/en\/job-openings\/\" class=\" dropdown-item\">Job Openings<\/a><\/ul>\n<\/li>\n<li id=\"menu-item-2937\" class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-2937 nav-item delay-1 nav-item elementskit-dropdown-has relative_position elementskit-dropdown-menu-default_width elementskit-mobile-builder-content\" data-vertical-menu=750px><a href=\"https:\/\/schedulejs.com\/en\/contact-support-schedulejs\/\" class=\"ekit-menu-nav-link ekit-menu-dropdown-toggle\">Support<i class=\"icon icon-down-arrow1 elementskit-submenu-indicator\"><\/i><\/a>\n<ul class=\"elementskit-dropdown elementskit-submenu-panel\">\n\t<li id=\"menu-item-2935\" class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-2935 nav-item delay-1 nav-item elementskit-mobile-builder-content\" data-vertical-menu=750px><a href=\"https:\/\/schedulejs.com\/en\/submit-a-ticket\/\" class=\" dropdown-item\">Submit a ticket<\/a>\t<li id=\"menu-item-3367\" class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-3367 nav-item delay-1 nav-item elementskit-mobile-builder-content\" data-vertical-menu=750px><a target=\"_blank\" href=\"https:\/\/www.schedulejs.com\/api\/docs\/index.html\" class=\" dropdown-item\">API Documentation<\/a>\t<li id=\"menu-item-7319\" class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-7319 nav-item delay-1 nav-item elementskit-mobile-builder-content\" data-vertical-menu=750px><a target=\"_blank\" href=\"https:\/\/www.schedulejs.com\/manual\/index.html\" class=\" dropdown-item\">Developer Manual<\/a><\/ul>\n<\/li>\n<li id=\"menu-item-12479\" class=\"contact-menu menu-item menu-item-type-post_type menu-item-object-page menu-item-12479 nav-item delay-1 nav-item elementskit-mobile-builder-content\" data-vertical-menu=750px><a href=\"https:\/\/schedulejs.com\/en\/contact-schedulejs\/\" class=\"ekit-menu-nav-link\">Contact<\/a><\/li>\n<li id=\"menu-item-11921\" class=\"trp-language-switcher-container menu-item menu-item-type-post_type menu-item-object-language_switcher menu-item-has-children current-language-menu-item menu-item-11921 nav-item delay-1 nav-item elementskit-dropdown-has relative_position elementskit-dropdown-menu-default_width elementskit-mobile-builder-content\" data-vertical-menu=750px><a href=\"https:\/\/schedulejs.com\/en\/wp-json\/wp\/v2\/posts\/13149\" class=\"ekit-menu-nav-link ekit-menu-dropdown-toggle\"><span data-no-translation><img loading=\"lazy\" decoding=\"async\" class=\"trp-flag-image\" src=\"https:\/\/schedulejs.com\/wp-content\/plugins\/translatepress-multilingual\/assets\/images\/flags\/en_US.png\" width=\"18\" height=\"12\" alt=\"en_US\" title=\"English\"><span class=\"trp-ls-language-name\">English<\/span><\/span><i class=\"icon icon-down-arrow1 elementskit-submenu-indicator\"><\/i><\/a>\n<ul class=\"elementskit-dropdown elementskit-submenu-panel\">\n\t<li id=\"menu-item-11922\" class=\"trp-language-switcher-container menu-item menu-item-type-post_type menu-item-object-language_switcher menu-item-11922 nav-item delay-1 nav-item elementskit-mobile-builder-content\" data-vertical-menu=750px><a href=\"https:\/\/schedulejs.com\/fr\/wp-json\/wp\/v2\/posts\/13149\/\" class=\" dropdown-item\"><span data-no-translation><img loading=\"lazy\" decoding=\"async\" class=\"trp-flag-image\" src=\"https:\/\/schedulejs.com\/wp-content\/plugins\/translatepress-multilingual\/assets\/images\/flags\/fr_FR.png\" width=\"18\" height=\"12\" alt=\"fr_FR\" title=\"Fran\u00e7ais\"><span class=\"trp-ls-language-name\">Fran\u00e7ais<\/span><\/span><\/a><\/ul>\n<\/li>\n<\/ul>\n\t\t\t\t<div class=\"elementskit-nav-identity-panel\">\n\t\t\t\t\t<div class=\"elementskit-site-title\">\n\t\t\t\t\t\t<a class=\"elementskit-nav-logo\" href=\"https:\/\/schedulejs.com\/en\" target=\"_self\" rel=\"\">\n\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/schedulejs.com\/wp-content\/uploads\/2021\/04\/logo_schedulejs_blue_1128x191-1.png\" alt=\"Logo ScheduleJS small\">\n\t\t\t\t\t\t<\/a>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<button class=\"elementskit-menu-close elementskit-menu-toggler\" type=\"button\">X<\/button>\n\t\t\t\t<\/div>\n\t\t\t<\/div><div class=\"elementskit-menu-overlay elementskit-menu-offcanvas-elements elementskit-menu-toggler ekit-nav-menu--overlay\"><\/div><\/div>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-db2e1c4 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"db2e1c4\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-61a811f elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"61a811f\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;shape_divider_top&quot;:&quot;mountains&quot;,&quot;shape_divider_bottom&quot;:&quot;mountains&quot;}\">\n\t\t\t\t\t<div class=\"elementor-shape elementor-shape-top\" data-negative=\"false\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 1000 100\" preserveAspectRatio=\"none\">\n\t<path class=\"elementor-shape-fill\" opacity=\"0.33\" d=\"M473,67.3c-203.9,88.3-263.1-34-320.3,0C66,119.1,0,59.7,0,59.7V0h1000v59.7 c0,0-62.1,26.1-94.9,29.3c-32.8,3.3-62.8-12.3-75.8-22.1C806,49.6,745.3,8.7,694.9,4.7S492.4,59,473,67.3z\"\/>\n\t<path class=\"elementor-shape-fill\" opacity=\"0.66\" d=\"M734,67.3c-45.5,0-77.2-23.2-129.1-39.1c-28.6-8.7-150.3-10.1-254,39.1 s-91.7-34.4-149.2,0C115.7,118.3,0,39.8,0,39.8V0h1000v36.5c0,0-28.2-18.5-92.1-18.5C810.2,18.1,775.7,67.3,734,67.3z\"\/>\n\t<path class=\"elementor-shape-fill\" d=\"M766.1,28.9c-200-57.5-266,65.5-395.1,19.5C242,1.8,242,5.4,184.8,20.6C128,35.8,132.3,44.9,89.9,52.5C28.6,63.7,0,0,0,0 h1000c0,0-9.9,40.9-83.6,48.1S829.6,47,766.1,28.9z\"\/>\n<\/svg>\t\t<\/div>\n\t\t\t\t<div class=\"elementor-shape elementor-shape-bottom\" data-negative=\"false\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 1000 100\" preserveAspectRatio=\"none\">\n\t<path class=\"elementor-shape-fill\" opacity=\"0.33\" d=\"M473,67.3c-203.9,88.3-263.1-34-320.3,0C66,119.1,0,59.7,0,59.7V0h1000v59.7 c0,0-62.1,26.1-94.9,29.3c-32.8,3.3-62.8-12.3-75.8-22.1C806,49.6,745.3,8.7,694.9,4.7S492.4,59,473,67.3z\"\/>\n\t<path class=\"elementor-shape-fill\" opacity=\"0.66\" d=\"M734,67.3c-45.5,0-77.2-23.2-129.1-39.1c-28.6-8.7-150.3-10.1-254,39.1 s-91.7-34.4-149.2,0C115.7,118.3,0,39.8,0,39.8V0h1000v36.5c0,0-28.2-18.5-92.1-18.5C810.2,18.1,775.7,67.3,734,67.3z\"\/>\n\t<path class=\"elementor-shape-fill\" d=\"M766.1,28.9c-200-57.5-266,65.5-395.1,19.5C242,1.8,242,5.4,184.8,20.6C128,35.8,132.3,44.9,89.9,52.5C28.6,63.7,0,0,0,0 h1000c0,0-9.9,40.9-83.6,48.1S829.6,47,766.1,28.9z\"\/>\n<\/svg>\t\t<\/div>\n\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-bda97e0\" data-id=\"bda97e0\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-fe3c010 elementor-invisible elementor-widget elementor-widget-image\" data-id=\"fe3c010\" data-element_type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeIn&quot;}\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"4600\" height=\"3667\" src=\"https:\/\/schedulejs.com\/wp-content\/uploads\/2022\/11\/carousel-1.png\" class=\"attachment-full size-full\" alt=\"example of the carousel js viewer\" srcset=\"https:\/\/schedulejs.com\/wp-content\/uploads\/2022\/11\/carousel-1.png 4600w, https:\/\/schedulejs.com\/wp-content\/uploads\/2022\/11\/carousel-1-300x239.png 300w, https:\/\/schedulejs.com\/wp-content\/uploads\/2022\/11\/carousel-1-1024x816.png 1024w, https:\/\/schedulejs.com\/wp-content\/uploads\/2022\/11\/carousel-1-768x612.png 768w, https:\/\/schedulejs.com\/wp-content\/uploads\/2022\/11\/carousel-1-1536x1224.png 1536w, https:\/\/schedulejs.com\/wp-content\/uploads\/2022\/11\/carousel-1-2048x1633.png 2048w, https:\/\/schedulejs.com\/wp-content\/uploads\/2022\/11\/carousel-1-15x12.png 15w, https:\/\/schedulejs.com\/wp-content\/uploads\/2022\/11\/carousel-1-539x430.png 539w\" sizes=\"auto, (max-width: 4600px) 100vw, 4600px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-78deb67 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"78deb67\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;gradient&quot;,&quot;shape_divider_top&quot;:&quot;mountains&quot;}\">\n\t\t\t\t\t<div class=\"elementor-shape elementor-shape-top\" data-negative=\"false\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 1000 100\" preserveAspectRatio=\"none\">\n\t<path class=\"elementor-shape-fill\" opacity=\"0.33\" d=\"M473,67.3c-203.9,88.3-263.1-34-320.3,0C66,119.1,0,59.7,0,59.7V0h1000v59.7 c0,0-62.1,26.1-94.9,29.3c-32.8,3.3-62.8-12.3-75.8-22.1C806,49.6,745.3,8.7,694.9,4.7S492.4,59,473,67.3z\"\/>\n\t<path class=\"elementor-shape-fill\" opacity=\"0.66\" d=\"M734,67.3c-45.5,0-77.2-23.2-129.1-39.1c-28.6-8.7-150.3-10.1-254,39.1 s-91.7-34.4-149.2,0C115.7,118.3,0,39.8,0,39.8V0h1000v36.5c0,0-28.2-18.5-92.1-18.5C810.2,18.1,775.7,67.3,734,67.3z\"\/>\n\t<path class=\"elementor-shape-fill\" d=\"M766.1,28.9c-200-57.5-266,65.5-395.1,19.5C242,1.8,242,5.4,184.8,20.6C128,35.8,132.3,44.9,89.9,52.5C28.6,63.7,0,0,0,0 h1000c0,0-9.9,40.9-83.6,48.1S829.6,47,766.1,28.9z\"\/>\n<\/svg>\t\t<\/div>\n\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-d3a6922\" data-id=\"d3a6922\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;gradient&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-3144a1a elementor-invisible elementor-widget elementor-widget-elementskit-button\" data-id=\"3144a1a\" data-element_type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInLeft&quot;}\" data-widget_type=\"elementskit-button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<div class=\"ekit-wid-con\" >\t\t<div class=\"ekit-btn-wraper\">\n\t\t\t\t\t\t\t<a href=\"https:\/\/www.schedulejs.com\/blog\" class=\"elementskit-btn  whitespace--normal\" >\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tBack to the Blog\t\t\t\t<\/a>\n\t\t\t\t\t\t<\/div>\n        <\/div>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2cb9379 elementor-invisible elementor-widget elementor-widget-heading\" data-id=\"2cb9379\" data-element_type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInLeft&quot;}\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h1 class=\"elementor-heading-title elementor-size-xl\"><span style=\"font-weight:normal;\"><p dir=\"ltr\" style=\"line-height:1.38;margin-top:0pt;margin-bottom:0pt;\">Building custom Tree Tables in ScheduleJS<\/p><\/span><\/h1>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3a0a988 elementor-invisible elementor-widget elementor-widget-heading\" data-id=\"3a0a988\" data-element_type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInRight&quot;,&quot;_animation_delay&quot;:600}\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h6 class=\"elementor-heading-title elementor-size-default\">February 5th, 2026 - 2-3 minutes read<\/h6>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b479cb8 elementor-invisible elementor-widget elementor-widget-text-editor\" data-id=\"b479cb8\" data-element_type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeIn&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<h2 class=\"text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold\">Setting an Externally Configured Tree Table<\/h2><p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\">ScheduleJS offers a dedicated API for designing custom tree tables using two key components:<\/p><ul class=\"[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3\"><li class=\"whitespace-normal break-words pl-2\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">schedule-info-column-header-cell<\/code><\/li><li class=\"whitespace-normal break-words pl-2\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">schedule-info-column-row-cell<\/code><\/li><\/ul>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dc90900 elementor-invisible elementor-widget elementor-widget-text-editor\" data-id=\"dc90900\" data-element_type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeIn&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<h2 class=\"text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold\">Configuring the Tree Table layout\u00a0<\/h2><p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\">The tree table layout is purely made with HTML, CSS, and TypeScript using our Angular header cells and row cells components. These components are code wrappers, so you can populate these cells with virtually anything.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-18c379e elementor-aspect-ratio-169 elementor-widget elementor-widget-video\" data-id=\"18c379e\" data-element_type=\"widget\" data-settings=\"{&quot;video_type&quot;:&quot;hosted&quot;,&quot;autoplay&quot;:&quot;yes&quot;,&quot;loop&quot;:&quot;yes&quot;,&quot;controls&quot;:&quot;yes&quot;,&quot;aspect_ratio&quot;:&quot;169&quot;}\" data-widget_type=\"video.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"e-hosted-video elementor-wrapper elementor-fit-aspect-ratio elementor-open-inline\">\n\t\t\t\t\t<video class=\"elementor-video\" src=\"https:\/\/schedulejs.com\/wp-content\/uploads\/2026\/01\/3-external-tree-table.mp4\" autoplay=\"\" loop=\"\" controls=\"\" controlsList=\"nodownload\"><\/video>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ce1fbcc elementor-invisible elementor-widget elementor-widget-text-editor\" data-id=\"ce1fbcc\" data-element_type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeIn&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\">Custom components built with the info column API can feature:<\/p><ul class=\"[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3\"><li class=\"whitespace-normal break-words pl-2\">Pinned columns, using <code>schedule-info-column-cells-left-pin-wrapper<\/code><\/li><li class=\"whitespace-normal break-words pl-2\">Communication with the charts using the ScheduleJS internal API<\/li><li class=\"whitespace-normal break-words pl-2\">Listening to and emitting any event<\/li><\/ul>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bf03a7d elementor-invisible elementor-widget elementor-widget-text-editor\" data-id=\"bf03a7d\" data-element_type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeIn&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<h2 class=\"text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold\">Dynamic table headers<\/h2><p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\">Table headers are resizable by default and can be built to directly interact with the graphics. A few examples of header features can be:<\/p><ul class=\"[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3\"><li class=\"whitespace-normal break-words pl-2\">Additional column information<\/li><li class=\"whitespace-normal break-words pl-2\">Sorting based on column information<\/li><li class=\"whitespace-normal break-words pl-2\">Filtering with user input<\/li><\/ul>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ff6e5f5 elementor-invisible elementor-widget elementor-widget-text-editor\" data-id=\"ff6e5f5\" data-element_type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeIn&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<h2 class=\"text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold\">A frequently asked question<\/h2><p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\"><strong>Question:<\/strong> <em>Is it possible to replace the default tree table with a custom component (CoreListComponent) that works like the FlexGanttFX table (bound to list view with row expansion) but with additional functionalities?<\/em><\/p><p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\"><strong>Answer:<\/strong> Yes. Using ScheduleJS 1.4, if you want table rows and vertical scrolling synchronized with the graphics, the recommended solution is to build your tree table component using the tree table API with:<\/p><ul class=\"[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3\"><li class=\"whitespace-normal break-words pl-2\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">schedule-info-column-header-cell<\/code> to build your header cells templates<\/li><li class=\"whitespace-normal break-words pl-2\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">schedule-info-column-row-cell<\/code> to build your row cells templates<\/li><\/ul>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-f2eace9 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"f2eace9\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;gradient&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-8bea6f0\" data-id=\"8bea6f0\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-629ebc3 elementor-invisible elementor-widget elementor-widget-heading\" data-id=\"629ebc3\" data-element_type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInRight&quot;}\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">More implementation-related articles<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-ddc14ce elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"ddc14ce\" data-element_type=\"section\" data-settings=\"{&quot;shape_divider_top&quot;:&quot;mountains&quot;}\">\n\t\t\t\t\t<div class=\"elementor-shape elementor-shape-top\" data-negative=\"false\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 1000 100\" preserveAspectRatio=\"none\">\n\t<path class=\"elementor-shape-fill\" opacity=\"0.33\" d=\"M473,67.3c-203.9,88.3-263.1-34-320.3,0C66,119.1,0,59.7,0,59.7V0h1000v59.7 c0,0-62.1,26.1-94.9,29.3c-32.8,3.3-62.8-12.3-75.8-22.1C806,49.6,745.3,8.7,694.9,4.7S492.4,59,473,67.3z\"\/>\n\t<path class=\"elementor-shape-fill\" opacity=\"0.66\" d=\"M734,67.3c-45.5,0-77.2-23.2-129.1-39.1c-28.6-8.7-150.3-10.1-254,39.1 s-91.7-34.4-149.2,0C115.7,118.3,0,39.8,0,39.8V0h1000v36.5c0,0-28.2-18.5-92.1-18.5C810.2,18.1,775.7,67.3,734,67.3z\"\/>\n\t<path class=\"elementor-shape-fill\" d=\"M766.1,28.9c-200-57.5-266,65.5-395.1,19.5C242,1.8,242,5.4,184.8,20.6C128,35.8,132.3,44.9,89.9,52.5C28.6,63.7,0,0,0,0 h1000c0,0-9.9,40.9-83.6,48.1S829.6,47,766.1,28.9z\"\/>\n<\/svg>\t\t<\/div>\n\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-410297c\" data-id=\"410297c\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-fe84f8c premium-blog-align-left premium-blog-align-left elementor-invisible elementor-widget elementor-widget-premium-addon-blog\" data-id=\"fe84f8c\" data-element_type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInRight&quot;}\" data-widget_type=\"premium-addon-blog.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t<div class=\"premium-blog\">\n\t\t\t\t<div class=\"premium-blog-wrap  premium-blog-even\" data-scroll=\"1\" data-infinite=\"\" data-layout=\"even\" data-equal=\"true\" data-page=\"13149\" data-carousel=\"1\" data-grid=\"true\" data-fade=\"false\" data-play=\"1\" data-center=\"false\" data-slides-spacing=\"0\" data-speed=\"8000\" data-col=\"3\" data-col-tablet=\"2\" data-col-mobile=\"1\" data-arrows=\"true\" data-dots=\"true\" data-scroll-slides=\"\">\n\t\t\t\t\t<div class=\"premium-blog-post-outer-container\" data-total=\"3\">\n\t\t\t<div class=\"premium-blog-post-container premium-blog-skin-classic\">\n\t\t\t\t\t\t\t\t\t<div class=\"premium-blog-thumb-effect-wrapper\">\n\t\t\t\t\t\t<div class=\"premium-blog-thumbnail-container premium-blog-zoomin-effect\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"1707\" src=\"https:\/\/schedulejs.com\/wp-content\/uploads\/2025\/12\/keyboard-oldschool-scaled.jpg\" class=\"attachment-full size-full\" alt=\"\" \/>\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"premium-blog-thumbnail-overlay\">\n\t\t\t\t\t\t\t\t<a class=\"elementor-icon\" href=\"https:\/\/schedulejs.com\/en\/keyboard-events-and-user-interactions\/\" target=\"_self\"><\/a>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"premium-blog-content-wrapper \">\n\t\t\t\t\t<div class=\"premium-blog-content-wrapper-inner\">\n\t\t\t\t\t\t<div class=\"premium-blog-inner-container\">\n\t\t\t\t\t\t\t<div class=\"premium-blog-entry-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<h2 class=\"premium-blog-entry-title\">\n\t\t\t<a href=\"https:\/\/schedulejs.com\/en\/keyboard-events-and-user-interactions\/\" target=\"_self\">\n\t\t\t\tKeyboard Events and User Interactions\t\t\t<\/a>\n\t\t<\/h2>\n\t\t\t\t<div class=\"premium-blog-entry-meta\">\n\t\t\t\n\t\t\t\t\t\t\t<span class=\"premium-blog-meta-separator\">\u2022<\/span>\n\t\t\t\t<div class=\"premium-blog-post-time premium-blog-meta-data\">\n\t\t\t\t\t<i class=\"fa fa-clock-o\"><\/i>\n\t\t\t\t\t<span>April 9, 2026<\/span>\n\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t\t<span class=\"premium-blog-meta-separator\">\u2022<\/span>\n\t\t\t\t<div class=\"premium-blog-post-categories premium-blog-meta-data\">\n\t\t\t\t\t<i class=\"fa fa-align-left fa-fw\"><\/i>\n\t\t\t\t\t<a href=\"https:\/\/schedulejs.com\/en\/category\/features\/\" rel=\"category tag\">Features<\/a>, <a href=\"https:\/\/schedulejs.com\/en\/category\/implementations\/\" rel=\"category tag\">Implementations<\/a>\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t<\/div>\n\t\t\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<p class=\"premium-blog-post-content\">How to handle application events in ScheduleJS. Manage user inputs while performing ScheduleJS actions, design the perfect UX for your app.<\/p>\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\n\t\t\t\t<div class=\"premium-blog-post-outer-container\" data-total=\"3\">\n\t\t\t<div class=\"premium-blog-post-container premium-blog-skin-classic\">\n\t\t\t\t\t\t\t\t\t<div class=\"premium-blog-thumb-effect-wrapper\">\n\t\t\t\t\t\t<div class=\"premium-blog-thumbnail-container premium-blog-zoomin-effect\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1784\" height=\"1366\" src=\"https:\/\/schedulejs.com\/wp-content\/uploads\/2026\/03\/Screenshot-2026-03-13-at-14.47.46.png\" class=\"attachment-full size-full\" alt=\"\" \/>\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"premium-blog-thumbnail-overlay\">\n\t\t\t\t\t\t\t\t<a class=\"elementor-icon\" href=\"https:\/\/schedulejs.com\/en\/tree-table-customization\/\" target=\"_self\"><\/a>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"premium-blog-content-wrapper \">\n\t\t\t\t\t<div class=\"premium-blog-content-wrapper-inner\">\n\t\t\t\t\t\t<div class=\"premium-blog-inner-container\">\n\t\t\t\t\t\t\t<div class=\"premium-blog-entry-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<h2 class=\"premium-blog-entry-title premium-blog-entry-title\">\n\t\t\t<a href=\"https:\/\/schedulejs.com\/en\/tree-table-customization\/\" target=\"_self\">\n\t\t\t\tTree Table Customization\t\t\t<\/a>\n\t\t<\/h2>\n\t\t\t\t<div class=\"premium-blog-entry-meta\">\n\t\t\t\n\t\t\t\t\t\t\t<span class=\"premium-blog-meta-separator\">\u2022<\/span>\n\t\t\t\t<div class=\"premium-blog-post-time premium-blog-meta-data\">\n\t\t\t\t\t<i class=\"fa fa-clock-o\"><\/i>\n\t\t\t\t\t<span>March 13, 2026<\/span>\n\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t\t<span class=\"premium-blog-meta-separator\">\u2022<\/span>\n\t\t\t\t<div class=\"premium-blog-post-categories premium-blog-meta-data\">\n\t\t\t\t\t<i class=\"fa fa-align-left fa-fw\"><\/i>\n\t\t\t\t\t<a href=\"https:\/\/schedulejs.com\/en\/category\/features\/\" rel=\"category tag\">Features<\/a>, <a href=\"https:\/\/schedulejs.com\/en\/category\/implementations\/\" rel=\"category tag\">Implementations<\/a>\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t<\/div>\n\t\t\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<p class=\"premium-blog-post-content\">Tree tables can be extensively customised in ScheduleJS: colorful row headers, multiple child levels, display, and interactions<\/p>\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\n\t\t\t\t<div class=\"premium-blog-post-outer-container\" data-total=\"3\">\n\t\t\t<div class=\"premium-blog-post-container premium-blog-skin-classic\">\n\t\t\t\t\t\t\t\t\t<div class=\"premium-blog-thumb-effect-wrapper\">\n\t\t\t\t\t\t<div class=\"premium-blog-thumbnail-container premium-blog-zoomin-effect\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"2041\" src=\"https:\/\/schedulejs.com\/wp-content\/uploads\/2026\/02\/viewer-on-white-scaled.png\" class=\"attachment-full size-full\" alt=\"\" \/>\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"premium-blog-thumbnail-overlay\">\n\t\t\t\t\t\t\t\t<a class=\"elementor-icon\" href=\"https:\/\/schedulejs.com\/en\/building-custom-tree-tables-in-schedulejs\/\" target=\"_self\"><\/a>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"premium-blog-content-wrapper \">\n\t\t\t\t\t<div class=\"premium-blog-content-wrapper-inner\">\n\t\t\t\t\t\t<div class=\"premium-blog-inner-container\">\n\t\t\t\t\t\t\t<div class=\"premium-blog-entry-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<h2 class=\"premium-blog-entry-title premium-blog-entry-title premium-blog-entry-title\">\n\t\t\t<a href=\"https:\/\/schedulejs.com\/en\/building-custom-tree-tables-in-schedulejs\/\" target=\"_self\">\n\t\t\t\tBuilding custom Tree Tables in ScheduleJS\t\t\t<\/a>\n\t\t<\/h2>\n\t\t\t\t<div class=\"premium-blog-entry-meta\">\n\t\t\t\n\t\t\t\t\t\t\t<span class=\"premium-blog-meta-separator\">\u2022<\/span>\n\t\t\t\t<div class=\"premium-blog-post-time premium-blog-meta-data\">\n\t\t\t\t\t<i class=\"fa fa-clock-o\"><\/i>\n\t\t\t\t\t<span>February 5, 2026<\/span>\n\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t\t<span class=\"premium-blog-meta-separator\">\u2022<\/span>\n\t\t\t\t<div class=\"premium-blog-post-categories premium-blog-meta-data\">\n\t\t\t\t\t<i class=\"fa fa-align-left fa-fw\"><\/i>\n\t\t\t\t\t<a href=\"https:\/\/schedulejs.com\/en\/category\/features\/\" rel=\"category tag\">Features<\/a>, <a href=\"https:\/\/schedulejs.com\/en\/category\/implementations\/\" rel=\"category tag\">Implementations<\/a>\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t<\/div>\n\t\t\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<p class=\"premium-blog-post-content\">Build custom tree tables in ScheduleJS using schedule-info-column-header-cell and schedule-info-column-row-cell components.<\/p>\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\n\t\t\t\t<div class=\"premium-blog-post-outer-container\" data-total=\"3\">\n\t\t\t<div class=\"premium-blog-post-container premium-blog-skin-classic\">\n\t\t\t\t\t\t\t\t\t<div class=\"premium-blog-thumb-effect-wrapper\">\n\t\t\t\t\t\t<div class=\"premium-blog-thumbnail-container premium-blog-zoomin-effect\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"2880\" height=\"1800\" src=\"https:\/\/schedulejs.com\/wp-content\/uploads\/2023\/08\/Screenshot-2023-08-03-at-16.54.49.png\" class=\"attachment-full size-full\" alt=\"Big Gantt charts\" \/>\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"premium-blog-thumbnail-overlay\">\n\t\t\t\t\t\t\t\t<a class=\"elementor-icon\" href=\"https:\/\/schedulejs.com\/en\/row-management-and-layout-control-in-schedulejs\/\" target=\"_self\"><\/a>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"premium-blog-content-wrapper \">\n\t\t\t\t\t<div class=\"premium-blog-content-wrapper-inner\">\n\t\t\t\t\t\t<div class=\"premium-blog-inner-container\">\n\t\t\t\t\t\t\t<div class=\"premium-blog-entry-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<h2 class=\"premium-blog-entry-title premium-blog-entry-title premium-blog-entry-title premium-blog-entry-title\">\n\t\t\t<a href=\"https:\/\/schedulejs.com\/en\/row-management-and-layout-control-in-schedulejs\/\" target=\"_self\">\n\t\t\t\tRow Management and Layout Control in ScheduleJS\t\t\t<\/a>\n\t\t<\/h2>\n\t\t\t\t<div class=\"premium-blog-entry-meta\">\n\t\t\t\n\t\t\t\t\t\t\t<span class=\"premium-blog-meta-separator\">\u2022<\/span>\n\t\t\t\t<div class=\"premium-blog-post-time premium-blog-meta-data\">\n\t\t\t\t\t<i class=\"fa fa-clock-o\"><\/i>\n\t\t\t\t\t<span>January 17, 2026<\/span>\n\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t\t<span class=\"premium-blog-meta-separator\">\u2022<\/span>\n\t\t\t\t<div class=\"premium-blog-post-categories premium-blog-meta-data\">\n\t\t\t\t\t<i class=\"fa fa-align-left fa-fw\"><\/i>\n\t\t\t\t\t<a href=\"https:\/\/schedulejs.com\/en\/category\/features\/\" rel=\"category tag\">Features<\/a>, <a href=\"https:\/\/schedulejs.com\/en\/category\/implementations\/\" rel=\"category tag\">Implementations<\/a>\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t<\/div>\n\t\t\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<p class=\"premium-blog-post-content\">Unlock flexible row management in ScheduleJS: control individual row heights, mix GanttLayout and ChartLayout in the same view.<\/p>\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\n\t\t\t\t<div class=\"premium-blog-post-outer-container\" data-total=\"3\">\n\t\t\t<div class=\"premium-blog-post-container premium-blog-skin-classic\">\n\t\t\t\t\t\t\t\t\t<div class=\"premium-blog-thumb-effect-wrapper\">\n\t\t\t\t\t\t<div class=\"premium-blog-thumbnail-container premium-blog-zoomin-effect\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"2880\" height=\"1800\" src=\"https:\/\/schedulejs.com\/wp-content\/uploads\/2021\/05\/curved-link.png\" class=\"attachment-full size-full\" alt=\"JS Gantt charts Screenshot\" \/>\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"premium-blog-thumbnail-overlay\">\n\t\t\t\t\t\t\t\t<a class=\"elementor-icon\" href=\"https:\/\/schedulejs.com\/en\/drag-and-drop-operations\/\" target=\"_self\"><\/a>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"premium-blog-content-wrapper \">\n\t\t\t\t\t<div class=\"premium-blog-content-wrapper-inner\">\n\t\t\t\t\t\t<div class=\"premium-blog-inner-container\">\n\t\t\t\t\t\t\t<div class=\"premium-blog-entry-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<h2 class=\"premium-blog-entry-title premium-blog-entry-title premium-blog-entry-title premium-blog-entry-title premium-blog-entry-title\">\n\t\t\t<a href=\"https:\/\/schedulejs.com\/en\/drag-and-drop-operations\/\" target=\"_self\">\n\t\t\t\tAdvanced Drag and Drop Operations\t\t\t<\/a>\n\t\t<\/h2>\n\t\t\t\t<div class=\"premium-blog-entry-meta\">\n\t\t\t\n\t\t\t\t\t\t\t<span class=\"premium-blog-meta-separator\">\u2022<\/span>\n\t\t\t\t<div class=\"premium-blog-post-time premium-blog-meta-data\">\n\t\t\t\t\t<i class=\"fa fa-clock-o\"><\/i>\n\t\t\t\t\t<span>December 15, 2025<\/span>\n\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t\t<span class=\"premium-blog-meta-separator\">\u2022<\/span>\n\t\t\t\t<div class=\"premium-blog-post-categories premium-blog-meta-data\">\n\t\t\t\t\t<i class=\"fa fa-align-left fa-fw\"><\/i>\n\t\t\t\t\t<a href=\"https:\/\/schedulejs.com\/en\/category\/features\/\" rel=\"category tag\">Features<\/a>, <a href=\"https:\/\/schedulejs.com\/en\/category\/implementations\/\" rel=\"category tag\">Implementations<\/a>\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t<\/div>\n\t\t\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<p class=\"premium-blog-post-content\">Master drag and drop in ScheduleJS: render activities while dragging, access the drag canvas via DragViewTransversalSystemLayers.<\/p>\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\n\t\t\t\t<div class=\"premium-blog-post-outer-container\" data-total=\"3\">\n\t\t\t<div class=\"premium-blog-post-container premium-blog-skin-classic\">\n\t\t\t\t\t\t\t\t\t<div class=\"premium-blog-thumb-effect-wrapper\">\n\t\t\t\t\t\t<div class=\"premium-blog-thumbnail-container premium-blog-zoomin-effect\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"600\" height=\"320\" src=\"https:\/\/schedulejs.com\/wp-content\/uploads\/2022\/11\/logo-schedulejs-padded.jpg\" class=\"attachment-full size-full\" alt=\"ScheduleJS Logo\" \/>\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"premium-blog-thumbnail-overlay\">\n\t\t\t\t\t\t\t\t<a class=\"elementor-icon\" href=\"https:\/\/schedulejs.com\/en\/schedulejs-1-4-release-note-2\/\" target=\"_self\"><\/a>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"premium-blog-content-wrapper \">\n\t\t\t\t\t<div class=\"premium-blog-content-wrapper-inner\">\n\t\t\t\t\t\t<div class=\"premium-blog-inner-container\">\n\t\t\t\t\t\t\t<div class=\"premium-blog-entry-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<h2 class=\"premium-blog-entry-title premium-blog-entry-title premium-blog-entry-title premium-blog-entry-title premium-blog-entry-title premium-blog-entry-title\">\n\t\t\t<a href=\"https:\/\/schedulejs.com\/en\/schedulejs-1-4-release-note-2\/\" target=\"_self\">\n\t\t\t\tScheduleJS 1.4 Release note\t\t\t<\/a>\n\t\t<\/h2>\n\t\t\t\t<div class=\"premium-blog-entry-meta\">\n\t\t\t\n\t\t\t\t\t\t\t<span class=\"premium-blog-meta-separator\">\u2022<\/span>\n\t\t\t\t<div class=\"premium-blog-post-time premium-blog-meta-data\">\n\t\t\t\t\t<i class=\"fa fa-clock-o\"><\/i>\n\t\t\t\t\t<span>November 4, 2025<\/span>\n\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t\t<span class=\"premium-blog-meta-separator\">\u2022<\/span>\n\t\t\t\t<div class=\"premium-blog-post-categories premium-blog-meta-data\">\n\t\t\t\t\t<i class=\"fa fa-align-left fa-fw\"><\/i>\n\t\t\t\t\t<a href=\"https:\/\/schedulejs.com\/en\/category\/features\/\" rel=\"category tag\">Features<\/a>, <a href=\"https:\/\/schedulejs.com\/en\/category\/implementations\/\" rel=\"category tag\">Implementations<\/a>\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t<\/div>\n\t\t\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<p class=\"premium-blog-post-content\">ScheduleJS 1.4 release notes. A step forward towards modern Angular app building.<\/p>\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\n\t\t\t\t<div class=\"premium-blog-post-outer-container\" data-total=\"3\">\n\t\t\t<div class=\"premium-blog-post-container premium-blog-skin-classic\">\n\t\t\t\t\t\t\t\t\t<div class=\"premium-blog-thumb-effect-wrapper\">\n\t\t\t\t\t\t<div class=\"premium-blog-thumbnail-container premium-blog-zoomin-effect\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"860\" height=\"484\" src=\"https:\/\/schedulejs.com\/wp-content\/uploads\/2025\/09\/3910938.webp\" class=\"attachment-full size-full\" alt=\"\" \/>\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"premium-blog-thumbnail-overlay\">\n\t\t\t\t\t\t\t\t<a class=\"elementor-icon\" href=\"https:\/\/schedulejs.com\/en\/angular18-vs-angular16\/\" target=\"_self\"><\/a>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"premium-blog-content-wrapper \">\n\t\t\t\t\t<div class=\"premium-blog-content-wrapper-inner\">\n\t\t\t\t\t\t<div class=\"premium-blog-inner-container\">\n\t\t\t\t\t\t\t<div class=\"premium-blog-entry-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<h2 class=\"premium-blog-entry-title premium-blog-entry-title premium-blog-entry-title premium-blog-entry-title premium-blog-entry-title premium-blog-entry-title premium-blog-entry-title\">\n\t\t\t<a href=\"https:\/\/schedulejs.com\/en\/angular18-vs-angular16\/\" target=\"_self\">\n\t\t\t\tAngular 18 VS Angular 16\t\t\t<\/a>\n\t\t<\/h2>\n\t\t\t\t<div class=\"premium-blog-entry-meta\">\n\t\t\t\n\t\t\t\t\t\t\t<span class=\"premium-blog-meta-separator\">\u2022<\/span>\n\t\t\t\t<div class=\"premium-blog-post-time premium-blog-meta-data\">\n\t\t\t\t\t<i class=\"fa fa-clock-o\"><\/i>\n\t\t\t\t\t<span>July 25, 2025<\/span>\n\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t\t<span class=\"premium-blog-meta-separator\">\u2022<\/span>\n\t\t\t\t<div class=\"premium-blog-post-categories premium-blog-meta-data\">\n\t\t\t\t\t<i class=\"fa fa-align-left fa-fw\"><\/i>\n\t\t\t\t\t<a href=\"https:\/\/schedulejs.com\/en\/category\/features\/\" rel=\"category tag\">Features<\/a>, <a href=\"https:\/\/schedulejs.com\/en\/category\/implementations\/\" rel=\"category tag\">Implementations<\/a>\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t<\/div>\n\t\t\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<p class=\"premium-blog-post-content\">Angular 16 vs Angular 18 comparison: discover what's new in Angular, the arrival of signals, Zoneless mode, zone coalescing, and their impact on your projects.<\/p>\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\n\t\t\t\t<div class=\"premium-blog-post-outer-container\" data-total=\"3\">\n\t\t\t<div class=\"premium-blog-post-container premium-blog-skin-classic\">\n\t\t\t\t\t\t\t\t\t<div class=\"premium-blog-thumb-effect-wrapper\">\n\t\t\t\t\t\t<div class=\"premium-blog-thumbnail-container premium-blog-zoomin-effect\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"792\" height=\"446\" src=\"https:\/\/schedulejs.com\/wp-content\/uploads\/2025\/09\/Capture-decran-2025-09-29-160604.png\" class=\"attachment-full size-full\" alt=\"\" \/>\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"premium-blog-thumbnail-overlay\">\n\t\t\t\t\t\t\t\t<a class=\"elementor-icon\" href=\"https:\/\/schedulejs.com\/en\/angular-rome-conference\/\" target=\"_self\"><\/a>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"premium-blog-content-wrapper \">\n\t\t\t\t\t<div class=\"premium-blog-content-wrapper-inner\">\n\t\t\t\t\t\t<div class=\"premium-blog-inner-container\">\n\t\t\t\t\t\t\t<div class=\"premium-blog-entry-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<h2 class=\"premium-blog-entry-title premium-blog-entry-title premium-blog-entry-title premium-blog-entry-title premium-blog-entry-title premium-blog-entry-title premium-blog-entry-title premium-blog-entry-title\">\n\t\t\t<a href=\"https:\/\/schedulejs.com\/en\/angular-rome-conference\/\" target=\"_self\">\n\t\t\t\tAngular Rome Conference\t\t\t<\/a>\n\t\t<\/h2>\n\t\t\t\t<div class=\"premium-blog-entry-meta\">\n\t\t\t\n\t\t\t\t\t\t\t<span class=\"premium-blog-meta-separator\">\u2022<\/span>\n\t\t\t\t<div class=\"premium-blog-post-time premium-blog-meta-data\">\n\t\t\t\t\t<i class=\"fa fa-clock-o\"><\/i>\n\t\t\t\t\t<span>June 30, 2025<\/span>\n\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t\t<span class=\"premium-blog-meta-separator\">\u2022<\/span>\n\t\t\t\t<div class=\"premium-blog-post-categories premium-blog-meta-data\">\n\t\t\t\t\t<i class=\"fa fa-align-left fa-fw\"><\/i>\n\t\t\t\t\t<a href=\"https:\/\/schedulejs.com\/en\/category\/features\/\" rel=\"category tag\">Features<\/a>, <a href=\"https:\/\/schedulejs.com\/en\/category\/implementations\/\" rel=\"category tag\">Implementations<\/a>\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t<\/div>\n\t\t\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<p class=\"premium-blog-post-content\">Discover the Angular Rome Conference: workshops, domain-driven design, signals, state management, micro frontends.<\/p>\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\n\t\t\t\t<div class=\"premium-blog-post-outer-container\" data-total=\"3\">\n\t\t\t<div class=\"premium-blog-post-container premium-blog-skin-classic\">\n\t\t\t\t\t\t\t\t\t<div class=\"premium-blog-thumb-effect-wrapper\">\n\t\t\t\t\t\t<div class=\"premium-blog-thumbnail-container premium-blog-zoomin-effect\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"860\" height=\"482\" src=\"https:\/\/schedulejs.com\/wp-content\/uploads\/2025\/09\/Whats-New-in-Angular-18.webp\" class=\"attachment-full size-full\" alt=\"\" \/>\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"premium-blog-thumbnail-overlay\">\n\t\t\t\t\t\t\t\t<a class=\"elementor-icon\" href=\"https:\/\/schedulejs.com\/en\/whats-new-in-angular-18\/\" target=\"_self\"><\/a>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"premium-blog-content-wrapper \">\n\t\t\t\t\t<div class=\"premium-blog-content-wrapper-inner\">\n\t\t\t\t\t\t<div class=\"premium-blog-inner-container\">\n\t\t\t\t\t\t\t<div class=\"premium-blog-entry-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<h2 class=\"premium-blog-entry-title premium-blog-entry-title premium-blog-entry-title premium-blog-entry-title premium-blog-entry-title premium-blog-entry-title premium-blog-entry-title premium-blog-entry-title premium-blog-entry-title\">\n\t\t\t<a href=\"https:\/\/schedulejs.com\/en\/whats-new-in-angular-18\/\" target=\"_self\">\n\t\t\t\tWhat&#8217;s New in Angular 18\t\t\t<\/a>\n\t\t<\/h2>\n\t\t\t\t<div class=\"premium-blog-entry-meta\">\n\t\t\t\n\t\t\t\t\t\t\t<span class=\"premium-blog-meta-separator\">\u2022<\/span>\n\t\t\t\t<div class=\"premium-blog-post-time premium-blog-meta-data\">\n\t\t\t\t\t<i class=\"fa fa-clock-o\"><\/i>\n\t\t\t\t\t<span>March 29, 2025<\/span>\n\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t\t<span class=\"premium-blog-meta-separator\">\u2022<\/span>\n\t\t\t\t<div class=\"premium-blog-post-categories premium-blog-meta-data\">\n\t\t\t\t\t<i class=\"fa fa-align-left fa-fw\"><\/i>\n\t\t\t\t\t<a href=\"https:\/\/schedulejs.com\/en\/category\/features\/\" rel=\"category tag\">Features<\/a>, <a href=\"https:\/\/schedulejs.com\/en\/category\/implementations\/\" rel=\"category tag\">Implementations<\/a>\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t<\/div>\n\t\t\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<p class=\"premium-blog-post-content\">Discover Angular 18: zoneless mode, zone coalescing, native await, and TypeScript 5.4 compatibility.<\/p>\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\n\t\t\t\t<div class=\"premium-blog-post-outer-container\" data-total=\"3\">\n\t\t\t<div class=\"premium-blog-post-container premium-blog-skin-classic\">\n\t\t\t\t\t\t\t\t\t<div class=\"premium-blog-thumb-effect-wrapper\">\n\t\t\t\t\t\t<div class=\"premium-blog-thumbnail-container premium-blog-zoomin-effect\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1782\" height=\"1155\" src=\"https:\/\/schedulejs.com\/wp-content\/uploads\/2023\/03\/tr_anonymized_white_bg.png\" class=\"attachment-full size-full\" alt=\"Gantt Charts\" \/>\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"premium-blog-thumbnail-overlay\">\n\t\t\t\t\t\t\t\t<a class=\"elementor-icon\" href=\"https:\/\/schedulejs.com\/en\/top-3-best-javascript-gantt-chart-components\/\" target=\"_self\"><\/a>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"premium-blog-content-wrapper \">\n\t\t\t\t\t<div class=\"premium-blog-content-wrapper-inner\">\n\t\t\t\t\t\t<div class=\"premium-blog-inner-container\">\n\t\t\t\t\t\t\t<div class=\"premium-blog-entry-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<h2 class=\"premium-blog-entry-title premium-blog-entry-title premium-blog-entry-title premium-blog-entry-title premium-blog-entry-title premium-blog-entry-title premium-blog-entry-title premium-blog-entry-title premium-blog-entry-title premium-blog-entry-title\">\n\t\t\t<a href=\"https:\/\/schedulejs.com\/en\/top-3-best-javascript-gantt-chart-components\/\" target=\"_self\">\n\t\t\t\tTop 3 Best JavaScript Gantt Chart Components\t\t\t<\/a>\n\t\t<\/h2>\n\t\t\t\t<div class=\"premium-blog-entry-meta\">\n\t\t\t\n\t\t\t\t\t\t\t<span class=\"premium-blog-meta-separator\">\u2022<\/span>\n\t\t\t\t<div class=\"premium-blog-post-time premium-blog-meta-data\">\n\t\t\t\t\t<i class=\"fa fa-clock-o\"><\/i>\n\t\t\t\t\t<span>November 26, 2024<\/span>\n\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t\t<span class=\"premium-blog-meta-separator\">\u2022<\/span>\n\t\t\t\t<div class=\"premium-blog-post-categories premium-blog-meta-data\">\n\t\t\t\t\t<i class=\"fa fa-align-left fa-fw\"><\/i>\n\t\t\t\t\t<a href=\"https:\/\/schedulejs.com\/en\/category\/features\/\" rel=\"category tag\">Features<\/a>, <a href=\"https:\/\/schedulejs.com\/en\/category\/implementations\/\" rel=\"category tag\">Implementations<\/a>\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t<\/div>\n\t\t\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<p class=\"premium-blog-post-content\">The TOP 3 JavaScript Gantt chart. Discover their features, advantages, and disadvantages to choose the best tool for your project.<\/p>\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\n\t\t\t\t<\/div>\n\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1f0de9e elementor-widget elementor-widget-shortcode\" data-id=\"1f0de9e\" data-element_type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-shortcode\">    <div class=\"wpdiscuz_top_clearing\"><\/div>\r\n    <div id='comments' class='comments-area'><div id='respond' style='width: 0;height: 0;clear: both;margin: 0;padding: 0;'><\/div>    <div id=\"wpdcom\" class=\"wpdiscuz_unauth wpd-default wpd-layout-1 wpd-comments-open\">\r\n                    <div class=\"wc_social_plugin_wrapper\">\r\n                            <\/div>\r\n            <div class=\"wpd-form-wrap\">\r\n                <div class=\"wpd-form-head\">\r\n                                            <div class=\"wpd-sbs-toggle\">\r\n                            <i class=\"far fa-envelope\"><\/i> <span class=\"wpd-sbs-title\">S\u2019abonner<\/span> <i class=\"fas fa-caret-down\"><\/i>\r\n                        <\/div>\r\n                                            <div class=\"wpd-auth\">\r\n                                                <div class=\"wpd-login\">\r\n                            <a rel=\"nofollow\" href=\"https:\/\/schedulejs.com\/wp-login.php?redirect_to=https%3A%2F%2Fschedulejs.com%2Fen%2Ftop-3-best-javascript-gantt-chart-components%2F\"><i class='fas fa-sign-in-alt'><\/i> Connexion<\/a>                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n                                                    <div class=\"wpdiscuz-subscribe-bar wpdiscuz-hidden\">\r\n                                                    <form action=\"https:\/\/schedulejs.com\/wp-admin\/admin-ajax.php?action=wpdAddSubscription\" method=\"post\" id=\"wpdiscuz-subscribe-form\">\r\n                                <div class=\"wpdiscuz-subscribe-form-intro\">Notification pour <\/div>\r\n                                <div class=\"wpdiscuz-subscribe-form-option\" style=\"width:40%;\">\r\n                                    <select class=\"wpdiscuz_select\" name=\"wpdiscuzSubscriptionType\" >\r\n                                                                                    <option value=\"post\">nouveaux commentaires de suivi<\/option>\r\n                                                                                                                                <option value=\"all_comment\" >nouvelles r\u00e9ponses \u00e0 mes commentaires<\/option>\r\n                                                                                <\/select>\r\n                                <\/div>\r\n                                                                    <div class=\"wpdiscuz-item wpdiscuz-subscribe-form-email\">\r\n                                        <input  class=\"email\" type=\"email\" name=\"wpdiscuzSubscriptionEmail\" required=\"required\" value=\"\" placeholder=\"E-mail\"\/>\r\n                                    <\/div>\r\n                                                                    <div class=\"wpdiscuz-subscribe-form-button\">\r\n                                    <input id=\"wpdiscuz_subscription_button\" class=\"wpd-prim-button wpd_not_clicked\" type=\"submit\" value=\"\u203a\" name=\"wpdiscuz_subscription_button\" \/>\r\n                                <\/div> \r\n                                <input type=\"hidden\" id=\"wpdiscuz_subscribe_form_nonce\" name=\"wpdiscuz_subscribe_form_nonce\" value=\"3f40c312e1\" \/><input type=\"hidden\" name=\"_wp_http_referer\" value=\"\/en\/wp-json\/wp\/v2\/posts\/13149\" \/>                            <\/form>\r\n                                                <\/div>\r\n                            <div class=\"wpd-form wpd-form-wrapper wpd-main-form-wrapper\" id='wpd-main-form-wrapper-0_0'>\r\n                                        <form class=\"wpd_comm_form wpd_main_comm_form\"\r\n                      method=\"post\" enctype=\"multipart\/form-data\" data-uploading=\"false\">\r\n                    <div class=\"wpd-field-comment\">\r\n                        <div class=\"wpdiscuz-item wc-field-textarea\">\r\n                            <div class=\"wpdiscuz-textarea-wrap \">\r\n                                                                                                        <div class=\"wpd-avatar\">\r\n                                        <img alt='guest' src='https:\/\/secure.gravatar.com\/avatar\/?s=56&#038;d=mm&#038;r=g' srcset='https:\/\/secure.gravatar.com\/avatar\/?s=112&#038;d=mm&#038;r=g 2x' class='avatar avatar-56 photo avatar-default' height='56' width='56' \/>                                    <\/div>\r\n                                                <div id=\"wpd-editor-wraper-0_0\" style=\"display: none;\">\r\n                <div id=\"wpd-editor-char-counter-0_0\"\r\n                     class=\"wpd-editor-char-counter\"><\/div>\r\n                <label style=\"display: none;\" for=\"wc-textarea-0_0\">Label<\/label>\r\n                <textarea id=\"wc-textarea-0_0\" name=\"wc_comment\"\r\n                          class=\"wc_comment wpd-field\"><\/textarea>\r\n                <div id=\"wpd-editor-0_0\"><\/div>\r\n                        <div id=\"wpd-editor-toolbar-0_0\">\r\n                            <button title=\"Bold\"\r\n                        class=\"ql-bold\"  ><\/button>\r\n                                <button title=\"Italic\"\r\n                        class=\"ql-italic\"  ><\/button>\r\n                                <button title=\"Underline\"\r\n                        class=\"ql-underline\"  ><\/button>\r\n                                <button title=\"Strike\"\r\n                        class=\"ql-strike\"  ><\/button>\r\n                                <button title=\"Ordered List\"\r\n                        class=\"ql-list\" value='ordered' ><\/button>\r\n                                <button title=\"Unordered List\"\r\n                        class=\"ql-list\" value='bullet' ><\/button>\r\n                                <button title=\"Blockquote\"\r\n                        class=\"ql-blockquote\"  ><\/button>\r\n                                <button title=\"Code Block\"\r\n                        class=\"ql-code-block\"  ><\/button>\r\n                                <button title=\"Link\"\r\n                        class=\"ql-link\"  ><\/button>\r\n                                <button title=\"Source Code\"\r\n                        class=\"ql-sourcecode\"  data-wpde_button_name='sourcecode'>{}<\/button>\r\n                                <button title=\"Spoiler\"\r\n                        class=\"ql-spoiler\"  data-wpde_button_name='spoiler'>[+]<\/button>\r\n                            <div class=\"wpd-editor-buttons-right\">\r\n                <span class='wmu-upload-wrap' wpd-tooltip='Attacher une image \u00e0 ce commentaire' wpd-tooltip-position='left'><label class='wmu-add'><i class='far fa-image'><\/i><input style='display:none;' class='wmu-add-files' type='file' name='wmu_files[]'  accept='image\/*'\/><\/label><\/span>            <\/div>\r\n        <\/div>\r\n                    <\/div>\r\n                                        <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                    <div class=\"wpd-form-foot\" style='display:none;'>\r\n                        <div class=\"wpdiscuz-textarea-foot\">\r\n                                                        <div class=\"wpdiscuz-button-actions\"><div class='wmu-action-wrap'><div class='wmu-tabs wmu-images-tab wmu-hide'><\/div><\/div><\/div>\r\n                        <\/div>\r\n                                <div class=\"wpd-form-row\">\r\n                    <div class=\"wpd-form-col-left\">\r\n                        <div class=\"wpdiscuz-item wc_name-wrapper wpd-has-icon\">\r\n                                    <div class=\"wpd-field-icon\"><i class=\"fas fa-user\"><\/i><\/div>\r\n                                    <input id=\"wc_name-0_0\" value=\"\" required='required' aria-required='true' class=\"wc_name wpd-field\" type=\"text\" name=\"wc_name\" placeholder=\"Nom*\" maxlength=\"50\" pattern='.{3,50}' title=\"\">\r\n                <label for=\"wc_name-0_0\" class=\"wpdlb\">Nom*<\/label>\r\n                            <\/div>\r\n                        <div class=\"wpdiscuz-item wc_email-wrapper wpd-has-icon\">\r\n                                    <div class=\"wpd-field-icon\"><i class=\"fas fa-at\"><\/i><\/div>\r\n                                    <input id=\"wc_email-0_0\" value=\"\" required='required' aria-required='true' class=\"wc_email wpd-field\" type=\"email\" name=\"wc_email\" placeholder=\"E-mail*\" \/>\r\n                <label for=\"wc_email-0_0\" class=\"wpdlb\">E-mail*<\/label>\r\n                            <\/div>\r\n                            <div class=\"wpdiscuz-item wc_website-wrapper wpd-has-icon\">\r\n                                            <div class=\"wpd-field-icon\"><i class=\"fas fa-link\"><\/i><\/div>\r\n                                        <input id=\"wc_website-0_0\" value=\"\" class=\"wc_website wpd-field\" type=\"text\" name=\"wc_website\" placeholder=\"Site web\" \/>\r\n                    <label for=\"wc_website-0_0\" class=\"wpdlb\">Site web<\/label>\r\n                                    <\/div>\r\n                        <\/div>\r\n                <div class=\"wpd-form-col-right\">\r\n                    <div class=\"wc-field-submit\">\r\n                                            \r\n                                            <label class=\"wpd_label\" wpd-tooltip=\"Notifier des nouvelles r\u00e9ponses \u00e0 tous mes commentaires\">\r\n                            <input id=\"wc_notification_new_comment-0_0\" class=\"wc_notification_new_comment-0_0 wpd_label__checkbox\" value=\"comment\" type=\"checkbox\" name=\"wpdiscuz_notification_type\" \/>\r\n                            <span class=\"wpd_label__text\">\r\n                                <span class=\"wpd_label__check\">\r\n                                    <i class=\"fas fa-bell wpdicon wpdicon-on\"><\/i>\r\n                                    <i class=\"fas fa-bell-slash wpdicon wpdicon-off\"><\/i>\r\n                                <\/span>\r\n                            <\/span>\r\n                        <\/label>\r\n                                                                <input id=\"wpd-field-submit-0_0\" class=\"wc_comm_submit wpd_not_clicked wpd-prim-button\" type=\"submit\" name=\"submit\" value=\"Publier le commentaire\" \/>\r\n        <\/div>\r\n                <\/div>\r\n                    <div class=\"clearfix\"><\/div>\r\n        <\/div>\r\n                            <\/div>\r\n                                        <input type=\"hidden\" class=\"wpdiscuz_unique_id\" value=\"0_0\"\r\n                           name=\"wpdiscuz_unique_id\">\r\n                                    <\/form>\r\n                        <\/div>\r\n                <div id=\"wpdiscuz_hidden_secondary_form\" style=\"display: none;\">\r\n                    <div class=\"wpd-form wpd-form-wrapper wpd-secondary-form-wrapper\" id='wpd-secondary-form-wrapper-wpdiscuzuniqueid' style='display: none;'>\r\n                            <div class=\"wpd-secondary-forms-social-content\"><\/div>\r\n                <div class=\"clearfix\"><\/div>\r\n                                        <form class=\"wpd_comm_form wpd-secondary-form-wrapper\"\r\n                      method=\"post\" enctype=\"multipart\/form-data\" data-uploading=\"false\">\r\n                    <div class=\"wpd-field-comment\">\r\n                        <div class=\"wpdiscuz-item wc-field-textarea\">\r\n                            <div class=\"wpdiscuz-textarea-wrap \">\r\n                                                                                                        <div class=\"wpd-avatar\">\r\n                                        <img alt='guest' src='https:\/\/secure.gravatar.com\/avatar\/?s=56&#038;d=mm&#038;r=g' srcset='https:\/\/secure.gravatar.com\/avatar\/?s=112&#038;d=mm&#038;r=g 2x' class='avatar avatar-56 photo avatar-default' height='56' width='56' \/>                                    <\/div>\r\n                                                <div id=\"wpd-editor-wraper-wpdiscuzuniqueid\" style=\"display: none;\">\r\n                <div id=\"wpd-editor-char-counter-wpdiscuzuniqueid\"\r\n                     class=\"wpd-editor-char-counter\"><\/div>\r\n                <label style=\"display: none;\" for=\"wc-textarea-wpdiscuzuniqueid\">Label<\/label>\r\n                <textarea id=\"wc-textarea-wpdiscuzuniqueid\" name=\"wc_comment\"\r\n                          class=\"wc_comment wpd-field\"><\/textarea>\r\n                <div id=\"wpd-editor-wpdiscuzuniqueid\"><\/div>\r\n                        <div id=\"wpd-editor-toolbar-wpdiscuzuniqueid\">\r\n                            <button title=\"Bold\"\r\n                        class=\"ql-bold\"  ><\/button>\r\n                                <button title=\"Italic\"\r\n                        class=\"ql-italic\"  ><\/button>\r\n                                <button title=\"Underline\"\r\n                        class=\"ql-underline\"  ><\/button>\r\n                                <button title=\"Strike\"\r\n                        class=\"ql-strike\"  ><\/button>\r\n                                <button title=\"Ordered List\"\r\n                        class=\"ql-list\" value='ordered' ><\/button>\r\n                                <button title=\"Unordered List\"\r\n                        class=\"ql-list\" value='bullet' ><\/button>\r\n                                <button title=\"Blockquote\"\r\n                        class=\"ql-blockquote\"  ><\/button>\r\n                                <button title=\"Code Block\"\r\n                        class=\"ql-code-block\"  ><\/button>\r\n                                <button title=\"Link\"\r\n                        class=\"ql-link\"  ><\/button>\r\n                                <button title=\"Source Code\"\r\n                        class=\"ql-sourcecode\"  data-wpde_button_name='sourcecode'>{}<\/button>\r\n                                <button title=\"Spoiler\"\r\n                        class=\"ql-spoiler\"  data-wpde_button_name='spoiler'>[+]<\/button>\r\n                            <div class=\"wpd-editor-buttons-right\">\r\n                <span class='wmu-upload-wrap' wpd-tooltip='Attacher une image \u00e0 ce commentaire' wpd-tooltip-position='left'><label class='wmu-add'><i class='far fa-image'><\/i><input style='display:none;' class='wmu-add-files' type='file' name='wmu_files[]'  accept='image\/*'\/><\/label><\/span>            <\/div>\r\n        <\/div>\r\n                    <\/div>\r\n                                        <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                    <div class=\"wpd-form-foot\" style='display:none;'>\r\n                        <div class=\"wpdiscuz-textarea-foot\">\r\n                                                        <div class=\"wpdiscuz-button-actions\"><div class='wmu-action-wrap'><div class='wmu-tabs wmu-images-tab wmu-hide'><\/div><\/div><\/div>\r\n                        <\/div>\r\n                                <div class=\"wpd-form-row\">\r\n                    <div class=\"wpd-form-col-left\">\r\n                        <div class=\"wpdiscuz-item wc_name-wrapper wpd-has-icon\">\r\n                                    <div class=\"wpd-field-icon\"><i class=\"fas fa-user\"><\/i><\/div>\r\n                                    <input id=\"wc_name-wpdiscuzuniqueid\" value=\"\" required='required' aria-required='true' class=\"wc_name wpd-field\" type=\"text\" name=\"wc_name\" placeholder=\"Nom*\" maxlength=\"50\" pattern='.{3,50}' title=\"\">\r\n                <label for=\"wc_name-wpdiscuzuniqueid\" class=\"wpdlb\">Nom*<\/label>\r\n                            <\/div>\r\n                        <div class=\"wpdiscuz-item wc_email-wrapper wpd-has-icon\">\r\n                                    <div class=\"wpd-field-icon\"><i class=\"fas fa-at\"><\/i><\/div>\r\n                                    <input id=\"wc_email-wpdiscuzuniqueid\" value=\"\" required='required' aria-required='true' class=\"wc_email wpd-field\" type=\"email\" name=\"wc_email\" placeholder=\"E-mail*\" \/>\r\n                <label for=\"wc_email-wpdiscuzuniqueid\" class=\"wpdlb\">E-mail*<\/label>\r\n                            <\/div>\r\n                            <div class=\"wpdiscuz-item wc_website-wrapper wpd-has-icon\">\r\n                                            <div class=\"wpd-field-icon\"><i class=\"fas fa-link\"><\/i><\/div>\r\n                                        <input id=\"wc_website-wpdiscuzuniqueid\" value=\"\" class=\"wc_website wpd-field\" type=\"text\" name=\"wc_website\" placeholder=\"Site web\" \/>\r\n                    <label for=\"wc_website-wpdiscuzuniqueid\" class=\"wpdlb\">Site web<\/label>\r\n                                    <\/div>\r\n                        <\/div>\r\n                <div class=\"wpd-form-col-right\">\r\n                    <div class=\"wc-field-submit\">\r\n                                            \r\n                                            <label class=\"wpd_label\" wpd-tooltip=\"Notifier des nouvelles r\u00e9ponses \u00e0 tous mes commentaires\">\r\n                            <input id=\"wc_notification_new_comment-wpdiscuzuniqueid\" class=\"wc_notification_new_comment-wpdiscuzuniqueid wpd_label__checkbox\" value=\"comment\" type=\"checkbox\" name=\"wpdiscuz_notification_type\" \/>\r\n                            <span class=\"wpd_label__text\">\r\n                                <span class=\"wpd_label__check\">\r\n                                    <i class=\"fas fa-bell wpdicon wpdicon-on\"><\/i>\r\n                                    <i class=\"fas fa-bell-slash wpdicon wpdicon-off\"><\/i>\r\n                                <\/span>\r\n                            <\/span>\r\n                        <\/label>\r\n                                                                <input id=\"wpd-field-submit-wpdiscuzuniqueid\" class=\"wc_comm_submit wpd_not_clicked wpd-prim-button\" type=\"submit\" name=\"submit\" value=\"Publier le commentaire\" \/>\r\n        <\/div>\r\n                <\/div>\r\n                    <div class=\"clearfix\"><\/div>\r\n        <\/div>\r\n                            <\/div>\r\n                                        <input type=\"hidden\" class=\"wpdiscuz_unique_id\" value=\"wpdiscuzuniqueid\"\r\n                           name=\"wpdiscuz_unique_id\">\r\n                                    <\/form>\r\n                        <\/div>\r\n                <\/div>\r\n                    <\/div>\r\n                        <div id=\"wpd-threads\" class=\"wpd-thread-wrapper\">\r\n                <div class=\"wpd-thread-head\">\r\n                    <div class=\"wpd-thread-info \" data-comments-count=\"1\">\r\n                        <span class='wpdtc' title='1'>1<\/span> Commentaire                    <\/div>\r\n                                        <div class=\"wpd-space\"><\/div>\r\n                    <div class=\"wpd-thread-filter\">\r\n                                                    <div class=\"wpd-filter wpdf-reacted wpd_not_clicked\" wpd-tooltip=\"Commentaire avec le plus de r\u00e9actions\"><i class=\"fas fa-bolt\"><\/i><\/div>\r\n                                                        <div class=\"wpd-filter wpdf-hottest wpd_not_clicked\" wpd-tooltip=\"Fil de commentaire le plus chaud\"><i class=\"fas fa-fire\"><\/i><\/div>\r\n                                                        <div class=\"wpd-filter wpdf-sorting\">\r\n                                                                        <span class=\"wpdiscuz-sort-button wpdiscuz-date-sort-asc wpdiscuz-sort-button-active\" data-sorting=\"oldest\">Le plus ancien<\/span>\r\n                                                                        <i class=\"fas fa-sort-down\"><\/i>\r\n                                <div class=\"wpdiscuz-sort-buttons\">\r\n                                                                            <span class=\"wpdiscuz-sort-button wpdiscuz-date-sort-desc\" data-sorting=\"newest\">Le plus r\u00e9cent<\/span>\r\n                                                                                <span class=\"wpdiscuz-sort-button wpdiscuz-vote-sort-up\" data-sorting=\"by_vote\">Le plus populaire<\/span>\r\n                                                                        <\/div>\r\n                            <\/div>\r\n                                                <\/div>\r\n                <\/div>\r\n                <div class=\"wpd-comment-info-bar\">\r\n                    <div class=\"wpd-current-view\"><i class=\"fas fa-quote-left\"><\/i> Comments<\/div>\r\n                    <div class=\"wpd-filter-view-all\">Show all comments<\/div>\r\n                <\/div>\r\n                                <div class=\"wpd-thread-list\">\r\n                    <div id='wpd-comm-73_0' class='comment even thread-even depth-1 wpd-comment wpd_comment_level-1'><div class=\"wpd-comment-wrap wpd-blog-guest\">\r\n    <div class=\"wpd-comment-left \">\r\n    <div class=\"wpd-avatar \">\r\n    <img alt='lenormor' src='https:\/\/secure.gravatar.com\/avatar\/cc853959ecaa102f1edfb92e53cb80ddb39f99aad04bf727c1804947d0b89f38?s=64&#038;d=mm&#038;r=g' srcset='https:\/\/secure.gravatar.com\/avatar\/cc853959ecaa102f1edfb92e53cb80ddb39f99aad04bf727c1804947d0b89f38?s=128&#038;d=mm&#038;r=g 2x' class='avatar avatar-64 photo' height='64' width='64' \/>\r\n<\/div>\r\n    \r\n    \r\n<\/div>\r\n    <div id=\"comment-73\" class=\"wpd-comment-right\">\r\n    <div class=\"wpd-comment-header\">\r\n    <div class=\"wpd-comment-author \">\r\n    lenormor\r\n<\/div>\r\n    <div class=\"wpd-comment-date\" title=\"novembre 26, 2024 10:55 am\">\r\n    <i class='far fa-clock' aria-hidden='true'><\/i>\r\n    1 year \r\n<\/div>\r\n    \r\n    <div class=\"wpd-comment-share wpd-hidden wpd-tooltip wpd-top\">\r\n    <i class='fas fa-share-alt' aria-hidden='true'><\/i>\r\n    <div class=\"wpd-tooltip-content\">\r\n        <a class='wc_tw' rel='noreferrer' target='_blank' href='https:\/\/twitter.com\/intent\/tweet?text=Very good article, thanks for sharing.\n&url=https%3A%2F%2Fschedulejs.com%2Ffr%2Ftop-3-best-javascript-gantt-chart-components%2F%23comment-73' title='Share on Twitter'><i class='fab fa-twitter wpf-cta' aria-hidden='true'><\/i><\/a><a class='wc_vk' rel='noreferrer' target='_blank' href='https:\/\/vk.com\/share.php?url=https:\/\/schedulejs.com\/en\/top-3-best-javascript-gantt-chart-components\/' title='Share on VKontakte'><i class='fab fa-vk wpf-cta' aria-hidden='true'><\/i><\/a><a class='wc_ok' rel='noreferrer' target='_blank' href='https:\/\/connect.ok.ru\/offer?url=https:\/\/schedulejs.com\/en\/top-3-best-javascript-gantt-chart-components\/' title='Share on Odnoklassniki'><i class='fab fa-odnoklassniki wpf-cta' aria-hidden='true'><\/i><\/a>\r\n    <\/div>\r\n<\/div>\r\n    <div class=\"wpd-space\"><\/div>\r\n    <div class=\"wpd-comment-link wpd-hidden\">\r\n    <span wpd-tooltip='Comment link' wpd-tooltip-position='left'><i class='fas fa-link' aria-hidden='true' data-wpd-clipboard='https:\/\/schedulejs.com\/fr\/top-3-best-javascript-gantt-chart-components\/#comment-73'><\/i><\/span>\r\n<\/div>\r\n<\/div>\r\n    \r\n    <div class=\"wpd-comment-text\">\r\n    <p>Very good article, thanks for sharing.<\/p>\n\r\n<\/div>\r\n    <div class=\"wpd-comment-footer\">\r\n    <div class=\"wpd-vote\">\r\n    <div class=\"wpd-vote-up wpd_not_clicked\">\r\n        <svg aria-hidden='true' focusable='false' data-prefix='fas' data-icon='plus' class='svg-inline--fa fa-plus fa-w-14' role='img' xmlns='https:\/\/www.w3.org\/2000\/svg' viewBox='0 0 448 512'><path d='M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z'><\/path><\/svg>\r\n    <\/div>\r\n    <div class='wpd-vote-result' title='0'>0<\/div>\r\n    <div class=\"wpd-vote-down wpd_not_clicked\">\r\n        <svg aria-hidden='true' focusable='false' data-prefix='fas' data-icon='minus' class='svg-inline--fa fa-minus fa-w-14' role='img' xmlns='https:\/\/www.w3.org\/2000\/svg' viewBox='0 0 448 512'><path d='M416 208H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z'><\/path><\/svg>\r\n    <\/div>\r\n<\/div>\r\n    <div class=\"wpd-reply-button\">\r\n    <svg xmlns='https:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24'><path d='M10 9V5l-7 7 7 7v-4.1c5 0 8.5 1.6 11 5.1-1-5-4-10-11-11z'\/><path d='M0 0h24v24H0z' fill='none'\/><\/svg>\r\n    <span>Answer<\/span>\r\n<\/div>\r\n    <div class=\"wpd-space\"><\/div>\r\n    \r\n    \r\n<\/div>\r\n<\/div>\r\n<\/div><div id='wpdiscuz_form_anchor-73_0'><\/div><\/div><!-- \/\/ From wpDiscuz's Caches \/\/ -->                    <div class=\"wpdiscuz-comment-pagination\">\r\n                                            <\/div>\r\n                <\/div>\r\n            <\/div>\r\n                <\/div>\r\n        <\/div>\r\n    <div id=\"wpdiscuz-loading-bar\" class=\"wpdiscuz-loading-bar-unauth\"><\/div>\r\n    <div id=\"wpdiscuz-comment-message\" class=\"wpdiscuz-comment-message-unauth\"><\/div>\r\n    <\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Build custom tree tables in ScheduleJS using schedule-info-column-header-cell and schedule-info-column-row-cell components.<\/p>\n","protected":false},"author":1,"featured_media":13147,"comment_status":"open","ping_status":"open","sticky":false,"template":"elementor_header_footer","format":"standard","meta":{"footnotes":""},"categories":[56,57],"tags":[],"class_list":["post-13149","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-features","category-implementations","blog-post blog-spacing"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Building Tree Tables in ScheduleJS with HTML, CSS &amp; JavaScript<\/title>\n<meta name=\"description\" content=\"Build custom tree tables in ScheduleJS using schedule-info-column-header-cell and schedule-info-column-row-cell components.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/schedulejs.com\/en\/building-custom-tree-tables-in-schedulejs\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Building Tree Tables in ScheduleJS with HTML, CSS &amp; JavaScript\" \/>\n<meta property=\"og:description\" content=\"Build custom tree tables in ScheduleJS using schedule-info-column-header-cell and schedule-info-column-row-cell components.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/schedulejs.com\/en\/building-custom-tree-tables-in-schedulejs\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-05T09:38:31+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-05T09:42:04+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/schedulejs.com\/wp-content\/uploads\/2026\/02\/viewer-on-white-scaled.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"2041\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"wordpress\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ScheduleJS\" \/>\n<meta name=\"twitter:site\" content=\"@ScheduleJS\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"wordpress\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/schedulejs.com\\\/building-custom-tree-tables-in-schedulejs\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/schedulejs.com\\\/building-custom-tree-tables-in-schedulejs\\\/\"},\"author\":{\"name\":\"wordpress\",\"@id\":\"https:\\\/\\\/schedulejs.com\\\/#\\\/schema\\\/person\\\/dcf1d1444881cf1c59df51e7f2c07dbd\"},\"headline\":\"Building custom Tree Tables in ScheduleJS\",\"datePublished\":\"2026-02-05T09:38:31+00:00\",\"dateModified\":\"2026-02-05T09:42:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/schedulejs.com\\\/building-custom-tree-tables-in-schedulejs\\\/\"},\"wordCount\":530,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/schedulejs.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/schedulejs.com\\\/building-custom-tree-tables-in-schedulejs\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/schedulejs.com\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/viewer-on-white-scaled.png\",\"articleSection\":[\"Features\",\"Implementations\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/schedulejs.com\\\/building-custom-tree-tables-in-schedulejs\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/schedulejs.com\\\/building-custom-tree-tables-in-schedulejs\\\/\",\"url\":\"https:\\\/\\\/schedulejs.com\\\/building-custom-tree-tables-in-schedulejs\\\/\",\"name\":\"Building Tree Tables in ScheduleJS with HTML, CSS & JavaScript\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/schedulejs.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/schedulejs.com\\\/building-custom-tree-tables-in-schedulejs\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/schedulejs.com\\\/building-custom-tree-tables-in-schedulejs\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/schedulejs.com\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/viewer-on-white-scaled.png\",\"datePublished\":\"2026-02-05T09:38:31+00:00\",\"dateModified\":\"2026-02-05T09:42:04+00:00\",\"description\":\"Build custom tree tables in ScheduleJS using schedule-info-column-header-cell and schedule-info-column-row-cell components.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/schedulejs.com\\\/building-custom-tree-tables-in-schedulejs\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/schedulejs.com\\\/building-custom-tree-tables-in-schedulejs\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/schedulejs.com\\\/building-custom-tree-tables-in-schedulejs\\\/#primaryimage\",\"url\":\"https:\\\/\\\/schedulejs.com\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/viewer-on-white-scaled.png\",\"contentUrl\":\"https:\\\/\\\/schedulejs.com\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/viewer-on-white-scaled.png\",\"width\":2560,\"height\":2041},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/schedulejs.com\\\/building-custom-tree-tables-in-schedulejs\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/schedulejs.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Building custom Tree Tables in ScheduleJS\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/schedulejs.com\\\/#website\",\"url\":\"https:\\\/\\\/schedulejs.com\\\/\",\"name\":\"ScheduleJS - Applicative Gantt charts\",\"description\":\"Create advanced Gantt charts using web technologies\",\"publisher\":{\"@id\":\"https:\\\/\\\/schedulejs.com\\\/#organization\"},\"alternateName\":\"ScheduleJS\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/schedulejs.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/schedulejs.com\\\/#organization\",\"name\":\"ScheduleJS\",\"url\":\"https:\\\/\\\/schedulejs.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/schedulejs.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/schedulejs.com\\\/wp-content\\\/uploads\\\/2021\\\/05\\\/logo_schedulejs_blue_1500x500.png\",\"contentUrl\":\"https:\\\/\\\/schedulejs.com\\\/wp-content\\\/uploads\\\/2021\\\/05\\\/logo_schedulejs_blue_1500x500.png\",\"width\":1500,\"height\":500,\"caption\":\"ScheduleJS\"},\"image\":{\"@id\":\"https:\\\/\\\/schedulejs.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/ScheduleJS\",\"https:\\\/\\\/www.linkedin.com\\\/showcase\\\/schedulejs\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/schedulejs.com\\\/#\\\/schema\\\/person\\\/dcf1d1444881cf1c59df51e7f2c07dbd\",\"name\":\"wordpress\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6a75ce3fbea1f5d75b3421485bbb1d13c75ccd55580543fd67bcca73f43984b4?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6a75ce3fbea1f5d75b3421485bbb1d13c75ccd55580543fd67bcca73f43984b4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6a75ce3fbea1f5d75b3421485bbb1d13c75ccd55580543fd67bcca73f43984b4?s=96&d=mm&r=g\",\"caption\":\"wordpress\"},\"sameAs\":[\"https:\\\/\\\/schedulejs.com\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Building Tree Tables in ScheduleJS with HTML, CSS & JavaScript","description":"Build custom tree tables in ScheduleJS using schedule-info-column-header-cell and schedule-info-column-row-cell components.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/schedulejs.com\/en\/building-custom-tree-tables-in-schedulejs\/","og_locale":"en_US","og_type":"article","og_title":"Building Tree Tables in ScheduleJS with HTML, CSS & JavaScript","og_description":"Build custom tree tables in ScheduleJS using schedule-info-column-header-cell and schedule-info-column-row-cell components.","og_url":"https:\/\/schedulejs.com\/en\/building-custom-tree-tables-in-schedulejs\/","article_published_time":"2026-02-05T09:38:31+00:00","article_modified_time":"2026-02-05T09:42:04+00:00","og_image":[{"width":2560,"height":2041,"url":"https:\/\/schedulejs.com\/wp-content\/uploads\/2026\/02\/viewer-on-white-scaled.png","type":"image\/png"}],"author":"wordpress","twitter_card":"summary_large_image","twitter_creator":"@ScheduleJS","twitter_site":"@ScheduleJS","twitter_misc":{"Written by":"wordpress","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/schedulejs.com\/building-custom-tree-tables-in-schedulejs\/#article","isPartOf":{"@id":"https:\/\/schedulejs.com\/building-custom-tree-tables-in-schedulejs\/"},"author":{"name":"wordpress","@id":"https:\/\/schedulejs.com\/#\/schema\/person\/dcf1d1444881cf1c59df51e7f2c07dbd"},"headline":"Building custom Tree Tables in ScheduleJS","datePublished":"2026-02-05T09:38:31+00:00","dateModified":"2026-02-05T09:42:04+00:00","mainEntityOfPage":{"@id":"https:\/\/schedulejs.com\/building-custom-tree-tables-in-schedulejs\/"},"wordCount":530,"commentCount":0,"publisher":{"@id":"https:\/\/schedulejs.com\/#organization"},"image":{"@id":"https:\/\/schedulejs.com\/building-custom-tree-tables-in-schedulejs\/#primaryimage"},"thumbnailUrl":"https:\/\/schedulejs.com\/wp-content\/uploads\/2026\/02\/viewer-on-white-scaled.png","articleSection":["Features","Implementations"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/schedulejs.com\/building-custom-tree-tables-in-schedulejs\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/schedulejs.com\/building-custom-tree-tables-in-schedulejs\/","url":"https:\/\/schedulejs.com\/building-custom-tree-tables-in-schedulejs\/","name":"Building Tree Tables in ScheduleJS with HTML, CSS & JavaScript","isPartOf":{"@id":"https:\/\/schedulejs.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/schedulejs.com\/building-custom-tree-tables-in-schedulejs\/#primaryimage"},"image":{"@id":"https:\/\/schedulejs.com\/building-custom-tree-tables-in-schedulejs\/#primaryimage"},"thumbnailUrl":"https:\/\/schedulejs.com\/wp-content\/uploads\/2026\/02\/viewer-on-white-scaled.png","datePublished":"2026-02-05T09:38:31+00:00","dateModified":"2026-02-05T09:42:04+00:00","description":"Build custom tree tables in ScheduleJS using schedule-info-column-header-cell and schedule-info-column-row-cell components.","breadcrumb":{"@id":"https:\/\/schedulejs.com\/building-custom-tree-tables-in-schedulejs\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/schedulejs.com\/building-custom-tree-tables-in-schedulejs\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/schedulejs.com\/building-custom-tree-tables-in-schedulejs\/#primaryimage","url":"https:\/\/schedulejs.com\/wp-content\/uploads\/2026\/02\/viewer-on-white-scaled.png","contentUrl":"https:\/\/schedulejs.com\/wp-content\/uploads\/2026\/02\/viewer-on-white-scaled.png","width":2560,"height":2041},{"@type":"BreadcrumbList","@id":"https:\/\/schedulejs.com\/building-custom-tree-tables-in-schedulejs\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/schedulejs.com\/"},{"@type":"ListItem","position":2,"name":"Building custom Tree Tables in ScheduleJS"}]},{"@type":"WebSite","@id":"https:\/\/schedulejs.com\/#website","url":"https:\/\/schedulejs.com\/","name":"ScheduleJS - Applicative Gantt charts","description":"Create advanced Gantt charts using web technologies","publisher":{"@id":"https:\/\/schedulejs.com\/#organization"},"alternateName":"ScheduleJS","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/schedulejs.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/schedulejs.com\/#organization","name":"ScheduleJS","url":"https:\/\/schedulejs.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/schedulejs.com\/#\/schema\/logo\/image\/","url":"https:\/\/schedulejs.com\/wp-content\/uploads\/2021\/05\/logo_schedulejs_blue_1500x500.png","contentUrl":"https:\/\/schedulejs.com\/wp-content\/uploads\/2021\/05\/logo_schedulejs_blue_1500x500.png","width":1500,"height":500,"caption":"ScheduleJS"},"image":{"@id":"https:\/\/schedulejs.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/ScheduleJS","https:\/\/www.linkedin.com\/showcase\/schedulejs\/"]},{"@type":"Person","@id":"https:\/\/schedulejs.com\/#\/schema\/person\/dcf1d1444881cf1c59df51e7f2c07dbd","name":"wordpress","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/6a75ce3fbea1f5d75b3421485bbb1d13c75ccd55580543fd67bcca73f43984b4?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/6a75ce3fbea1f5d75b3421485bbb1d13c75ccd55580543fd67bcca73f43984b4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/6a75ce3fbea1f5d75b3421485bbb1d13c75ccd55580543fd67bcca73f43984b4?s=96&d=mm&r=g","caption":"wordpress"},"sameAs":["https:\/\/schedulejs.com"]}]}},"_links":{"self":[{"href":"https:\/\/schedulejs.com\/en\/wp-json\/wp\/v2\/posts\/13149","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/schedulejs.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/schedulejs.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/schedulejs.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/schedulejs.com\/en\/wp-json\/wp\/v2\/comments?post=13149"}],"version-history":[{"count":4,"href":"https:\/\/schedulejs.com\/en\/wp-json\/wp\/v2\/posts\/13149\/revisions"}],"predecessor-version":[{"id":13154,"href":"https:\/\/schedulejs.com\/en\/wp-json\/wp\/v2\/posts\/13149\/revisions\/13154"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/schedulejs.com\/en\/wp-json\/wp\/v2\/media\/13147"}],"wp:attachment":[{"href":"https:\/\/schedulejs.com\/en\/wp-json\/wp\/v2\/media?parent=13149"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/schedulejs.com\/en\/wp-json\/wp\/v2\/categories?post=13149"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/schedulejs.com\/en\/wp-json\/wp\/v2\/tags?post=13149"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}