Giving Clickable Items:

With Click Start Action:
/give @p minecraft:wooden_sword[food={nutrition:1,saturation:1,can_always_eat:true,eat_seconds:10000},minecraft:custom_data={"click_start":true,"click_id":1}] 1

With Start and Stop Action:
/give @p minecraft:cooked_beef[food={nutrition:1,saturation:1,can_always_eat:true,eat_seconds:10000},minecraft:custom_data={"click_start":true,"click_stop":true,"click_id":1}] 1


With Ticking Action:

/give @p stick[consumable={consume_seconds:99999,animation:"none",sound:"ui.button.click",has_consume_particles:false},minecraft:custom_data={"click_start":true,"click_id":1}] 1

Using Clickable Items in your Datapacks:

Create a function and run it as @a[predicate=click:click_start,scores={click_id_start=1}] to  

On Click Start:
execute as @a[predicate=click:click_start,scores={click_id_start=1}] run say using item with click id 1

never reset score. Set it to 0 after using the item:
scoreboard players set @a[predicate=click:click_start] click_id_start 0

On Click End:
execute as @a[predicate=click:click_stop] run say stop

never reset score. Set it to 0 after using the item:
scoreboard players set @a[predicate=click:click_stop] click_id_stop 0

On Click (Constant):
execute as @a[predicate=click:click_ticking] run say tick

never reset score. Set it to 0 after using the item:
scoreboard players set @a[predicate=click:click_ticking] click_id_ticking 0
