Plugin Directory

Changeset 3385769


Ignore:
Timestamp:
10/28/2025 10:43:06 AM (5 months ago)
Author:
holdbar
Message:

Update to version 1.7.0 from GitHub

Location:
understory
Files:
30 edited
1 copied

Legend:

Unmodified
Added
Removed
  • understory/tags/1.7.0/CLAUDE.md

    r3385132 r3385769  
    204204### Version Management
    205205
    206 Current version: 1.6.3 (defined in both `package.json` and `understory.php`)
     206Current version: 1.7.0 (defined in both `package.json` and `understory.php`)
  • understory/tags/1.7.0/assets/js/gutenberg-booking-block-editor.js

    r3351241 r3385769  
    3333        default: "",
    3434      },
     35      tagIds: {
     36        type: "string",
     37        default: "",
     38      },
    3539      language: {
    3640        type: "string",
     
    4751      var [experiences, setExperiences] = useState([]);
    4852      var [languages, setLanguages] = useState([]);
     53      var [tags, setTags] = useState([]);
    4954      var [isLoading, setIsLoading] = useState(true);
    5055
     
    6267
    6368      function loadInitialData() {
    64         const { storefronts, languages } = understoryBookingData;
     69        const { storefronts, languages, tags } = understoryBookingData;
    6570
    6671        // Set storefronts options from preloaded data
     
    8186        ];
    8287        setLanguages(languageOptions);
     88
     89        // Set tags options from preloaded data
     90        const tagOptions = [
     91          { label: "All", value: "" },
     92          ...(tags || []).map((tag) => ({
     93            label: tag.name,
     94            value: tag.id,
     95          })),
     96        ];
     97        setTags(tagOptions);
    8398
    8499        if (!attributes.storefrontId) {
     
    166181              options: experiences,
    167182              onChange: (newVal) => setAttributes({ experienceId: newVal }),
     183            }),
     184            el(SelectControl, {
     185              label: "Filter by tags",
     186              multiple: true,
     187              value: attributes.tagIds ? attributes.tagIds.split(",") : [],
     188              options: tags,
     189              onChange: (newVal) => {
     190                setAttributes({ tagIds: newVal.join(",") });
     191              },
    168192            }),
    169193            el(SelectControl, {
     
    183207            "data-storefront-id": attributes.storefrontId,
    184208            "data-experience-id": attributes.experienceId,
     209            "data-tags": attributes.tagIds,
    185210            "data-language": attributes.language,
    186211          })
  • understory/tags/1.7.0/assets/js/gutenberg-booking-block-editor.min.js

    r3351241 r3385769  
    1 var UNDERSTORY_WIDGET_SCRIPT="https://widgets.understory.io/widgets/understory-booking-widget.js?environment=production";!function(e,t,n,o,r){var a=t.createElement,i=e.registerBlockType,{SelectControl:d,PanelBody:s}=n,c=r.InspectorControls,l=t.useEffect,u=t.useState;i("understory/booking-widget",{title:"Understory Booking Widget",icon:"tickets-alt",category:"widgets",attributes:{storefrontId:{type:"string",default:""},experienceId:{type:"string",default:""},language:{type:"string",default:o.defaultLanguage},companyId:{type:"string",default:o.companyId}},edit:function({attributes:e,setAttributes:t}){var[r,i]=u([]),[p,g]=u([]),[f,I]=u([]),[y,w]=u(!0);function b(n){const{companyId:r,ajaxUrl:a,nonce:i}=o;jQuery.post(a,{action:"understory_gutenberg_get_experiences_by_storefront",storefront_id:n,company_id:r,nonce:i}).done(function(n){if(!n.success)return console.error("Failed to load experiences:",n),void g([]);const o=[...Object.entries(n.data.experiences).map(([e,t])=>({label:t,value:e}))];g(o),e.experienceId&&!n.data.experiences[e.experienceId]&&t({experienceId:""})}).fail(function(){console.error("Failed to load experiences for storefront"),g([])})}return l(()=>{!function(){const{storefronts:n,languages:r}=o,a=[...Object.entries(n).map(([e,t])=>({label:t,value:e}))];i(a);const d=[...Object.entries(r).map(([e,t])=>({label:t,value:e}))];I(d),e.storefrontId||t({storefrontId:a[0]?.value||""});w(!1),function(e,t){if(!document.getElementById(t)){var n=document.createElement("script");n.id=t,n.src=e,n.async=!0,document.body.appendChild(n)}}(UNDERSTORY_WIDGET_SCRIPT)}()},[]),l(()=>{e.storefrontId&&b(e.storefrontId)},[e.storefrontId]),y?a(n.Spinner):a("div",{},a(c,{},a(s,{title:"Settings",initialOpen:!0},a(d,{label:"Storefront",value:e.storefrontId,options:r,onChange:e=>{t({storefrontId:e,experienceId:""}),e?b(e):g([])}}),a(d,{label:"Experience",value:e.experienceId,options:p,onChange:e=>t({experienceId:e})}),a(d,{label:"Language",value:e.language,options:f,onChange:e=>t({language:e})}))),a("div",{className:"understory-widget-preview"},a("div",{className:"understory-booking-widget","data-company-id":e.companyId,"data-storefront-id":e.storefrontId,"data-experience-id":e.experienceId,"data-language":e.language})))},save:function(){}})}(window.wp.blocks,window.wp.element,window.wp.components,window.understoryBookingData,window.wp.blockEditor);
     1var UNDERSTORY_WIDGET_SCRIPT="https://widgets.understory.io/widgets/understory-booking-widget.js?environment=production";!function(e,t,n,o,a){var r=t.createElement,i=e.registerBlockType,{SelectControl:d,PanelBody:s}=n,l=a.InspectorControls,c=t.useEffect,u=t.useState;i("understory/booking-widget",{title:"Understory Booking Widget",icon:"tickets-alt",category:"widgets",attributes:{storefrontId:{type:"string",default:""},experienceId:{type:"string",default:""},tagIds:{type:"string",default:""},language:{type:"string",default:o.defaultLanguage},companyId:{type:"string",default:o.companyId}},edit:function({attributes:e,setAttributes:t}){var[a,i]=u([]),[g,p]=u([]),[f,I]=u([]),[y,b]=u([]),[m,w]=u(!0);function v(n){const{companyId:a,ajaxUrl:r,nonce:i}=o;jQuery.post(r,{action:"understory_gutenberg_get_experiences_by_storefront",storefront_id:n,company_id:a,nonce:i}).done(function(n){if(!n.success)return console.error("Failed to load experiences:",n),void p([]);const o=[...Object.entries(n.data.experiences).map(([e,t])=>({label:t,value:e}))];p(o),e.experienceId&&!n.data.experiences[e.experienceId]&&t({experienceId:""})}).fail(function(){console.error("Failed to load experiences for storefront"),p([])})}return c(()=>{!function(){const{storefronts:n,languages:a,tags:r}=o,d=[...Object.entries(n).map(([e,t])=>({label:t,value:e}))];i(d);const s=[...Object.entries(a).map(([e,t])=>({label:t,value:e}))];I(s);const l=[{label:"All",value:""},...(r||[]).map(e=>({label:e.name,value:e.id}))];b(l),e.storefrontId||t({storefrontId:d[0]?.value||""});w(!1),function(e,t){if(!document.getElementById(t)){var n=document.createElement("script");n.id=t,n.src=e,n.async=!0,document.body.appendChild(n)}}(UNDERSTORY_WIDGET_SCRIPT)}()},[]),c(()=>{e.storefrontId&&v(e.storefrontId)},[e.storefrontId]),m?r(n.Spinner):r("div",{},r(l,{},r(s,{title:"Settings",initialOpen:!0},r(d,{label:"Storefront",value:e.storefrontId,options:a,onChange:e=>{t({storefrontId:e,experienceId:""}),e?v(e):p([])}}),r(d,{label:"Experience",value:e.experienceId,options:g,onChange:e=>t({experienceId:e})}),r(d,{label:"Filter by tags",multiple:!0,value:e.tagIds?e.tagIds.split(","):[],options:y,onChange:e=>{t({tagIds:e.join(",")})}}),r(d,{label:"Language",value:e.language,options:f,onChange:e=>t({language:e})}))),r("div",{className:"understory-widget-preview"},r("div",{className:"understory-booking-widget","data-company-id":e.companyId,"data-storefront-id":e.storefrontId,"data-experience-id":e.experienceId,"data-tags":e.tagIds,"data-language":e.language})))},save:function(){}})}(window.wp.blocks,window.wp.element,window.wp.components,window.understoryBookingData,window.wp.blockEditor);
  • understory/tags/1.7.0/includes/elementor/lib/class-availability-widget.php

    r3369871 r3385769  
    4646
    4747        // Fetch experience tags
     48        $tags_data = Understory_OptionsFetcher::get_tags($company_id);
     49
    4850        if (!empty($company_id)) {
    49             $tags_api_url = UNDERSTORY_API_BASE_URL . '/companies/' . urlencode($company_id) . '/experience-tags';
    50             $tags_data = Utils\DataFetcher::get($tags_api_url);
    51 
    5251            $locations_api_url = UNDERSTORY_API_BASE_URL . '/companies/' . urlencode($company_id) . '/locations';
    5352            $locations_data = Utils\DataFetcher::get($locations_api_url);
  • understory/tags/1.7.0/includes/elementor/lib/class-booking-widget.php

    r3369591 r3385769  
    6868        );
    6969
     70        $tags = Understory_OptionsFetcher::get_tags($company_id);
     71        $tags_options = [];
     72        if (!empty($tags)) {
     73            foreach ($tags as $tag) {
     74                $tags_options[$tag['id']] = $tag['name'];
     75            }
     76        }
     77
     78        $this->add_control(
     79            'tag_ids',
     80            [
     81                'label' => __('Filter by tags', 'understory'),
     82                'type' => \Elementor\Controls_Manager::SELECT2,
     83                'default' => '',
     84                'options' => $tags_options,
     85                'multiple' => true,
     86            ]
     87        );
     88
    7089        $this->add_control(
    7190            'language',
     
    106125        }
    107126
     127        if (!$settings['tag_ids']) {
     128            $settings['tag_ids'] = [];
     129        }
     130
    108131        ?>
    109132        <div class="understory-booking-widget" data-company-id="<?php echo esc_attr($company_id); ?>"
    110133            data-storefront-id="<?php echo esc_attr($storefront_id); ?>"
    111134            data-experience-id="<?php echo esc_attr($settings['experience_id']); ?>"
     135            <?php if (!empty($settings['tag_ids'])): ?>
     136                data-tags="<?php echo esc_attr(implode(',', $settings['tag_ids'])); ?>"
     137            <?php endif; ?>
    112138            data-language="<?php echo esc_attr($settings['language']); ?>"></div>
    113139        <?php
  • understory/tags/1.7.0/includes/elementor/lib/class-experiences-widget.php

    r3369591 r3385769  
    5656
    5757        // Fetch experience tags
    58         if (!empty($company_id)) {
    59             $experience_tags_api_url = UNDERSTORY_API_BASE_URL . '/companies/' . urlencode($company_id) . '/experience-tags';
    60             $tags = Utils\DataFetcher::get($experience_tags_api_url);
    61         }
     58        $tags = Understory_OptionsFetcher::get_tags($company_id);
    6259        $tags_options = [];
    6360        if (!empty($tags)) {
  • understory/tags/1.7.0/includes/gutenberg/class-booking-block.php

    r3369591 r3385769  
    2525
    2626    if ($company_id && function_exists('register_block_type')) {
     27      $tags = Understory_OptionsFetcher::get_tags($company_id);
     28
    2729      $script_file = defined('WP_DEBUG') && WP_DEBUG
    2830        ? 'assets/js/gutenberg-booking-block-editor.js'
     
    4648        'storefronts' => Understory_OptionsFetcher::get_storefronts($company_id),
    4749        'languages' => Understory_OptionsFetcher::get_languages(['with_all' => false]),
     50        'tags' => $tags,
    4851        'nonce' => wp_create_nonce('understory_gutenberg_nonce'),
    4952        'ajaxUrl' => admin_url('admin-ajax.php'),
     
    6366        'experienceId' => array('type' => 'string', 'default' => ''),
    6467        'language' => array('type' => 'string', 'default' => Understory_Settings::get_default_language()),
     68        'tagIds' => array('type' => 'string', 'default' => ''),
    6569        'companyId' => array('type' => 'string', 'default' => $company_id),
    6670        'storefrontId' => array('type' => 'string', 'default' => ''),
     
    9599    );
    96100
     101    $tag_ids = $attributes['tagIds'] ?? '';
     102
    97103    ob_start();
    98104    ?>
    99105    <div class="understory-booking-widget" data-company-id="<?php echo esc_attr($company_id); ?>"
    100106      data-storefront-id="<?php echo esc_attr($storefront_id); ?>"
    101       data-experience-id="<?php echo esc_attr($attributes['experienceId']); ?>"
     107      data-experience-id="<?php echo esc_attr($attributes['experienceId']); ?>" <?php if (!empty($tag_ids)): ?>
     108        data-tags="<?php echo esc_attr($tag_ids); ?>" <?php endif; ?>
    102109      data-language="<?php echo esc_attr($attributes['language']); ?>"></div>
    103110    <?php
  • understory/tags/1.7.0/includes/gutenberg/class-experiences-block.php

    r3369591 r3385769  
    3838
    3939    if ($company_option_set && function_exists('register_block_type')) {
    40       $experience_tags_api_url = UNDERSTORY_API_BASE_URL . '/companies/' . urlencode($company_id) . '/experience-tags';
    41       $tags = Utils\DataFetcher::get($experience_tags_api_url);
     40      $tags = Understory_OptionsFetcher::get_tags($company_id);
    4241
    4342      $script_file = defined('WP_DEBUG') && WP_DEBUG
     
    5857        'defaultLanguage' => Understory_Settings::get_default_language(),
    5958        'languages' => Understory_OptionsFetcher::get_languages(['with_all' => false]),
    60         'tags' => !empty($tags) ? $tags : [],
     59        'tags' => $tags,
    6160        'companyIdSet' => $company_option_set,
    6261        'storefronts' => Understory_Settings::get_all_storefronts($company_id) ?? [],
  • understory/tags/1.7.0/includes/shortcodes/class-booking-shortcode.php

    r3369591 r3385769  
    2929                'experience_id' => '',
    3030                'language' => Understory_Settings::get_default_language(),
     31                'tag_ids' => '',
    3132                // Fallback to default storefront if not set, enabling backwards
    3233                // single-storefront implementations
     
    5051        <div class="understory-booking-widget" data-company-id="<?php echo esc_attr($atts['company_id']); ?>"
    5152            data-storefront-id="<?php echo esc_attr($atts['storefront_id']); ?>" <?php if (!empty($atts['experience_id'])): ?>
    52                 data-experience-id="<?php echo esc_attr($atts['experience_id']); ?>" <?php endif; ?>
     53                data-experience-id="<?php echo esc_attr($atts['experience_id']); ?>" <?php endif; ?>         <?php if (!empty($atts['tag_ids'])): ?> data-tags="<?php echo esc_attr($atts['tag_ids']); ?>" <?php endif; ?>
    5354            data-language="<?php echo esc_attr($atts['language']); ?>"></div>
    5455        <?php
  • understory/tags/1.7.0/includes/tabs-content.php

    r3369591 r3385769  
    1414$languages = Understory_OptionsFetcher::get_languages(['with_all' => false]);
    1515
    16 $tags_api_url = UNDERSTORY_API_BASE_URL . '/companies/' . urlencode($company_id) . '/experience-tags';
    17 $experience_tags = Utils\DataFetcher::get($tags_api_url);
     16$experience_tags = Understory_OptionsFetcher::get_tags($company_id);
    1817
    1918$locations_api_url = UNDERSTORY_API_BASE_URL . '/companies/' . urlencode($company_id) . '/locations';
  • understory/tags/1.7.0/includes/tabs/tab-booking-widget-shortcode.php

    r3351241 r3385769  
    3131                </select>
    3232            </div>
     33            <div class="grid-container">
     34                <label for="booking-tag-select"><?php esc_html_e('Filter by tags', 'understory'); ?></label>
     35                <select id="booking-tag-select" data-shortcode-field="tag_ids" multiple>
     36                    <option value="" selected><?php esc_html_e('All', 'understory'); ?></option>
     37                    <?php foreach ($experience_tags as $experience_tag): ?>
     38                        <option value="<?php echo esc_attr($experience_tag['id']); ?>"><?php echo esc_html($experience_tag['name']); ?></option>
     39                    <?php endforeach; ?>
     40                </select>
     41            </div>
    3342        </div>
    3443        <div class="shortcode-container">
  • understory/tags/1.7.0/includes/utils/class-options-fetcher.php

    r3369591 r3385769  
    112112    }
    113113
     114    public static function get_tags($company_id)
     115    {
     116        if (empty($company_id)) {
     117            return [];
     118        }
     119
     120        $experience_tags_api_url = UNDERSTORY_API_BASE_URL . '/companies/' . urlencode($company_id) . '/experience-tags';
     121        $tags = Utils\DataFetcher::get($experience_tags_api_url);
     122
     123        return !empty($tags) ? $tags : [];
     124    }
     125
    114126    /**
    115127     * Get a user-friendly display name for language codes
  • understory/tags/1.7.0/package-lock.json

    r3385132 r3385769  
    11{
    22  "name": "understory",
    3   "version": "1.6.3",
     3  "version": "1.7.0",
    44  "lockfileVersion": 3,
    55  "requires": true,
     
    77    "": {
    88      "name": "understory",
    9       "version": "1.6.3",
     9      "version": "1.7.0",
    1010      "dependencies": {
    1111        "@mui/material": "6.4.2",
     
    112112      "devOptional": true,
    113113      "license": "MIT",
     114      "peer": true,
    114115      "dependencies": {
    115116        "@ampproject/remapping": "^2.2.0",
     
    20082009      ],
    20092010      "license": "MIT",
     2011      "peer": true,
    20102012      "engines": {
    20112013        "node": ">=18"
     
    20312033      ],
    20322034      "license": "MIT",
     2035      "peer": true,
    20332036      "engines": {
    20342037        "node": ">=18"
     
    21512154      "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==",
    21522155      "license": "MIT",
     2156      "peer": true,
    21532157      "dependencies": {
    21542158        "@babel/runtime": "^7.18.3",
     
    21942198      "integrity": "sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==",
    21952199      "license": "MIT",
     2200      "peer": true,
    21962201      "dependencies": {
    21972202        "@babel/runtime": "^7.18.3",
     
    38973902      "integrity": "sha512-9jKr53KbAJyyBRx8LRmX7ATXHlGtxVQdPgm1uyXMoEPMVkSJW1yO3vFgfYoDbGx4ZHcCNuWa4FkFIPWVt9fghA==",
    38983903      "license": "MIT",
     3904      "peer": true,
    38993905      "dependencies": {
    39003906        "@babel/runtime": "^7.26.0",
     
    40074013      "integrity": "sha512-XcbBYxDS+h/lgsoGe78ExXFZXtuIlSBpn/KsZq8PtZcIkUNJInkuDqcLd2rVBQrDC1u+rvVovdaWPf2FHKJf3w==",
    40084014      "license": "MIT",
     4015      "peer": true,
    40094016      "dependencies": {
    40104017        "@babel/runtime": "^7.26.0",
     
    54915498      "dev": true,
    54925499      "license": "MIT",
     5500      "peer": true,
    54935501      "dependencies": {
    54945502        "@babel/core": "^7.21.3",
     
    59966004      "devOptional": true,
    59976005      "license": "MIT",
     6006      "peer": true,
    59986007      "dependencies": {
    59996008        "@types/estree": "*",
     
    62116220      "devOptional": true,
    62126221      "license": "MIT",
     6222      "peer": true,
    62136223      "dependencies": {
    62146224        "undici-types": "~6.20.0"
     
    62636273      "integrity": "sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==",
    62646274      "license": "MIT",
     6275      "peer": true,
    62656276      "dependencies": {
    62666277        "@types/prop-types": "*",
     
    62736284      "integrity": "sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==",
    62746285      "license": "MIT",
     6286      "peer": true,
    62756287      "peerDependencies": {
    62766288        "@types/react": "^18.0.0"
     
    64076419      "dev": true,
    64086420      "license": "MIT",
     6421      "peer": true,
    64096422      "dependencies": {
    64106423        "@types/node": "*",
     
    65416554      "dev": true,
    65426555      "license": "BSD-2-Clause",
     6556      "peer": true,
    65436557      "dependencies": {
    65446558        "@typescript-eslint/scope-manager": "6.21.0",
     
    78687882      "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
    78697883      "license": "MIT",
     7884      "peer": true,
    78707885      "dependencies": {
    78717886        "loose-envify": "^1.1.0"
     
    89038918      "devOptional": true,
    89048919      "license": "MIT",
     8920      "peer": true,
    89058921      "bin": {
    89068922        "acorn": "bin/acorn"
     
    89738989      "devOptional": true,
    89748990      "license": "MIT",
     8991      "peer": true,
    89758992      "dependencies": {
    89768993        "fast-deep-equal": "^3.1.1",
     
    99749991      ],
    99759992      "license": "MIT",
     9993      "peer": true,
    99769994      "dependencies": {
    99779995        "caniuse-lite": "^1.0.30001688",
     
    1157011588      "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==",
    1157111589      "license": "MIT",
     11590      "peer": true,
    1157211591      "funding": {
    1157311592        "type": "github",
     
    1157911598      "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz",
    1158011599      "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==",
    11581       "license": "MIT"
     11600      "license": "MIT",
     11601      "peer": true
    1158211602    },
    1158311603    "node_modules/debounce": {
     
    1196611986      "integrity": "sha512-DPnhUXvmvKT2dFA/j7B+riVLUt9Q6RKJlcppojL5CoRywJJKLDYnRlw0gTFKfgDPHP5E04UoB71SxoJlVZy8FA==",
    1196711987      "dev": true,
    11968       "license": "BSD-3-Clause"
     11988      "license": "BSD-3-Clause",
     11989      "peer": true
    1196911990    },
    1197011991    "node_modules/diff": {
     
    1263512656      "dev": true,
    1263612657      "license": "MIT",
     12658      "peer": true,
    1263712659      "dependencies": {
    1263812660        "@eslint-community/eslint-utils": "^4.2.0",
     
    1269112713      "dev": true,
    1269212714      "license": "MIT",
     12715      "peer": true,
    1269312716      "bin": {
    1269412717        "eslint-config-prettier": "bin/cli.js"
     
    1623116254      "dev": true,
    1623216255      "license": "MIT",
     16256      "peer": true,
    1623316257      "dependencies": {
    1623416258        "@jest/core": "^29.7.0",
     
    1823818262      "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==",
    1823918263      "license": "MIT",
     18264      "peer": true,
    1824018265      "engines": {
    1824118266        "node": "*"
     
    1850018525      "dev": true,
    1850118526      "license": "MIT",
     18527      "peer": true,
    1850218528      "dependencies": {
    1850318529        "ajv": "^6.12.6",
     
    1954719573      "dev": true,
    1954819574      "license": "Apache-2.0",
    19549       "peer": true,
    1955019575      "dependencies": {
    1955119576        "playwright-core": "1.55.0"
     
    1956719592      "dev": true,
    1956819593      "license": "Apache-2.0",
    19569       "peer": true,
    1957019594      "bin": {
    1957119595        "playwright-core": "cli.js"
     
    1958619610        "darwin"
    1958719611      ],
    19588       "peer": true,
    1958919612      "engines": {
    1959019613        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
     
    1963619659      ],
    1963719660      "license": "MIT",
     19661      "peer": true,
    1963819662      "dependencies": {
    1963919663        "nanoid": "^3.3.8",
     
    2035920383      "dev": true,
    2036020384      "license": "MIT",
     20385      "peer": true,
    2036120386      "bin": {
    2036220387        "prettier": "bin/prettier.cjs"
     
    2074720772      "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
    2074820773      "license": "MIT",
     20774      "peer": true,
    2074920775      "dependencies": {
    2075020776        "loose-envify": "^1.1.0"
     
    2076920795      "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
    2077020796      "license": "MIT",
     20797      "peer": true,
    2077120798      "dependencies": {
    2077220799        "loose-envify": "^1.1.0",
     
    2080320830      "dev": true,
    2080420831      "license": "MIT",
     20832      "peer": true,
    2080520833      "engines": {
    2080620834        "node": ">=0.10.0"
     
    2105821086      "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz",
    2105921087      "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==",
    21060       "license": "MIT"
     21088      "license": "MIT",
     21089      "peer": true
    2106121090    },
    2106221091    "node_modules/reflect.getprototypeof": {
     
    2164921678      "dev": true,
    2165021679      "license": "MIT",
     21680      "peer": true,
    2165121681      "dependencies": {
    2165221682        "chokidar": "^4.0.0",
     
    2175321783      "devOptional": true,
    2175421784      "license": "MIT",
     21785      "peer": true,
    2175521786      "dependencies": {
    2175621787        "fast-deep-equal": "^3.1.3",
     
    2320323234      ],
    2320423235      "license": "MIT",
     23236      "peer": true,
    2320523237      "dependencies": {
    2320623238        "@csstools/css-parser-algorithms": "^3.0.4",
     
    2353123563      "dev": true,
    2353223564      "license": "MIT",
     23565      "peer": true,
    2353323566      "dependencies": {
    2353423567        "cssesc": "^3.0.0",
     
    2429124324      "dev": true,
    2429224325      "license": "(MIT OR CC0-1.0)",
     24326      "peer": true,
    2429324327      "engines": {
    2429424328        "node": ">=10"
     
    2493524969      "devOptional": true,
    2493624970      "license": "MIT",
     24971      "peer": true,
    2493724972      "dependencies": {
    2493824973        "@types/eslint-scope": "^3.7.7",
     
    2504125076      "dev": true,
    2504225077      "license": "MIT",
     25078      "peer": true,
    2504325079      "dependencies": {
    2504425080        "@discoveryjs/json-ext": "^0.5.0",
     
    2512125157      "dev": true,
    2512225158      "license": "MIT",
     25159      "peer": true,
    2512325160      "dependencies": {
    2512425161        "@types/bonjour": "^3.5.9",
  • understory/tags/1.7.0/readme.txt

    r3385132 r3385769  
    44Requires at least: 5.0
    55Tested up to: 6.8
    6 Stable tag: 1.6.3
     6Stable tag: 1.7.0
    77Requires PHP: 7.0
    88License: GPLv2 or later
     
    7777
    7878== Changelog ==
     79
     80= 1.7.0 =
     81* Booking widget: Add support for selecting categories.
    7982
    8083= 1.6.3 =
  • understory/tags/1.7.0/understory.php

    r3385132 r3385769  
    33Plugin Name: Understory
    44Description: Connect your WordPress site with Understory, to easily add your booking widget to posts and pages.
    5 Version: 1.6.3
     5Version: 1.7.0
    66Author: Understory
    77Text Domain: understory
     
    1818define('UNDERSTORY_PLUGIN_URL', plugin_dir_url(__FILE__));
    1919define('UNDERSTORY_PLUGIN_SLUG', 'understory');
    20 define('UNDERSTORY_PLUGIN_VERSION', '1.6.3');
     20define('UNDERSTORY_PLUGIN_VERSION', '1.7.0');
    2121define('UNDERSTORY_OPTION_KEY', 'understory_options');
    2222define('UNDERSTORY_NONCE_KEY', 'understory_nonce');
  • understory/trunk/CLAUDE.md

    r3385132 r3385769  
    204204### Version Management
    205205
    206 Current version: 1.6.3 (defined in both `package.json` and `understory.php`)
     206Current version: 1.7.0 (defined in both `package.json` and `understory.php`)
  • understory/trunk/assets/js/gutenberg-booking-block-editor.js

    r3351241 r3385769  
    3333        default: "",
    3434      },
     35      tagIds: {
     36        type: "string",
     37        default: "",
     38      },
    3539      language: {
    3640        type: "string",
     
    4751      var [experiences, setExperiences] = useState([]);
    4852      var [languages, setLanguages] = useState([]);
     53      var [tags, setTags] = useState([]);
    4954      var [isLoading, setIsLoading] = useState(true);
    5055
     
    6267
    6368      function loadInitialData() {
    64         const { storefronts, languages } = understoryBookingData;
     69        const { storefronts, languages, tags } = understoryBookingData;
    6570
    6671        // Set storefronts options from preloaded data
     
    8186        ];
    8287        setLanguages(languageOptions);
     88
     89        // Set tags options from preloaded data
     90        const tagOptions = [
     91          { label: "All", value: "" },
     92          ...(tags || []).map((tag) => ({
     93            label: tag.name,
     94            value: tag.id,
     95          })),
     96        ];
     97        setTags(tagOptions);
    8398
    8499        if (!attributes.storefrontId) {
     
    166181              options: experiences,
    167182              onChange: (newVal) => setAttributes({ experienceId: newVal }),
     183            }),
     184            el(SelectControl, {
     185              label: "Filter by tags",
     186              multiple: true,
     187              value: attributes.tagIds ? attributes.tagIds.split(",") : [],
     188              options: tags,
     189              onChange: (newVal) => {
     190                setAttributes({ tagIds: newVal.join(",") });
     191              },
    168192            }),
    169193            el(SelectControl, {
     
    183207            "data-storefront-id": attributes.storefrontId,
    184208            "data-experience-id": attributes.experienceId,
     209            "data-tags": attributes.tagIds,
    185210            "data-language": attributes.language,
    186211          })
  • understory/trunk/assets/js/gutenberg-booking-block-editor.min.js

    r3351241 r3385769  
    1 var UNDERSTORY_WIDGET_SCRIPT="https://widgets.understory.io/widgets/understory-booking-widget.js?environment=production";!function(e,t,n,o,r){var a=t.createElement,i=e.registerBlockType,{SelectControl:d,PanelBody:s}=n,c=r.InspectorControls,l=t.useEffect,u=t.useState;i("understory/booking-widget",{title:"Understory Booking Widget",icon:"tickets-alt",category:"widgets",attributes:{storefrontId:{type:"string",default:""},experienceId:{type:"string",default:""},language:{type:"string",default:o.defaultLanguage},companyId:{type:"string",default:o.companyId}},edit:function({attributes:e,setAttributes:t}){var[r,i]=u([]),[p,g]=u([]),[f,I]=u([]),[y,w]=u(!0);function b(n){const{companyId:r,ajaxUrl:a,nonce:i}=o;jQuery.post(a,{action:"understory_gutenberg_get_experiences_by_storefront",storefront_id:n,company_id:r,nonce:i}).done(function(n){if(!n.success)return console.error("Failed to load experiences:",n),void g([]);const o=[...Object.entries(n.data.experiences).map(([e,t])=>({label:t,value:e}))];g(o),e.experienceId&&!n.data.experiences[e.experienceId]&&t({experienceId:""})}).fail(function(){console.error("Failed to load experiences for storefront"),g([])})}return l(()=>{!function(){const{storefronts:n,languages:r}=o,a=[...Object.entries(n).map(([e,t])=>({label:t,value:e}))];i(a);const d=[...Object.entries(r).map(([e,t])=>({label:t,value:e}))];I(d),e.storefrontId||t({storefrontId:a[0]?.value||""});w(!1),function(e,t){if(!document.getElementById(t)){var n=document.createElement("script");n.id=t,n.src=e,n.async=!0,document.body.appendChild(n)}}(UNDERSTORY_WIDGET_SCRIPT)}()},[]),l(()=>{e.storefrontId&&b(e.storefrontId)},[e.storefrontId]),y?a(n.Spinner):a("div",{},a(c,{},a(s,{title:"Settings",initialOpen:!0},a(d,{label:"Storefront",value:e.storefrontId,options:r,onChange:e=>{t({storefrontId:e,experienceId:""}),e?b(e):g([])}}),a(d,{label:"Experience",value:e.experienceId,options:p,onChange:e=>t({experienceId:e})}),a(d,{label:"Language",value:e.language,options:f,onChange:e=>t({language:e})}))),a("div",{className:"understory-widget-preview"},a("div",{className:"understory-booking-widget","data-company-id":e.companyId,"data-storefront-id":e.storefrontId,"data-experience-id":e.experienceId,"data-language":e.language})))},save:function(){}})}(window.wp.blocks,window.wp.element,window.wp.components,window.understoryBookingData,window.wp.blockEditor);
     1var UNDERSTORY_WIDGET_SCRIPT="https://widgets.understory.io/widgets/understory-booking-widget.js?environment=production";!function(e,t,n,o,a){var r=t.createElement,i=e.registerBlockType,{SelectControl:d,PanelBody:s}=n,l=a.InspectorControls,c=t.useEffect,u=t.useState;i("understory/booking-widget",{title:"Understory Booking Widget",icon:"tickets-alt",category:"widgets",attributes:{storefrontId:{type:"string",default:""},experienceId:{type:"string",default:""},tagIds:{type:"string",default:""},language:{type:"string",default:o.defaultLanguage},companyId:{type:"string",default:o.companyId}},edit:function({attributes:e,setAttributes:t}){var[a,i]=u([]),[g,p]=u([]),[f,I]=u([]),[y,b]=u([]),[m,w]=u(!0);function v(n){const{companyId:a,ajaxUrl:r,nonce:i}=o;jQuery.post(r,{action:"understory_gutenberg_get_experiences_by_storefront",storefront_id:n,company_id:a,nonce:i}).done(function(n){if(!n.success)return console.error("Failed to load experiences:",n),void p([]);const o=[...Object.entries(n.data.experiences).map(([e,t])=>({label:t,value:e}))];p(o),e.experienceId&&!n.data.experiences[e.experienceId]&&t({experienceId:""})}).fail(function(){console.error("Failed to load experiences for storefront"),p([])})}return c(()=>{!function(){const{storefronts:n,languages:a,tags:r}=o,d=[...Object.entries(n).map(([e,t])=>({label:t,value:e}))];i(d);const s=[...Object.entries(a).map(([e,t])=>({label:t,value:e}))];I(s);const l=[{label:"All",value:""},...(r||[]).map(e=>({label:e.name,value:e.id}))];b(l),e.storefrontId||t({storefrontId:d[0]?.value||""});w(!1),function(e,t){if(!document.getElementById(t)){var n=document.createElement("script");n.id=t,n.src=e,n.async=!0,document.body.appendChild(n)}}(UNDERSTORY_WIDGET_SCRIPT)}()},[]),c(()=>{e.storefrontId&&v(e.storefrontId)},[e.storefrontId]),m?r(n.Spinner):r("div",{},r(l,{},r(s,{title:"Settings",initialOpen:!0},r(d,{label:"Storefront",value:e.storefrontId,options:a,onChange:e=>{t({storefrontId:e,experienceId:""}),e?v(e):p([])}}),r(d,{label:"Experience",value:e.experienceId,options:g,onChange:e=>t({experienceId:e})}),r(d,{label:"Filter by tags",multiple:!0,value:e.tagIds?e.tagIds.split(","):[],options:y,onChange:e=>{t({tagIds:e.join(",")})}}),r(d,{label:"Language",value:e.language,options:f,onChange:e=>t({language:e})}))),r("div",{className:"understory-widget-preview"},r("div",{className:"understory-booking-widget","data-company-id":e.companyId,"data-storefront-id":e.storefrontId,"data-experience-id":e.experienceId,"data-tags":e.tagIds,"data-language":e.language})))},save:function(){}})}(window.wp.blocks,window.wp.element,window.wp.components,window.understoryBookingData,window.wp.blockEditor);
  • understory/trunk/includes/elementor/lib/class-availability-widget.php

    r3369871 r3385769  
    4646
    4747        // Fetch experience tags
     48        $tags_data = Understory_OptionsFetcher::get_tags($company_id);
     49
    4850        if (!empty($company_id)) {
    49             $tags_api_url = UNDERSTORY_API_BASE_URL . '/companies/' . urlencode($company_id) . '/experience-tags';
    50             $tags_data = Utils\DataFetcher::get($tags_api_url);
    51 
    5251            $locations_api_url = UNDERSTORY_API_BASE_URL . '/companies/' . urlencode($company_id) . '/locations';
    5352            $locations_data = Utils\DataFetcher::get($locations_api_url);
  • understory/trunk/includes/elementor/lib/class-booking-widget.php

    r3369591 r3385769  
    6868        );
    6969
     70        $tags = Understory_OptionsFetcher::get_tags($company_id);
     71        $tags_options = [];
     72        if (!empty($tags)) {
     73            foreach ($tags as $tag) {
     74                $tags_options[$tag['id']] = $tag['name'];
     75            }
     76        }
     77
     78        $this->add_control(
     79            'tag_ids',
     80            [
     81                'label' => __('Filter by tags', 'understory'),
     82                'type' => \Elementor\Controls_Manager::SELECT2,
     83                'default' => '',
     84                'options' => $tags_options,
     85                'multiple' => true,
     86            ]
     87        );
     88
    7089        $this->add_control(
    7190            'language',
     
    106125        }
    107126
     127        if (!$settings['tag_ids']) {
     128            $settings['tag_ids'] = [];
     129        }
     130
    108131        ?>
    109132        <div class="understory-booking-widget" data-company-id="<?php echo esc_attr($company_id); ?>"
    110133            data-storefront-id="<?php echo esc_attr($storefront_id); ?>"
    111134            data-experience-id="<?php echo esc_attr($settings['experience_id']); ?>"
     135            <?php if (!empty($settings['tag_ids'])): ?>
     136                data-tags="<?php echo esc_attr(implode(',', $settings['tag_ids'])); ?>"
     137            <?php endif; ?>
    112138            data-language="<?php echo esc_attr($settings['language']); ?>"></div>
    113139        <?php
  • understory/trunk/includes/elementor/lib/class-experiences-widget.php

    r3369591 r3385769  
    5656
    5757        // Fetch experience tags
    58         if (!empty($company_id)) {
    59             $experience_tags_api_url = UNDERSTORY_API_BASE_URL . '/companies/' . urlencode($company_id) . '/experience-tags';
    60             $tags = Utils\DataFetcher::get($experience_tags_api_url);
    61         }
     58        $tags = Understory_OptionsFetcher::get_tags($company_id);
    6259        $tags_options = [];
    6360        if (!empty($tags)) {
  • understory/trunk/includes/gutenberg/class-booking-block.php

    r3369591 r3385769  
    2525
    2626    if ($company_id && function_exists('register_block_type')) {
     27      $tags = Understory_OptionsFetcher::get_tags($company_id);
     28
    2729      $script_file = defined('WP_DEBUG') && WP_DEBUG
    2830        ? 'assets/js/gutenberg-booking-block-editor.js'
     
    4648        'storefronts' => Understory_OptionsFetcher::get_storefronts($company_id),
    4749        'languages' => Understory_OptionsFetcher::get_languages(['with_all' => false]),
     50        'tags' => $tags,
    4851        'nonce' => wp_create_nonce('understory_gutenberg_nonce'),
    4952        'ajaxUrl' => admin_url('admin-ajax.php'),
     
    6366        'experienceId' => array('type' => 'string', 'default' => ''),
    6467        'language' => array('type' => 'string', 'default' => Understory_Settings::get_default_language()),
     68        'tagIds' => array('type' => 'string', 'default' => ''),
    6569        'companyId' => array('type' => 'string', 'default' => $company_id),
    6670        'storefrontId' => array('type' => 'string', 'default' => ''),
     
    9599    );
    96100
     101    $tag_ids = $attributes['tagIds'] ?? '';
     102
    97103    ob_start();
    98104    ?>
    99105    <div class="understory-booking-widget" data-company-id="<?php echo esc_attr($company_id); ?>"
    100106      data-storefront-id="<?php echo esc_attr($storefront_id); ?>"
    101       data-experience-id="<?php echo esc_attr($attributes['experienceId']); ?>"
     107      data-experience-id="<?php echo esc_attr($attributes['experienceId']); ?>" <?php if (!empty($tag_ids)): ?>
     108        data-tags="<?php echo esc_attr($tag_ids); ?>" <?php endif; ?>
    102109      data-language="<?php echo esc_attr($attributes['language']); ?>"></div>
    103110    <?php
  • understory/trunk/includes/gutenberg/class-experiences-block.php

    r3369591 r3385769  
    3838
    3939    if ($company_option_set && function_exists('register_block_type')) {
    40       $experience_tags_api_url = UNDERSTORY_API_BASE_URL . '/companies/' . urlencode($company_id) . '/experience-tags';
    41       $tags = Utils\DataFetcher::get($experience_tags_api_url);
     40      $tags = Understory_OptionsFetcher::get_tags($company_id);
    4241
    4342      $script_file = defined('WP_DEBUG') && WP_DEBUG
     
    5857        'defaultLanguage' => Understory_Settings::get_default_language(),
    5958        'languages' => Understory_OptionsFetcher::get_languages(['with_all' => false]),
    60         'tags' => !empty($tags) ? $tags : [],
     59        'tags' => $tags,
    6160        'companyIdSet' => $company_option_set,
    6261        'storefronts' => Understory_Settings::get_all_storefronts($company_id) ?? [],
  • understory/trunk/includes/shortcodes/class-booking-shortcode.php

    r3369591 r3385769  
    2929                'experience_id' => '',
    3030                'language' => Understory_Settings::get_default_language(),
     31                'tag_ids' => '',
    3132                // Fallback to default storefront if not set, enabling backwards
    3233                // single-storefront implementations
     
    5051        <div class="understory-booking-widget" data-company-id="<?php echo esc_attr($atts['company_id']); ?>"
    5152            data-storefront-id="<?php echo esc_attr($atts['storefront_id']); ?>" <?php if (!empty($atts['experience_id'])): ?>
    52                 data-experience-id="<?php echo esc_attr($atts['experience_id']); ?>" <?php endif; ?>
     53                data-experience-id="<?php echo esc_attr($atts['experience_id']); ?>" <?php endif; ?>         <?php if (!empty($atts['tag_ids'])): ?> data-tags="<?php echo esc_attr($atts['tag_ids']); ?>" <?php endif; ?>
    5354            data-language="<?php echo esc_attr($atts['language']); ?>"></div>
    5455        <?php
  • understory/trunk/includes/tabs-content.php

    r3369591 r3385769  
    1414$languages = Understory_OptionsFetcher::get_languages(['with_all' => false]);
    1515
    16 $tags_api_url = UNDERSTORY_API_BASE_URL . '/companies/' . urlencode($company_id) . '/experience-tags';
    17 $experience_tags = Utils\DataFetcher::get($tags_api_url);
     16$experience_tags = Understory_OptionsFetcher::get_tags($company_id);
    1817
    1918$locations_api_url = UNDERSTORY_API_BASE_URL . '/companies/' . urlencode($company_id) . '/locations';
  • understory/trunk/includes/tabs/tab-booking-widget-shortcode.php

    r3351241 r3385769  
    3131                </select>
    3232            </div>
     33            <div class="grid-container">
     34                <label for="booking-tag-select"><?php esc_html_e('Filter by tags', 'understory'); ?></label>
     35                <select id="booking-tag-select" data-shortcode-field="tag_ids" multiple>
     36                    <option value="" selected><?php esc_html_e('All', 'understory'); ?></option>
     37                    <?php foreach ($experience_tags as $experience_tag): ?>
     38                        <option value="<?php echo esc_attr($experience_tag['id']); ?>"><?php echo esc_html($experience_tag['name']); ?></option>
     39                    <?php endforeach; ?>
     40                </select>
     41            </div>
    3342        </div>
    3443        <div class="shortcode-container">
  • understory/trunk/includes/utils/class-options-fetcher.php

    r3369591 r3385769  
    112112    }
    113113
     114    public static function get_tags($company_id)
     115    {
     116        if (empty($company_id)) {
     117            return [];
     118        }
     119
     120        $experience_tags_api_url = UNDERSTORY_API_BASE_URL . '/companies/' . urlencode($company_id) . '/experience-tags';
     121        $tags = Utils\DataFetcher::get($experience_tags_api_url);
     122
     123        return !empty($tags) ? $tags : [];
     124    }
     125
    114126    /**
    115127     * Get a user-friendly display name for language codes
  • understory/trunk/package-lock.json

    r3385132 r3385769  
    11{
    22  "name": "understory",
    3   "version": "1.6.3",
     3  "version": "1.7.0",
    44  "lockfileVersion": 3,
    55  "requires": true,
     
    77    "": {
    88      "name": "understory",
    9       "version": "1.6.3",
     9      "version": "1.7.0",
    1010      "dependencies": {
    1111        "@mui/material": "6.4.2",
     
    112112      "devOptional": true,
    113113      "license": "MIT",
     114      "peer": true,
    114115      "dependencies": {
    115116        "@ampproject/remapping": "^2.2.0",
     
    20082009      ],
    20092010      "license": "MIT",
     2011      "peer": true,
    20102012      "engines": {
    20112013        "node": ">=18"
     
    20312033      ],
    20322034      "license": "MIT",
     2035      "peer": true,
    20332036      "engines": {
    20342037        "node": ">=18"
     
    21512154      "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==",
    21522155      "license": "MIT",
     2156      "peer": true,
    21532157      "dependencies": {
    21542158        "@babel/runtime": "^7.18.3",
     
    21942198      "integrity": "sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==",
    21952199      "license": "MIT",
     2200      "peer": true,
    21962201      "dependencies": {
    21972202        "@babel/runtime": "^7.18.3",
     
    38973902      "integrity": "sha512-9jKr53KbAJyyBRx8LRmX7ATXHlGtxVQdPgm1uyXMoEPMVkSJW1yO3vFgfYoDbGx4ZHcCNuWa4FkFIPWVt9fghA==",
    38983903      "license": "MIT",
     3904      "peer": true,
    38993905      "dependencies": {
    39003906        "@babel/runtime": "^7.26.0",
     
    40074013      "integrity": "sha512-XcbBYxDS+h/lgsoGe78ExXFZXtuIlSBpn/KsZq8PtZcIkUNJInkuDqcLd2rVBQrDC1u+rvVovdaWPf2FHKJf3w==",
    40084014      "license": "MIT",
     4015      "peer": true,
    40094016      "dependencies": {
    40104017        "@babel/runtime": "^7.26.0",
     
    54915498      "dev": true,
    54925499      "license": "MIT",
     5500      "peer": true,
    54935501      "dependencies": {
    54945502        "@babel/core": "^7.21.3",
     
    59966004      "devOptional": true,
    59976005      "license": "MIT",
     6006      "peer": true,
    59986007      "dependencies": {
    59996008        "@types/estree": "*",
     
    62116220      "devOptional": true,
    62126221      "license": "MIT",
     6222      "peer": true,
    62136223      "dependencies": {
    62146224        "undici-types": "~6.20.0"
     
    62636273      "integrity": "sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==",
    62646274      "license": "MIT",
     6275      "peer": true,
    62656276      "dependencies": {
    62666277        "@types/prop-types": "*",
     
    62736284      "integrity": "sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==",
    62746285      "license": "MIT",
     6286      "peer": true,
    62756287      "peerDependencies": {
    62766288        "@types/react": "^18.0.0"
     
    64076419      "dev": true,
    64086420      "license": "MIT",
     6421      "peer": true,
    64096422      "dependencies": {
    64106423        "@types/node": "*",
     
    65416554      "dev": true,
    65426555      "license": "BSD-2-Clause",
     6556      "peer": true,
    65436557      "dependencies": {
    65446558        "@typescript-eslint/scope-manager": "6.21.0",
     
    78687882      "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
    78697883      "license": "MIT",
     7884      "peer": true,
    78707885      "dependencies": {
    78717886        "loose-envify": "^1.1.0"
     
    89038918      "devOptional": true,
    89048919      "license": "MIT",
     8920      "peer": true,
    89058921      "bin": {
    89068922        "acorn": "bin/acorn"
     
    89738989      "devOptional": true,
    89748990      "license": "MIT",
     8991      "peer": true,
    89758992      "dependencies": {
    89768993        "fast-deep-equal": "^3.1.1",
     
    99749991      ],
    99759992      "license": "MIT",
     9993      "peer": true,
    99769994      "dependencies": {
    99779995        "caniuse-lite": "^1.0.30001688",
     
    1157011588      "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==",
    1157111589      "license": "MIT",
     11590      "peer": true,
    1157211591      "funding": {
    1157311592        "type": "github",
     
    1157911598      "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz",
    1158011599      "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==",
    11581       "license": "MIT"
     11600      "license": "MIT",
     11601      "peer": true
    1158211602    },
    1158311603    "node_modules/debounce": {
     
    1196611986      "integrity": "sha512-DPnhUXvmvKT2dFA/j7B+riVLUt9Q6RKJlcppojL5CoRywJJKLDYnRlw0gTFKfgDPHP5E04UoB71SxoJlVZy8FA==",
    1196711987      "dev": true,
    11968       "license": "BSD-3-Clause"
     11988      "license": "BSD-3-Clause",
     11989      "peer": true
    1196911990    },
    1197011991    "node_modules/diff": {
     
    1263512656      "dev": true,
    1263612657      "license": "MIT",
     12658      "peer": true,
    1263712659      "dependencies": {
    1263812660        "@eslint-community/eslint-utils": "^4.2.0",
     
    1269112713      "dev": true,
    1269212714      "license": "MIT",
     12715      "peer": true,
    1269312716      "bin": {
    1269412717        "eslint-config-prettier": "bin/cli.js"
     
    1623116254      "dev": true,
    1623216255      "license": "MIT",
     16256      "peer": true,
    1623316257      "dependencies": {
    1623416258        "@jest/core": "^29.7.0",
     
    1823818262      "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==",
    1823918263      "license": "MIT",
     18264      "peer": true,
    1824018265      "engines": {
    1824118266        "node": "*"
     
    1850018525      "dev": true,
    1850118526      "license": "MIT",
     18527      "peer": true,
    1850218528      "dependencies": {
    1850318529        "ajv": "^6.12.6",
     
    1954719573      "dev": true,
    1954819574      "license": "Apache-2.0",
    19549       "peer": true,
    1955019575      "dependencies": {
    1955119576        "playwright-core": "1.55.0"
     
    1956719592      "dev": true,
    1956819593      "license": "Apache-2.0",
    19569       "peer": true,
    1957019594      "bin": {
    1957119595        "playwright-core": "cli.js"
     
    1958619610        "darwin"
    1958719611      ],
    19588       "peer": true,
    1958919612      "engines": {
    1959019613        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
     
    1963619659      ],
    1963719660      "license": "MIT",
     19661      "peer": true,
    1963819662      "dependencies": {
    1963919663        "nanoid": "^3.3.8",
     
    2035920383      "dev": true,
    2036020384      "license": "MIT",
     20385      "peer": true,
    2036120386      "bin": {
    2036220387        "prettier": "bin/prettier.cjs"
     
    2074720772      "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
    2074820773      "license": "MIT",
     20774      "peer": true,
    2074920775      "dependencies": {
    2075020776        "loose-envify": "^1.1.0"
     
    2076920795      "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
    2077020796      "license": "MIT",
     20797      "peer": true,
    2077120798      "dependencies": {
    2077220799        "loose-envify": "^1.1.0",
     
    2080320830      "dev": true,
    2080420831      "license": "MIT",
     20832      "peer": true,
    2080520833      "engines": {
    2080620834        "node": ">=0.10.0"
     
    2105821086      "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz",
    2105921087      "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==",
    21060       "license": "MIT"
     21088      "license": "MIT",
     21089      "peer": true
    2106121090    },
    2106221091    "node_modules/reflect.getprototypeof": {
     
    2164921678      "dev": true,
    2165021679      "license": "MIT",
     21680      "peer": true,
    2165121681      "dependencies": {
    2165221682        "chokidar": "^4.0.0",
     
    2175321783      "devOptional": true,
    2175421784      "license": "MIT",
     21785      "peer": true,
    2175521786      "dependencies": {
    2175621787        "fast-deep-equal": "^3.1.3",
     
    2320323234      ],
    2320423235      "license": "MIT",
     23236      "peer": true,
    2320523237      "dependencies": {
    2320623238        "@csstools/css-parser-algorithms": "^3.0.4",
     
    2353123563      "dev": true,
    2353223564      "license": "MIT",
     23565      "peer": true,
    2353323566      "dependencies": {
    2353423567        "cssesc": "^3.0.0",
     
    2429124324      "dev": true,
    2429224325      "license": "(MIT OR CC0-1.0)",
     24326      "peer": true,
    2429324327      "engines": {
    2429424328        "node": ">=10"
     
    2493524969      "devOptional": true,
    2493624970      "license": "MIT",
     24971      "peer": true,
    2493724972      "dependencies": {
    2493824973        "@types/eslint-scope": "^3.7.7",
     
    2504125076      "dev": true,
    2504225077      "license": "MIT",
     25078      "peer": true,
    2504325079      "dependencies": {
    2504425080        "@discoveryjs/json-ext": "^0.5.0",
     
    2512125157      "dev": true,
    2512225158      "license": "MIT",
     25159      "peer": true,
    2512325160      "dependencies": {
    2512425161        "@types/bonjour": "^3.5.9",
  • understory/trunk/readme.txt

    r3385132 r3385769  
    44Requires at least: 5.0
    55Tested up to: 6.8
    6 Stable tag: 1.6.3
     6Stable tag: 1.7.0
    77Requires PHP: 7.0
    88License: GPLv2 or later
     
    7777
    7878== Changelog ==
     79
     80= 1.7.0 =
     81* Booking widget: Add support for selecting categories.
    7982
    8083= 1.6.3 =
  • understory/trunk/understory.php

    r3385132 r3385769  
    33Plugin Name: Understory
    44Description: Connect your WordPress site with Understory, to easily add your booking widget to posts and pages.
    5 Version: 1.6.3
     5Version: 1.7.0
    66Author: Understory
    77Text Domain: understory
     
    1818define('UNDERSTORY_PLUGIN_URL', plugin_dir_url(__FILE__));
    1919define('UNDERSTORY_PLUGIN_SLUG', 'understory');
    20 define('UNDERSTORY_PLUGIN_VERSION', '1.6.3');
     20define('UNDERSTORY_PLUGIN_VERSION', '1.7.0');
    2121define('UNDERSTORY_OPTION_KEY', 'understory_options');
    2222define('UNDERSTORY_NONCE_KEY', 'understory_nonce');
Note: See TracChangeset for help on using the changeset viewer.